UNPKG

bagman

Version:

js/ts client for Bagman

79 lines (65 loc) 2.36 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 }