UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

72 lines (71 loc) • 4.03 kB
import { i as executeSqliteQuerySync, o as getNodeSqliteKysely } from "../kysely-sync-DUWzQvCU.mjs"; import { s as runSqliteWorkerTransactionSync, t as assertTransactionUsable } from "../sqlite-transaction-DBRLvCDM.mjs"; import { l as withExistingOpenClawStateDatabaseCurrentReadOnly } from "../openclaw-state-db-readonly-ywwvuxdQ.mjs"; import { s as readAuthProfileRows } from "../sqlite-json-CKBJ4R1M.mjs"; import { i as loadPersistedAuthProfileStoreAtDatabasePath } from "../persisted-Bg_WZMIU.mjs"; import { t as loadPersistedAuthProfileStoreFromRows } from "../sqlite-read-DRTEva-l.mjs"; import { i as stripPluginModelCatalogCredentials } from "../plugin-model-catalog-repair-gbFum2dR.mjs"; import { i as replacePluginModelCatalogEntriesInDatabase, n as PLUGIN_MODEL_CATALOG_MIGRATION_SCOPE, t as PLUGIN_MODEL_CATALOG_CACHE_SCOPE } from "../plugin-model-catalog.kernel-C70al3RR.mjs"; import { n as pluginModelCatalogCredentialValues } from "../plugin-model-catalog-auth-gtXK_nL9.mjs"; //#region src/agents/plugin-model-catalog.worker.ts /** Reread authorization inside the admitted publication, including outside discovery snapshots. */ function findRemovedPluginModelCatalogCredentials(snapshot, database, databasePath, env) { const captured = /* @__PURE__ */ new Set(); const authorized = /* @__PURE__ */ new Set(); for (const owner of snapshot) { const read = (db) => loadPersistedAuthProfileStoreFromRows(readAuthProfileRows(db, owner.databasePath, owner.kind), owner.databasePath); const current = owner.kind === "shared-state" ? withExistingOpenClawStateDatabaseCurrentReadOnly(({ db }) => read(db), { path: owner.databasePath, env }) : owner.databasePath === databasePath ? read(database) : loadPersistedAuthProfileStoreAtDatabasePath(owner.databasePath, owner.kind); for (const [id, values] of Object.entries(owner.credentials)) { for (const value of values) captured.add(value); for (const value of pluginModelCatalogCredentialValues(current?.profiles[id])) authorized.add(value); } } for (const value of authorized) captured.delete(value); return captured; } /** The canonical executor lends the connection and owns transaction admission. */ function bindSqliteWorkerBackend(_input, context) { return { execute(command) { return runSqliteWorkerTransactionSync(context, () => { if (command.type === "catalog.replace") { const { planned, authSnapshot, env } = command.input; const removedCredentials = authSnapshot && findRemovedPluginModelCatalogCredentials(authSnapshot, context.database, context.databasePath, env); return replacePluginModelCatalogEntriesInDatabase({ database: context.database, planned: new Map(planned), removedCredentials, updatedAt: Date.now() }); } const credentials = new Set(command.input.credentials); const kysely = getNodeSqliteKysely(context.database); const rows = executeSqliteQuerySync(context.database, kysely.selectFrom("cache_entries").select([ "scope", "key", "value_json" ]).where("scope", "in", [PLUGIN_MODEL_CATALOG_CACHE_SCOPE, PLUGIN_MODEL_CATALOG_MIGRATION_SCOPE])).rows; for (const row of rows) { if (row.value_json === null) continue; const contents = stripPluginModelCatalogCredentials(row.value_json, credentials); if (contents === row.value_json) continue; if (contents === null) executeSqliteQuerySync(context.database, kysely.deleteFrom("cache_entries").where("scope", "=", row.scope).where("key", "=", row.key)); else executeSqliteQuerySync(context.database, kysely.updateTable("cache_entries").set({ value_json: contents, updated_at: Date.now() }).where("scope", "=", row.scope).where("key", "=", row.key)); } }); }, assertSettled() { assertTransactionUsable(context.database); if (!context.database.isOpen || context.database.isTransaction) throw new Error("Catalog cleanup left an unsettled agent transaction"); }, close() {} }; } //#endregion export { bindSqliteWorkerBackend };