Files
flynn/src/gateway/router.ts
T
2026-02-16 12:14:25 -08:00

31 lines
1.2 KiB
TypeScript

import type { GatewayRequest, OutboundMessage } from './protocol.js';
import { makeError, ErrorCode } from './protocol.js';
// A handler function receives a request and a send function for streaming events.
// It returns a final response/error, or void if it already sent a done event.
export type SendFn = (msg: OutboundMessage) => void;
export type HandlerFn = (request: GatewayRequest, send: SendFn) => Promise<OutboundMessage | void>;
export class Router {
private handlers: Map<string, HandlerFn> = new Map();
register(method: string, handler: HandlerFn): void {
this.handlers.set(method, handler);
}
async dispatch(request: GatewayRequest, send: SendFn): Promise<OutboundMessage | void> {
if (request.method.startsWith('node.') && !request.params) {
return makeError(request.id, ErrorCode.InvalidRequest, 'params are required for node methods');
}
const handler = this.handlers.get(request.method);
if (!handler) {
return makeError(request.id, ErrorCode.MethodNotFound, `Unknown method: ${request.method}`);
}
return handler(request, send);
}
listMethods(): string[] {
return Array.from(this.handlers.keys());
}
}