openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
136 lines (135 loc) • 4.43 kB
JavaScript
//#region src/channels/plugins/stateful-target-drivers.ts
const registeredStatefulBindingTargetDrivers = /* @__PURE__ */ new Map();
function listStatefulBindingTargetDrivers() {
return [...registeredStatefulBindingTargetDrivers.values()];
}
function registerStatefulBindingTargetDriver(driver) {
const id = driver.id.trim();
if (!id) throw new Error("Stateful binding target driver id is required");
const normalized = {
...driver,
id
};
if (registeredStatefulBindingTargetDrivers.get(id)) return;
registeredStatefulBindingTargetDrivers.set(id, normalized);
}
function getStatefulBindingTargetDriver(id) {
const normalizedId = id.trim();
if (!normalizedId) return null;
return registeredStatefulBindingTargetDrivers.get(normalizedId) ?? null;
}
function resolveStatefulBindingTargetBySessionKey(params) {
const sessionKey = params.sessionKey.trim();
if (!sessionKey) return null;
for (const driver of listStatefulBindingTargetDrivers()) {
const bindingTarget = driver.resolveTargetBySessionKey?.({
cfg: params.cfg,
sessionKey
});
if (bindingTarget) return {
driver,
bindingTarget
};
}
return null;
}
//#endregion
//#region src/channels/plugins/stateful-target-builtins.ts
/**
* Built-in stateful binding target registration.
*
* Lazily registers ACP target drivers so non-ACP channel flows avoid ACP runtime imports.
*/
let builtinsRegisteredPromise = null;
let acpDriverModulePromise;
function loadAcpStatefulTargetDriverModule() {
acpDriverModulePromise ??= import("./acp-stateful-target-driver-yO30dPxX.js");
return acpDriverModulePromise;
}
function isStatefulTargetBuiltinDriverId(id) {
return id.trim() === "acp";
}
async function ensureStatefulTargetBuiltinsRegistered() {
if (builtinsRegisteredPromise) {
await builtinsRegisteredPromise;
return;
}
builtinsRegisteredPromise = (async () => {
const { acpStatefulBindingTargetDriver } = await loadAcpStatefulTargetDriverModule();
registerStatefulBindingTargetDriver(acpStatefulBindingTargetDriver);
})();
try {
await builtinsRegisteredPromise;
} catch (error) {
builtinsRegisteredPromise = null;
throw error;
}
}
//#endregion
//#region src/channels/plugins/binding-targets.ts
/**
* Ensures the stateful target driver for a configured binding is ready to receive traffic.
*/
async function ensureConfiguredBindingTargetReady(params) {
if (!params.bindingResolution) return { ok: true };
const driverId = params.bindingResolution.statefulTarget.driverId;
let driver = getStatefulBindingTargetDriver(driverId);
if (!driver && isStatefulTargetBuiltinDriverId(driverId)) {
await ensureStatefulTargetBuiltinsRegistered();
driver = getStatefulBindingTargetDriver(driverId);
}
if (!driver) return {
ok: false,
error: `Configured binding target driver unavailable: ${driverId}`
};
return await driver.ensureReady({
cfg: params.cfg,
bindingResolution: params.bindingResolution
});
}
/**
* Resets a stateful configured binding target in place when its driver supports reset.
*/
async function resetConfiguredBindingTargetInPlace(params) {
let resolved = resolveStatefulBindingTargetBySessionKey({
cfg: params.cfg,
sessionKey: params.sessionKey
});
if (!resolved) {
await ensureStatefulTargetBuiltinsRegistered();
resolved = resolveStatefulBindingTargetBySessionKey({
cfg: params.cfg,
sessionKey: params.sessionKey
});
}
if (!resolved?.driver.resetInPlace) return {
ok: false,
skipped: true
};
return await resolved.driver.resetInPlace({
...params,
bindingTarget: resolved.bindingTarget
});
}
/**
* Ensures the configured binding target session exists and returns its session key.
*/
async function ensureConfiguredBindingTargetSession(params) {
const driverId = params.bindingResolution.statefulTarget.driverId;
let driver = getStatefulBindingTargetDriver(driverId);
if (!driver && isStatefulTargetBuiltinDriverId(driverId)) {
await ensureStatefulTargetBuiltinsRegistered();
driver = getStatefulBindingTargetDriver(driverId);
}
if (!driver) return {
ok: false,
sessionKey: params.bindingResolution.statefulTarget.sessionKey,
error: `Configured binding target driver unavailable: ${driverId}`
};
return await driver.ensureSession({
cfg: params.cfg,
bindingResolution: params.bindingResolution
});
}
//#endregion
export { ensureConfiguredBindingTargetSession as n, resetConfiguredBindingTargetInPlace as r, ensureConfiguredBindingTargetReady as t };