UNPKG

@follow-app/client-sdk

Version:

TypeScript client SDK for Follow RSS Server API

188 lines (159 loc) 4.58 kB
// Import types from drizzle schema import type { FeedViewType } from "@folo-services/constants" import type { collectionsOpenAPISchema, entries, entriesOpenAPISchema, inboxes, inboxesEntriesOpenAPISchema, SettingsModel, users, } from "@folo-services/drizzle" import type { FeedOpenApiSchema as _FeedOpenApiSchema, InboxOpenApiSchema as _InboxOpenApiSchema, } from "@folo-services/shared" import type { InferInsertModel, InferSelectModel } from "drizzle-orm" import type z from "zod" import type { Prettify } from "@/types/utils" import type { DateISOString, EntryIdRequest, IdRequest, SerializedInsertModel, SerializedModel, SuccessResponse, } from "../../types" type FeedOpenApiSchema = SerializedModel<_FeedOpenApiSchema> type InboxOpenApiSchema = SerializedModel<_InboxOpenApiSchema> // Re-export database types with proper date serialization export type EntryModel = SerializedModel<InferSelectModel<typeof entries>> export type EntryInsert = SerializedInsertModel< InferInsertModel<typeof entries> > export type UserModel = SerializedModel<InferSelectModel<typeof users>> type InboxModel = SerializedModel<InferSelectModel<typeof inboxes>> // Entry media types export interface EntryMedia { url: string type: "photo" | "video" preview_image_url?: string width?: number height?: number blurhash?: string } export interface EntryAttachment { url: string title?: string duration_in_seconds?: number mime_type?: string size_in_bytes?: number } // Entry-related API request/response types export interface EntryGetQuery extends IdRequest {} export type EntryOpenAPISchema = SerializedModel< z.infer<typeof entriesOpenAPISchema> > export type EntryGetByIdResponse = SuccessResponse<{ feeds: FeedOpenApiSchema entries: Prettify<Omit<EntryOpenAPISchema, "feedId">> } | null> export interface EntryWithFeed extends EntryExtraResponse { read: boolean view: FeedViewType from: string[] feeds: FeedOpenApiSchema entries: Prettify<Omit<EntryOpenAPISchema, "content" | "feedId">> } export type EntryListRequest = { view?: FeedViewType feedId?: string feedIdList?: string[] read?: boolean limit?: number publishedAfter?: DateISOString publishedBefore?: DateISOString isCollection?: boolean isArchived?: boolean withContent?: boolean excludePrivate?: boolean } export type EntryListResponse = SuccessResponse<EntryWithFeed[]> export interface EntryPreviewRequest extends IdRequest {} export type EntryPreviewResponse = SuccessResponse< z.infer<typeof entriesOpenAPISchema> > export interface EntryReadabilityRequest extends IdRequest {} export type EntryReadabilityResponse = SuccessResponse<{ content?: string } | null> export interface EntryStreamRequest { ids: string[] } export interface EntryStreamItem { id: string content: string } // Check new entries types export interface CheckNewEntriesQuery { view?: number feedId?: string feedIdList?: string[] read?: boolean insertedAfter: number } export type CheckNewEntriesResponse = SuccessResponse<{ has_new: boolean lastest_at?: string entry_id?: string }> // Read histories types export interface ReadHistoriesQuery { page?: number size?: number } export type ReadHistoriesResponse = SuccessResponse<{ users: Record<string, Pick<UserModel, "id" | "handle" | "name" | "image">> total: number entryReadHistories: { userIds: string[] readCount: number } | null }> // Inbox types export interface InboxEntryGetQuery extends IdRequest {} export interface InboxListEntryRequestInput { inboxId: string read?: boolean limit?: number publishedAfter?: string publishedBefore?: string } export type EntrySettings = SettingsModel export interface EntryExtraResponse { collections?: Prettify< Pick<z.infer<typeof collectionsOpenAPISchema>, "createdAt"> > settings?: EntrySettings } export interface InboxListEntry extends EntryExtraResponse { read: boolean feeds: InboxOpenApiSchema entries: Prettify< Omit<z.infer<typeof inboxesEntriesOpenAPISchema>, "content"> > } export type InboxListEntryResponse = SuccessResponse<InboxListEntry[]> export interface InboxEntryGetResponse { data: { entries: EntryModel feed: Pick<InboxModel, "secret" | "title"> & { type: "inbox", id: string } } } export interface MarkReadInput extends IdRequest {} export interface MarkUnreadInput extends IdRequest {} export interface ReadHistoriesInput extends IdRequest { page?: number size?: number } export interface InboxRemoveInput extends EntryIdRequest {}