Built and signed on GitHub ActionsBuilt and signed on GitHub Actions
Built and signed on GitHub Actions
latest
scrapbox-jp/typesType definitions for Cosense
This package works with Deno, BrowsersIt is unknown whether this package works with Cloudflare Workers, Node.js, Bun
JSR Score
100%
Published
2 months ago (0.10.1)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553import type { BaseLine, BasePage, PageId, ProjectId, StringLc, UnixTime, UserId, } from "./base.ts"; import type { Commit } from "./commit.ts"; /** user information */ export interface User { id: UserId; /** user name */ name: string; /** user display name */ displayName: string; /** 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"; /** creation time of the account */ created: UnixTime; /** update time of the account */ updated: UnixTime; } /** page information */ export interface Page extends BasePage { /** APIを叩いたuserの最終アクセス日時。 * * おそらくこの値を元にテロメアの未読/既読の判別をしている */ lastAccessed: UnixTime | null; /** 生成されたPage historyの数 */ snapshotCount: number; /** 空リンクだと`false` */ persistent: boolean; /** ページの行情報 */ lines: BaseLine[]; /** ページ内のリンク */ links: string[]; /** ページ内の外部プロジェクトリンク */ projectLinks: string[]; /** ページ内のアイコン */ icons: string[]; /** ページ内に含まれる、scrapbox.ioにアップロードしたファイルのfile id */ files: string[]; infoboxDefinition: string[]; infoboxResult: InfoboxResult[]; infoboxDisableLinks: string[]; /** 関連ページリスト */ relatedPages: RelatedPages; /** ページを作成したユーザー */ user: User; /** 最後にページを更新したユーザー */ lastUpdateUser: User; /** ページを編集したユーザーのうち、`user`以外の人 */ collaborators: User[]; } export interface RelatedPages { /** 1 hop links */ links1hop: RelatedPage[]; /** 2 hop links */ links2hop: RelatedPage[]; /** external links */ projectLinks1hop: ProjectRelatedPage[]; /** このページを参照しているページorアイコンがあればtrue */ hasBackLinksOrIcons: boolean; /** 2 hop searchのquery */ search: string; /** 全文検索エンジンの名前 */ searchBackend: string; } export interface InfoboxResult { title: string; infobox: Record<string, string>; hallucination: boolean; truncated: boolean; } /** 関連ページのメタデータ */ export interface RelatedPage extends Pick< BasePage, | "id" | "title" | "image" | "descriptions" | "linked" | "pageRank" | "created" | "updated" | "accessed" > { /** page title */ titleLc: StringLc; /** * links1hopの場合:ページ内の全てのリンク * * links2hopの場合:ページ内の全てのリンクのうち、`Page.links`に含まれるリンク */ linksLc: StringLc[]; infoboxResult: InfoboxResult[]; infoboxDisableLinks: string[]; search?: SearchQuery; } /** 外部プロジェクトの関連ページ */ export interface ProjectRelatedPage extends Pick< BasePage, | "id" | "title" | "image" | "descriptions" | "linked" | "updated" | "accessed" > { /** page title */ titleLc: StringLc; created: number | null; /** project name */ projectName: string; } /** the response type of https://scrpabox.io/api/pages/:projectname */ export interface PageList { /** data取得先のproject名 */ projectName: string; /** parameterに渡したskipと同じ */ skip: number; /** parameterに渡したlimitと同じ */ limit: number; /** projectの全ページ数 (中身のないページを除く) */ count: number; /** 取得できたページ情報 */ pages: BasePage[]; } /** project information */ export interface Project { id: ProjectId; name: string; displayName: string; publicVisible: boolean; loginStrategies: string[]; /** planの種類 * * public projectの場合は`null`になる * * 古いprojectだとpropertyが生えていない */ plan?: string | null; theme: string; gyazoTeamsName: string | null; translation: boolean; infobox: boolean; created: UnixTime; updated: UnixTime; isMember: boolean; trialing: boolean; } /** the response type of /api/projects */ export interface ProjectResponse { projects: Project[]; } /** project information which isn't joined */ export interface NotMemberProject extends Omit<Project, "isMember" | "plan" | "trialing"> { image?: string; isMember: false; } /** project information which is joined */ export interface MemberProject extends Omit<Project, "isMember"> { isMember: true; image?: string; users: UserInfo[]; admins: UserId[]; owner: UserId; isUserPageExists: boolean; trialMaxPages: number; skipPayment: boolean; uploadFileTo: "gcs"; uploadImaegTo: "gyazo" | "gcs"; emailAddressPatterns: string[]; projectScript: boolean; backuped: UnixTime | null; } export interface GuestUser { isGuest: true; csrfToken: string; } export interface MemberUser extends UserInfo { isGuest: false; csrfToken: string; config: { userScript: boolean; emacsBinding: boolean; }; } /** the response type of https://scrapbox.io/api/users/me */ export type UserResponse = GuestUser | MemberUser; /** the response type of https://scrapbox.io/api/pages/:projectname/search/titles */ export interface SearchedTitle extends Pick<BasePage, "id" | "title" | "updated"> { /** thumbnail URL */ image?: string; /** ページ内のリンク */ links: string[]; } /** exportしたときのページデータ */ export interface ExportedPage<hasMetadata extends true | false = false> extends Pick<Page, "title" | "updated" | "created" | "id"> { /** ページ本文 * * `hasMetadata === true`のときは行のmetadataが入る * それ以外の場合は行のテキストが入る */ lines: hasMetadata extends true ? Omit<BaseLine, "id" | "userId">[] : string[]; } export interface ExportedData<hasMetadata extends true | false = false> { /** project's name */ name: string; /** project's display name */ displayName: string; /** このデータを生成した日時 (UNIX時刻) */ exported: UnixTime; /** exported pages */ pages: ExportedPage<hasMetadata>[]; } /** backupされるページデータ */ export interface BackupedPage extends Pick<Page, "title" | "updated" | "created" | "id"> { /** ページ本文 */ lines: Pick<BaseLine, "text" | "created" | "updated">[]; /** ページに含まれているリンク*/ linksLc: StringLc[]; } /** project backup data */ export interface BackupData { /** project's name */ name: string; /** project's display name */ displayName: string; /** このデータを生成した日時 (UNIX時刻) */ exported: UnixTime; /** backuped pages */ pages: BackupedPage[]; } /** メタデータ無しインポート用ページデータ */ export interface ImportedLightPage { /** page's title * * `title` should be equal to `lines[0]` */ title: string; /** page's text * * `lines[0]` should be equal to `title` */ lines: string[]; } /** インポート用メタデータ付き行データ */ export interface ImportedLine { /** line text */ text: string; /** 行の最終更新日時 (UNIX時刻) */ updated?: UnixTime; /** 行の最終作成日時 (UNIX時刻) */ created?: UnixTime; } /** メタデータ付きインポート用ページデータ */ export interface ImportedPage { /** page's title * * `title` should be equal to `lines[0].text` */ title: string; /** page's line data * * `lines[0].text` should be equal to `title` */ lines: ImportedLine[]; } /** JSON data for importing by https://scrapbox.io/api/page-data/import/:projectname.json */ export interface ImportedData<hasMetadata extends true | false = false> { /** pages importing to a project */ pages: hasMetadata extends true ? ImportedPage[] : ImportedLightPage[]; } /** the response type of /api/embed-text/twitter */ export interface TweetInfo { /** Tweet本文 */ description?: string; /** Tweet投稿者の表示名 */ screenName: string; /** Tweetに添付された画像 */ images: string[]; } /** the response type of /api/pages/:projectname/search/titles */ export interface SearchResult { /** 検索したprojectの名前 */ projectName: string; /** 検索文字列 */ searchQuery: string; /** 検索語句 */ query: SearchQuery; /** 検索件数の上限 */ limit: number; /** 検索件数 */ count: number; /** 検索文字列と完全一致するタイトルが見つかったら`true` */ existsExactTitleMatch: boolean; field: "title" | "helpfeels" | "lines"; /** 全文検索エンジンの名前 */ backend: string; /** 見つかったページ */ pages: FoundPage[]; } /** /api/pages/:projectname/search/titles で見つかったページ */ export interface FoundPage { id: PageId; /** page title */ title: string; /** page thumbnail * * 無いときは空文字が入る */ image: string; /** 検索語句の中で、このページに含まれている語句 */ words: string[]; /** 検索語句に一致した行 * * タイトル行のみが一致した場合は、検索語句の有無にかかわらずその次の行のみが入る */ lines: string[]; } /** the response type of /api/pages/:projectname/search/files */ export interface FileSearchResult extends Omit<SearchResult, "field" | "pages"> { /** 見つかったページ */ pages: FoundPageByFile[]; } /** /api/pages/:projectname/search/files で見つかったページ */ export interface FoundPageByFile extends FoundPage { file: string; } /** the response type of /api/projects/search/query and /api/projects/search/watch-list */ export interface ProjectSearchResult { /** 検索文字列 */ searchQuery: string; /** 検索語句 */ query: SearchQuery; /** 見つかったprojects */ projects: FoundProject[]; } /** /api/projects/search/query や /api/projects/search/watch-list で見つかったproject */ export interface FoundProject { _id: ProjectId; /** project name */ name: string; /** projectの表示名 */ displayName: string; /** project favicon * * 無いときは`null`が入るかproperty自体が存在しない */ image?: string | null; } /** 検索クエリ */ export interface SearchQuery { /** AND検索に使う語句 */ words: string[]; /** NOT検索に使う語句 */ excludes: string[]; } /** the response type of /api/commits/:projectname/:pageid */ export interface CommitsResponse { /** 指定したページのcommits */ commits: Commit[]; } /** the response type of /api/page-snapshots/:projectname/:pageid */ export interface PageSnapshotList { pageId: PageId; /** 作成されているsnapshotsのtimestamp idのリスト */ timestamps: SnapshotTimestamp[]; } export interface SnapshotTimestamp { id: string; created: UnixTime; } /** the response type of /api/page-snapshots/:projectname/:pageid/:timestampid */ export interface PageSnapshotResult { page: PageWithSnapshot; snapshot: Snapshot; } export interface PageWithSnapshot extends BasePage { user: Pick<User, "id">; lastupdateUser: Pick<User, "id"> | null; } /** a page snapshot */ export interface Snapshot { /** snapshotを撮ったときのページタイトル */ title: string; /** snapshotの作成日時 */ created: UnixTime; /** snapshotしたページ本文 */ lines: BaseLine[]; }