UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

83 lines (82 loc) 3.39 kB
import { c as isRecord } from "./record-coerce-DItp3I4t.js"; import { r as truncateUtf16Safe } from "./utf16-slice-D_ngcYKd.js"; import { i as readActiveGatewayLockIdentity } from "./gateway-lock-B0QIxQaj.js"; import { t as ErrorCodes } from "./gateway-error-details-w0nAGBBp.js"; import { c as requestGatewayRestartWithSignalAdmission } from "./restart-DwCats8x.js"; import { d as errorShape } from "./error-codes-Bo8q2D1o.js"; import { n as scheduleSafeGatewayRestart, t as createSafeGatewayRestartPreflight } from "./restart-coordinator-fVCqDNWk.js"; import { i as parseTargetedGatewayRestartIntent, r as parseTargetedGatewayRestart } from "./restart-request-DCnDLrlM.js"; //#region src/gateway/server-methods/restart.ts function isRestartRequestParams(value) { return isRecord(value); } function normalizeReason(value) { return typeof value === "string" && value.trim() ? truncateUtf16Safe(value.trim(), 200) : void 0; } function normalizeSkipDeferral(value) { return value === true; } /** Gateway request handlers for safe restart coordination. */ const restartHandlers = { "gateway.restart.request": async ({ respond, params }) => { if (!isRestartRequestParams(params)) { respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "invalid gateway.restart.request params")); return; } const reason = normalizeReason(params.reason); const target = parseTargetedGatewayRestart(params.target); if (target === null) { respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "invalid targeted gateway restart")); return; } if (target) { if (params.safe !== void 0 && typeof params.safe !== "boolean") { respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "invalid safe targeted restart mode")); return; } if (params.safe === true) { if (params.restartIntent !== void 0) { respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "safe targeted restart does not accept intent")); return; } respond(true, scheduleSafeGatewayRestart({ reason, delayMs: 0, skipDeferral: normalizeSkipDeferral(params.skipDeferral) })); return; } const intent = parseTargetedGatewayRestartIntent(params.restartIntent, reason); if (!intent) { respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "invalid targeted gateway restart intent")); return; } const activeLock = await readActiveGatewayLockIdentity().catch(() => void 0); if (!activeLock || activeLock.pid !== process.pid || activeLock.pid !== target.pid || activeLock.ownerId !== target.ownerId || activeLock.port !== target.port) { respond(false, void 0, errorShape(ErrorCodes.INVALID_REQUEST, "target gateway no longer owns the active lock")); return; } const result = requestGatewayRestartWithSignalAdmission(reason, intent); if (result.status === "failed") { respond(false, void 0, errorShape(ErrorCodes.UNAVAILABLE, "target gateway restart delivery failed")); return; } respond(true, { ok: true, status: result.status, pid: process.pid }); return; } respond(true, scheduleSafeGatewayRestart({ reason, delayMs: 0, skipDeferral: normalizeSkipDeferral(params.skipDeferral) })); }, "gateway.restart.preflight": async ({ respond }) => { respond(true, createSafeGatewayRestartPreflight()); } }; //#endregion export { restartHandlers };