UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

95 lines (94 loc) • 4.72 kB
import { i as executeSqliteQuerySync, o as getNodeSqliteKysely } from "./kysely-sync-DUWzQvCU.mjs"; import { t as deferSqlitePostCommitPublication } from "./sqlite-post-commit-DENvzR6w.mjs"; import { s as requestSqliteWorkerOperationAdmission } 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 { d as ensureMcpOAuthPendingSchema } from "./openclaw-state-db-schema-additive-S7iMdRlC.mjs"; import { n as assertOpenClawStateLeaseWorkerOwnedInTransaction } from "./openclaw-state-lease-worker-Ddwq3QcA.mjs"; import { i as replaceMcpOAuthStoreInDatabase, r as readMcpOAuthStoreInDatabase, t as MCP_OAUTH_PENDING_STATE_TTL_MS } from "./mcp-oauth-store.kernel-8d0l34w4.mjs"; import { n as applyMcpOAuthMutation } from "./mcp-oauth-store.mutations-DmXh16Gm.mjs"; //#region src/agents/mcp-oauth-store.worker.ts function assertStoreLease(database, input, stage = "transaction") { if (input.identity.scope !== "core:mcp-oauth" || input.identity.key !== input.storeKey) throw new Error("MCP OAuth mutation requires its exact store lease"); assertOpenClawStateLeaseWorkerOwnedInTransaction(database, input.identity, "write", stage); } const pendingSchemaDatabases = /* @__PURE__ */ new WeakSet(); function ensurePendingSchema(database) { if (pendingSchemaDatabases.has(database)) return; ensureMcpOAuthPendingSchema(database); deferSqlitePostCommitPublication(database, () => pendingSchemaDatabases.add(database)); } function ownedWrite(operation, pending = false) { return (input, { open }) => { const database = open(); return runOpenClawStateWriteTransaction(({ db }) => { const assertOwned = () => assertStoreLease(db, input); if (pending) { assertOwned(); ensurePendingSchema(db); } const result = operation(db, input, assertOwned); assertStoreLease(db, input, "commit"); return result; }, { database, path: database.path, env: getSqliteWorkerStateContext().environment }); }; } function deletePending(database, storeKey, assertOwned) { assertOwned(); executeSqliteQuerySync(database, getNodeSqliteKysely(database).deleteFrom("mcp_oauth_pending_authorizations").where("store_key", "=", storeKey)); } const mcpOAuthOperations = { "mcpOAuth.read": (input, { open }) => readMcpOAuthStoreInDatabase(open().db, input), "mcpOAuth.mutate": ownedWrite((database, input, assertOwned) => { const result = applyMcpOAuthMutation(readMcpOAuthStoreInDatabase(database, input.storeKey), input.mutation); replaceMcpOAuthStoreInDatabase(database, input.storeKey, result.store, assertOwned); return result; }), "mcpOAuth.consumePending": ownedWrite((database, input, assertOwned) => { assertOwned(); return executeSqliteQuerySync(database, getNodeSqliteKysely(database).deleteFrom("mcp_oauth_pending_authorizations").where("store_key", "=", input.storeKey).where("state", "=", input.state).where("create_time", ">", Date.now() - MCP_OAUTH_PENDING_STATE_TTL_MS)).numAffectedRows === 1n; }, true), "mcpOAuth.writePending": ownedWrite((database, input, assertOwned) => { const kysely = getNodeSqliteKysely(database); const now = Date.now(); assertOwned(); executeSqliteQuerySync(database, kysely.deleteFrom("mcp_oauth_pending_authorizations").where("create_time", "<=", now - MCP_OAUTH_PENDING_STATE_TTL_MS)); deletePending(database, input.storeKey, assertOwned); assertOwned(); executeSqliteQuerySync(database, kysely.insertInto("mcp_oauth_pending_authorizations").values({ state: input.state, store_key: input.storeKey, create_time: now })); }, true), "mcpOAuth.deletePending": ownedWrite((database, input, assertOwned) => deletePending(database, input.storeKey, assertOwned), true), "mcpOAuth.clear": ownedWrite((database, input, assertOwned) => { replaceMcpOAuthStoreInDatabase(database, input.storeKey, { credentialState: "cleared" }, assertOwned); deletePending(database, input.storeKey, assertOwned); }, true), "mcpOAuth.clearPendingPrefix": (input, { open }) => { const database = open(); runOpenClawStateWriteTransaction(({ db }) => { requestSqliteWorkerOperationAdmission({ stage: "transaction", facts: void 0 }); ensurePendingSchema(db); executeSqliteQuerySync(db, getNodeSqliteKysely(db).deleteFrom("mcp_oauth_pending_authorizations").where("store_key", "like", `${input}%`)); requestSqliteWorkerOperationAdmission({ stage: "commit", facts: void 0 }); }, { database, path: database.path, env: getSqliteWorkerStateContext().environment }); } }; //#endregion export { mcpOAuthOperations };