UNPKG

bagman

Version:

js/ts client for Bagman

66 lines (65 loc) 2.38 kB
import { Socket } from "socket.io-client"; export type ServerToClientEvents = { [event: string]: (...args: any[]) => void; }; export type ClientToServerEvents = { 'client:subscribe': (subscriptionData: SubscriptionData, cb: SubscriptionAckCallback) => Promise<void> | void; 'client:unsubscribe': (subscriptionData: UnsubscriptionData, cb: UnsubscriptionAckCallback) => Promise<void> | void; 'client:emit': (emissionData: EmissionData, cb: EmissionAckCallback) => Promise<void> | void; 'presence:fetch': <T>(presenceFetchData: FetchPresenceData, cb: FetchPresenceAckCallback<T>) => Promise<void> | void; }; export type BaseAck = { status: "ok" | "error"; message?: string; }; export type BaseAckCallback<Ack = any> = (e: Ack) => void; export type SubscriptionData = { channel: string; withPresence: boolean; }; export type SubscriptionAck = BaseAck; export type SubscriptionAckCallback = BaseAckCallback<SubscriptionAck>; export type UnsubscriptionData = Omit<SubscriptionData, "withPresence">; export type UnsubscriptionAck = BaseAck; export type UnsubscriptionAckCallback = BaseAckCallback<SubscriptionAck>; export type EmissionData<Data = any> = { channel: string; event: string; data: Data; }; export type EmissionAck = BaseAck; export type EmissionAckCallback = BaseAckCallback<EmissionAck>; export type Presence<T = any> = { id: string; user: T; }; export type FetchPresenceData = { channel: string; }; export type FetchPresenceAck<T> = { presences: Presence<T>[]; } | BaseAck; export type FetchPresenceAckCallback<T> = BaseAckCallback<FetchPresenceAck<T>>; export type ClientSocket = Socket<ServerToClientEvents, ClientToServerEvents>; export type ConfigResolver<T> = (() => (Promise<T> | T)) | T | Promise<T>; export type ExtraHeadersConfig = ConfigResolver<Record<string, string>>; export type ExtraParamsConfig = ConfigResolver<Record<string, string>>; export type BodyConfig = ConfigResolver<string>; export type AuthorizerConfig = { scheme?: string; host: string; port?: number; path: string; method?: string; extraHeaders?: ExtraHeadersConfig; extraParams?: ExtraParamsConfig; body?: BodyConfig; }; export type BagmanConfig = { url?: string; apiKey?: string; authorizer?: AuthorizerConfig; }; export type SubscribeOptions = { withPresence: boolean; };