openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
72 lines (71 loc) • 2.58 kB
JavaScript
import { n as createSqliteWorkerOperationAdmission } from "./sqlite-worker-operation-admission-cNGSH5v0.mjs";
import { a as runOpenClawStateWorkerOperation } from "./openclaw-state-worker-store-DCVYVtaO.mjs";
//#region src/gateway/worker-environments/placement-worker-mutation.ts
/** Admission fences precede the native commit; only its receipt publishes authority. */
function createPlacementWorkerMutation(params) {
let admission;
let publication;
let transactionGranted = false;
let commitGranted = false;
const check = () => {
params.context.admission.assertCurrent();
params.assertCurrent?.();
};
const publish = (receipt) => {
publication?.commit();
params.publish?.(receipt);
return receipt;
};
return {
get transactionGranted() {
return transactionGranted;
},
get commitGranted() {
return commitGranted;
},
get settlement() {
return admission?.settlement;
},
async run(operation) {
try {
return await runOpenClawStateWorkerOperation(params.context, async (scope) => publish(await operation(scope)), {
assertCurrent: check,
createAdmission: () => {
let stage = "transaction";
admission = createSqliteWorkerOperationAdmission((request, grant) => {
if (params.orderedAdmission && request.stage !== stage) throw new Error(`${params.label} admission is out of order`);
check();
const facts = params.admissionFacts ? params.admissionFacts(request) : request.facts;
if (request.stage === "commit") publication = params.stageCommit(facts) ?? publication;
if (!grant()) {
publication?.rollback();
throw new Error(`${params.label} admission expired`);
}
transactionGranted ||= request.stage === "transaction";
commitGranted ||= request.stage === "commit";
stage = "commit";
});
return {
nativeLocations: [params.nativeLocation],
admission
};
}
});
} catch (error) {
const committed = admission?.committed ?? admission?.settlement?.committed;
if (committed) {
const receipt = params.readReceipt(committed.facts, publication);
if (receipt !== void 0) return publish(receipt);
}
if (!commitGranted || admission?.settlement?.kind === "completed") publication?.rollback();
else if (params.recoverUnknown) {
const receipt = await params.recoverUnknown(error, publication);
if (receipt !== void 0) return publish(receipt);
} else publication?.invalidate();
throw error;
}
}
};
}
//#endregion
export { createPlacementWorkerMutation as t };