mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 08:50:43 +00:00
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { definePluginEntry, type OpenClawPluginApi } from "./api.js";
|
|
import { resolveWebhooksPluginConfig } from "./src/config.js";
|
|
import { createTaskFlowWebhookRequestHandler, type TaskFlowWebhookTarget } from "./src/http.js";
|
|
|
|
function registerWebhookRoutes(api: OpenClawPluginApi): void {
|
|
const routes = resolveWebhooksPluginConfig({
|
|
pluginConfig: api.pluginConfig,
|
|
});
|
|
if (routes.length === 0) {
|
|
return;
|
|
}
|
|
|
|
const targetsByPath = new Map<string, TaskFlowWebhookTarget[]>();
|
|
const handler = createTaskFlowWebhookRequestHandler({
|
|
cfg: api.config,
|
|
targetsByPath,
|
|
});
|
|
|
|
for (const route of routes) {
|
|
const taskFlow = api.runtime.tasks.managedFlows.bindSession({
|
|
sessionKey: route.sessionKey,
|
|
});
|
|
const target: TaskFlowWebhookTarget = {
|
|
routeId: route.routeId,
|
|
path: route.path,
|
|
secretInput: route.secret,
|
|
secretConfigPath: `plugins.entries.webhooks.routes.${route.routeId}.secret`,
|
|
defaultControllerId: route.controllerId,
|
|
taskFlow,
|
|
};
|
|
targetsByPath.set(target.path, [...(targetsByPath.get(target.path) ?? []), target]);
|
|
api.registerHttpRoute({
|
|
path: target.path,
|
|
auth: "plugin",
|
|
match: "exact",
|
|
replaceExisting: true,
|
|
handler,
|
|
});
|
|
api.logger.info?.(
|
|
`[webhooks] registered route ${route.routeId} on ${route.path} for session ${route.sessionKey}`,
|
|
);
|
|
}
|
|
}
|
|
|
|
export default definePluginEntry({
|
|
id: "webhooks",
|
|
name: "Webhooks",
|
|
description:
|
|
"Authenticated inbound webhooks that bind external automation to OpenClaw TaskFlows.",
|
|
register(api: OpenClawPluginApi) {
|
|
registerWebhookRoutes(api);
|
|
},
|
|
});
|