@rubicon-caliga/agent-sdk 0.1.0 → 0.1.2
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/README.md +67 -7
- package/dist/agent-client.d.ts +4 -0
- package/dist/agent-client.d.ts.map +1 -1
- package/dist/agent-client.js +6 -0
- package/dist/agent-client.js.map +1 -1
- package/dist/agent-client.test.d.ts +2 -0
- package/dist/agent-client.test.d.ts.map +1 -0
- package/dist/agent-client.test.js +110 -0
- package/dist/agent-client.test.js.map +1 -0
- package/dist/circle-agent-wallet.d.ts +65 -0
- package/dist/circle-agent-wallet.d.ts.map +1 -0
- package/dist/circle-agent-wallet.js +156 -0
- package/dist/circle-agent-wallet.js.map +1 -0
- package/dist/circle-agent-wallet.test.d.ts +2 -0
- package/dist/circle-agent-wallet.test.d.ts.map +1 -0
- package/dist/circle-agent-wallet.test.js +106 -0
- package/dist/circle-agent-wallet.test.js.map +1 -0
- package/dist/circle-cli-gateway-payment.d.ts +74 -0
- package/dist/circle-cli-gateway-payment.d.ts.map +1 -0
- package/dist/circle-cli-gateway-payment.js +218 -0
- package/dist/circle-cli-gateway-payment.js.map +1 -0
- package/dist/circle-cli-gateway-payment.test.d.ts +2 -0
- package/dist/circle-cli-gateway-payment.test.d.ts.map +1 -0
- package/dist/circle-cli-gateway-payment.test.js +141 -0
- package/dist/circle-cli-gateway-payment.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/payment-engine.d.ts +0 -14
- package/dist/payment-engine.d.ts.map +1 -1
- package/dist/payment-engine.js +0 -35
- package/dist/payment-engine.js.map +1 -1
- package/dist/payment-engine.test.d.ts.map +1 -0
- package/package.json +11 -11
- package/src/agent-client.test.ts +118 -0
- package/src/agent-client.ts +10 -0
- package/src/circle-agent-wallet.test.ts +118 -0
- package/src/circle-agent-wallet.ts +210 -0
- package/src/circle-cli-gateway-payment.test.ts +182 -0
- package/src/circle-cli-gateway-payment.ts +284 -0
- package/src/index.ts +2 -0
- package/src/payment-engine.ts +0 -38
package/README.md
CHANGED
|
@@ -10,13 +10,18 @@ exactly the words it received.
|
|
|
10
10
|
## Quick Start
|
|
11
11
|
|
|
12
12
|
```ts
|
|
13
|
-
import Rubicon, {
|
|
13
|
+
import Rubicon, {
|
|
14
|
+
CircleCliGatewayPaymentEngine,
|
|
15
|
+
StaticPaymentEngine,
|
|
16
|
+
} from "@rubicon-caliga/agent-sdk";
|
|
14
17
|
|
|
15
|
-
const
|
|
18
|
+
const hasCircleCliWallet = process.env.CIRCLE_AGENT_WALLET_ADDRESS;
|
|
16
19
|
|
|
17
20
|
const rubicon = new Rubicon({
|
|
18
|
-
paymentEngine:
|
|
19
|
-
? new
|
|
21
|
+
paymentEngine: hasCircleCliWallet
|
|
22
|
+
? new CircleCliGatewayPaymentEngine({
|
|
23
|
+
agentWalletAddress: process.env.CIRCLE_AGENT_WALLET_ADDRESS as `0x${string}`,
|
|
24
|
+
})
|
|
20
25
|
: new StaticPaymentEngine(),
|
|
21
26
|
});
|
|
22
27
|
|
|
@@ -35,7 +40,8 @@ console.log("\nreceipt:", receipt);
|
|
|
35
40
|
|
|
36
41
|
`baseUrl` defaults to `http://localhost:8787`. In development, omitting
|
|
37
42
|
`paymentEngine` uses `StaticPaymentEngine`, which works against a dev-mode
|
|
38
|
-
gateway. For real settlement, pass
|
|
43
|
+
gateway. For real Arc Testnet settlement without raw private keys, pass
|
|
44
|
+
`CircleCliGatewayPaymentEngine`.
|
|
39
45
|
|
|
40
46
|
## `run(options)`
|
|
41
47
|
|
|
@@ -65,8 +71,62 @@ for custom flows.
|
|
|
65
71
|
## Payment engines
|
|
66
72
|
|
|
67
73
|
- `StaticPaymentEngine` — no-money development engine for a dev-mode gateway.
|
|
68
|
-
- `
|
|
69
|
-
|
|
74
|
+
- `CircleCliGatewayPaymentEngine` — **Circle CLI / Agent Wallet custody.** Each
|
|
75
|
+
word's x402 authorization is signed by `circle wallet sign typed-data`, so the
|
|
76
|
+
SDK never holds a private key and callers never manually assemble x402 payment
|
|
77
|
+
payloads. The Circle CLI must be installed, logged in, and backed by a funded
|
|
78
|
+
Agent Wallet Gateway/Nanopayments balance on Arc Testnet.
|
|
79
|
+
- `CircleAgentWalletEngine` — **custodial, Circle-native.** Each word's
|
|
80
|
+
authorization is signed by a Circle Agent / Developer-Controlled Wallet through
|
|
81
|
+
Circle's API, so the SDK never holds a private key. The wallet controller
|
|
82
|
+
provisions, funds, and sets spending policies on the wallet beforehand; the SDK
|
|
83
|
+
only consumes it and keeps enforcing the confirmed budget.
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
import Rubicon, { CircleCliGatewayPaymentEngine } from "@rubicon-caliga/agent-sdk";
|
|
87
|
+
|
|
88
|
+
const rubicon = new Rubicon({
|
|
89
|
+
baseUrl: process.env.RUBICON_GATEWAY_URL,
|
|
90
|
+
paymentEngine: new CircleCliGatewayPaymentEngine({
|
|
91
|
+
agentWalletAddress: process.env.CIRCLE_AGENT_WALLET_ADDRESS as `0x${string}` | undefined,
|
|
92
|
+
chain: "ARC-TESTNET",
|
|
93
|
+
}),
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
`CircleCliGatewayPaymentEngine` keeps two addresses distinct:
|
|
98
|
+
|
|
99
|
+
- `agentWalletAddress` is the Circle Agent Wallet passed to
|
|
100
|
+
`circle wallet sign typed-data --address`.
|
|
101
|
+
- `buyerWalletAddress` / `backingEOA` is the Gateway backing EOA used as the
|
|
102
|
+
x402 `TransferWithAuthorization.from` address.
|
|
103
|
+
|
|
104
|
+
When only `agentWalletAddress` is provided, the engine discovers the backing EOA
|
|
105
|
+
with `circle gateway balance --address <agentWalletAddress> --chain ARC-TESTNET --output json`.
|
|
106
|
+
When no address is provided, the engine first runs
|
|
107
|
+
`circle wallet list --chain ARC-TESTNET --type agent --output json` and uses the
|
|
108
|
+
sole Agent Wallet it finds, then discovers its backing EOA with Gateway balance.
|
|
109
|
+
The older `walletAddress` option remains as an alias for `agentWalletAddress`.
|
|
110
|
+
If multiple Agent Wallets are present, pass the agent wallet explicitly.
|
|
111
|
+
|
|
112
|
+
Gateway/Nanopayments receipts may have empty `transactionHashes`. Treat
|
|
113
|
+
`settlementIds` as the primary proof of payment; scanner visibility is not
|
|
114
|
+
guaranteed because a successful nanopayment may not appear as a direct ERC-20
|
|
115
|
+
transfer to the seller. Seller dashboards should count Rubicon backend payment
|
|
116
|
+
receipts and Circle Gateway settlement IDs, not direct on-chain transfers.
|
|
117
|
+
|
|
118
|
+
The lower-level API-backed custody path is also available:
|
|
119
|
+
|
|
120
|
+
```ts
|
|
121
|
+
import { initiateDeveloperControlledWalletsClient } from "@circle-fin/developer-controlled-wallets";
|
|
122
|
+
import { CircleAgentWalletEngine } from "@rubicon-caliga/agent-sdk";
|
|
123
|
+
|
|
124
|
+
const client = initiateDeveloperControlledWalletsClient({ apiKey, entitySecret });
|
|
125
|
+
new CircleAgentWalletEngine({ client, walletId });
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
> Circle Agent Wallets must be EOA wallets — EIP-3009 (the x402 `exact` scheme)
|
|
129
|
+
> requires an EOA signature, not an EIP-1271 smart-contract-account signature.
|
|
70
130
|
|
|
71
131
|
## Local Run
|
|
72
132
|
|
package/dist/agent-client.d.ts
CHANGED
|
@@ -23,6 +23,10 @@ export interface ReadReceipt {
|
|
|
23
23
|
amountPaidAtomic: `${bigint}`;
|
|
24
24
|
payments: WordPaymentReceipt[];
|
|
25
25
|
transactionHashes: string[];
|
|
26
|
+
settlementIds: string[];
|
|
27
|
+
buyerWalletAddress?: `0x${string}`;
|
|
28
|
+
sellerPayTo?: `0x${string}`;
|
|
29
|
+
network?: string;
|
|
26
30
|
text: string;
|
|
27
31
|
completed: boolean;
|
|
28
32
|
stopReason: "article_completed" | "stop_condition" | "budget_reached" | "max_words" | "aborted";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"agent-client.d.ts","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-client.js
CHANGED
|
@@ -152,6 +152,7 @@ export class RubiconClient {
|
|
|
152
152
|
let wordsRead = 0;
|
|
153
153
|
let amountPaid = 0n;
|
|
154
154
|
const transactionHashes = [];
|
|
155
|
+
const settlementIds = [];
|
|
155
156
|
const payments = [];
|
|
156
157
|
let stopReason = "article_completed";
|
|
157
158
|
let completed = false;
|
|
@@ -163,6 +164,10 @@ export class RubiconClient {
|
|
|
163
164
|
amountPaidAtomic: `${amountPaid}`,
|
|
164
165
|
payments: [...payments],
|
|
165
166
|
transactionHashes: [...transactionHashes],
|
|
167
|
+
settlementIds: [...settlementIds],
|
|
168
|
+
buyerWalletAddress: [...payments].reverse().find((payment) => payment.buyerWalletAddress)?.buyerWalletAddress,
|
|
169
|
+
sellerPayTo: [...payments].reverse().find((payment) => payment.payTo)?.payTo,
|
|
170
|
+
network: [...payments].reverse().find((payment) => payment.network)?.network,
|
|
166
171
|
text,
|
|
167
172
|
completed,
|
|
168
173
|
stopReason,
|
|
@@ -206,6 +211,7 @@ export class RubiconClient {
|
|
|
206
211
|
payments.push(result.payment);
|
|
207
212
|
}
|
|
208
213
|
transactionHashes.push(...(result.transactionHashes ?? (result.transactionHash ? [result.transactionHash] : [])));
|
|
214
|
+
settlementIds.push(...(result.settlementIds ?? (result.settlementId ? [result.settlementId] : [])));
|
|
209
215
|
text = text ? `${text} ${result.word}` : result.word;
|
|
210
216
|
yield {
|
|
211
217
|
type: "article.word",
|
package/dist/agent-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAa1C,OAAO,EAAE,mBAAmB,EAA2B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-client.js","sourceRoot":"","sources":["../src/agent-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAa1C,OAAO,EAAE,mBAAmB,EAA2B,MAAM,qBAAqB,CAAC;AA+EnF;;;;GAIG;AACH,MAAM,OAAO,aAAa;IAKK;IAJZ,OAAO,CAAe;IACtB,OAAO,CAAS;IAChB,aAAa,CAAqB;IAEnD,YAA6B,OAA6B;QAA7B,YAAO,GAAP,OAAO,CAAsB;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,uBAAuB,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,mBAAmB,EAAE,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,IAAa;QAClD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,SAAS,aAAa,CAAC,CAAC;QAC3E,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAIvB;QACC,OAAO,IAAI,CAAC,QAAQ,CAClB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,gCAAgC,EAAE;YAClE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;YAC7D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,cAAsB,EACtB,OAAe;QAEf,OAAO,IAAI,CAAC,QAAQ,CAClB,MAAM,IAAI,CAAC,OAAO,CAChB,GAAG,IAAI,CAAC,OAAO,kCAAkC,cAAc,WAAW,EAC1E;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;YAC7D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;SAClC,CACF,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAClB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,cAAc,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;YAC7D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB,EAAE,OAA6B;QAC/D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,SAAS,WAAW,EAAE;YACvF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;YAC7D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAoC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,MAAM,GAAG,iBAAiB;QACvD,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,SAAS,QAAQ,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;YAC7D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;SACjC,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,YAAY,CAAC,SAAiB,EAAE,OAAsC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,SAAS,SAAS,EAAE;YAChF,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CACrB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;gBAClB,GAAG,IAAI;gBACP,OAAO,EAAE;oBACP,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;oBAC3D,GAAG,OAAO;iBACX;aACF,CAAC;SACL,CAAC,CAAC;QACH,MAAM,CAAC,SAAS,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAiB,CAAC,CAAC;QAClF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CAAC,OAAmB;QAC3B,IAAI,OAAgC,CAAC;QACrC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBAClC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE;oBACjC,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;iBACzC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACvC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,IAAI,CAAC,OAAoB;QAC9B,MAAM,MAAM,GACV,OAAO,CAAC,MAAM;YACd,CAAC,OAAO,CAAC,cAAc;gBACrB,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,cAAc,EAAE;gBAC/D,CAAC,CAAC,CAAC,GAAG,EAAE;oBACJ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBAC9D,CAAC,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAEpD,4EAA4E;QAC5E,mCAAmC;QACnC,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC5C,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAClC,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC;gBAChD,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE,OAAO,CAAC,IAAI;aACtB,CAAC,CAAC;YACH,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC;YAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAClF,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM;oBACJ,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;iBAClD,CAAC;gBACF,SAAS,GAAG,SAAS,IAAI,MAAM,CAAC,oBAAoB,CAAC;YACvD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,cAAc;YACd,SAAS;YACT,MAAM;YACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;QAE3C,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC5D,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAyB,EAAE,CAAC;QAC1C,IAAI,UAAU,GAA8B,mBAAmB,CAAC;QAChE,IAAI,SAAS,GAAG,KAAK,CAAC;QAEtB,MAAM,WAAW,GAAG,GAAgB,EAAE,CAAC,CAAC;YACtC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;YACpC,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,SAAS;YACT,gBAAgB,EAAE,GAAG,UAAU,EAAE;YACjC,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC;YACvB,iBAAiB,EAAE,CAAC,GAAG,iBAAiB,CAAC;YACzC,aAAa,EAAE,CAAC,GAAG,aAAa,CAAC;YACjC,kBAAkB,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,kBAAkB;YAC7G,WAAW,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK;YAC5E,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO;YAC5E,IAAI;YACJ,SAAS;YACT,UAAU;SACX,CAAC,CAAC;QAEH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACpE,UAAU,GAAG,WAAW,CAAC;gBACzB,MAAM;YACR,CAAC;YACD,IAAI,UAAU,GAAG,iBAAiB,GAAG,YAAY,EAAE,CAAC;gBAClD,UAAU,GAAG,gBAAgB,CAAC;gBAC9B,MAAM;YACR,CAAC;YACD,IAAI,MAAM,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;gBAC9D,UAAU,GAAG,gBAAgB,CAAC;gBAC9B,MAAM;YACR,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACpE,6EAA6E;YAC7E,MAAM,cAAc,GAAG,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3D,IAAI,MAA6B,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;YACpF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjG,UAAU,GAAG,SAAS,CAAC;gBACvB,MAAM;YACR,CAAC;YAED,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;gBAC3C,qDAAqD;gBACrD,SAAS,GAAG,IAAI,CAAC;gBACjB,UAAU,GAAG,mBAAmB,CAAC;gBACjC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;gBAC9B,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC;gBAC7C,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;YAClC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClH,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpG,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YAErD,MAAM;gBACJ,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,SAAS;gBACT,gBAAgB,EAAE,GAAG,UAAU,EAAE;gBACjC,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;gBAC3C,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI;aACL,CAAC;YACF,MAAM;gBACJ,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B,CAAC;YAEF,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,SAAS,GAAG,IAAI,CAAC;gBACjB,UAAU,GAAG,mBAAmB,CAAC;gBACjC,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;gBAC9B,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC;gBAC7C,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAED,8EAA8E;QAC9E,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,OAAO,CAAC,QAAgC,EAAE;QAChD,MAAM,OAAO,GAA2B,EAAE,GAAG,KAAK,EAAE,CAAC;QACrD,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC/B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACrD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAI,QAAkB;QAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,MAAM,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;CACF;AAED,kCAAkC;AAClC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-client.test.d.ts","sourceRoot":"","sources":["../src/agent-client.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { test } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { RubiconClient } from "./agent-client.js";
|
|
4
|
+
const paymentEngine = {
|
|
5
|
+
async createWordPayment() {
|
|
6
|
+
return { paymentPayload: { ok: true } };
|
|
7
|
+
},
|
|
8
|
+
};
|
|
9
|
+
test("run receipt preserves Gateway settlement receipt fields", async () => {
|
|
10
|
+
const fetcher = (async (input) => {
|
|
11
|
+
const url = String(input);
|
|
12
|
+
if (url.endsWith("/v1/sessions")) {
|
|
13
|
+
return jsonResponse({
|
|
14
|
+
sessionId: "session_1",
|
|
15
|
+
state: "active",
|
|
16
|
+
article: article(),
|
|
17
|
+
navigation: navigation(),
|
|
18
|
+
pricePerWordAtomic: "1",
|
|
19
|
+
maxArticlePriceAtomic: "10",
|
|
20
|
+
conversationId: "conversation_1",
|
|
21
|
+
wordPaymentAtomic: "1",
|
|
22
|
+
gatewayFeeBps: 0,
|
|
23
|
+
paymentRequired: { scheme: "exact" },
|
|
24
|
+
expiresAt: "2026-06-18T12:00:00.000Z",
|
|
25
|
+
wordsPaid: 0,
|
|
26
|
+
wordsDelivered: 0,
|
|
27
|
+
paidAtomic: "0",
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (url.endsWith("/v1/sessions/session_1/payments")) {
|
|
31
|
+
return jsonResponse({
|
|
32
|
+
accepted: true,
|
|
33
|
+
sequence: 0,
|
|
34
|
+
word: "Rubicon",
|
|
35
|
+
priceAtomic: "1",
|
|
36
|
+
wordsPaid: 1,
|
|
37
|
+
wordsDelivered: 1,
|
|
38
|
+
paidAtomic: "1",
|
|
39
|
+
completed: true,
|
|
40
|
+
transactionHashes: [],
|
|
41
|
+
settlementIds: ["settlement_1"],
|
|
42
|
+
payment: {
|
|
43
|
+
paymentId: "payment_1",
|
|
44
|
+
sessionId: "session_1",
|
|
45
|
+
articleId: "article_1",
|
|
46
|
+
sequence: 0,
|
|
47
|
+
meteringUnit: "word",
|
|
48
|
+
amountAtomic: "1",
|
|
49
|
+
currency: "USDC",
|
|
50
|
+
network: "eip155:5042002",
|
|
51
|
+
payTo: "0x3333333333333333333333333333333333333333",
|
|
52
|
+
transactionHashes: [],
|
|
53
|
+
settlementIds: ["settlement_1"],
|
|
54
|
+
buyerWalletAddress: "0x2222222222222222222222222222222222222222",
|
|
55
|
+
settledAt: "2026-06-18T12:00:00.000Z",
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
throw new Error(`Unexpected fetch: ${url}`);
|
|
60
|
+
});
|
|
61
|
+
const client = new RubiconClient({
|
|
62
|
+
baseUrl: "http://rubicon.test",
|
|
63
|
+
paymentEngine,
|
|
64
|
+
fetch: fetcher,
|
|
65
|
+
});
|
|
66
|
+
const receipt = await client.run({
|
|
67
|
+
articleId: "article_1",
|
|
68
|
+
maxSpendAtomic: "10",
|
|
69
|
+
});
|
|
70
|
+
assert.deepEqual(receipt.transactionHashes, []);
|
|
71
|
+
assert.deepEqual(receipt.settlementIds, ["settlement_1"]);
|
|
72
|
+
assert.equal(receipt.buyerWalletAddress, "0x2222222222222222222222222222222222222222");
|
|
73
|
+
assert.equal(receipt.sellerPayTo, "0x3333333333333333333333333333333333333333");
|
|
74
|
+
assert.equal(receipt.network, "eip155:5042002");
|
|
75
|
+
});
|
|
76
|
+
function jsonResponse(body) {
|
|
77
|
+
return new Response(JSON.stringify(body), {
|
|
78
|
+
status: 200,
|
|
79
|
+
headers: { "content-type": "application/json" },
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
function article() {
|
|
83
|
+
return {
|
|
84
|
+
articleId: "article_1",
|
|
85
|
+
creatorId: "creator_1",
|
|
86
|
+
creatorUsername: "creator",
|
|
87
|
+
title: "Title",
|
|
88
|
+
author: "Author",
|
|
89
|
+
state: "published",
|
|
90
|
+
totalWords: 1,
|
|
91
|
+
pricePerWordAtomic: "1",
|
|
92
|
+
maxArticlePriceAtomic: "1",
|
|
93
|
+
sections: [],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function navigation() {
|
|
97
|
+
return {
|
|
98
|
+
articleId: "article_1",
|
|
99
|
+
sections: [],
|
|
100
|
+
sellerAgent: {
|
|
101
|
+
recommendedSectionId: "intro",
|
|
102
|
+
alternativeSectionIds: [],
|
|
103
|
+
rationale: "",
|
|
104
|
+
safeHints: [],
|
|
105
|
+
withheld: [],
|
|
106
|
+
},
|
|
107
|
+
stopConditions: [],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=agent-client.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-client.test.js","sourceRoot":"","sources":["../src/agent-client.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { StartSessionResponse, StreamPaymentRequest } from "@rubicon-caliga/core";
|
|
2
|
+
import { type CircleDeveloperControlledWalletsClient } from "@circle-fin/developer-controlled-wallets";
|
|
3
|
+
import type { AgentPaymentEngine } from "./payment-engine.js";
|
|
4
|
+
export interface CircleAgentWalletEngineOptions {
|
|
5
|
+
/** Circle API key that controls the Agent Wallet. */
|
|
6
|
+
apiKey: string;
|
|
7
|
+
/** Entity secret registered for the Circle developer account. */
|
|
8
|
+
entitySecret: string;
|
|
9
|
+
/** The Agent Wallet that holds USDC and signs each one-word payment. */
|
|
10
|
+
walletId: string;
|
|
11
|
+
/**
|
|
12
|
+
* The wallet's on-chain address. Optional — when omitted it is resolved once
|
|
13
|
+
* from the Circle API via `getWallet` before the first payment is signed.
|
|
14
|
+
*/
|
|
15
|
+
walletAddress?: `0x${string}`;
|
|
16
|
+
/** Override the Circle API base URL (e.g. sandbox vs. production). */
|
|
17
|
+
baseUrl?: string;
|
|
18
|
+
/** Pre-built Circle client. Mainly an injection point for tests. */
|
|
19
|
+
client?: CircleDeveloperControlledWalletsClient;
|
|
20
|
+
}
|
|
21
|
+
/** The minimal EIP-712 signing request the x402 client hands to a signer. */
|
|
22
|
+
interface TypedDataRequest {
|
|
23
|
+
domain: Record<string, unknown>;
|
|
24
|
+
types: Record<string, unknown>;
|
|
25
|
+
primaryType: string;
|
|
26
|
+
message: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Circle Agent Wallet engine. Signs the gateway's one-word x402 terms with a
|
|
30
|
+
* custodial Circle Agent Wallet — the recommended buyer setup — so the agent
|
|
31
|
+
* never handles a local signing key. Settlement may be batched by Circle, but
|
|
32
|
+
* each signed payload still corresponds to exactly one word.
|
|
33
|
+
*/
|
|
34
|
+
export declare class CircleAgentWalletEngine implements AgentPaymentEngine {
|
|
35
|
+
private readonly x402;
|
|
36
|
+
private readonly signer;
|
|
37
|
+
constructor(options: CircleAgentWalletEngineOptions);
|
|
38
|
+
createWordPayment(session: StartSessionResponse): Promise<StreamPaymentRequest>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Circle's signTypedData API expects a complete EIP-712 document as a JSON
|
|
42
|
+
* string. The x402 schemes pass viem-style typed data, which omits the implicit
|
|
43
|
+
* `EIP712Domain` type, so add it back from whichever domain fields are present.
|
|
44
|
+
*
|
|
45
|
+
* Exported for unit testing — application code never calls this directly.
|
|
46
|
+
*/
|
|
47
|
+
/**
|
|
48
|
+
* Serialize an EIP-712 document to the JSON string Circle's API expects. The
|
|
49
|
+
* `exact` fallback scheme passes the authorization's `value`/`validAfter`/
|
|
50
|
+
* `validBefore` as bigints, which `JSON.stringify` cannot encode — emit them as
|
|
51
|
+
* decimal strings (the EIP-712 JSON convention) instead of throwing.
|
|
52
|
+
*
|
|
53
|
+
* Exported for unit testing — application code never calls this directly.
|
|
54
|
+
*/
|
|
55
|
+
export declare function serializeTypedData(typed: ReturnType<typeof toEip712Payload>): string;
|
|
56
|
+
export declare function toEip712Payload(typed: TypedDataRequest): {
|
|
57
|
+
domain: Record<string, unknown>;
|
|
58
|
+
types: {
|
|
59
|
+
[x: string]: unknown;
|
|
60
|
+
};
|
|
61
|
+
primaryType: string;
|
|
62
|
+
message: Record<string, unknown>;
|
|
63
|
+
};
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=circle-agent-wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-agent-wallet.d.ts","sourceRoot":"","sources":["../src/circle-agent-wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIvF,OAAO,EAEL,KAAK,sCAAsC,EAC5C,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,WAAW,8BAA8B;IAC7C,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;IAC9B,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,sCAAsC,CAAC;CACjD;AAED,6EAA6E;AAC7E,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AA0DD;;;;;GAKG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAErC,OAAO,EAAE,8BAA8B;IAiB7C,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAWtF;AAED;;;;;;GAMG;AACH;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,GAAG,MAAM,CAIpF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB;;;;;;;EAYtD"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { x402Client } from "@x402/core/client";
|
|
2
|
+
import { registerBatchScheme } from "@circle-fin/x402-batching/client";
|
|
3
|
+
import { ExactEvmScheme } from "@x402/evm/exact/client";
|
|
4
|
+
import { initiateDeveloperControlledWalletsClient, } from "@circle-fin/developer-controlled-wallets";
|
|
5
|
+
/**
|
|
6
|
+
* viem-shaped signer (`{ address, signTypedData }`) that delegates EIP-712
|
|
7
|
+
* signing to a Circle Agent Wallet over the API instead of holding a raw
|
|
8
|
+
* private key. Satisfies both the batch (`BatchEvmSigner`) and exact
|
|
9
|
+
* (`ClientEvmSigner`) signer contracts used by the Circle x402 schemes.
|
|
10
|
+
*/
|
|
11
|
+
class CircleAgentWalletSigner {
|
|
12
|
+
client;
|
|
13
|
+
walletId;
|
|
14
|
+
// Populated before the first signature — either from options or via getWallet.
|
|
15
|
+
address = "0x0000000000000000000000000000000000000000";
|
|
16
|
+
resolved = false;
|
|
17
|
+
resolving;
|
|
18
|
+
constructor(client, walletId, address) {
|
|
19
|
+
this.client = client;
|
|
20
|
+
this.walletId = walletId;
|
|
21
|
+
if (address) {
|
|
22
|
+
this.address = address;
|
|
23
|
+
this.resolved = true;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Resolves and caches the wallet's on-chain address (idempotent). */
|
|
27
|
+
async ensureAddress() {
|
|
28
|
+
if (this.resolved)
|
|
29
|
+
return;
|
|
30
|
+
if (!this.resolving) {
|
|
31
|
+
this.resolving = this.client.getWallet({ id: this.walletId }).then((res) => {
|
|
32
|
+
const address = res.data?.wallet.address;
|
|
33
|
+
if (!address) {
|
|
34
|
+
throw new Error(`Circle wallet ${this.walletId} did not return an on-chain address`);
|
|
35
|
+
}
|
|
36
|
+
this.address = address;
|
|
37
|
+
this.resolved = true;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return this.resolving;
|
|
41
|
+
}
|
|
42
|
+
async signTypedData(typed) {
|
|
43
|
+
// The schemes read `address` synchronously while building the payload, so
|
|
44
|
+
// make sure it is resolved before we sign.
|
|
45
|
+
await this.ensureAddress();
|
|
46
|
+
const res = await this.client.signTypedData({
|
|
47
|
+
walletId: this.walletId,
|
|
48
|
+
data: serializeTypedData(toEip712Payload(typed)),
|
|
49
|
+
memo: "Rubicon one-word payment",
|
|
50
|
+
});
|
|
51
|
+
const signature = res.data?.signature;
|
|
52
|
+
if (!signature) {
|
|
53
|
+
throw new Error("Circle Agent Wallet did not return a signature for the x402 payment");
|
|
54
|
+
}
|
|
55
|
+
return signature;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Circle Agent Wallet engine. Signs the gateway's one-word x402 terms with a
|
|
60
|
+
* custodial Circle Agent Wallet — the recommended buyer setup — so the agent
|
|
61
|
+
* never handles a local signing key. Settlement may be batched by Circle, but
|
|
62
|
+
* each signed payload still corresponds to exactly one word.
|
|
63
|
+
*/
|
|
64
|
+
export class CircleAgentWalletEngine {
|
|
65
|
+
x402 = new x402Client();
|
|
66
|
+
signer;
|
|
67
|
+
constructor(options) {
|
|
68
|
+
const client = options.client ??
|
|
69
|
+
initiateDeveloperControlledWalletsClient({
|
|
70
|
+
apiKey: options.apiKey,
|
|
71
|
+
entitySecret: options.entitySecret,
|
|
72
|
+
...(options.baseUrl ? { baseUrl: options.baseUrl } : {}),
|
|
73
|
+
});
|
|
74
|
+
this.signer = new CircleAgentWalletSigner(client, options.walletId, options.walletAddress);
|
|
75
|
+
// Gasless Gateway batching with an `exact` EIP-3009 fallback. The signer is
|
|
76
|
+
// a custodial Circle Agent Wallet, not a local private key.
|
|
77
|
+
registerBatchScheme(this.x402, {
|
|
78
|
+
signer: this.signer,
|
|
79
|
+
fallbackScheme: new ExactEvmScheme(this.signer),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
async createWordPayment(session) {
|
|
83
|
+
if (!session.paymentRequired) {
|
|
84
|
+
throw new Error("Session did not include an x402 one-word payment requirement");
|
|
85
|
+
}
|
|
86
|
+
// Resolve the wallet address up front so the synchronous `address` read
|
|
87
|
+
// inside createPaymentPayload sees a real value.
|
|
88
|
+
await this.signer.ensureAddress();
|
|
89
|
+
return {
|
|
90
|
+
paymentPayload: await this.x402.createPaymentPayload(session.paymentRequired),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Circle's signTypedData API expects a complete EIP-712 document as a JSON
|
|
96
|
+
* string. The x402 schemes pass viem-style typed data, which omits the implicit
|
|
97
|
+
* `EIP712Domain` type, so add it back from whichever domain fields are present.
|
|
98
|
+
*
|
|
99
|
+
* Exported for unit testing — application code never calls this directly.
|
|
100
|
+
*/
|
|
101
|
+
/**
|
|
102
|
+
* Serialize an EIP-712 document to the JSON string Circle's API expects. The
|
|
103
|
+
* `exact` fallback scheme passes the authorization's `value`/`validAfter`/
|
|
104
|
+
* `validBefore` as bigints, which `JSON.stringify` cannot encode — emit them as
|
|
105
|
+
* decimal strings (the EIP-712 JSON convention) instead of throwing.
|
|
106
|
+
*
|
|
107
|
+
* Exported for unit testing — application code never calls this directly.
|
|
108
|
+
*/
|
|
109
|
+
export function serializeTypedData(typed) {
|
|
110
|
+
return JSON.stringify(typed, (_key, value) => typeof value === "bigint" ? value.toString() : value);
|
|
111
|
+
}
|
|
112
|
+
export function toEip712Payload(typed) {
|
|
113
|
+
const domain = typed.domain ?? {};
|
|
114
|
+
const types = { ...typed.types };
|
|
115
|
+
if (!types.EIP712Domain) {
|
|
116
|
+
types.EIP712Domain = eip712DomainFields(domain);
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
domain,
|
|
120
|
+
types,
|
|
121
|
+
primaryType: typed.primaryType,
|
|
122
|
+
message: eip712PrimaryMessage(typed.message, types, typed.primaryType),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function eip712DomainFields(domain) {
|
|
126
|
+
const candidates = [
|
|
127
|
+
["name", "string"],
|
|
128
|
+
["version", "string"],
|
|
129
|
+
["chainId", "uint256"],
|
|
130
|
+
["verifyingContract", "address"],
|
|
131
|
+
["salt", "bytes32"],
|
|
132
|
+
];
|
|
133
|
+
return candidates
|
|
134
|
+
.filter(([field]) => domain[field] !== undefined)
|
|
135
|
+
.map(([name, type]) => ({ name, type }));
|
|
136
|
+
}
|
|
137
|
+
function eip712PrimaryMessage(message, types, primaryType) {
|
|
138
|
+
const fields = types[primaryType];
|
|
139
|
+
if (!Array.isArray(fields)) {
|
|
140
|
+
return message;
|
|
141
|
+
}
|
|
142
|
+
const allowed = new Set(fields
|
|
143
|
+
.map((field) => (isEip712Field(field) ? field.name : undefined))
|
|
144
|
+
.filter((name) => Boolean(name)));
|
|
145
|
+
if (allowed.size === 0) {
|
|
146
|
+
return message;
|
|
147
|
+
}
|
|
148
|
+
return Object.fromEntries(Object.entries(message).filter(([key]) => allowed.has(key)));
|
|
149
|
+
}
|
|
150
|
+
function isEip712Field(field) {
|
|
151
|
+
return (typeof field === "object" &&
|
|
152
|
+
field !== null &&
|
|
153
|
+
typeof field.name === "string" &&
|
|
154
|
+
typeof field.type === "string");
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=circle-agent-wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-agent-wallet.js","sourceRoot":"","sources":["../src/circle-agent-wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circle-agent-wallet.test.d.ts","sourceRoot":"","sources":["../src/circle-agent-wallet.test.ts"],"names":[],"mappings":""}
|