UNPKG

stream-chat

Version:

JS SDK for the Stream Chat API

374 lines (373 loc) 12.5 kB
import type { AppSettingsAPIResponse, ChannelAPIResponse, ChannelFilters, ChannelMemberResponse, ChannelResponse, ChannelSort, DraftResponse, LocalMessage, MessageResponse, PollResponse, ReactionFilters, ReactionResponse, ReactionSort, ReadResponse } from '../types'; import type { Channel } from '../channel'; import type { StreamChat } from '../client'; export type PrepareBatchDBQueries = [string] | [string, Array<unknown> | Array<Array<unknown>>]; /** * Options to insert a reaction into a message. */ export type DBInsertReactionType = { /** Message to which the reaction is applied. */ message: MessageResponse | LocalMessage; /** The reaction to insert. */ reaction: ReactionResponse; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to upsert channel IDs associated with a query. */ export type DBUpsertCidsForQueryType = { /** Array of channel IDs. */ cids: string[]; /** Optional filters for the channels. */ filters?: ChannelFilters; /** Whether to immediately execute the operation. */ execute?: boolean; /** Optional sorting applied to the channels. */ sort?: ChannelSort; }; /** * Options to upsert multiple channels. */ export type DBUpsertChannelsType = { /** Array of channel API responses. */ channels: ChannelAPIResponse[]; /** Whether to immediately execute the operation. */ execute?: boolean; /** If true, marks that the latest messages are already set. */ isLatestMessagesSet?: boolean; }; /** * Options to upsert application settings for a user. */ export type DBUpsertAppSettingsType = { /** App settings data. */ appSettings: AppSettingsAPIResponse; /** ID of the user the settings belong to. */ userId: string; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Sync status information for a user. */ export type DBUpsertUserSyncStatusType = { /** ID of the user. */ userId: string; /** ISO timestamp of the last sync. */ lastSyncedAt: string; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to upsert a poll. */ export type DBUpsertPollType = { /** Poll data to be stored. */ poll: PollResponse; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to upsert individual channel data. */ export type DBUpsertChannelDataType = { /** Channel data. */ channel: ChannelResponse; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to upsert read statuses for a channel. */ export type DBUpsertReadsType = { /** Channel ID. */ cid: string; /** Array of read statuses. */ reads: ReadResponse[]; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to upsert multiple messages. */ export type DBUpsertMessagesType = { /** Array of message responses. */ messages: MessageResponse[]; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to upsert members in a channel. */ export type DBUpsertMembersType = { /** Channel ID. */ cid: string; /** Array of channel members. */ members: ChannelMemberResponse[]; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to update a reaction. */ export type DBUpdateReactionType = { /** Message associated with the reaction. */ message: MessageResponse | LocalMessage; /** The updated reaction. */ reaction: ReactionResponse; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to update a message. */ export type DBUpdateMessageType = { /** Message to update. */ message: MessageResponse | LocalMessage; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to get channels by their IDs. */ export type DBGetChannelsType = { /** Array of channel IDs. */ cids: string[]; /** ID of the user. */ userId: string; }; /** * Options to get channels based on filters. */ export type DBGetChannelsForQueryType = { /** ID of the user. */ userId: string; /** Optional filters for channels. */ filters?: ChannelFilters; /** Optional sorting for the channels. */ sort?: ChannelSort; }; /** * Get the last sync timestamp for a user. */ export type DBGetLastSyncedAtType = { /** ID of the user. */ userId: string; }; /** * Options to fetch pending tasks for a specific message. */ export type DBGetPendingTasksType = { /** Optional message ID to filter tasks. */ messageId?: string; }; /** * Get application settings for a user. */ export type DBGetAppSettingsType = { /** ID of the user. */ userId: string; }; /** * Options to retrieve reactions for a message. */ export type DBGetReactionsType = { /** ID of the message. */ messageId: string; /** Optional filter to apply to reactions. */ filters?: Pick<ReactionFilters, 'type'>; /** Optional sorting for reactions. */ sort?: ReactionSort; /** Optional maximum number of reactions to return. */ limit?: number; }; /** * Delete a pending task by ID. */ export type DBDeletePendingTaskType = { /** ID of the pending task. */ id: number; }; /** * Options to delete a reaction from a message. */ export type DBDeleteReactionType = { /** The reaction to delete. */ reaction: ReactionResponse; /** Optional message associated with the reaction. */ message?: MessageResponse | LocalMessage; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to delete a channel member. */ export type DBDeleteMemberType = { /** Channel ID. */ cid: string; /** Member to remove. */ member: ChannelMemberResponse; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to drop all pending tasks for a message. */ export type DBDropPendingTasksType = { /** ID of the message. */ messageId: string; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to delete a message. */ export type DBDeleteMessageType = { /** ID of the message. */ id: string; /** Whether to delete the message for the user only. */ deleteForMe?: boolean; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to delete a channel. */ export type DBDeleteChannelType = { /** Channel ID. */ cid: string; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Options to delete messages in a channel. */ export type DBDeleteMessagesForChannelType = { /** Channel ID. */ cid: string; /** Timestamp before which messages are deleted. */ truncated_at?: string; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Check if a channel exists by ID. */ export type DBChannelExistsType = { /** Channel ID. */ cid: string; }; export type DBUpsertDraftType = { /** Draft message to upsert. */ draft: DraftResponse; /** Whether to immediately execute the operation. */ execute?: boolean; }; export type DBGetDraftType = { /** Channel ID for which to get the draft. */ cid: string; /** ID of the user requesting the draft. */ userId: string; /** Optional parent ID for the parent message in thread, if applicable. */ parent_id?: string; }; export type DBDeleteDraftType = { /** Channel ID for which to delete the draft. */ cid: string; /** Optional parent ID for the parent message in thread, if applicable. */ parent_id?: string; /** Whether to immediately execute the operation. */ execute?: boolean; }; /** * Represents a list of batch SQL queries to be executed. */ export type ExecuteBatchDBQueriesType = PrepareBatchDBQueries[]; export interface OfflineDBApi { insertReaction: (options: DBInsertReactionType) => Promise<ExecuteBatchDBQueriesType>; upsertCidsForQuery: (options: DBUpsertCidsForQueryType) => Promise<ExecuteBatchDBQueriesType>; upsertChannels: (options: DBUpsertChannelsType) => Promise<ExecuteBatchDBQueriesType>; upsertUserSyncStatus: (options: DBUpsertUserSyncStatusType) => Promise<ExecuteBatchDBQueriesType>; upsertAppSettings: (options: DBUpsertAppSettingsType) => Promise<ExecuteBatchDBQueriesType>; upsertDraft: (options: DBUpsertDraftType) => Promise<ExecuteBatchDBQueriesType>; upsertPoll: (options: DBUpsertPollType) => Promise<ExecuteBatchDBQueriesType>; upsertChannelData: (options: DBUpsertChannelDataType) => Promise<ExecuteBatchDBQueriesType>; upsertReads: (options: DBUpsertReadsType) => Promise<ExecuteBatchDBQueriesType>; upsertMessages: (options: DBUpsertMessagesType) => Promise<ExecuteBatchDBQueriesType>; upsertMembers: (options: DBUpsertMembersType) => Promise<ExecuteBatchDBQueriesType>; updateReaction: (options: DBUpdateReactionType) => Promise<ExecuteBatchDBQueriesType>; updateMessage: (options: DBUpdateMessageType) => Promise<ExecuteBatchDBQueriesType>; getDraft: (options: DBGetDraftType) => Promise<DraftResponse | null>; getChannels: (options: DBGetChannelsType) => Promise<Omit<ChannelAPIResponse, 'duration'>[] | null>; getChannelsForQuery: (options: DBGetChannelsForQueryType) => Promise<Omit<ChannelAPIResponse, 'duration'>[] | null>; getAllChannelCids: () => Promise<string[]>; getLastSyncedAt: (options: DBGetLastSyncedAtType) => Promise<string | undefined>; getAppSettings: (options: DBGetAppSettingsType) => Promise<AppSettingsAPIResponse | null>; getReactions: (options: DBGetReactionsType) => Promise<ReactionResponse[] | null>; executeSqlBatch: (queries: ExecuteBatchDBQueriesType) => Promise<unknown>; addPendingTask: (task: PendingTask) => Promise<() => Promise<void>>; getPendingTasks: (conditions?: DBGetPendingTasksType) => Promise<PendingTask[]>; deleteDraft: (options: DBDeleteDraftType) => Promise<ExecuteBatchDBQueriesType>; deletePendingTask: (options: DBDeletePendingTaskType) => Promise<ExecuteBatchDBQueriesType>; deleteReaction: (options: DBDeleteReactionType) => Promise<ExecuteBatchDBQueriesType>; deleteMember: (options: DBDeleteMemberType) => Promise<ExecuteBatchDBQueriesType>; deleteChannel: (options: DBDeleteChannelType) => Promise<ExecuteBatchDBQueriesType>; deleteMessagesForChannel: (options: DBDeleteMessagesForChannelType) => Promise<ExecuteBatchDBQueriesType>; dropPendingTasks: (options: DBDropPendingTasksType) => Promise<ExecuteBatchDBQueriesType>; hardDeleteMessage: (options: DBDeleteMessageType) => Promise<ExecuteBatchDBQueriesType>; softDeleteMessage: (options: DBDeleteMessageType) => Promise<ExecuteBatchDBQueriesType>; resetDB: () => Promise<unknown>; channelExists: (options: DBChannelExistsType) => Promise<boolean>; initializeDB: () => Promise<boolean>; } export type OfflineDBState = { initialized: boolean; userId?: string; }; export type PendingTaskTypes = { deleteMessage: 'delete-message'; deleteReaction: 'delete-reaction'; sendReaction: 'send-reaction'; sendMessage: 'send-message'; createDraft: 'create-draft'; deleteDraft: 'delete-draft'; }; export type PendingTask = { channelId?: string; channelType?: string; messageId?: string; id?: number; threadId?: string; } & ({ payload: Parameters<Channel['sendReaction']>; type: PendingTaskTypes['sendReaction']; } | { payload: Parameters<StreamChat['deleteMessage']>; type: PendingTaskTypes['deleteMessage']; } | { payload: Parameters<Channel['deleteReaction']>; type: PendingTaskTypes['deleteReaction']; } | { payload: Parameters<Channel['sendMessage']>; type: PendingTaskTypes['sendMessage']; } | { payload: Parameters<Channel['createDraft']>; type: PendingTaskTypes['createDraft']; } | { payload: Parameters<Channel['deleteDraft']>; type: PendingTaskTypes['deleteDraft']; }); export type OfflineErrorType = 'connection:lost'; export declare class OfflineError extends Error { type: OfflineErrorType; name: string; constructor(message: string, { type, }: { type: OfflineError['type']; }); toJSON(): { message: string; stack: string | undefined; name: string; }; }