bagman
Version:
js/ts client for Bagman
79 lines (65 loc) • 2.36 kB
text/typescript
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
}