@script-bridge/server
Version:
two-way communication system between ScriptAPI and backend server using http request
51 lines (50 loc) • 2.22 kB
TypeScript
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 {};