@absolutejs/agent 0.23.5 → 0.23.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/commerce.js CHANGED
@@ -3,7 +3,7 @@
3
3
  import {
4
4
  effectAdapterExecutionInputDigest
5
5
  } from "@absolutejs/execution";
6
- import { and, desc, eq } from "drizzle-orm";
6
+ import { and, desc, eq, sql } from "drizzle-orm";
7
7
  import {
8
8
  bigint,
9
9
  customType,
@@ -50,6 +50,7 @@ var portableJsonb = customType({
50
50
  fromDriver: (value) => typeof value === "string" ? JSON.parse(value) : value,
51
51
  toDriver: (value) => JSON.stringify(value)
52
52
  });
53
+ var encodedJsonb = (value) => sql`${JSON.stringify(value)}::text::jsonb`;
53
54
  var agentPurchaseIntentDrizzleSchema = (namespace = "agent_commerce") => {
54
55
  const schema = pgSchema(namespaceOf(namespace));
55
56
  const purchaseIntents = schema.table("purchase_intents", {
@@ -99,7 +100,7 @@ var createDrizzleAgentPurchaseIntentStore = (db, options = {}) => {
99
100
  save: async (intent) => {
100
101
  const rows = await db.insert(purchaseIntents).values({
101
102
  created_at: intent.createdAt,
102
- data: intent,
103
+ data: encodedJsonb(intent),
103
104
  idempotency_key: intent.input.idempotencyKey,
104
105
  input_digest: intent.inputDigest,
105
106
  owner_id: intent.input.ownerId,
@@ -109,7 +110,7 @@ var createDrizzleAgentPurchaseIntentStore = (db, options = {}) => {
109
110
  updated_at: intent.updatedAt
110
111
  }).onConflictDoUpdate({
111
112
  set: {
112
- data: intent,
113
+ data: encodedJsonb(intent),
113
114
  status: intent.status,
114
115
  updated_at: intent.updatedAt
115
116
  },
@@ -329,5 +330,5 @@ export {
329
330
  AgentPurchaseIntentError
330
331
  };
331
332
 
332
- //# debugId=22DD8624236AA90B64756E2164756E21
333
+ //# debugId=626EC856E5C69EBB64756E2164756E21
333
334
  //# sourceMappingURL=commerce.js.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/commerce.ts"],
4
4
  "sourcesContent": [
5
- "import {\n effectAdapterExecutionInputDigest,\n type EffectAdapterCredentialInstallation,\n type EffectAdapterExecutionEnvelope,\n type EffectAdapterInstallationRegistry,\n type EffectRecord,\n type EffectStore,\n type ExecutionSqlClient,\n} from \"@absolutejs/execution\";\nimport type {\n AgentSpendRequest,\n SpendRequestResult,\n SpendMandate,\n} from \"@absolutejs/wallet\";\nimport { and, desc, eq, type SQL } from \"drizzle-orm\";\nimport {\n bigint,\n customType,\n index,\n pgSchema,\n text,\n uniqueIndex,\n type PgAsyncDatabase,\n} from \"drizzle-orm/pg-core\";\n\nexport type AgentPurchaseIntentStatus =\n | \"drafted\"\n | \"pending_approval\"\n | \"mandate_ready\"\n | \"installation_ready\"\n | \"enqueued\"\n | \"cancelled\";\n\nexport type AgentPurchaseIntentInput<Payload = unknown> = {\n actionId: string;\n adapterId: string;\n agentId: string;\n allowanceId: string;\n amountMinor: number;\n category?: string;\n credentials?: ReadonlyArray<EffectAdapterCredentialInstallation>;\n currency: string;\n destination?: string;\n effect: string;\n expiresAt: string;\n handler: string;\n idempotencyKey: string;\n installationId: string;\n merchantId: string;\n ownerId: string;\n payload: Payload;\n purchaseId: string;\n refundable?: boolean;\n tenantId: string;\n};\n\nexport type AgentPurchaseIntent<Payload = unknown> = {\n createdAt: number;\n effectId: string;\n envelope: EffectAdapterExecutionEnvelope<Payload>;\n input: AgentPurchaseIntentInput<Payload>;\n inputDigest: string;\n mandate?: Omit<SpendMandate, \"signature\">;\n mandateId: string;\n status: AgentPurchaseIntentStatus;\n updatedAt: number;\n};\n\nexport type AgentPurchaseIntentStore = {\n get: (\n tenantId: string,\n purchaseId: string,\n ) => Promise<AgentPurchaseIntent | undefined>;\n getByIdempotencyKey: (\n tenantId: string,\n idempotencyKey: string,\n ) => Promise<AgentPurchaseIntent | undefined>;\n list: (input: {\n limit: number;\n ownerId?: string;\n status?: AgentPurchaseIntentStatus;\n tenantId?: string;\n }) => Promise<AgentPurchaseIntent[]>;\n save: (intent: AgentPurchaseIntent) => Promise<void>;\n};\n\nexport class AgentPurchaseIntentError extends Error {}\n\nconst keyOf = (tenantId: string, purchaseId: string) =>\n `${tenantId}\\u0000${purchaseId}`;\n\nexport const createMemoryAgentPurchaseIntentStore =\n (): AgentPurchaseIntentStore => {\n const records = new Map<string, AgentPurchaseIntent>();\n return {\n get: async (tenantId, purchaseId) => {\n const value = records.get(keyOf(tenantId, purchaseId));\n return value ? structuredClone(value) : undefined;\n },\n getByIdempotencyKey: async (tenantId, idempotencyKey) => {\n const value = [...records.values()].find(\n (intent) =>\n intent.input.tenantId === tenantId &&\n intent.input.idempotencyKey === idempotencyKey,\n );\n return value ? structuredClone(value) : undefined;\n },\n list: async (input) =>\n [...records.values()]\n .filter(\n ({ input: intent, status }) =>\n (!input.tenantId || intent.tenantId === input.tenantId) &&\n (!input.ownerId || intent.ownerId === input.ownerId) &&\n (!input.status || status === input.status),\n )\n .sort((left, right) => right.createdAt - left.createdAt)\n .slice(0, input.limit)\n .map((value) => structuredClone(value)),\n save: async (intent) => {\n const key = keyOf(intent.input.tenantId, intent.input.purchaseId);\n const existing = records.get(key);\n if (existing && existing.inputDigest !== intent.inputDigest)\n throw new AgentPurchaseIntentError(\n \"Purchase identity belongs to another immutable request\",\n );\n const idempotent = [...records.values()].find(\n ({ input }) =>\n input.tenantId === intent.input.tenantId &&\n input.idempotencyKey === intent.input.idempotencyKey,\n );\n if (\n idempotent &&\n idempotent.input.purchaseId !== intent.input.purchaseId\n )\n throw new AgentPurchaseIntentError(\n \"Purchase idempotency key belongs to another request\",\n );\n records.set(key, structuredClone(intent));\n },\n };\n };\n\nconst namespaceOf = (namespace: string) => {\n if (!/^[a-z_][a-z0-9_]*$/.test(namespace))\n throw new AgentPurchaseIntentError(\n \"Purchase intent namespace must be a simple identifier\",\n );\n return namespace;\n};\n\ntype AnyPgDatabase = PgAsyncDatabase<any, any>;\nconst portableJsonb = customType<{ data: unknown; driverData: unknown }>({\n dataType: () => \"jsonb\",\n fromDriver: (value) =>\n typeof value === \"string\" ? JSON.parse(value) : value,\n toDriver: (value) => JSON.stringify(value),\n});\n\nexport const agentPurchaseIntentDrizzleSchema = (\n namespace = \"agent_commerce\",\n) => {\n const schema = pgSchema(namespaceOf(namespace));\n const purchaseIntents = schema.table(\n \"purchase_intents\",\n {\n created_at: bigint({ mode: \"number\" }).notNull(),\n data: portableJsonb().$type<AgentPurchaseIntent>().notNull(),\n idempotency_key: text().notNull(),\n input_digest: text().notNull(),\n owner_id: text().notNull(),\n purchase_id: text().primaryKey(),\n status: text().$type<AgentPurchaseIntentStatus>().notNull(),\n tenant_id: text().notNull(),\n updated_at: bigint({ mode: \"number\" }).notNull(),\n },\n (table) => [\n uniqueIndex(\"purchase_intents_tenant_idempotency_idx\").on(\n table.tenant_id,\n table.idempotency_key,\n ),\n uniqueIndex(\"purchase_intents_tenant_purchase_idx\").on(\n table.tenant_id,\n table.purchase_id,\n ),\n index(\"purchase_intents_inventory_idx\").on(\n table.tenant_id,\n table.created_at.desc(),\n ),\n index(\"purchase_intents_owner_idx\").on(\n table.owner_id,\n table.created_at.desc(),\n ),\n ],\n );\n\n return { purchaseIntents };\n};\n\nexport const createDrizzleAgentPurchaseIntentStore = <DB extends AnyPgDatabase>(\n db: DB,\n options: { namespace?: string } = {},\n): AgentPurchaseIntentStore => {\n const { purchaseIntents } = agentPurchaseIntentDrizzleSchema(\n options.namespace,\n );\n const first = async (conditions: SQL[]) => {\n const [row] = await db\n .select({ data: purchaseIntents.data })\n .from(purchaseIntents)\n .where(and(...conditions))\n .limit(1);\n\n return row?.data;\n };\n\n return {\n get: (tenantId, purchaseId) =>\n first([\n eq(purchaseIntents.tenant_id, tenantId),\n eq(purchaseIntents.purchase_id, purchaseId),\n ]),\n getByIdempotencyKey: (tenantId, idempotencyKey) =>\n first([\n eq(purchaseIntents.tenant_id, tenantId),\n eq(purchaseIntents.idempotency_key, idempotencyKey),\n ]),\n list: async (input) => {\n const conditions: SQL[] = [];\n if (input.tenantId)\n conditions.push(eq(purchaseIntents.tenant_id, input.tenantId));\n if (input.ownerId)\n conditions.push(eq(purchaseIntents.owner_id, input.ownerId));\n if (input.status)\n conditions.push(eq(purchaseIntents.status, input.status));\n\n const rows = await db\n .select({ data: purchaseIntents.data })\n .from(purchaseIntents)\n .where(and(...conditions))\n .orderBy(desc(purchaseIntents.created_at))\n .limit(input.limit);\n\n return rows.map(({ data }) => data);\n },\n save: async (intent) => {\n const rows = await db\n .insert(purchaseIntents)\n .values({\n created_at: intent.createdAt,\n data: intent,\n idempotency_key: intent.input.idempotencyKey,\n input_digest: intent.inputDigest,\n owner_id: intent.input.ownerId,\n purchase_id: intent.input.purchaseId,\n status: intent.status,\n tenant_id: intent.input.tenantId,\n updated_at: intent.updatedAt,\n })\n .onConflictDoUpdate({\n set: {\n data: intent,\n status: intent.status,\n updated_at: intent.updatedAt,\n },\n setWhere: and(\n eq(purchaseIntents.tenant_id, intent.input.tenantId),\n eq(purchaseIntents.input_digest, intent.inputDigest),\n eq(purchaseIntents.idempotency_key, intent.input.idempotencyKey),\n ),\n target: purchaseIntents.purchase_id,\n })\n .returning({ id: purchaseIntents.purchase_id });\n if (rows.length !== 1)\n throw new AgentPurchaseIntentError(\n \"Purchase identity belongs to another immutable request\",\n );\n },\n };\n};\n\nexport const agentPurchaseIntentsPostgresSchemaSql = (\n namespace = \"agent_commerce\",\n) => {\n const ns = namespaceOf(namespace);\n return `CREATE SCHEMA IF NOT EXISTS ${ns};\nCREATE TABLE IF NOT EXISTS ${ns}.purchase_intents (\n purchase_id text PRIMARY KEY,\n tenant_id text NOT NULL,\n owner_id text NOT NULL,\n idempotency_key text NOT NULL,\n status text NOT NULL,\n input_digest text NOT NULL,\n data jsonb NOT NULL,\n created_at bigint NOT NULL,\n updated_at bigint NOT NULL,\n UNIQUE (tenant_id, idempotency_key),\n UNIQUE (tenant_id, purchase_id)\n);\nCREATE INDEX IF NOT EXISTS purchase_intents_inventory_idx ON ${ns}.purchase_intents (tenant_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS purchase_intents_owner_idx ON ${ns}.purchase_intents (owner_id, created_at DESC);`;\n};\n\ntype AgentPurchaseIntentRow = { data: AgentPurchaseIntent | string };\nconst parseRow = (row: AgentPurchaseIntentRow | undefined) => {\n if (!row) return undefined;\n return (\n typeof row.data === \"string\" ? JSON.parse(row.data) : row.data\n ) as AgentPurchaseIntent;\n};\n\nexport const createPostgresAgentPurchaseIntentStore = (options: {\n client: ExecutionSqlClient;\n namespace?: string;\n}): AgentPurchaseIntentStore => {\n const ns = namespaceOf(options.namespace ?? \"agent_commerce\");\n return {\n get: async (tenantId, purchaseId) =>\n parseRow(\n (\n await options.client.query<AgentPurchaseIntentRow>(\n `SELECT data FROM ${ns}.purchase_intents WHERE tenant_id = $1 AND purchase_id = $2`,\n [tenantId, purchaseId],\n )\n ).rows[0],\n ),\n getByIdempotencyKey: async (tenantId, idempotencyKey) =>\n parseRow(\n (\n await options.client.query<AgentPurchaseIntentRow>(\n `SELECT data FROM ${ns}.purchase_intents WHERE tenant_id = $1 AND idempotency_key = $2`,\n [tenantId, idempotencyKey],\n )\n ).rows[0],\n ),\n list: async (input) => {\n const clauses: string[] = [];\n const values: unknown[] = [];\n if (input.tenantId) {\n values.push(input.tenantId);\n clauses.push(`tenant_id = $${values.length}`);\n }\n if (input.ownerId) {\n values.push(input.ownerId);\n clauses.push(`owner_id = $${values.length}`);\n }\n if (input.status) {\n values.push(input.status);\n clauses.push(`status = $${values.length}`);\n }\n values.push(input.limit);\n const where = clauses.length > 0 ? ` WHERE ${clauses.join(\" AND \")}` : \"\";\n const result = await options.client.query<AgentPurchaseIntentRow>(\n `SELECT data FROM ${ns}.purchase_intents${where} ORDER BY created_at DESC LIMIT $${values.length}`,\n values,\n );\n return result.rows.map((row) => parseRow(row)!);\n },\n save: async (intent) => {\n const result = await options.client.query<{ purchase_id: string }>(\n `INSERT INTO ${ns}.purchase_intents\n (purchase_id, tenant_id, owner_id, idempotency_key, status, input_digest, data, created_at, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb, $8, $9)\n ON CONFLICT (purchase_id) DO UPDATE SET\n status = excluded.status,\n data = excluded.data,\n updated_at = excluded.updated_at\n WHERE ${ns}.purchase_intents.tenant_id = excluded.tenant_id\n AND ${ns}.purchase_intents.input_digest = excluded.input_digest\n AND ${ns}.purchase_intents.idempotency_key = excluded.idempotency_key\n RETURNING purchase_id`,\n [\n intent.input.purchaseId,\n intent.input.tenantId,\n intent.input.ownerId,\n intent.input.idempotencyKey,\n intent.status,\n intent.inputDigest,\n JSON.stringify(intent),\n intent.createdAt,\n intent.updatedAt,\n ],\n );\n if (result.rows.length !== 1)\n throw new AgentPurchaseIntentError(\n \"Purchase identity belongs to another immutable request\",\n );\n },\n };\n};\n\ntype PurchaseWallet = {\n cancelSpend: (mandateId: string) => Promise<unknown>;\n requestSpend: (\n request: AgentSpendRequest,\n options?: { mandateId?: string },\n ) => Promise<SpendRequestResult>;\n};\n\nexport const createAgentPurchaseOrchestrator = (options: {\n effects: Pick<EffectStore, \"enqueue\" | \"getByIdempotencyKey\">;\n installations: Pick<\n EffectAdapterInstallationRegistry,\n \"disable\" | \"enable\" | \"put\"\n >;\n now?: () => number;\n store: AgentPurchaseIntentStore;\n wallet: PurchaseWallet;\n}) => {\n const now = options.now ?? Date.now;\n\n const saveStatus = async (\n intent: AgentPurchaseIntent,\n status: AgentPurchaseIntentStatus,\n mandate?: SpendMandate,\n ) => {\n let mandateSummary: Omit<SpendMandate, \"signature\"> | undefined;\n if (mandate) {\n const { signature, ...summary } = mandate;\n void signature;\n mandateSummary = summary;\n }\n const next: AgentPurchaseIntent = {\n ...intent,\n ...(mandateSummary ? { mandate: mandateSummary } : {}),\n status,\n updatedAt: now(),\n };\n await options.store.save(next);\n return next;\n };\n\n const submit = async <Payload>(\n input: AgentPurchaseIntentInput<Payload>,\n ): Promise<AgentPurchaseIntent<Payload>> => {\n if (!input.purchaseId.trim() || !input.idempotencyKey.trim())\n throw new AgentPurchaseIntentError(\n \"Purchase and idempotency identities are required\",\n );\n if (!Number.isSafeInteger(input.amountMinor) || input.amountMinor <= 0)\n throw new AgentPurchaseIntentError(\n \"Purchase amount must be positive integer minor units\",\n );\n const mandateId = `mandate:purchase:${input.purchaseId}`;\n const effectId = `purchase:${input.purchaseId}`;\n const envelope: EffectAdapterExecutionEnvelope<Payload> = {\n currency: input.currency,\n ...(input.destination ? { destination: input.destination } : {}),\n effect: input.effect,\n installationId: input.installationId,\n mandateId,\n payload: input.payload,\n spendMinor: input.amountMinor,\n };\n const inputDigest = await effectAdapterExecutionInputDigest(envelope);\n const existing = await options.store.get(input.tenantId, input.purchaseId);\n const idempotent = await options.store.getByIdempotencyKey(\n input.tenantId,\n input.idempotencyKey,\n );\n const prior = existing ?? idempotent;\n if (prior) {\n if (\n prior.input.purchaseId !== input.purchaseId ||\n prior.inputDigest !== inputDigest\n )\n throw new AgentPurchaseIntentError(\n \"Purchase identity belongs to another immutable request\",\n );\n if (prior.status === \"enqueued\" || prior.status === \"cancelled\")\n return prior as AgentPurchaseIntent<Payload>;\n }\n let intent = (prior ?? {\n createdAt: now(),\n effectId,\n envelope,\n input,\n inputDigest,\n mandateId,\n status: \"drafted\" as const,\n updatedAt: now(),\n }) as AgentPurchaseIntent<Payload>;\n await options.store.save(intent);\n\n const spendRequest: AgentSpendRequest = {\n action: input.effect,\n agentId: input.agentId,\n allowanceId: input.allowanceId,\n amountCents: input.amountMinor,\n cartHash: inputDigest,\n ...(input.category ? { category: input.category } : {}),\n currency: input.currency,\n expiresAt: input.expiresAt,\n idempotencyKey: `purchase:${input.idempotencyKey}`,\n merchantId: input.merchantId,\n ...(input.refundable === undefined\n ? {}\n : { refundable: input.refundable }),\n };\n const requested = await options.wallet.requestSpend(spendRequest, {\n mandateId,\n });\n if (requested.mandate.status === \"pending_approval\")\n return (await saveStatus(\n intent,\n \"pending_approval\",\n requested.mandate,\n )) as AgentPurchaseIntent<Payload>;\n if (requested.mandate.status !== \"active\")\n throw new AgentPurchaseIntentError(\n `Purchase mandate is ${requested.mandate.status}`,\n );\n intent = (await saveStatus(\n intent,\n \"mandate_ready\",\n requested.mandate,\n )) as AgentPurchaseIntent<Payload>;\n\n await options.installations.put({\n adapterId: input.adapterId,\n installationId: input.installationId,\n policy: {\n credentials: input.credentials ?? [],\n destinations: input.destination ? [input.destination] : [],\n effects: [input.effect],\n spend: {\n currency: input.currency,\n mandateId,\n maxMinorPerEffect: input.amountMinor,\n },\n },\n tenantId: input.tenantId,\n });\n await options.installations.enable(input.tenantId, input.installationId);\n intent = (await saveStatus(\n intent,\n \"installation_ready\",\n )) as AgentPurchaseIntent<Payload>;\n\n const timestamp = now();\n const effect: EffectRecord = {\n actionId: input.actionId,\n attempts: 0,\n availableAt: timestamp,\n createdAt: timestamp,\n effectId,\n handler: input.handler,\n idempotencyKey: `purchase:${input.idempotencyKey}`,\n input: envelope,\n inputDigest,\n status: \"pending\",\n tenantId: input.tenantId,\n updatedAt: timestamp,\n };\n if (!(await options.effects.enqueue(effect))) {\n const duplicate = await options.effects.getByIdempotencyKey(\n input.tenantId,\n effect.idempotencyKey,\n );\n if (\n !duplicate ||\n duplicate.effectId !== effect.effectId ||\n duplicate.inputDigest !== effect.inputDigest\n ) {\n await options.installations.disable(\n input.tenantId,\n input.installationId,\n );\n await options.wallet.cancelSpend(mandateId);\n throw new AgentPurchaseIntentError(\n \"Purchase effect idempotency key belongs to another request\",\n );\n }\n }\n return (await saveStatus(\n intent,\n \"enqueued\",\n )) as AgentPurchaseIntent<Payload>;\n };\n\n return {\n list: options.store.list,\n submit,\n };\n};\n"
5
+ "import {\n effectAdapterExecutionInputDigest,\n type EffectAdapterCredentialInstallation,\n type EffectAdapterExecutionEnvelope,\n type EffectAdapterInstallationRegistry,\n type EffectRecord,\n type EffectStore,\n type ExecutionSqlClient,\n} from \"@absolutejs/execution\";\nimport type {\n AgentSpendRequest,\n SpendRequestResult,\n SpendMandate,\n} from \"@absolutejs/wallet\";\nimport { and, desc, eq, sql, type SQL } from \"drizzle-orm\";\nimport {\n bigint,\n customType,\n index,\n pgSchema,\n text,\n uniqueIndex,\n type PgAsyncDatabase,\n} from \"drizzle-orm/pg-core\";\n\nexport type AgentPurchaseIntentStatus =\n | \"drafted\"\n | \"pending_approval\"\n | \"mandate_ready\"\n | \"installation_ready\"\n | \"enqueued\"\n | \"cancelled\";\n\nexport type AgentPurchaseIntentInput<Payload = unknown> = {\n actionId: string;\n adapterId: string;\n agentId: string;\n allowanceId: string;\n amountMinor: number;\n category?: string;\n credentials?: ReadonlyArray<EffectAdapterCredentialInstallation>;\n currency: string;\n destination?: string;\n effect: string;\n expiresAt: string;\n handler: string;\n idempotencyKey: string;\n installationId: string;\n merchantId: string;\n ownerId: string;\n payload: Payload;\n purchaseId: string;\n refundable?: boolean;\n tenantId: string;\n};\n\nexport type AgentPurchaseIntent<Payload = unknown> = {\n createdAt: number;\n effectId: string;\n envelope: EffectAdapterExecutionEnvelope<Payload>;\n input: AgentPurchaseIntentInput<Payload>;\n inputDigest: string;\n mandate?: Omit<SpendMandate, \"signature\">;\n mandateId: string;\n status: AgentPurchaseIntentStatus;\n updatedAt: number;\n};\n\nexport type AgentPurchaseIntentStore = {\n get: (\n tenantId: string,\n purchaseId: string,\n ) => Promise<AgentPurchaseIntent | undefined>;\n getByIdempotencyKey: (\n tenantId: string,\n idempotencyKey: string,\n ) => Promise<AgentPurchaseIntent | undefined>;\n list: (input: {\n limit: number;\n ownerId?: string;\n status?: AgentPurchaseIntentStatus;\n tenantId?: string;\n }) => Promise<AgentPurchaseIntent[]>;\n save: (intent: AgentPurchaseIntent) => Promise<void>;\n};\n\nexport class AgentPurchaseIntentError extends Error {}\n\nconst keyOf = (tenantId: string, purchaseId: string) =>\n `${tenantId}\\u0000${purchaseId}`;\n\nexport const createMemoryAgentPurchaseIntentStore =\n (): AgentPurchaseIntentStore => {\n const records = new Map<string, AgentPurchaseIntent>();\n return {\n get: async (tenantId, purchaseId) => {\n const value = records.get(keyOf(tenantId, purchaseId));\n return value ? structuredClone(value) : undefined;\n },\n getByIdempotencyKey: async (tenantId, idempotencyKey) => {\n const value = [...records.values()].find(\n (intent) =>\n intent.input.tenantId === tenantId &&\n intent.input.idempotencyKey === idempotencyKey,\n );\n return value ? structuredClone(value) : undefined;\n },\n list: async (input) =>\n [...records.values()]\n .filter(\n ({ input: intent, status }) =>\n (!input.tenantId || intent.tenantId === input.tenantId) &&\n (!input.ownerId || intent.ownerId === input.ownerId) &&\n (!input.status || status === input.status),\n )\n .sort((left, right) => right.createdAt - left.createdAt)\n .slice(0, input.limit)\n .map((value) => structuredClone(value)),\n save: async (intent) => {\n const key = keyOf(intent.input.tenantId, intent.input.purchaseId);\n const existing = records.get(key);\n if (existing && existing.inputDigest !== intent.inputDigest)\n throw new AgentPurchaseIntentError(\n \"Purchase identity belongs to another immutable request\",\n );\n const idempotent = [...records.values()].find(\n ({ input }) =>\n input.tenantId === intent.input.tenantId &&\n input.idempotencyKey === intent.input.idempotencyKey,\n );\n if (\n idempotent &&\n idempotent.input.purchaseId !== intent.input.purchaseId\n )\n throw new AgentPurchaseIntentError(\n \"Purchase idempotency key belongs to another request\",\n );\n records.set(key, structuredClone(intent));\n },\n };\n };\n\nconst namespaceOf = (namespace: string) => {\n if (!/^[a-z_][a-z0-9_]*$/.test(namespace))\n throw new AgentPurchaseIntentError(\n \"Purchase intent namespace must be a simple identifier\",\n );\n return namespace;\n};\n\ntype AnyPgDatabase = PgAsyncDatabase<any, any>;\nconst portableJsonb = customType<{ data: unknown; driverData: unknown }>({\n dataType: () => \"jsonb\",\n fromDriver: (value) =>\n typeof value === \"string\" ? JSON.parse(value) : value,\n toDriver: (value) => JSON.stringify(value),\n});\nconst encodedJsonb = <Value>(value: Value) =>\n sql<Value>`${JSON.stringify(value)}::text::jsonb`;\n\nexport const agentPurchaseIntentDrizzleSchema = (\n namespace = \"agent_commerce\",\n) => {\n const schema = pgSchema(namespaceOf(namespace));\n const purchaseIntents = schema.table(\n \"purchase_intents\",\n {\n created_at: bigint({ mode: \"number\" }).notNull(),\n data: portableJsonb().$type<AgentPurchaseIntent>().notNull(),\n idempotency_key: text().notNull(),\n input_digest: text().notNull(),\n owner_id: text().notNull(),\n purchase_id: text().primaryKey(),\n status: text().$type<AgentPurchaseIntentStatus>().notNull(),\n tenant_id: text().notNull(),\n updated_at: bigint({ mode: \"number\" }).notNull(),\n },\n (table) => [\n uniqueIndex(\"purchase_intents_tenant_idempotency_idx\").on(\n table.tenant_id,\n table.idempotency_key,\n ),\n uniqueIndex(\"purchase_intents_tenant_purchase_idx\").on(\n table.tenant_id,\n table.purchase_id,\n ),\n index(\"purchase_intents_inventory_idx\").on(\n table.tenant_id,\n table.created_at.desc(),\n ),\n index(\"purchase_intents_owner_idx\").on(\n table.owner_id,\n table.created_at.desc(),\n ),\n ],\n );\n\n return { purchaseIntents };\n};\n\nexport const createDrizzleAgentPurchaseIntentStore = <DB extends AnyPgDatabase>(\n db: DB,\n options: { namespace?: string } = {},\n): AgentPurchaseIntentStore => {\n const { purchaseIntents } = agentPurchaseIntentDrizzleSchema(\n options.namespace,\n );\n const first = async (conditions: SQL[]) => {\n const [row] = await db\n .select({ data: purchaseIntents.data })\n .from(purchaseIntents)\n .where(and(...conditions))\n .limit(1);\n\n return row?.data;\n };\n\n return {\n get: (tenantId, purchaseId) =>\n first([\n eq(purchaseIntents.tenant_id, tenantId),\n eq(purchaseIntents.purchase_id, purchaseId),\n ]),\n getByIdempotencyKey: (tenantId, idempotencyKey) =>\n first([\n eq(purchaseIntents.tenant_id, tenantId),\n eq(purchaseIntents.idempotency_key, idempotencyKey),\n ]),\n list: async (input) => {\n const conditions: SQL[] = [];\n if (input.tenantId)\n conditions.push(eq(purchaseIntents.tenant_id, input.tenantId));\n if (input.ownerId)\n conditions.push(eq(purchaseIntents.owner_id, input.ownerId));\n if (input.status)\n conditions.push(eq(purchaseIntents.status, input.status));\n\n const rows = await db\n .select({ data: purchaseIntents.data })\n .from(purchaseIntents)\n .where(and(...conditions))\n .orderBy(desc(purchaseIntents.created_at))\n .limit(input.limit);\n\n return rows.map(({ data }) => data);\n },\n save: async (intent) => {\n const rows = await db\n .insert(purchaseIntents)\n .values({\n created_at: intent.createdAt,\n data: encodedJsonb(intent),\n idempotency_key: intent.input.idempotencyKey,\n input_digest: intent.inputDigest,\n owner_id: intent.input.ownerId,\n purchase_id: intent.input.purchaseId,\n status: intent.status,\n tenant_id: intent.input.tenantId,\n updated_at: intent.updatedAt,\n })\n .onConflictDoUpdate({\n set: {\n data: encodedJsonb(intent),\n status: intent.status,\n updated_at: intent.updatedAt,\n },\n setWhere: and(\n eq(purchaseIntents.tenant_id, intent.input.tenantId),\n eq(purchaseIntents.input_digest, intent.inputDigest),\n eq(purchaseIntents.idempotency_key, intent.input.idempotencyKey),\n ),\n target: purchaseIntents.purchase_id,\n })\n .returning({ id: purchaseIntents.purchase_id });\n if (rows.length !== 1)\n throw new AgentPurchaseIntentError(\n \"Purchase identity belongs to another immutable request\",\n );\n },\n };\n};\n\nexport const agentPurchaseIntentsPostgresSchemaSql = (\n namespace = \"agent_commerce\",\n) => {\n const ns = namespaceOf(namespace);\n return `CREATE SCHEMA IF NOT EXISTS ${ns};\nCREATE TABLE IF NOT EXISTS ${ns}.purchase_intents (\n purchase_id text PRIMARY KEY,\n tenant_id text NOT NULL,\n owner_id text NOT NULL,\n idempotency_key text NOT NULL,\n status text NOT NULL,\n input_digest text NOT NULL,\n data jsonb NOT NULL,\n created_at bigint NOT NULL,\n updated_at bigint NOT NULL,\n UNIQUE (tenant_id, idempotency_key),\n UNIQUE (tenant_id, purchase_id)\n);\nCREATE INDEX IF NOT EXISTS purchase_intents_inventory_idx ON ${ns}.purchase_intents (tenant_id, created_at DESC);\nCREATE INDEX IF NOT EXISTS purchase_intents_owner_idx ON ${ns}.purchase_intents (owner_id, created_at DESC);`;\n};\n\ntype AgentPurchaseIntentRow = { data: AgentPurchaseIntent | string };\nconst parseRow = (row: AgentPurchaseIntentRow | undefined) => {\n if (!row) return undefined;\n return (\n typeof row.data === \"string\" ? JSON.parse(row.data) : row.data\n ) as AgentPurchaseIntent;\n};\n\nexport const createPostgresAgentPurchaseIntentStore = (options: {\n client: ExecutionSqlClient;\n namespace?: string;\n}): AgentPurchaseIntentStore => {\n const ns = namespaceOf(options.namespace ?? \"agent_commerce\");\n return {\n get: async (tenantId, purchaseId) =>\n parseRow(\n (\n await options.client.query<AgentPurchaseIntentRow>(\n `SELECT data FROM ${ns}.purchase_intents WHERE tenant_id = $1 AND purchase_id = $2`,\n [tenantId, purchaseId],\n )\n ).rows[0],\n ),\n getByIdempotencyKey: async (tenantId, idempotencyKey) =>\n parseRow(\n (\n await options.client.query<AgentPurchaseIntentRow>(\n `SELECT data FROM ${ns}.purchase_intents WHERE tenant_id = $1 AND idempotency_key = $2`,\n [tenantId, idempotencyKey],\n )\n ).rows[0],\n ),\n list: async (input) => {\n const clauses: string[] = [];\n const values: unknown[] = [];\n if (input.tenantId) {\n values.push(input.tenantId);\n clauses.push(`tenant_id = $${values.length}`);\n }\n if (input.ownerId) {\n values.push(input.ownerId);\n clauses.push(`owner_id = $${values.length}`);\n }\n if (input.status) {\n values.push(input.status);\n clauses.push(`status = $${values.length}`);\n }\n values.push(input.limit);\n const where = clauses.length > 0 ? ` WHERE ${clauses.join(\" AND \")}` : \"\";\n const result = await options.client.query<AgentPurchaseIntentRow>(\n `SELECT data FROM ${ns}.purchase_intents${where} ORDER BY created_at DESC LIMIT $${values.length}`,\n values,\n );\n return result.rows.map((row) => parseRow(row)!);\n },\n save: async (intent) => {\n const result = await options.client.query<{ purchase_id: string }>(\n `INSERT INTO ${ns}.purchase_intents\n (purchase_id, tenant_id, owner_id, idempotency_key, status, input_digest, data, created_at, updated_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7::jsonb, $8, $9)\n ON CONFLICT (purchase_id) DO UPDATE SET\n status = excluded.status,\n data = excluded.data,\n updated_at = excluded.updated_at\n WHERE ${ns}.purchase_intents.tenant_id = excluded.tenant_id\n AND ${ns}.purchase_intents.input_digest = excluded.input_digest\n AND ${ns}.purchase_intents.idempotency_key = excluded.idempotency_key\n RETURNING purchase_id`,\n [\n intent.input.purchaseId,\n intent.input.tenantId,\n intent.input.ownerId,\n intent.input.idempotencyKey,\n intent.status,\n intent.inputDigest,\n JSON.stringify(intent),\n intent.createdAt,\n intent.updatedAt,\n ],\n );\n if (result.rows.length !== 1)\n throw new AgentPurchaseIntentError(\n \"Purchase identity belongs to another immutable request\",\n );\n },\n };\n};\n\ntype PurchaseWallet = {\n cancelSpend: (mandateId: string) => Promise<unknown>;\n requestSpend: (\n request: AgentSpendRequest,\n options?: { mandateId?: string },\n ) => Promise<SpendRequestResult>;\n};\n\nexport const createAgentPurchaseOrchestrator = (options: {\n effects: Pick<EffectStore, \"enqueue\" | \"getByIdempotencyKey\">;\n installations: Pick<\n EffectAdapterInstallationRegistry,\n \"disable\" | \"enable\" | \"put\"\n >;\n now?: () => number;\n store: AgentPurchaseIntentStore;\n wallet: PurchaseWallet;\n}) => {\n const now = options.now ?? Date.now;\n\n const saveStatus = async (\n intent: AgentPurchaseIntent,\n status: AgentPurchaseIntentStatus,\n mandate?: SpendMandate,\n ) => {\n let mandateSummary: Omit<SpendMandate, \"signature\"> | undefined;\n if (mandate) {\n const { signature, ...summary } = mandate;\n void signature;\n mandateSummary = summary;\n }\n const next: AgentPurchaseIntent = {\n ...intent,\n ...(mandateSummary ? { mandate: mandateSummary } : {}),\n status,\n updatedAt: now(),\n };\n await options.store.save(next);\n return next;\n };\n\n const submit = async <Payload>(\n input: AgentPurchaseIntentInput<Payload>,\n ): Promise<AgentPurchaseIntent<Payload>> => {\n if (!input.purchaseId.trim() || !input.idempotencyKey.trim())\n throw new AgentPurchaseIntentError(\n \"Purchase and idempotency identities are required\",\n );\n if (!Number.isSafeInteger(input.amountMinor) || input.amountMinor <= 0)\n throw new AgentPurchaseIntentError(\n \"Purchase amount must be positive integer minor units\",\n );\n const mandateId = `mandate:purchase:${input.purchaseId}`;\n const effectId = `purchase:${input.purchaseId}`;\n const envelope: EffectAdapterExecutionEnvelope<Payload> = {\n currency: input.currency,\n ...(input.destination ? { destination: input.destination } : {}),\n effect: input.effect,\n installationId: input.installationId,\n mandateId,\n payload: input.payload,\n spendMinor: input.amountMinor,\n };\n const inputDigest = await effectAdapterExecutionInputDigest(envelope);\n const existing = await options.store.get(input.tenantId, input.purchaseId);\n const idempotent = await options.store.getByIdempotencyKey(\n input.tenantId,\n input.idempotencyKey,\n );\n const prior = existing ?? idempotent;\n if (prior) {\n if (\n prior.input.purchaseId !== input.purchaseId ||\n prior.inputDigest !== inputDigest\n )\n throw new AgentPurchaseIntentError(\n \"Purchase identity belongs to another immutable request\",\n );\n if (prior.status === \"enqueued\" || prior.status === \"cancelled\")\n return prior as AgentPurchaseIntent<Payload>;\n }\n let intent = (prior ?? {\n createdAt: now(),\n effectId,\n envelope,\n input,\n inputDigest,\n mandateId,\n status: \"drafted\" as const,\n updatedAt: now(),\n }) as AgentPurchaseIntent<Payload>;\n await options.store.save(intent);\n\n const spendRequest: AgentSpendRequest = {\n action: input.effect,\n agentId: input.agentId,\n allowanceId: input.allowanceId,\n amountCents: input.amountMinor,\n cartHash: inputDigest,\n ...(input.category ? { category: input.category } : {}),\n currency: input.currency,\n expiresAt: input.expiresAt,\n idempotencyKey: `purchase:${input.idempotencyKey}`,\n merchantId: input.merchantId,\n ...(input.refundable === undefined\n ? {}\n : { refundable: input.refundable }),\n };\n const requested = await options.wallet.requestSpend(spendRequest, {\n mandateId,\n });\n if (requested.mandate.status === \"pending_approval\")\n return (await saveStatus(\n intent,\n \"pending_approval\",\n requested.mandate,\n )) as AgentPurchaseIntent<Payload>;\n if (requested.mandate.status !== \"active\")\n throw new AgentPurchaseIntentError(\n `Purchase mandate is ${requested.mandate.status}`,\n );\n intent = (await saveStatus(\n intent,\n \"mandate_ready\",\n requested.mandate,\n )) as AgentPurchaseIntent<Payload>;\n\n await options.installations.put({\n adapterId: input.adapterId,\n installationId: input.installationId,\n policy: {\n credentials: input.credentials ?? [],\n destinations: input.destination ? [input.destination] : [],\n effects: [input.effect],\n spend: {\n currency: input.currency,\n mandateId,\n maxMinorPerEffect: input.amountMinor,\n },\n },\n tenantId: input.tenantId,\n });\n await options.installations.enable(input.tenantId, input.installationId);\n intent = (await saveStatus(\n intent,\n \"installation_ready\",\n )) as AgentPurchaseIntent<Payload>;\n\n const timestamp = now();\n const effect: EffectRecord = {\n actionId: input.actionId,\n attempts: 0,\n availableAt: timestamp,\n createdAt: timestamp,\n effectId,\n handler: input.handler,\n idempotencyKey: `purchase:${input.idempotencyKey}`,\n input: envelope,\n inputDigest,\n status: \"pending\",\n tenantId: input.tenantId,\n updatedAt: timestamp,\n };\n if (!(await options.effects.enqueue(effect))) {\n const duplicate = await options.effects.getByIdempotencyKey(\n input.tenantId,\n effect.idempotencyKey,\n );\n if (\n !duplicate ||\n duplicate.effectId !== effect.effectId ||\n duplicate.inputDigest !== effect.inputDigest\n ) {\n await options.installations.disable(\n input.tenantId,\n input.installationId,\n );\n await options.wallet.cancelSpend(mandateId);\n throw new AgentPurchaseIntentError(\n \"Purchase effect idempotency key belongs to another request\",\n );\n }\n }\n return (await saveStatus(\n intent,\n \"enqueued\",\n )) as AgentPurchaseIntent<Payload>;\n };\n\n return {\n list: options.store.list,\n submit,\n };\n};\n"
6
6
  ],
7
- "mappings": ";;AAAA;AAAA;AAAA;AAcA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuEO,MAAM,iCAAiC,MAAM;AAAC;AAErD,IAAM,QAAQ,CAAC,UAAkB,eAC/B,GAAG,eAAiB;AAEf,IAAM,uCACX,MAAgC;AAAA,EAC9B,MAAM,UAAU,IAAI;AAAA,EACpB,OAAO;AAAA,IACL,KAAK,OAAO,UAAU,eAAe;AAAA,MACnC,MAAM,QAAQ,QAAQ,IAAI,MAAM,UAAU,UAAU,CAAC;AAAA,MACrD,OAAO,QAAQ,gBAAgB,KAAK,IAAI;AAAA;AAAA,IAE1C,qBAAqB,OAAO,UAAU,mBAAmB;AAAA,MACvD,MAAM,QAAQ,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,KAClC,CAAC,WACC,OAAO,MAAM,aAAa,YAC1B,OAAO,MAAM,mBAAmB,cACpC;AAAA,MACA,OAAO,QAAQ,gBAAgB,KAAK,IAAI;AAAA;AAAA,IAE1C,MAAM,OAAO,UACX,CAAC,GAAG,QAAQ,OAAO,CAAC,EACjB,OACC,GAAG,OAAO,QAAQ,cACf,CAAC,MAAM,YAAY,OAAO,aAAa,MAAM,cAC7C,CAAC,MAAM,WAAW,OAAO,YAAY,MAAM,aAC3C,CAAC,MAAM,UAAU,WAAW,MAAM,OACvC,EACC,KAAK,CAAC,MAAM,UAAU,MAAM,YAAY,KAAK,SAAS,EACtD,MAAM,GAAG,MAAM,KAAK,EACpB,IAAI,CAAC,UAAU,gBAAgB,KAAK,CAAC;AAAA,IAC1C,MAAM,OAAO,WAAW;AAAA,MACtB,MAAM,MAAM,MAAM,OAAO,MAAM,UAAU,OAAO,MAAM,UAAU;AAAA,MAChE,MAAM,WAAW,QAAQ,IAAI,GAAG;AAAA,MAChC,IAAI,YAAY,SAAS,gBAAgB,OAAO;AAAA,QAC9C,MAAM,IAAI,yBACR,wDACF;AAAA,MACF,MAAM,aAAa,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,KACvC,GAAG,YACD,MAAM,aAAa,OAAO,MAAM,YAChC,MAAM,mBAAmB,OAAO,MAAM,cAC1C;AAAA,MACA,IACE,cACA,WAAW,MAAM,eAAe,OAAO,MAAM;AAAA,QAE7C,MAAM,IAAI,yBACR,qDACF;AAAA,MACF,QAAQ,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA;AAAA,EAE5C;AAAA;AAGJ,IAAM,cAAc,CAAC,cAAsB;AAAA,EACzC,IAAI,CAAC,qBAAqB,KAAK,SAAS;AAAA,IACtC,MAAM,IAAI,yBACR,uDACF;AAAA,EACF,OAAO;AAAA;AAIT,IAAM,gBAAgB,WAAmD;AAAA,EACvE,UAAU,MAAM;AAAA,EAChB,YAAY,CAAC,UACX,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AAAA,EAClD,UAAU,CAAC,UAAU,KAAK,UAAU,KAAK;AAC3C,CAAC;AAEM,IAAM,mCAAmC,CAC9C,YAAY,qBACT;AAAA,EACH,MAAM,SAAS,SAAS,YAAY,SAAS,CAAC;AAAA,EAC9C,MAAM,kBAAkB,OAAO,MAC7B,oBACA;AAAA,IACE,YAAY,OAAO,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,IAC/C,MAAM,cAAc,EAAE,MAA2B,EAAE,QAAQ;AAAA,IAC3D,iBAAiB,KAAK,EAAE,QAAQ;AAAA,IAChC,cAAc,KAAK,EAAE,QAAQ;AAAA,IAC7B,UAAU,KAAK,EAAE,QAAQ;AAAA,IACzB,aAAa,KAAK,EAAE,WAAW;AAAA,IAC/B,QAAQ,KAAK,EAAE,MAAiC,EAAE,QAAQ;AAAA,IAC1D,WAAW,KAAK,EAAE,QAAQ;AAAA,IAC1B,YAAY,OAAO,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACjD,GACA,CAAC,UAAU;AAAA,IACT,YAAY,yCAAyC,EAAE,GACrD,MAAM,WACN,MAAM,eACR;AAAA,IACA,YAAY,sCAAsC,EAAE,GAClD,MAAM,WACN,MAAM,WACR;AAAA,IACA,MAAM,gCAAgC,EAAE,GACtC,MAAM,WACN,MAAM,WAAW,KAAK,CACxB;AAAA,IACA,MAAM,4BAA4B,EAAE,GAClC,MAAM,UACN,MAAM,WAAW,KAAK,CACxB;AAAA,EACF,CACF;AAAA,EAEA,OAAO,EAAE,gBAAgB;AAAA;AAGpB,IAAM,wCAAwC,CACnD,IACA,UAAkC,CAAC,MACN;AAAA,EAC7B,QAAQ,oBAAoB,iCAC1B,QAAQ,SACV;AAAA,EACA,MAAM,QAAQ,OAAO,eAAsB;AAAA,IACzC,OAAO,OAAO,MAAM,GACjB,OAAO,EAAE,MAAM,gBAAgB,KAAK,CAAC,EACrC,KAAK,eAAe,EACpB,MAAM,IAAI,GAAG,UAAU,CAAC,EACxB,MAAM,CAAC;AAAA,IAEV,OAAO,KAAK;AAAA;AAAA,EAGd,OAAO;AAAA,IACL,KAAK,CAAC,UAAU,eACd,MAAM;AAAA,MACJ,GAAG,gBAAgB,WAAW,QAAQ;AAAA,MACtC,GAAG,gBAAgB,aAAa,UAAU;AAAA,IAC5C,CAAC;AAAA,IACH,qBAAqB,CAAC,UAAU,mBAC9B,MAAM;AAAA,MACJ,GAAG,gBAAgB,WAAW,QAAQ;AAAA,MACtC,GAAG,gBAAgB,iBAAiB,cAAc;AAAA,IACpD,CAAC;AAAA,IACH,MAAM,OAAO,UAAU;AAAA,MACrB,MAAM,aAAoB,CAAC;AAAA,MAC3B,IAAI,MAAM;AAAA,QACR,WAAW,KAAK,GAAG,gBAAgB,WAAW,MAAM,QAAQ,CAAC;AAAA,MAC/D,IAAI,MAAM;AAAA,QACR,WAAW,KAAK,GAAG,gBAAgB,UAAU,MAAM,OAAO,CAAC;AAAA,MAC7D,IAAI,MAAM;AAAA,QACR,WAAW,KAAK,GAAG,gBAAgB,QAAQ,MAAM,MAAM,CAAC;AAAA,MAE1D,MAAM,OAAO,MAAM,GAChB,OAAO,EAAE,MAAM,gBAAgB,KAAK,CAAC,EACrC,KAAK,eAAe,EACpB,MAAM,IAAI,GAAG,UAAU,CAAC,EACxB,QAAQ,KAAK,gBAAgB,UAAU,CAAC,EACxC,MAAM,MAAM,KAAK;AAAA,MAEpB,OAAO,KAAK,IAAI,GAAG,WAAW,IAAI;AAAA;AAAA,IAEpC,MAAM,OAAO,WAAW;AAAA,MACtB,MAAM,OAAO,MAAM,GAChB,OAAO,eAAe,EACtB,OAAO;AAAA,QACN,YAAY,OAAO;AAAA,QACnB,MAAM;AAAA,QACN,iBAAiB,OAAO,MAAM;AAAA,QAC9B,cAAc,OAAO;AAAA,QACrB,UAAU,OAAO,MAAM;AAAA,QACvB,aAAa,OAAO,MAAM;AAAA,QAC1B,QAAQ,OAAO;AAAA,QACf,WAAW,OAAO,MAAM;AAAA,QACxB,YAAY,OAAO;AAAA,MACrB,CAAC,EACA,mBAAmB;AAAA,QAClB,KAAK;AAAA,UACH,MAAM;AAAA,UACN,QAAQ,OAAO;AAAA,UACf,YAAY,OAAO;AAAA,QACrB;AAAA,QACA,UAAU,IACR,GAAG,gBAAgB,WAAW,OAAO,MAAM,QAAQ,GACnD,GAAG,gBAAgB,cAAc,OAAO,WAAW,GACnD,GAAG,gBAAgB,iBAAiB,OAAO,MAAM,cAAc,CACjE;AAAA,QACA,QAAQ,gBAAgB;AAAA,MAC1B,CAAC,EACA,UAAU,EAAE,IAAI,gBAAgB,YAAY,CAAC;AAAA,MAChD,IAAI,KAAK,WAAW;AAAA,QAClB,MAAM,IAAI,yBACR,wDACF;AAAA;AAAA,EAEN;AAAA;AAGK,IAAM,wCAAwC,CACnD,YAAY,qBACT;AAAA,EACH,MAAM,KAAK,YAAY,SAAS;AAAA,EAChC,OAAO,+BAA+B;AAAA,6BACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+DAakC;AAAA,2DACJ;AAAA;AAI3D,IAAM,WAAW,CAAC,QAA4C;AAAA,EAC5D,IAAI,CAAC;AAAA,IAAK;AAAA,EACV,OACE,OAAO,IAAI,SAAS,WAAW,KAAK,MAAM,IAAI,IAAI,IAAI,IAAI;AAAA;AAIvD,IAAM,yCAAyC,CAAC,YAGvB;AAAA,EAC9B,MAAM,KAAK,YAAY,QAAQ,aAAa,gBAAgB;AAAA,EAC5D,OAAO;AAAA,IACL,KAAK,OAAO,UAAU,eACpB,UAEI,MAAM,QAAQ,OAAO,MACnB,oBAAoB,iEACpB,CAAC,UAAU,UAAU,CACvB,GACA,KAAK,EACT;AAAA,IACF,qBAAqB,OAAO,UAAU,mBACpC,UAEI,MAAM,QAAQ,OAAO,MACnB,oBAAoB,qEACpB,CAAC,UAAU,cAAc,CAC3B,GACA,KAAK,EACT;AAAA,IACF,MAAM,OAAO,UAAU;AAAA,MACrB,MAAM,UAAoB,CAAC;AAAA,MAC3B,MAAM,SAAoB,CAAC;AAAA,MAC3B,IAAI,MAAM,UAAU;AAAA,QAClB,OAAO,KAAK,MAAM,QAAQ;AAAA,QAC1B,QAAQ,KAAK,gBAAgB,OAAO,QAAQ;AAAA,MAC9C;AAAA,MACA,IAAI,MAAM,SAAS;AAAA,QACjB,OAAO,KAAK,MAAM,OAAO;AAAA,QACzB,QAAQ,KAAK,eAAe,OAAO,QAAQ;AAAA,MAC7C;AAAA,MACA,IAAI,MAAM,QAAQ;AAAA,QAChB,OAAO,KAAK,MAAM,MAAM;AAAA,QACxB,QAAQ,KAAK,aAAa,OAAO,QAAQ;AAAA,MAC3C;AAAA,MACA,OAAO,KAAK,MAAM,KAAK;AAAA,MACvB,MAAM,QAAQ,QAAQ,SAAS,IAAI,UAAU,QAAQ,KAAK,OAAO,MAAM;AAAA,MACvE,MAAM,SAAS,MAAM,QAAQ,OAAO,MAClC,oBAAoB,sBAAsB,yCAAyC,OAAO,UAC1F,MACF;AAAA,MACA,OAAO,OAAO,KAAK,IAAI,CAAC,QAAQ,SAAS,GAAG,CAAE;AAAA;AAAA,IAEhD,MAAM,OAAO,WAAW;AAAA,MACtB,MAAM,SAAS,MAAM,QAAQ,OAAO,MAClC,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAON;AAAA,iBACA;AAAA,iBACA;AAAA,iCAET;AAAA,QACE,OAAO,MAAM;AAAA,QACb,OAAO,MAAM;AAAA,QACb,OAAO,MAAM;AAAA,QACb,OAAO,MAAM;AAAA,QACb,OAAO;AAAA,QACP,OAAO;AAAA,QACP,KAAK,UAAU,MAAM;AAAA,QACrB,OAAO;AAAA,QACP,OAAO;AAAA,MACT,CACF;AAAA,MACA,IAAI,OAAO,KAAK,WAAW;AAAA,QACzB,MAAM,IAAI,yBACR,wDACF;AAAA;AAAA,EAEN;AAAA;AAWK,IAAM,kCAAkC,CAAC,YAS1C;AAAA,EACJ,MAAM,MAAM,QAAQ,OAAO,KAAK;AAAA,EAEhC,MAAM,aAAa,OACjB,QACA,QACA,YACG;AAAA,IACH,IAAI;AAAA,IACJ,IAAI,SAAS;AAAA,MACX,QAAQ,cAAc,YAAY;AAAA,MAElC,iBAAiB;AAAA,IACnB;AAAA,IACA,MAAM,OAA4B;AAAA,SAC7B;AAAA,SACC,iBAAiB,EAAE,SAAS,eAAe,IAAI,CAAC;AAAA,MACpD;AAAA,MACA,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,MAAM,QAAQ,MAAM,KAAK,IAAI;AAAA,IAC7B,OAAO;AAAA;AAAA,EAGT,MAAM,SAAS,OACb,UAC0C;AAAA,IAC1C,IAAI,CAAC,MAAM,WAAW,KAAK,KAAK,CAAC,MAAM,eAAe,KAAK;AAAA,MACzD,MAAM,IAAI,yBACR,kDACF;AAAA,IACF,IAAI,CAAC,OAAO,cAAc,MAAM,WAAW,KAAK,MAAM,eAAe;AAAA,MACnE,MAAM,IAAI,yBACR,sDACF;AAAA,IACF,MAAM,YAAY,oBAAoB,MAAM;AAAA,IAC5C,MAAM,WAAW,YAAY,MAAM;AAAA,IACnC,MAAM,WAAoD;AAAA,MACxD,UAAU,MAAM;AAAA,SACZ,MAAM,cAAc,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,MAC9D,QAAQ,MAAM;AAAA,MACd,gBAAgB,MAAM;AAAA,MACtB;AAAA,MACA,SAAS,MAAM;AAAA,MACf,YAAY,MAAM;AAAA,IACpB;AAAA,IACA,MAAM,cAAc,MAAM,kCAAkC,QAAQ;AAAA,IACpE,MAAM,WAAW,MAAM,QAAQ,MAAM,IAAI,MAAM,UAAU,MAAM,UAAU;AAAA,IACzE,MAAM,aAAa,MAAM,QAAQ,MAAM,oBACrC,MAAM,UACN,MAAM,cACR;AAAA,IACA,MAAM,QAAQ,YAAY;AAAA,IAC1B,IAAI,OAAO;AAAA,MACT,IACE,MAAM,MAAM,eAAe,MAAM,cACjC,MAAM,gBAAgB;AAAA,QAEtB,MAAM,IAAI,yBACR,wDACF;AAAA,MACF,IAAI,MAAM,WAAW,cAAc,MAAM,WAAW;AAAA,QAClD,OAAO;AAAA,IACX;AAAA,IACA,IAAI,SAAU,SAAS;AAAA,MACrB,WAAW,IAAI;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,MAAM,QAAQ,MAAM,KAAK,MAAM;AAAA,IAE/B,MAAM,eAAkC;AAAA,MACtC,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,aAAa,MAAM;AAAA,MACnB,aAAa,MAAM;AAAA,MACnB,UAAU;AAAA,SACN,MAAM,WAAW,EAAE,UAAU,MAAM,SAAS,IAAI,CAAC;AAAA,MACrD,UAAU,MAAM;AAAA,MAChB,WAAW,MAAM;AAAA,MACjB,gBAAgB,YAAY,MAAM;AAAA,MAClC,YAAY,MAAM;AAAA,SACd,MAAM,eAAe,YACrB,CAAC,IACD,EAAE,YAAY,MAAM,WAAW;AAAA,IACrC;AAAA,IACA,MAAM,YAAY,MAAM,QAAQ,OAAO,aAAa,cAAc;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,IACD,IAAI,UAAU,QAAQ,WAAW;AAAA,MAC/B,OAAQ,MAAM,WACZ,QACA,oBACA,UAAU,OACZ;AAAA,IACF,IAAI,UAAU,QAAQ,WAAW;AAAA,MAC/B,MAAM,IAAI,yBACR,uBAAuB,UAAU,QAAQ,QAC3C;AAAA,IACF,SAAU,MAAM,WACd,QACA,iBACA,UAAU,OACZ;AAAA,IAEA,MAAM,QAAQ,cAAc,IAAI;AAAA,MAC9B,WAAW,MAAM;AAAA,MACjB,gBAAgB,MAAM;AAAA,MACtB,QAAQ;AAAA,QACN,aAAa,MAAM,eAAe,CAAC;AAAA,QACnC,cAAc,MAAM,cAAc,CAAC,MAAM,WAAW,IAAI,CAAC;AAAA,QACzD,SAAS,CAAC,MAAM,MAAM;AAAA,QACtB,OAAO;AAAA,UACL,UAAU,MAAM;AAAA,UAChB;AAAA,UACA,mBAAmB,MAAM;AAAA,QAC3B;AAAA,MACF;AAAA,MACA,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,IACD,MAAM,QAAQ,cAAc,OAAO,MAAM,UAAU,MAAM,cAAc;AAAA,IACvE,SAAU,MAAM,WACd,QACA,oBACF;AAAA,IAEA,MAAM,YAAY,IAAI;AAAA,IACtB,MAAM,SAAuB;AAAA,MAC3B,UAAU,MAAM;AAAA,MAChB,UAAU;AAAA,MACV,aAAa;AAAA,MACb,WAAW;AAAA,MACX;AAAA,MACA,SAAS,MAAM;AAAA,MACf,gBAAgB,YAAY,MAAM;AAAA,MAClC,OAAO;AAAA,MACP;AAAA,MACA,QAAQ;AAAA,MACR,UAAU,MAAM;AAAA,MAChB,WAAW;AAAA,IACb;AAAA,IACA,IAAI,CAAE,MAAM,QAAQ,QAAQ,QAAQ,MAAM,GAAI;AAAA,MAC5C,MAAM,YAAY,MAAM,QAAQ,QAAQ,oBACtC,MAAM,UACN,OAAO,cACT;AAAA,MACA,IACE,CAAC,aACD,UAAU,aAAa,OAAO,YAC9B,UAAU,gBAAgB,OAAO,aACjC;AAAA,QACA,MAAM,QAAQ,cAAc,QAC1B,MAAM,UACN,MAAM,cACR;AAAA,QACA,MAAM,QAAQ,OAAO,YAAY,SAAS;AAAA,QAC1C,MAAM,IAAI,yBACR,4DACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAQ,MAAM,WACZ,QACA,UACF;AAAA;AAAA,EAGF,OAAO;AAAA,IACL,MAAM,QAAQ,MAAM;AAAA,IACpB;AAAA,EACF;AAAA;",
8
- "debugId": "22DD8624236AA90B64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "626EC856E5C69EBB64756E2164756E21",
9
9
  "names": []
10
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/agent",
3
- "version": "0.23.5",
3
+ "version": "0.23.7",
4
4
  "description": "The production-grade, provider-neutral agent stack for AbsoluteJS: auth, actions, runtime, sandboxing, trust, memory, inbox, discovery, MCP, A2A, policy, wallet limits, controls, and conformance.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -136,23 +136,23 @@
136
136
  "release": "bun run format && bun run check:package && npm publish --access public"
137
137
  },
138
138
  "dependencies": {
139
- "@absolutejs/a2a": "^0.3.0",
140
- "@absolutejs/agency": "^0.6.1",
139
+ "@absolutejs/a2a": "^0.3.1",
140
+ "@absolutejs/agency": "^0.6.2",
141
141
  "@absolutejs/agent-conformance": "^0.14.0",
142
- "@absolutejs/agent-control": "^0.5.1",
142
+ "@absolutejs/agent-control": "^0.5.2",
143
143
  "@absolutejs/agent-discovery": "^0.2.1",
144
- "@absolutejs/agent-inbox": "^0.3.1",
145
- "@absolutejs/agent-memory": "^0.1.3",
146
- "@absolutejs/agent-runtime": "^0.2.1",
144
+ "@absolutejs/agent-inbox": "^0.3.2",
145
+ "@absolutejs/agent-memory": "^0.1.4",
146
+ "@absolutejs/agent-runtime": "^0.2.2",
147
147
  "@absolutejs/agent-sandbox": "^0.2.0",
148
148
  "@absolutejs/agent-trust": "^0.2.0",
149
149
  "@absolutejs/arazzo": "^0.1.2",
150
- "@absolutejs/auth": "^0.56.15",
150
+ "@absolutejs/auth": "^0.56.16",
151
151
  "@absolutejs/execution": "0.14.2",
152
152
  "@absolutejs/manifest": "^0.3.0",
153
153
  "@absolutejs/mcp": "^0.11.0",
154
154
  "@absolutejs/policy": "^0.2.0",
155
- "@absolutejs/wallet": "^0.8.4",
155
+ "@absolutejs/wallet": "^0.8.5",
156
156
  "@absolutejs/webmcp": "^0.1.3",
157
157
  "@sinclair/typebox": "^0.34.0",
158
158
  "drizzle-orm": "1.0.0-rc.4"