openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
51 lines (50 loc) • 2.69 kB
JavaScript
import { S as loadPairedDevicePairingStoreRecord } from "./device-bootstrap-DRFMRCcr.js";
import { _ as resolveNodePairingState, g as resolveNodePairingGeneration, i as hasEffectivePairedDeviceRole, n as getPairedDevice } from "./device-pairing-DFIQp3ZY.js";
//#region src/infra/device-pairing-node-state.ts
function toPairedDeviceNodeBinding(state) {
return state ? {
identity: state.identity.key,
...state.generation ? { generation: state.generation.key } : {}
} : void 0;
}
/** Project only authenticated node-role bindings from the caller's loaded device snapshot. */
function projectPairedDeviceNodeBindings(pairedDevices) {
const bindings = /* @__PURE__ */ new Map();
for (const device of pairedDevices) {
const binding = toPairedDeviceNodeBinding(resolveNodePairingState(device));
if (binding) bindings.set(device.deviceId, binding);
}
return bindings;
}
async function captureNodePairingState(nodeId, baseDir) {
return resolveNodePairingState(await getPairedDevice(nodeId, baseDir));
}
async function resolveCurrentPairedDeviceNodeBinding(nodeId) {
return toPairedDeviceNodeBinding(await captureNodePairingState(nodeId));
}
function isPairedDeviceNodeBindingCurrent(nodeId, expected) {
const current = toPairedDeviceNodeBinding(resolveNodePairingState(loadPairedDevicePairingStoreRecord(nodeId)));
return Boolean(current && current.identity === expected.identity && (!expected.generation || current.generation === expected.generation));
}
async function captureNodePairingGeneration(nodeId) {
return (await captureNodePairingState(nodeId))?.generation ?? null;
}
/** Binds a connected session to the exact device key and node token used for authentication. */
async function captureAuthenticatedNodePairingState(params) {
const device = await getPairedDevice(params.nodeId, params.baseDir);
if (!device || device.publicKey !== params.publicKey || device.tokens?.node?.token !== params.token || !hasEffectivePairedDeviceRole(device, "node")) return null;
const state = resolveNodePairingState(device);
return state ? {
...state,
approvedSurface: {
caps: device.nodeSurface?.caps ?? [],
commands: device.nodeSurface?.commands ?? [],
permissions: device.nodeSurface?.permissions
}
} : null;
}
async function isNodePairingGenerationCurrent(generation) {
return resolveNodePairingGeneration(await getPairedDevice(generation.nodeId))?.key === generation.key;
}
//#endregion
export { isPairedDeviceNodeBindingCurrent as a, isNodePairingGenerationCurrent as i, captureNodePairingGeneration as n, projectPairedDeviceNodeBindings as o, captureNodePairingState as r, resolveCurrentPairedDeviceNodeBinding as s, captureAuthenticatedNodePairingState as t };