@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
TypeScript
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 {};