UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

50 lines (49 loc) 2.69 kB
import { a as getNodeSqliteKysely, i as executeSqliteQueryTakeFirstSync, r as executeSqliteQuerySync } from "./kysely-sync-COmh4HWh.js"; //#region src/state/openclaw-state-lease-heartbeat-shared.ts const leaseHeartbeatState = { status: 0, request: 1, ack: 2, starting: 0n, ready: 1n, closed: 2n, lost: 3n }; //#endregion //#region src/state/openclaw-state-lease-store.ts /** The caller owns the write transaction; only absent or expired leases can be acquired. */ function acquireOpenClawStateLeaseInTransaction(db, identity, leaseMs) { const now = Date.now(); const kysely = getNodeSqliteKysely(db); executeSqliteQuerySync(db, kysely.deleteFrom("state_leases").where("scope", "=", identity.scope).where("lease_key", "=", identity.key).where("expires_at", "<=", now)); const expiresAt = now + leaseMs; return executeSqliteQuerySync(db, kysely.insertInto("state_leases").values({ scope: identity.scope, lease_key: identity.key, owner: identity.owner, expires_at: expiresAt, heartbeat_at: now, payload_json: null, created_at: now, updated_at: now }).onConflict((conflict) => conflict.columns(["scope", "lease_key"]).doNothing())).numAffectedRows === 1n ? expiresAt : void 0; } function readOpenClawStateLeaseExpiry(db, identity) { return executeSqliteQueryTakeFirstSync(db, getNodeSqliteKysely(db).selectFrom("state_leases").select("expires_at").where("scope", "=", identity.scope).where("lease_key", "=", identity.key).where("owner", "=", identity.owner).where("expires_at", ">", Date.now()).$narrowType())?.expires_at; } /** The caller owns the write transaction; expired or replaced owners cannot renew. */ function renewOpenClawStateLeaseInTransaction(db, identity, leaseMs) { const now = Date.now(); const expiresAt = now + leaseMs; return executeSqliteQuerySync(db, getNodeSqliteKysely(db).updateTable("state_leases").set({ expires_at: expiresAt, heartbeat_at: now, updated_at: now }).where("scope", "=", identity.scope).where("lease_key", "=", identity.key).where("owner", "=", identity.owner).where("expires_at", ">", now)).numAffectedRows === 1n ? expiresAt : void 0; } /** The caller owns the write transaction; a replaced owner cannot release its successor. */ function releaseOpenClawStateLeaseInTransaction(db, identity) { executeSqliteQuerySync(db, getNodeSqliteKysely(db).deleteFrom("state_leases").where("scope", "=", identity.scope).where("lease_key", "=", identity.key).where("owner", "=", identity.owner)); } //#endregion export { leaseHeartbeatState as a, renewOpenClawStateLeaseInTransaction as i, readOpenClawStateLeaseExpiry as n, releaseOpenClawStateLeaseInTransaction as r, acquireOpenClawStateLeaseInTransaction as t };