From 4be03e7ef99ab98984ae371e74a15bb6314520f5 Mon Sep 17 00:00:00 2001 From: takker99 <37929109+takker99@users.noreply.github.com> Date: Sat, 24 Jul 2021 18:11:18 +0900 Subject: [PATCH 1/7] :construction: Add some types related to Scrapbox --- scrapbox.d.ts | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 scrapbox.d.ts diff --git a/scrapbox.d.ts b/scrapbox.d.ts new file mode 100644 index 0000000..407c1ed --- /dev/null +++ b/scrapbox.d.ts @@ -0,0 +1,90 @@ +/** scrapboxの行のメタデータ */ +export interface Line { + /** 行のid */ id: string; + /** 行のテキスト */ text: string; + /** 一番最後に行を編集した人のid */ userId: string; + /** 行の作成日時 */ created: number; + /** 行の最終更新日時 */ updated: number; +} + +/** 関連ページのメタデータ */ +export interface RelatedPage { + /** ページのid */ id: string; + /** ページのタイトル */ title: string; + /** ページのタイトルを小文字にして、` `を`_`に変換したもの */ titleLc: string; + /** ページのサムネイル画像 */ image: string; + /** ページのサムネイル本文。最大5行 */ descriptions: string[]; + /** ページ内のリンク */ linksLc: string[]; + /** おそらく被リンク数 */ linked: number; + /** ページの最終更新日時 */ updated: number; + /** おそらくページの閲覧日時 */ accessed: number; +} + +/** user information */ +export interface User { + /** user id */ id: string; + /** user name */ name: string; + /** user display name */ displayName: string; + /** profile image URL */ photo: string; +} + +/** page information */ +export interface Page { + /** ページのid */ id: string; + /** ページのタイトル */ title: string; + /** ページのサムネイル画像 */ image: string; + /** ページのサムネイル本文。最大5行 */ descriptions: string[]; + /** ピン留めされていたら1, されていなかったら0 */ pin: 0 | 1; + /** ページの閲覧回数 */ views: number; + /** おそらく被リンク数 */ linked: number; + /** 最新の編集コミットid */ commitId: string; + /** ページの作成日時 */ created: number; + /** ページの最終更新日時 */ updated: number; + /** Date last visitedに使われる最終アクセス日時 */ accessed: number; + /** APIを叩いたuserの最終アクセス日時。おそらくこの値を元にテロメアの未読/既読の判別をしている */ lastAccessed: + | number + | null; + /** Page historyの最終生成日時 */ snapshotCreated: number | null; + /** 生成されたPage historyの数 */ snapshotCount: number; + /** page rank */ pageRank: number; + /** 不明。削除されたページだとfalse? */ persistent: boolean; + /** ページの行情報 */ lines: Line[]; + /** ページ内のリンク */ links: string[]; + /** ページ内のアイコン */ icons: string[]; + /** ページ内に含まれる、scrapbox.ioにアップロードしたファイルへのリンク */ files: string[]; + /** 関連ページリスト */ + relatedPages: { + /** 1 hop links */ links1hop: RelatedPage[]; + /** 2 hop links */ links2hop: RelatedPage[]; + /** このページを参照しているページorアイコンがあればtrue */ hasBackLinksOrIcons: boolean; + }; + /** 最後にページを更新したユーザー */ user: User; + /** ページを編集したユーザーのうち、`user`以外の人 */ collaborators: User[]; +} + +/** summary of page information */ +export interface PageSummary { + id: string; + title: string; + image: string | null; + descriptions: string[]; + user: { id: string }; + /** ピン留めされていたら1, されていなかったら0 */ pin: 0 | 1; + views: number; + linked: number; + commitId: string; + created: number; + updated: number; + accessed: number; + snapshotCreated: number | null; + pageRank: number; +} + +/** the response type of https://scrpabox.io/api/pages/:projectname */ +export interface ProjectResponse { + /** data取得先のproject名 */ projectName: string; + /** parameterに渡したskipと同じ */ skip: number; + /** parameterに渡したlimitと同じ */ limit: number; + /** projectの全ページ数 (中身のないページを除く) */ count: number; + /** 取得できたページ情報 */ pages: PageSummary[]; +} From 3387ecb5a06ea0c88447680495eb6214c0eb22a7 Mon Sep 17 00:00:00 2001 From: takker99 <37929109+takker99@users.noreply.github.com> Date: Sat, 24 Jul 2021 18:33:53 +0900 Subject: [PATCH 2/7] =?UTF-8?q?:construction:=20=E3=81=A8=E3=82=8A?= =?UTF-8?q?=E3=81=82=E3=81=88=E3=81=9A=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scrapbox.d.ts | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/scrapbox.d.ts b/scrapbox.d.ts index 407c1ed..b2d90d7 100644 --- a/scrapbox.d.ts +++ b/scrapbox.d.ts @@ -28,11 +28,14 @@ export interface User { /** profile image URL */ photo: string; } -/** page information */ -export interface Page { +/** summary of page information */ +export interface PageSummary { /** ページのid */ id: string; /** ページのタイトル */ title: string; - /** ページのサムネイル画像 */ image: string; + /** ページのサムネイル画像 + * 存在しなければ`null` + */ + image: string | null; /** ページのサムネイル本文。最大5行 */ descriptions: string[]; /** ピン留めされていたら1, されていなかったら0 */ pin: 0 | 1; /** ページの閲覧回数 */ views: number; @@ -41,12 +44,16 @@ export interface Page { /** ページの作成日時 */ created: number; /** ページの最終更新日時 */ updated: number; /** Date last visitedに使われる最終アクセス日時 */ accessed: number; + /** page rank */ pageRank: number; + /** Page historyの最終生成日時 */ snapshotCreated: number | null; +} + +/** page information */ +export interface Page extends PageSummary { /** APIを叩いたuserの最終アクセス日時。おそらくこの値を元にテロメアの未読/既読の判別をしている */ lastAccessed: | number | null; - /** Page historyの最終生成日時 */ snapshotCreated: number | null; /** 生成されたPage historyの数 */ snapshotCount: number; - /** page rank */ pageRank: number; /** 不明。削除されたページだとfalse? */ persistent: boolean; /** ページの行情報 */ lines: Line[]; /** ページ内のリンク */ links: string[]; @@ -62,26 +69,8 @@ export interface Page { /** ページを編集したユーザーのうち、`user`以外の人 */ collaborators: User[]; } -/** summary of page information */ -export interface PageSummary { - id: string; - title: string; - image: string | null; - descriptions: string[]; - user: { id: string }; - /** ピン留めされていたら1, されていなかったら0 */ pin: 0 | 1; - views: number; - linked: number; - commitId: string; - created: number; - updated: number; - accessed: number; - snapshotCreated: number | null; - pageRank: number; -} - /** the response type of https://scrpabox.io/api/pages/:projectname */ -export interface ProjectResponse { +export interface PageListResponse { /** data取得先のproject名 */ projectName: string; /** parameterに渡したskipと同じ */ skip: number; /** parameterに渡したlimitと同じ */ limit: number; From 561cfc46726630a46b87d0de433a788f72b9981a Mon Sep 17 00:00:00 2001 From: takker99 <37929109+takker99@users.noreply.github.com> Date: Sat, 24 Jul 2021 19:01:42 +0900 Subject: [PATCH 3/7] :construction::sparkles: Add the response type of https://scrpabox.io/api/projects/:projectname --- scrapbox.d.ts | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/scrapbox.d.ts b/scrapbox.d.ts index b2d90d7..f54e463 100644 --- a/scrapbox.d.ts +++ b/scrapbox.d.ts @@ -1,3 +1,6 @@ +// utilities +type Omit = Pick>; + /** scrapboxの行のメタデータ */ export interface Line { /** 行のid */ id: string; @@ -28,6 +31,15 @@ export interface User { /** profile image URL */ photo: string; } +/** user detailed information */ +export interface UserInfo extends User { + /** user e-mail */ email: string; + /** whether the user is a pro user or not */ pro: boolean; + /** login provider */ provider: "google" | "microsoft" | "email"; + /** accountの作成日時 */ created: number; + /** accountの更新日時 */ updated: number; +} + /** summary of page information */ export interface PageSummary { /** ページのid */ id: string; @@ -77,3 +89,52 @@ export interface PageListResponse { /** projectの全ページ数 (中身のないページを除く) */ count: number; /** 取得できたページ情報 */ pages: PageSummary[]; } + +/** project basic information */ +export interface Project { + id: string; + name: string; + displayName: string; + publicVisible: boolean; + loginStrategies: string[]; + theme: string; + gyazoTeamsName: string | null; + googleAnalyticsCode: string | null; + image?: string; + created: number; + updated: number; + isMember: boolean; + plan?: string; +} + +export type NotMemberError = { + name: "NotMemberError"; + message: string; +}; + +export type NotFoundError = { + name: "NotFoundError"; + message: string; +}; + +/** the response type of https://scrpabox.io/api/projects/:projectname */ +export type ProjectResponse = + | NotFoundError + | NotMemberError + | ( + & Omit, "plan"> + & ({ isMember: false } | { + isMember: true; + plan?: string | null; + users: UserInfo[]; + admins: string[]; + owner: string; + trialing: boolean; + trialMaxPages: number; + skipPayment: boolean; + uploadFileTo: "gcs"; + uploadImaegTo: "gyazo" | "gcs"; + emailAddressPatterns: string[]; + backuped: number | null; + }) + ); From 75f3cbcc99f1678daaaf2ab30686b5097718dba5 Mon Sep 17 00:00:00 2001 From: takker99 <37929109+takker99@users.noreply.github.com> Date: Sat, 24 Jul 2021 19:07:08 +0900 Subject: [PATCH 4/7] :sparkles: Add the response type of https://scrapbox.io/api/users/me --- scrapbox.d.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scrapbox.d.ts b/scrapbox.d.ts index f54e463..6ca515b 100644 --- a/scrapbox.d.ts +++ b/scrapbox.d.ts @@ -138,3 +138,18 @@ export type ProjectResponse = backuped: number | null; }) ); + +/** the response type of https://scrapbox.io/api/users/me */ +export type UserResponse = + | { + isGuest: true; + csrfToken: string; + } + | ({ + isGuest: false; + csrfToken: string; + config: { + userScript: boolean; + emacsBinding: boolean; + }; + } & UserInfo); From 7fe6feddc9e02babf484578ad55a69e0ca336843 Mon Sep 17 00:00:00 2001 From: takker99 <37929109+takker99@users.noreply.github.com> Date: Sat, 24 Jul 2021 19:13:36 +0900 Subject: [PATCH 5/7] :sparkles: Add the response type of https://scrapbox.io/api/pages/:projectname/search/titles --- scrapbox.d.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scrapbox.d.ts b/scrapbox.d.ts index 6ca515b..a4ad8b2 100644 --- a/scrapbox.d.ts +++ b/scrapbox.d.ts @@ -153,3 +153,18 @@ export type UserResponse = emacsBinding: boolean; }; } & UserInfo); + +/** the response type of https://scrapbox.io/api/pages/:projectname/search/titles */ +export type LinksResponse = + | NotFoundError + | NotMemberError + | { + message: "Invalid pageId"; + } + | { + /** page id */ id: string; + /** page title */ title: string; + /** 画像が存在するかどうか */ hasIcon: boolean; + /** ページの更新日時 */ updated: number; + /** ページ内のリンク */ links: string[]; + }[]; From 47e50f55cb91a94923525685e9107f1c1c4e10e9 Mon Sep 17 00:00:00 2001 From: takker99 <37929109+takker99@users.noreply.github.com> Date: Sat, 24 Jul 2021 19:16:38 +0900 Subject: [PATCH 6/7] :+1: Append Error types to `PageListResponse` --- scrapbox.d.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/scrapbox.d.ts b/scrapbox.d.ts index a4ad8b2..43d31cc 100644 --- a/scrapbox.d.ts +++ b/scrapbox.d.ts @@ -82,13 +82,16 @@ export interface Page extends PageSummary { } /** the response type of https://scrpabox.io/api/pages/:projectname */ -export interface PageListResponse { - /** data取得先のproject名 */ projectName: string; - /** parameterに渡したskipと同じ */ skip: number; - /** parameterに渡したlimitと同じ */ limit: number; - /** projectの全ページ数 (中身のないページを除く) */ count: number; - /** 取得できたページ情報 */ pages: PageSummary[]; -} +export type PageListResponse = + | NotFoundError + | NotMemberError + | { + /** data取得先のproject名 */ projectName: string; + /** parameterに渡したskipと同じ */ skip: number; + /** parameterに渡したlimitと同じ */ limit: number; + /** projectの全ページ数 (中身のないページを除く) */ count: number; + /** 取得できたページ情報 */ pages: PageSummary[]; + }; /** project basic information */ export interface Project { From ea3f7a9ca816a249d82b63125345dfb19cc210d2 Mon Sep 17 00:00:00 2001 From: takker99 <37929109+takker99@users.noreply.github.com> Date: Sun, 25 Jul 2021 15:43:33 +0900 Subject: [PATCH 7/7] :sparkles: Add types of project backup data --- scrapbox.d.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/scrapbox.d.ts b/scrapbox.d.ts index 2fb3d20..e3eb948 100644 --- a/scrapbox.d.ts +++ b/scrapbox.d.ts @@ -172,6 +172,31 @@ export type LinksResponse = /** ページ内のリンク */ links: string[]; }[]; +export type ProjectBackup = { + name: string; + displayName: string; + exported: number; + pages: { + id: string; + title: string; + created: number; + updated: number; + lines: string[]; + }; +}; +export type ProjectBackupWithMetadata = { + name: string; + displayName: string; + exported: number; + pages: { + id: string; + title: string; + created: number; + updated: number; + lines: { text: string; updated: number; created: number }[]; + }; +}; + export type Layout = | "list" | "page"