UNPKG

@script-bridge/server

Version:

two-way communication system between ScriptAPI and backend server using http request

51 lines (50 loc) 2.22 kB
import { EventEmitter } from 'node:events'; import { BaseAction, DisconnectReason, ServerRequest, ServerResponse, ClientRequest, ClientResponse } from '@script-bridge/protocol'; import { Session } from './session'; import { ClientAction } from './client-action'; type Awaitable<Value> = PromiseLike<Value> | Value; interface ServerOptions { port: number; /** The interval ticks clients should wait before sending a query. Defaults to `8` */ requestIntervalTicks?: number; /** * A multiplier indicating how many times the `requestIntervalTicks` * can be exceeded before considering the request as failed. * Defaults to `20`. * Set `Infinity` to disable auto disconnection. */ timeoutThresholdMultiplier?: number; } type ActionHandler<T extends BaseAction> = (action: ClientAction<T>) => Awaitable<void>; export declare class ScriptBridgeServer extends EventEmitter<ServerEvents> { static readonly PROTOCOL_VERSION = 2; readonly sessions: Map<string, Session>; readonly port: number; readonly requestIntervalTicks: number; readonly timeoutThresholdMultiplier: number; private readonly server; private readonly app; private readonly actionHandlers; constructor(options: ServerOptions); start(): Promise<void>; stop(): Promise<void>; broadcast<A extends BaseAction = BaseAction>(channelId: A['id'], data?: A['request'], timeout?: number): Promise<ClientResponse<A['response']>[]>; registerHandler<A extends BaseAction = BaseAction>(channelId: A['id'], handler: ActionHandler<A>): void; private handleRequest; private handleResponse; } interface ServerEvents { serverOpen: []; serverClose: []; clientConnect: [session: Session]; clientDisconnect: [session: Session, reason: DisconnectReason]; sessionCreate: [session: Session]; sessionDestroy: [session: Session]; queryReceive: [session: Session]; requestSend: [request: ServerRequest, session: Session]; responseSend: [response: ServerResponse, session: Session]; requestReceive: [request: ClientRequest, session: Session]; responseReceive: [response: ClientResponse, session: Session]; error: [error: Error]; } export {};