feat: add plugin HTTP hooks + Zalo plugin

This commit is contained in:
Peter Steinberger
2026-01-15 05:03:50 +00:00
parent 0e76d21f11
commit 5abe3c2145
36 changed files with 3061 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
import type { IncomingMessage, ServerResponse } from "node:http";
import type { createSubsystemLogger } from "../../logging.js";
import type { PluginRegistry } from "../../plugins/registry.js";
type SubsystemLogger = ReturnType<typeof createSubsystemLogger>;
export type PluginHttpRequestHandler = (
req: IncomingMessage,
res: ServerResponse,
) => Promise<boolean>;
export function createGatewayPluginRequestHandler(params: {
registry: PluginRegistry;
log: SubsystemLogger;
}): PluginHttpRequestHandler {
const { registry, log } = params;
return async (req, res) => {
if (registry.httpHandlers.length === 0) return false;
for (const entry of registry.httpHandlers) {
try {
const handled = await entry.handler(req, res);
if (handled) return true;
} catch (err) {
log.warn(`plugin http handler failed (${entry.pluginId}): ${String(err)}`);
if (!res.headersSent) {
res.statusCode = 500;
res.setHeader("Content-Type", "text/plain; charset=utf-8");
res.end("Internal Server Error");
}
return true;
}
}
return false;
};
}