UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

543 lines (542 loc) • 24.7 kB
import { l as normalizeOptionalString } from "./string-coerce-1VuiLaaR.mjs"; import "./src-CdRlGRnW.mjs"; import { t as expectDefined } from "./expect-lbe3Hgrh.mjs"; import { r as resolveStateDir } from "./state-dir-BHJORNly.mjs"; import "./openclaw-agent-db-contract-ClUH-Vmp.mjs"; import { n as normalizeAgentId } from "./agent-id-D1-Q6vR4.mjs"; import { r as cloneEnvWithPlatformSemantics } from "./config-env-vars-DjPHKieF.mjs"; import { r as isIncognitoSessionKey } from "./session-key-CmZ4o9-l.mjs"; import { M as parseAgentSessionKey } from "./session-key-C09ow4h0.mjs"; import { n as listAgentEntries } from "./agent-roster-BXD1uMJD.mjs"; import { l as resolveSessionStorePathCore } from "./paths-dpReqUI8.mjs"; import { S as listConfiguredSessionStoreAgentIds } from "./openclaw-state-db-D1jWDzK3.mjs"; import "./agent-scope-CG17uXFn.mjs"; import { t as resolvePersistedSessionStoreOwner } from "./session-store-owner-CnfJSmam.mjs"; import { n as resolveSessionStoreCompatibilityAgentId } from "./legacy.default-agent-owner-CiZjlN5C.mjs"; import { g as readAgentDatabaseAdmissionRefusal, n as assertAgentDatabaseAdmitted } from "./agent-database-admission-dWNS6Rcs.mjs"; import { l as readOpenClawAgentDatabaseRegistryToken, s as listOpenClawRegisteredAgentDatabases } from "./openclaw-agent-db-registry-listing-BmvvQ59E.mjs"; import { g as readOpenIncognitoAgentDatabaseGeneration, m as listOpenIncognitoAgentDatabases } from "./openclaw-agent-db-lifecycle-BJiYtXuW.mjs"; import "./openclaw-agent-db-DBug3LUA.mjs"; import { n as canonicalizeMainSessionAlias } from "./main-session-00MgEWj5.mjs"; import { c as withSessionHistoryWorkerDatabases } from "./session-transcript-worker-runtime-Dty5DpKL.mjs"; import { g as canonicalSessionKeyMigrationRequiredError } from "./session-canonical-key-D1TSJMmX.mjs"; import { t as listSessionEntriesReadOnly } from "./session-accessor.sqlite-entry-list.read-jgvuh1fV.mjs"; import { a as resolveAllAgentSessionStoreTargetsSync, n as listKnownSessionStoreAgentIds, p as dedupeSessionStoreTargetsBySqliteTarget, r as resolveAgentSessionStoreTargetsSync, s as resolveConfiguredAgentDatabaseTargets } from "./targets-BbcRkdUC.mjs"; import { n as createRetainedAgentDatabaseMatcher, r as createRetainedAgentDatabaseMatcherFromSnapshot } from "./agent-deletion-discovery-BRLBtW0y.mjs"; import { t as listSessionEntriesCore } from "./session-accessor.entry-BpOUC9jw.mjs"; import "./session-accessor-BDmTPdtx.mjs"; import { c as selectStoredSessionLineage, o as resolveStoredSessionKeyForAgentStore, r as resolveSessionStoreAgentId } from "./session-store-key-Ci099tm9.mjs"; import { n as createGatewaySessionLineageReader } from "./session-utils-store-lookup-DugC83hw.mjs"; //#region src/config/sessions/combined-store-paths.ts function storeTargetKey(target) { return `${target.agentId}\0${target.storePath}`; } function isStorePathTemplate(store) { return typeof store === "string" && store.includes("{agentId}"); } function resolveCombinedStorePath(paths, storeConfig) { return paths.length === 1 ? expectDefined(paths[0], "store path at 0") : typeof storeConfig === "string" && storeConfig.trim() ? storeConfig.trim() : "(multiple)"; } function resolveCombinedDatabasePath(targets, physicalTargets) { const paths = [...new Set(targets.map((target) => expectDefined(physicalTargets.get(storeTargetKey(target)), "physical store").storePath))]; return paths.length === 1 ? expectDefined(paths[0], "database path at 0") : "(multiple)"; } function discoveryReadOptions(discovery) { return discovery ? { env: discovery.env, registeredDatabases: (discovery.snapshot?.registeredAgentDatabases ?? []).filter((entry) => entry.schemaVersion === 24) } : {}; } function resolveSharedStoreRowOwner(cfg, selected, sharedStorePaths, env) { const configuredPath = resolveSessionStorePathCore(cfg.session?.store, { agentId: resolveSessionStoreCompatibilityAgentId(cfg), env }); if (!sharedStorePaths.has(configuredPath)) return; const persistedOwner = resolvePersistedSessionStoreOwner(cfg); return persistedOwner.kind === "configured" ? { agentId: persistedOwner.agentId, target: selected } : void 0; } function createGatewayRetainedStoreMatcher(cfg, discovery) { const readOptions = discoveryReadOptions(discovery); const env = readOptions.env ?? process.env; const readConfiguredTargets = () => resolveConfiguredAgentDatabaseTargets(cfg, { env, ...readOptions }); return discovery ? createRetainedAgentDatabaseMatcherFromSnapshot(env, readConfiguredTargets, discovery.snapshot, "database", "runtime") : createRetainedAgentDatabaseMatcher(env, readConfiguredTargets, "database", "runtime"); } //#endregion //#region src/config/sessions/combined-store-model-sources.ts function createSessionModelSources(cfg, diagnostics, preparedAgentIds) { const physicalStores = /* @__PURE__ */ new Map(); const logicalEntries = /* @__PURE__ */ new Map(); const logicalKey = (agentId, key) => `${normalizeAgentId(agentId)}\0${key}`; return { prepareStore(target) { const physicalKey = storeTargetKey(target); let physical = physicalStores.get(physicalKey); if (!physical) { physical = { entries: {}, readers: /* @__PURE__ */ new Map() }; physicalStores.set(physicalKey, physical); } const { entries: store, readers } = physical; return (logicalAgentId, storedKey, entry) => { store[storedKey] = entry; const identity = logicalKey(logicalAgentId, storedKey); if (!logicalEntries.has(identity)) logicalEntries.set(identity, entry); let read = readers.get(logicalAgentId); if (!read) { const readQualifiedParent = createGatewaySessionLineageReader(cfg); const selectedParents = /* @__PURE__ */ new Map(); const select = (parentKey) => { if (parentKey === "global" || parentKey === "unknown") return { key: parentKey, value: store[parentKey] }; const parsed = parseAgentSessionKey(parentKey); const agentId = normalizeAgentId(parsed?.agentId ?? logicalAgentId); const refusal = readAgentDatabaseAdmissionRefusal(agentId); if (refusal) { const message = `${refusal.reason}\n${refusal.repairHint}`; if (!diagnostics.includes(message)) diagnostics.push(message); return { key: parentKey, value: void 0 }; } const captured = selectedParents.get(parentKey); if (captured) return captured; const selected = selectStoredSessionLineage({ cfg, agentId, sessionKey: parentKey, read(owner, key) { const parentIdentity = logicalKey(owner, key); if (parsed && preparedAgentIds && !preparedAgentIds.has(owner) && !logicalEntries.has(parentIdentity)) logicalEntries.set(parentIdentity, readQualifiedParent.readStored(owner, key)); return logicalEntries.get(parentIdentity); }, readAlias(owner, key) { return parsed && preparedAgentIds && !preparedAgentIds.has(owner) ? readQualifiedParent.readAlias(parentKey, logicalAgentId) : logicalEntries.get(logicalKey(owner, key)); } }); selectedParents.set(parentKey, selected); return selected; }; read = { readSourceEntry: (key) => select(key).value, resolveSourceKey: (key) => select(key).key }; readers.set(logicalAgentId, read); } return read; }; }, remove(target, key) { const store = physicalStores.get(storeTargetKey(target.storeTarget)); if (store) delete store.entries[key]; logicalEntries.delete(logicalKey(target.agentId, key)); } }; } //#endregion //#region src/config/sessions/combined-store-gateway.ts function capturePhysicalStoreTargets() { const physicalTargets = /* @__PURE__ */ new Map(); return { physicalTargets, onResolvedTarget: (selected, physical) => { physicalTargets.set(storeTargetKey(selected), physical); } }; } let preparedConfiguredSessionStoreTargets; function loadGatewayStoreEntries(params) { return (params.includeOpenDatabases ? listSessionEntriesCore : listSessionEntriesReadOnly)({ agentId: params.agentId, clone: false, projection: params.projection, storePath: params.storePath }); } function mergeSessionEntryIntoCombined(params) { const { combined, entry, target, canonicalKey } = params; const projectedKey = params.projectedKey ?? canonicalKey; const existing = combined[projectedKey]; if (existing && (canonicalKey === "global" || canonicalKey === "unknown")) return; if (existing) throw canonicalSessionKeyMigrationRequiredError(`duplicate rows resolve to canonical session key ${canonicalKey}`); combined[projectedKey] = entry; params.targetsBySessionKey.set(projectedKey, target); } function projectGatewaySessionEntry(cfg, entry, resolveSourceKey) { const projected = { ...entry }; if (cfg.session?.scope === "global") for (const field of ["parentSessionKey", "spawnedBy"]) { const sessionKey = projected[field]; const parsed = sessionKey ? parseAgentSessionKey(sessionKey) : null; if (sessionKey && parsed) projected[field] = resolveSourceKey?.(sessionKey) ?? canonicalizeMainSessionAlias({ cfg, agentId: parsed.agentId, sessionKey }); } return projected; } function mergeOpenIncognitoStores(params) { const storePaths = []; for (const target of params.targets) { const store = loadGatewayStoreEntries({ agentId: target.agentId, includeOpenDatabases: true, projection: params.projection, storePath: target.storePath }); let merged = false; const addModelEntry = params.modelSources.prepareStore(target); const modelTarget = { agentId: target.agentId, storeTarget: target }; for (const { sessionKey, entry } of store) { if (!isIncognitoSessionKey(sessionKey) || entry.incognito !== true) continue; mergeSessionEntryIntoCombined({ combined: params.combined, targetsBySessionKey: params.targetsBySessionKey, entry, target: { ...modelTarget, entry, ...addModelEntry(target.agentId, sessionKey, entry) }, canonicalKey: sessionKey }); merged = true; } if (merged) storePaths.push(target.storePath); } return storePaths; } function isConfiguredGatewaySessionEntry(cfg, configuredAgentIds, key, entry) { const isConfiguredSessionKey = (candidate) => { const normalizedKey = normalizeOptionalString(candidate); return Boolean(normalizedKey && configuredAgentIds.has(normalizeAgentId(resolveSessionStoreAgentId(cfg, normalizedKey)))); }; return key === "global" || key === "unknown" || isConfiguredSessionKey(key) || isConfiguredSessionKey(entry.spawnedBy) || isConfiguredSessionKey(entry.parentSessionKey); } function filterCombinedStoreToConfiguredAgents(params) { for (const [key, entry] of Object.entries(params.store)) { const storeKey = params.targetsBySessionKey.get(key)?.storeKey ?? key; if (!isConfiguredGatewaySessionEntry(params.cfg, params.configuredAgentIds, storeKey, entry)) { params.modelSources.remove(expectDefined(params.targetsBySessionKey.get(key), "filtered row target"), storeKey); delete params.store[key]; params.targetsBySessionKey.delete(key); } } } function resolvePreparedConfiguredSessionStoreTargets(cfg, includeIncognito, discovery) { const readOptions = discoveryReadOptions(discovery); const registryToken = discovery ? void 0 : readOpenClawAgentDatabaseRegistryToken(); const incognitoGeneration = readOpenIncognitoAgentDatabaseGeneration(); const cached = discovery ? void 0 : preparedConfiguredSessionStoreTargets; if (cached?.cfg === cfg && cached.registryToken === registryToken && cached.incognitoGeneration === incognitoGeneration && cached.includeIncognito === includeIncognito) return cached.resolved; const storeConfig = cfg.session?.store; const defaultAgentId = normalizeAgentId(resolveSessionStoreCompatibilityAgentId(cfg)); const configuredIds = listConfiguredSessionStoreAgentIds(cfg); const configuredAgentIds = new Set(configuredIds); const incognitoTargets = includeIncognito ? listOpenIncognitoAgentDatabases() : []; const incognitoTargetKeys = new Set(incognitoTargets.map(storeTargetKey)); const diagnostics = []; const { physicalTargets, onResolvedTarget } = capturePhysicalStoreTargets(); let sharedStoreRowOwner; const candidates = dedupeSessionStoreTargetsBySqliteTarget([ ...(readOptions.registeredDatabases ?? listOpenClawRegisteredAgentDatabases()).map(({ agentId, path }) => ({ agentId, storePath: path })), ...configuredIds.map((agentId) => ({ agentId, storePath: resolveSessionStorePathCore(storeConfig, { agentId, env: readOptions.env }) })), ...incognitoTargets ], { defaultAgentId, ...readOptions, onResolvedTarget, onDiagnostic: (diagnostic) => diagnostics.push(diagnostic.message), onSharedTarget: (selected, paths) => { sharedStoreRowOwner ??= resolveSharedStoreRowOwner(cfg, selected, paths, readOptions.env); } }); const durableTargets = candidates.filter((target) => !incognitoTargetKeys.has(storeTargetKey(target))); const resolved = Object.freeze({ configuredAgentIds, defaultAgentId, diagnostics: Object.freeze(diagnostics), durableStorePath: resolveCombinedDatabasePath(durableTargets, physicalTargets), durableTargets: Object.freeze(durableTargets.map((target) => Object.freeze({ ...target }))), incognitoTargets: Object.freeze(candidates.filter((target) => incognitoTargetKeys.has(storeTargetKey(target))).map((target) => Object.freeze({ ...target }))), sharedStoreRowOwner, physicalTargets, storeConfig }); if (registryToken) preparedConfiguredSessionStoreTargets = { cfg, includeIncognito, incognitoGeneration, registryToken, resolved }; return resolved; } function resolveGatewaySessionStoreTopology(cfg, opts) { const readOptions = discoveryReadOptions(opts.discovery); const storeConfig = cfg.session?.store; const diagnostics = []; const requestedAgentId = typeof opts.agentId === "string" && opts.agentId.trim() ? normalizeAgentId(opts.agentId) : void 0; if (opts.configuredAgentsOnly === true && !requestedAgentId) return resolvePreparedConfiguredSessionStoreTargets(cfg, opts.includeIncognito !== false, opts.discovery); const defaultAgentId = normalizeAgentId(resolveSessionStoreCompatibilityAgentId(cfg)); const { physicalTargets, onResolvedTarget } = capturePhysicalStoreTargets(); const incognitoTargets = opts.includeIncognito === false ? [] : listOpenIncognitoAgentDatabases().filter((target) => !requestedAgentId || target.agentId === requestedAgentId); if (storeConfig && !isStorePathTemplate(storeConfig)) { const ownerIds = [.../* @__PURE__ */ new Set([ ...listAgentEntries(cfg).map((entry) => normalizeAgentId(entry.id)), ...listKnownSessionStoreAgentIds(cfg, readOptions), defaultAgentId, ...requestedAgentId ? [requestedAgentId] : [] ])]; let sharedStoreRowOwner; return { defaultAgentId, diagnostics, durableTargets: dedupeSessionStoreTargetsBySqliteTarget(ownerIds.map((agentId) => ({ agentId, storePath: resolveSessionStorePathCore(storeConfig, { agentId, env: readOptions.env }) })), { defaultAgentId, ...readOptions, onResolvedTarget, onDiagnostic: (diagnostic) => diagnostics.push(diagnostic.message), onSharedTarget: (selected, paths) => { sharedStoreRowOwner ??= resolveSharedStoreRowOwner(cfg, selected, paths, readOptions.env); } }), incognitoTargets, requestedAgentId, preparedAgentIds: requestedAgentId ? new Set(ownerIds) : void 0, sharedStoreRowOwner, physicalTargets, storeConfig }; } return { defaultAgentId, diagnostics, durableTargets: requestedAgentId ? dedupeSessionStoreTargetsBySqliteTarget(resolveAgentSessionStoreTargetsSync(cfg, requestedAgentId, readOptions), { defaultAgentId, onResolvedTarget, ...readOptions }) : resolveAllAgentSessionStoreTargetsSync(cfg, { onResolvedTarget, ...readOptions }), incognitoTargets, physicalTargets, requestedAgentId, preparedAgentIds: requestedAgentId ? /* @__PURE__ */ new Set([requestedAgentId]) : void 0, storeConfig }; } function resolveGatewaySessionStoreTargets(cfg, opts = {}) { const readOptions = discoveryReadOptions(opts.discovery); if (opts.agentId?.trim()) assertAgentDatabaseAdmitted(opts.agentId, { env: readOptions.env }); let resolved = resolveGatewaySessionStoreTopology(cfg, opts); if (opts.preserveSentinelOwners === "physical") { const { physicalTargets, onResolvedTarget } = capturePhysicalStoreTargets(); const groupDiscovery = /* @__PURE__ */ new Map(); const discoveredTargets = resolveAllAgentSessionStoreTargetsSync(cfg, { ...readOptions, onResolvedTarget: ({ agentId }, physical) => groupDiscovery.set(physical.storePath, { agentId, order: groupDiscovery.size }) }); const durableTargets = dedupeSessionStoreTargetsBySqliteTarget([ ...resolved.durableTargets, ...discoveredTargets, ...(readOptions.registeredDatabases ?? listOpenClawRegisteredAgentDatabases()).filter(({ path }) => ![...resolved.physicalTargets.values()].some((target) => target.storePath === path)).map(({ agentId, path }) => ({ agentId, storePath: path })) ], { defaultAgentId: resolved.defaultAgentId, onResolvedTarget, ...readOptions }); resolved = { ...resolved, durableTargets, physicalTargets, groupDiscovery }; } const diagnostics = [...resolved.diagnostics]; const env = readOptions.env ?? process.env; const deleted = createGatewayRetainedStoreMatcher(cfg, opts.discovery); const admitted = (target, durable = false) => { const physical = resolved.physicalTargets.get(storeTargetKey(target)); if (durable && deleted(physical?.storePath ?? target.storePath, target.agentId)) return false; const refusal = readAgentDatabaseAdmissionRefusal(target.agentId, { env }) ?? (physical && readAgentDatabaseAdmissionRefusal(physical.agentId, { env })); if (!refusal) return true; const message = `${refusal.reason}\n${refusal.repairHint}`; if (!diagnostics.includes(message)) diagnostics.push(message); return false; }; const durableTargets = resolved.durableTargets.filter((target) => admitted(target, true)); const incognitoTargets = resolved.incognitoTargets.filter((target) => admitted(target)); if (durableTargets.length === resolved.durableTargets.length && incognitoTargets.length === resolved.incognitoTargets.length) return resolved; return { ...resolved, diagnostics, durableTargets, incognitoTargets, ...resolved.durableStorePath === void 0 ? {} : { durableStorePath: resolveCombinedDatabasePath(durableTargets, resolved.physicalTargets) } }; } function prepareCombinedSessionStore(cfg, opts) { const targets = resolveGatewaySessionStoreTargets(cfg, opts); return { projection: opts.projection ?? "list", targets, reads: targets.durableTargets.map((target) => ({ target, storeTarget: expectDefined(targets.physicalTargets.get(storeTargetKey(target)), "physical store") })) }; } function mergeCombinedSessionStore(cfg, opts, prepared, readEntries) { const env = opts.discovery?.env; const { projection } = prepared; const { configuredAgentIds, diagnostics, durableStorePath: preparedDurableStorePath, durableTargets, incognitoTargets, physicalTargets, requestedAgentId, preparedAgentIds, sharedStoreRowOwner, storeConfig } = prepared.targets; const combined = {}; const targetsBySessionKey = /* @__PURE__ */ new Map(); const projectionDiagnostics = [...diagnostics]; const modelSources = createSessionModelSources(cfg, projectionDiagnostics, preparedAgentIds); for (const { target, storeTarget } of prepared.reads) { const agentId = target.agentId; const storePath = target.storePath; const store = readEntries(storeTarget); assertAgentDatabaseAdmitted(agentId, { env }); assertAgentDatabaseAdmitted(storeTarget.agentId, { env }); const rowAgentId = sharedStoreRowOwner?.target.storePath === storePath && sharedStoreRowOwner.target.agentId === agentId ? sharedStoreRowOwner.agentId : agentId; opts.onStoreLoaded?.(storeTarget, rowAgentId, prepared.targets.groupDiscovery?.get(storeTarget.storePath) ?? null); preparedAgentIds?.add(agentId); preparedAgentIds?.add(storeTarget.agentId); preparedAgentIds?.add(rowAgentId); const addModelEntry = modelSources.prepareStore(storeTarget); for (const { sessionKey: key, entry } of store) { const parsed = parseAgentSessionKey(key); const canonicalKey = resolveStoredSessionKeyForAgentStore({ cfg, agentId: parsed ? storeTarget.agentId : rowAgentId, sessionKey: key, preserveQualifiedAddress: true }); if (key !== canonicalKey) throw canonicalSessionKeyMigrationRequiredError(`non-canonical persisted row resolves to session key ${canonicalKey}`); const canonicalAgentId = normalizeAgentId(parsed?.agentId ?? rowAgentId); preparedAgentIds?.add(canonicalAgentId); const source = addModelEntry(canonicalAgentId, canonicalKey, entry); if (requestedAgentId && canonicalAgentId !== requestedAgentId) continue; const projectedKey = opts.preserveSentinelOwners && (canonicalKey === "global" || canonicalKey === "unknown") ? JSON.stringify([canonicalKey, opts.preserveSentinelOwners === "physical" ? `${canonicalAgentId}\0${storeTarget.storePath}` : canonicalAgentId]) : canonicalKey; mergeSessionEntryIntoCombined({ combined, targetsBySessionKey, entry, target: { agentId: canonicalAgentId, storeTarget, entry, ...source, ...projectedKey !== canonicalKey ? { storeKey: canonicalKey } : {} }, canonicalKey, projectedKey }); } } const incognitoStorePaths = mergeOpenIncognitoStores({ combined, targetsBySessionKey, modelSources, projection, targets: incognitoTargets }); if (configuredAgentIds) filterCombinedStoreToConfiguredAgents({ cfg, configuredAgentIds, store: combined, targetsBySessionKey, modelSources }); for (const [key, target] of targetsBySessionKey) combined[key] = projectGatewaySessionEntry(cfg, combined[key], target.resolveSourceKey); const durableStorePaths = durableTargets.map((target) => target.storePath); const durableStorePath = preparedDurableStorePath ?? resolveCombinedDatabasePath(durableTargets, physicalTargets); return { diagnostics: projectionDiagnostics, durableStorePath, durableTargets, storePath: storeConfig && !isStorePathTemplate(storeConfig) ? incognitoStorePaths.length > 0 ? "(multiple)" : durableStorePath : resolveCombinedStorePath([...durableStorePaths, ...incognitoStorePaths], storeConfig), store: combined, targetsBySessionKey }; } function loadCombinedSessionStoreForGatewayCore(cfg, opts = {}) { const prepared = prepareCombinedSessionStore(cfg, opts); return mergeCombinedSessionStore(cfg, opts, prepared, (target) => opts.loadEntries ? opts.loadEntries(target, prepared.projection) : loadGatewayStoreEntries({ ...target, projection: prepared.projection })); } /** Descriptive listings retain federation policy while durable rows are read by its worker. */ async function loadCombinedSessionStoreForGatewayCoreAsync(cfg, opts = {}) { const options = { ...opts }; const env = cloneEnvWithPlatformSemantics(process.env); env.OPENCLAW_STATE_DIR = resolveStateDir(env); const prepared = prepareCombinedSessionStore(cfg, options); const registryToken = readOpenClawAgentDatabaseRegistryToken(); const incognitoGeneration = readOpenIncognitoAgentDatabaseGeneration(); const transferEnv = { ...env, OPENCLAW_STATE_DIR: env.OPENCLAW_STATE_DIR }; return await withSessionHistoryWorkerDatabases(prepared.reads.map(({ storeTarget }) => ({ agentId: storeTarget.agentId, path: storeTarget.storePath, env })), async (owners) => { const entries = /* @__PURE__ */ new Map(); for (const [index, { storeTarget }] of prepared.reads.entries()) { const rows = await expectDefined(owners[index], "retained session store").readEntries({ ...storeTarget, env: transferEnv, projection: prepared.projection, clone: false }); entries.set(storeTargetKey(storeTarget), rows); } for (const owner of owners) owner.assertCurrent(); if (registryToken !== readOpenClawAgentDatabaseRegistryToken() || incognitoGeneration !== readOpenIncognitoAgentDatabaseGeneration()) throw new Error("Session stores changed while preparing the listing. Retry the request."); return mergeCombinedSessionStore(cfg, options, prepared, (target) => expectDefined(entries.get(storeTargetKey(target)), "prepared session entries")); }); } //#endregion export { resolveGatewaySessionStoreTargets as a, projectGatewaySessionEntry as i, loadCombinedSessionStoreForGatewayCore as n, loadCombinedSessionStoreForGatewayCoreAsync as r, isConfiguredGatewaySessionEntry as t };