UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

23 lines (22 loc) • 1.29 kB
import { i as executeSqliteQuerySync } from "./kysely-sync-DUWzQvCU.mjs"; import { h as required } from "./placement-record-BZ5ExJ2S.mjs"; import { a as query, b as publishPlacementTurnClaimCleared, d as turnClaimValues } from "./placement-row-codec-Cpn-JKmv.mjs"; //#region src/gateway/worker-environments/placement-retirement.ts const RETIRABLE_PLACEMENT_STATES = [ "local", "requested", "reclaimed", "failed" ]; function retireWorkerSessionPlacement(db, input, options = {}) { const sessionId = required(input.sessionId, "session id"); if (!RETIRABLE_PLACEMENT_STATES.some((state) => state === input.expectedState)) throw new Error(`Cannot retire worker session placement from ${input.expectedState}`); if (executeSqliteQuerySync(db, query(db).deleteFrom("worker_session_placements").where("session_id", "=", sessionId).where("state", "=", input.expectedState).where("transition_generation", "=", input.expectedGeneration).where((eb) => eb.and(turnClaimValues(null)))).numAffectedRows !== 1n) { if (options.onlyIfCurrent) return false; throw new Error(`Worker session placement ${sessionId} changed before retirement`); } publishPlacementTurnClaimCleared(db, sessionId, input.expectedState, true); return true; } //#endregion export { retireWorkerSessionPlacement as t };