UNPKG

@jokio/sdk

Version:

pure js/ts sdk for building decentralised localfirst web apps. Provides tts ai model integrations, realtime p2p communication & crypto encryptions.

51 lines (50 loc) 1.95 kB
import { AuthService } from './auth.service'; type Config = { natsUrl: string; auth: AuthService; }; export declare class NatsService<TApi> { private config; onStatusChange?: (isConnected: boolean) => void; private nc?; private sessionId; private userId; private globalPrefix; private resolveConnected; isConnected: Promise<unknown>; get url(): string; constructor(config: Config); connect(opts?: { accessToken?: string; sessionSeed?: string; natsWsUrls?: string[]; user?: IdentityUser; prefix?: string; }): Promise<void>; disconnect(): Promise<void>; publish<TSubject extends keyof TApi & string>(subject: TSubject, data: InferReturnType<TApi, TSubject>): Promise<void>; call<TSubject extends keyof TApi & string>(subject: TSubject, data: InferProps<TApi, TSubject>, opts?: { timeoutInMs?: number; }): Promise<InferReturnType<TApi, TSubject>>; on<TSubject extends keyof TApi & string>(subject: TSubject, cb: (data: InferReturnType<TApi, TSubject>, ctx: { subject: string; userId: string; sessionId: string; }) => void): Promise<() => void>; /** * Reqiores permission to publish response in `_INBOX.>`. If you need to just listen events, use `on`. */ handler<TSubject extends keyof TApi & string>(subject: TSubject, cb: (data: InferProps<TApi, TSubject>, ctx: { subject: string; userId: string; sessionId: string; }) => Promise<InferReturnType<TApi, TSubject>>): Promise<() => void>; private buildSubject; } type IdentityUser = { userId: string; sessionId: string; }; type InferProps<TApi, TSubject extends keyof TApi> = TApi[TSubject] extends (args: infer TProps) => unknown ? TProps : {}; type InferReturnType<TApi, TSubject extends keyof TApi> = TApi[TSubject] extends (args: any) => infer TResult ? TResult : TApi[TSubject]; export {};