openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
60 lines (59 loc) • 2.55 kB
JavaScript
import { i as deferSqliteWorkerCommitReceipt } from "./sqlite-worker-operation-admission-C5lBzzTk.mjs";
import { i as getSqliteWorkerStateContext } from "./sqlite-worker-state-context-G3Xbcj1W.mjs";
import { l as runOpenClawStateWriteTransaction } from "./openclaw-state-db-DJZ7EKoI.mjs";
import { A as withDevicePairingStoreDatabase, L as withDevicePairingMutationAdmission, O as readPairedDevicePairingRecordsFromDatabase, P as resolveDevicePairingStoreRevision, l as resolveNodePairingState } from "./device-pairing-identity-D10qDl39.mjs";
//#region src/infra/device-pairing-binding.ts
function prepareDevicePairingBinding(deviceId, device) {
const state = resolveNodePairingState(device);
return {
deviceId,
binding: state ? {
identity: state.identity.key,
...state.generation ? { generation: state.generation.key } : {}
} : null
};
}
//#endregion
//#region src/infra/device-pairing-dispatch.worker.ts
function devicePairingMutation(operation, { publishPairing = true } = {}) {
return (input, { open }) => {
const database = open();
return runOpenClawStateWriteTransaction(() => withDevicePairingStoreDatabase(database, () => withDevicePairingMutationAdmission(() => {
const before = publishPairing ? readPairedDevicePairingRecordsFromDatabase(database.db) : void 0;
let tokensReplaced;
let workerEnvironment;
let nodeApproval;
const result = operation(input, {
database,
recordTokenReplacement: (facts) => {
tokensReplaced = facts;
},
recordWorkerEnvironment: (facts) => {
workerEnvironment = facts;
},
recordNodeApproval: (facts) => {
nodeApproval = facts;
}
});
if (!before) return result;
const after = readPairedDevicePairingRecordsFromDatabase(database.db);
const changed = [];
for (const deviceId of /* @__PURE__ */ new Set([...Object.keys(before), ...Object.keys(after)])) if (JSON.stringify(before[deviceId]) !== JSON.stringify(after[deviceId])) changed.push(prepareDevicePairingBinding(deviceId, after[deviceId] ?? null));
deferSqliteWorkerCommitReceipt(database.db, {
kind: "devicePairing",
beforeRevision: resolveDevicePairingStoreRevision(before),
revision: resolveDevicePairingStoreRevision(after),
changed,
...tokensReplaced ? { tokensReplaced } : {},
...workerEnvironment ? { workerEnvironment } : {},
...nodeApproval ? { nodeApproval } : {}
});
return result;
})), {
database,
env: getSqliteWorkerStateContext().environment
});
};
}
//#endregion
export { devicePairingMutation as t };