chore: initial commit

This commit is contained in:
2026-10-22 17:07:08 +08:00
commit 6ccb102d38
20 changed files with 5949 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
import {CONTROL_EVENTS} from '../types.ts';
import type {ControlTransport, ForwardSessionStatus, RelayLogger} from '../types.ts';
import type {RelaySessionStore} from './session_store.ts';
import {error_ack, fail, success} from '../utils/relay_validation.ts';
export function install_control_routes(
transport: ControlTransport,
store: RelaySessionStore,
logger?: RelayLogger,
): () => void {
let active = true;
const handlers = {
forward_open_session: (value: unknown) => store.open(value),
forward_authorize_grant: (value: unknown) => store.authorize(value),
forward_revoke_session: (value: unknown) => store.revoke_session(value),
forward_revoke_grant: (value: unknown) => store.revoke_grant(value),
};
const listeners = new Map<string, (...args: unknown[]) => void>();
for (const event of CONTROL_EVENTS) {
const listener = (value: unknown, callback: unknown) => {
if (!active || typeof callback !== 'function') return;
let ack;
try {
if (!store.control_available) fail('RELAY_UNAVAILABLE', 'Control channel is disconnected', true);
ack = success(handlers[event](value));
} catch (error) { ack = error_ack(error); }
try { callback(ack); }
catch { logger?.log('Relay control ACK delivery failed'); }
};
transport.on(event, listener);
listeners.set(event, listener);
}
const disconnected = () => {
store.set_control_available(false);
logger?.log('Relay control channel disconnected');
};
transport.on('disconnect', disconnected);
store.set_control_available(true);
return () => {
if (!active) return;
active = false;
for (const [event, listener] of listeners) transport.off(event, listener);
transport.off('disconnect', disconnected);
store.set_control_available(false);
};
}
export function report_status(transport: ControlTransport | undefined, status: ForwardSessionStatus): void {
transport?.emit('forward_session_status', status);
}