agentwallet-sdk 5.1.1 → 5.2.0

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.
Files changed (311) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +208 -21
  3. package/dist/bridge/__tests__/solana.test.d.ts +2 -0
  4. package/dist/bridge/__tests__/solana.test.d.ts.map +1 -0
  5. package/dist/bridge/__tests__/solana.test.js +106 -0
  6. package/dist/bridge/__tests__/solana.test.js.map +1 -0
  7. package/dist/bridge/client.d.ts +21 -7
  8. package/dist/bridge/client.d.ts.map +1 -1
  9. package/dist/bridge/client.js +16 -1
  10. package/dist/bridge/client.js.map +1 -1
  11. package/dist/bridge/index.d.ts +12 -1
  12. package/dist/bridge/index.d.ts.map +1 -1
  13. package/dist/bridge/index.js +11 -0
  14. package/dist/bridge/index.js.map +1 -1
  15. package/dist/bridge/solana.d.ts +132 -0
  16. package/dist/bridge/solana.d.ts.map +1 -0
  17. package/dist/bridge/solana.js +313 -0
  18. package/dist/bridge/solana.js.map +1 -0
  19. package/dist/bridge/types.d.ts +35 -10
  20. package/dist/bridge/types.d.ts.map +1 -1
  21. package/dist/bridge/types.js +16 -4
  22. package/dist/bridge/types.js.map +1 -1
  23. package/dist/index.d.ts +215 -288
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -3
  26. package/dist/index.js.map +1 -1
  27. package/dist/swap/SwapModule.d.ts +17 -3
  28. package/dist/swap/SwapModule.d.ts.map +1 -1
  29. package/dist/swap/SwapModule.js +20 -4
  30. package/dist/swap/SwapModule.js.map +1 -1
  31. package/dist/swap/index.d.ts +9 -2
  32. package/dist/swap/index.d.ts.map +1 -1
  33. package/dist/swap/index.js +8 -1
  34. package/dist/swap/index.js.map +1 -1
  35. package/dist/swap/types.d.ts +58 -1
  36. package/dist/swap/types.d.ts.map +1 -1
  37. package/dist/swap/types.js +56 -1
  38. package/dist/swap/types.js.map +1 -1
  39. package/dist/types.d.ts +20 -1
  40. package/dist/types.d.ts.map +1 -1
  41. package/dist/types.js +6 -0
  42. package/dist/types.js.map +1 -1
  43. package/dist/x402/__tests__/client.test.js +77 -5
  44. package/dist/x402/__tests__/client.test.js.map +1 -1
  45. package/dist/x402/chains/stellar/index.d.ts +149 -0
  46. package/dist/x402/chains/stellar/index.d.ts.map +1 -0
  47. package/dist/x402/chains/stellar/index.js +197 -0
  48. package/dist/x402/chains/stellar/index.js.map +1 -0
  49. package/dist/x402/client.d.ts.map +1 -1
  50. package/dist/x402/client.js.map +1 -1
  51. package/dist/x402/types.d.ts +22 -3
  52. package/dist/x402/types.d.ts.map +1 -1
  53. package/dist/x402/types.js +34 -4
  54. package/dist/x402/types.js.map +1 -1
  55. package/package.json +16 -5
  56. package/dist/ap2/index.d.ts +0 -185
  57. package/dist/ap2/index.d.ts.map +0 -1
  58. package/dist/ap2/index.js +0 -255
  59. package/dist/ap2/index.js.map +0 -1
  60. package/dist/bridge/unified.d.ts +0 -101
  61. package/dist/bridge/unified.d.ts.map +0 -1
  62. package/dist/bridge/unified.js +0 -284
  63. package/dist/bridge/unified.js.map +0 -1
  64. package/dist/chains.d.ts +0 -62
  65. package/dist/chains.d.ts.map +0 -1
  66. package/dist/chains.js +0 -108
  67. package/dist/chains.js.map +0 -1
  68. package/dist/fiat/index.d.ts +0 -10
  69. package/dist/fiat/index.d.ts.map +0 -1
  70. package/dist/fiat/index.js +0 -9
  71. package/dist/fiat/index.js.map +0 -1
  72. package/dist/fiat/onramp.d.ts +0 -101
  73. package/dist/fiat/onramp.d.ts.map +0 -1
  74. package/dist/fiat/onramp.js +0 -155
  75. package/dist/fiat/onramp.js.map +0 -1
  76. package/dist/fiat/providers/index.d.ts +0 -16
  77. package/dist/fiat/providers/index.d.ts.map +0 -1
  78. package/dist/fiat/providers/index.js +0 -30
  79. package/dist/fiat/providers/index.js.map +0 -1
  80. package/dist/fiat/providers/moonpay.d.ts +0 -22
  81. package/dist/fiat/providers/moonpay.d.ts.map +0 -1
  82. package/dist/fiat/providers/moonpay.js +0 -107
  83. package/dist/fiat/providers/moonpay.js.map +0 -1
  84. package/dist/fiat/providers/stripe.d.ts +0 -26
  85. package/dist/fiat/providers/stripe.d.ts.map +0 -1
  86. package/dist/fiat/providers/stripe.js +0 -135
  87. package/dist/fiat/providers/stripe.js.map +0 -1
  88. package/dist/fiat/providers/transak.d.ts +0 -26
  89. package/dist/fiat/providers/transak.d.ts.map +0 -1
  90. package/dist/fiat/providers/transak.js +0 -119
  91. package/dist/fiat/providers/transak.js.map +0 -1
  92. package/dist/fiat/types.d.ts +0 -106
  93. package/dist/fiat/types.d.ts.map +0 -1
  94. package/dist/fiat/types.js +0 -13
  95. package/dist/fiat/types.js.map +0 -1
  96. package/dist/flash/executor.d.ts +0 -119
  97. package/dist/flash/executor.d.ts.map +0 -1
  98. package/dist/flash/executor.js +0 -195
  99. package/dist/flash/executor.js.map +0 -1
  100. package/dist/flash/index.d.ts +0 -28
  101. package/dist/flash/index.d.ts.map +0 -1
  102. package/dist/flash/index.js +0 -29
  103. package/dist/flash/index.js.map +0 -1
  104. package/dist/flash/scanner.d.ts +0 -133
  105. package/dist/flash/scanner.d.ts.map +0 -1
  106. package/dist/flash/scanner.js +0 -212
  107. package/dist/flash/scanner.js.map +0 -1
  108. package/dist/flash/types.d.ts +0 -136
  109. package/dist/flash/types.d.ts.map +0 -1
  110. package/dist/flash/types.js +0 -23
  111. package/dist/flash/types.js.map +0 -1
  112. package/dist/gas/index.d.ts +0 -4
  113. package/dist/gas/index.d.ts.map +0 -1
  114. package/dist/gas/index.js +0 -3
  115. package/dist/gas/index.js.map +0 -1
  116. package/dist/gas/sponsor.d.ts +0 -70
  117. package/dist/gas/sponsor.d.ts.map +0 -1
  118. package/dist/gas/sponsor.js +0 -193
  119. package/dist/gas/sponsor.js.map +0 -1
  120. package/dist/gas/types.d.ts +0 -76
  121. package/dist/gas/types.d.ts.map +0 -1
  122. package/dist/gas/types.js +0 -21
  123. package/dist/gas/types.js.map +0 -1
  124. package/dist/identity/agent-identity.d.ts +0 -276
  125. package/dist/identity/agent-identity.d.ts.map +0 -1
  126. package/dist/identity/agent-identity.js +0 -300
  127. package/dist/identity/agent-identity.js.map +0 -1
  128. package/dist/identity/email-resolver.d.ts +0 -235
  129. package/dist/identity/email-resolver.js +0 -283
  130. package/dist/identity/erc6551.d.ts +0 -441
  131. package/dist/identity/erc6551.d.ts.map +0 -1
  132. package/dist/identity/erc6551.js +0 -517
  133. package/dist/identity/erc6551.js.map +0 -1
  134. package/dist/mev/index.d.ts +0 -4
  135. package/dist/mev/index.d.ts.map +0 -1
  136. package/dist/mev/index.js +0 -8
  137. package/dist/mev/index.js.map +0 -1
  138. package/dist/mev/protection.d.ts +0 -54
  139. package/dist/mev/protection.d.ts.map +0 -1
  140. package/dist/mev/protection.js +0 -185
  141. package/dist/mev/protection.js.map +0 -1
  142. package/dist/mev/risk.d.ts +0 -19
  143. package/dist/mev/risk.d.ts.map +0 -1
  144. package/dist/mev/risk.js +0 -95
  145. package/dist/mev/risk.js.map +0 -1
  146. package/dist/mev/types.d.ts +0 -49
  147. package/dist/mev/types.d.ts.map +0 -1
  148. package/dist/mev/types.js +0 -2
  149. package/dist/mev/types.js.map +0 -1
  150. package/dist/settlement/index.d.ts +0 -4
  151. package/dist/settlement/index.d.ts.map +0 -1
  152. package/dist/settlement/index.js +0 -3
  153. package/dist/settlement/index.js.map +0 -1
  154. package/dist/settlement/types.d.ts +0 -66
  155. package/dist/settlement/types.d.ts.map +0 -1
  156. package/dist/settlement/types.js +0 -37
  157. package/dist/settlement/types.js.map +0 -1
  158. package/dist/settlement/verifier.d.ts +0 -75
  159. package/dist/settlement/verifier.d.ts.map +0 -1
  160. package/dist/settlement/verifier.js +0 -354
  161. package/dist/settlement/verifier.js.map +0 -1
  162. package/dist/solana/bridge.d.ts +0 -144
  163. package/dist/solana/bridge.d.ts.map +0 -1
  164. package/dist/solana/bridge.js +0 -352
  165. package/dist/solana/bridge.js.map +0 -1
  166. package/dist/solana/index.d.ts +0 -8
  167. package/dist/solana/index.d.ts.map +0 -1
  168. package/dist/solana/index.js +0 -6
  169. package/dist/solana/index.js.map +0 -1
  170. package/dist/solana/swap.d.ts +0 -85
  171. package/dist/solana/swap.d.ts.map +0 -1
  172. package/dist/solana/swap.js +0 -173
  173. package/dist/solana/swap.js.map +0 -1
  174. package/dist/solana/types.d.ts +0 -126
  175. package/dist/solana/types.d.ts.map +0 -1
  176. package/dist/solana/types.js +0 -10
  177. package/dist/solana/types.js.map +0 -1
  178. package/dist/solana/wallet.d.ts +0 -83
  179. package/dist/solana/wallet.d.ts.map +0 -1
  180. package/dist/solana/wallet.js +0 -164
  181. package/dist/solana/wallet.js.map +0 -1
  182. package/dist/solana/x402.d.ts +0 -69
  183. package/dist/solana/x402.d.ts.map +0 -1
  184. package/dist/solana/x402.js +0 -154
  185. package/dist/solana/x402.js.map +0 -1
  186. package/dist/solver/adapter.d.ts +0 -47
  187. package/dist/solver/adapter.d.ts.map +0 -1
  188. package/dist/solver/adapter.js +0 -146
  189. package/dist/solver/adapter.js.map +0 -1
  190. package/dist/solver/analyzer.d.ts +0 -48
  191. package/dist/solver/analyzer.d.ts.map +0 -1
  192. package/dist/solver/analyzer.js +0 -171
  193. package/dist/solver/analyzer.js.map +0 -1
  194. package/dist/solver/builder.d.ts +0 -31
  195. package/dist/solver/builder.d.ts.map +0 -1
  196. package/dist/solver/builder.js +0 -60
  197. package/dist/solver/builder.js.map +0 -1
  198. package/dist/solver/index.d.ts +0 -22
  199. package/dist/solver/index.d.ts.map +0 -1
  200. package/dist/solver/index.js +0 -25
  201. package/dist/solver/index.js.map +0 -1
  202. package/dist/solver/types.d.ts +0 -115
  203. package/dist/solver/types.d.ts.map +0 -1
  204. package/dist/solver/types.js +0 -10
  205. package/dist/solver/types.js.map +0 -1
  206. package/dist/spend-guard/index.d.ts +0 -125
  207. package/dist/spend-guard/index.d.ts.map +0 -1
  208. package/dist/spend-guard/index.js +0 -150
  209. package/dist/spend-guard/index.js.map +0 -1
  210. package/dist/swap/router/cache.d.ts +0 -13
  211. package/dist/swap/router/cache.d.ts.map +0 -1
  212. package/dist/swap/router/cache.js +0 -30
  213. package/dist/swap/router/cache.js.map +0 -1
  214. package/dist/swap/router/flashbots.d.ts +0 -10
  215. package/dist/swap/router/flashbots.d.ts.map +0 -1
  216. package/dist/swap/router/flashbots.js +0 -43
  217. package/dist/swap/router/flashbots.js.map +0 -1
  218. package/dist/swap/router/health.d.ts +0 -17
  219. package/dist/swap/router/health.d.ts.map +0 -1
  220. package/dist/swap/router/health.js +0 -38
  221. package/dist/swap/router/health.js.map +0 -1
  222. package/dist/swap/router/index.d.ts +0 -10
  223. package/dist/swap/router/index.d.ts.map +0 -1
  224. package/dist/swap/router/index.js +0 -10
  225. package/dist/swap/router/index.js.map +0 -1
  226. package/dist/swap/router/providers/cowswap.d.ts +0 -11
  227. package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
  228. package/dist/swap/router/providers/cowswap.js +0 -79
  229. package/dist/swap/router/providers/cowswap.js.map +0 -1
  230. package/dist/swap/router/providers/index.d.ts +0 -20
  231. package/dist/swap/router/providers/index.d.ts.map +0 -1
  232. package/dist/swap/router/providers/index.js +0 -32
  233. package/dist/swap/router/providers/index.js.map +0 -1
  234. package/dist/swap/router/providers/jupiter.d.ts +0 -12
  235. package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
  236. package/dist/swap/router/providers/jupiter.js +0 -73
  237. package/dist/swap/router/providers/jupiter.js.map +0 -1
  238. package/dist/swap/router/providers/lifi.d.ts +0 -11
  239. package/dist/swap/router/providers/lifi.d.ts.map +0 -1
  240. package/dist/swap/router/providers/lifi.js +0 -123
  241. package/dist/swap/router/providers/lifi.js.map +0 -1
  242. package/dist/swap/router/providers/oneinch.d.ts +0 -13
  243. package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
  244. package/dist/swap/router/providers/oneinch.js +0 -71
  245. package/dist/swap/router/providers/oneinch.js.map +0 -1
  246. package/dist/swap/router/providers/paraswap.d.ts +0 -11
  247. package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
  248. package/dist/swap/router/providers/paraswap.js +0 -73
  249. package/dist/swap/router/providers/paraswap.js.map +0 -1
  250. package/dist/swap/router/providers/uniswap.d.ts +0 -31
  251. package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
  252. package/dist/swap/router/providers/uniswap.js +0 -237
  253. package/dist/swap/router/providers/uniswap.js.map +0 -1
  254. package/dist/swap/router/providers/zerox.d.ts +0 -13
  255. package/dist/swap/router/providers/zerox.d.ts.map +0 -1
  256. package/dist/swap/router/providers/zerox.js +0 -94
  257. package/dist/swap/router/providers/zerox.js.map +0 -1
  258. package/dist/swap/router/router.d.ts +0 -86
  259. package/dist/swap/router/router.d.ts.map +0 -1
  260. package/dist/swap/router/router.js +0 -224
  261. package/dist/swap/router/router.js.map +0 -1
  262. package/dist/swap/router/rsi/engine.d.ts +0 -60
  263. package/dist/swap/router/rsi/engine.d.ts.map +0 -1
  264. package/dist/swap/router/rsi/engine.js +0 -483
  265. package/dist/swap/router/rsi/engine.js.map +0 -1
  266. package/dist/swap/router/rsi/index.d.ts +0 -3
  267. package/dist/swap/router/rsi/index.d.ts.map +0 -1
  268. package/dist/swap/router/rsi/index.js +0 -3
  269. package/dist/swap/router/rsi/index.js.map +0 -1
  270. package/dist/swap/router/rsi/types.d.ts +0 -106
  271. package/dist/swap/router/rsi/types.d.ts.map +0 -1
  272. package/dist/swap/router/rsi/types.js +0 -3
  273. package/dist/swap/router/rsi/types.js.map +0 -1
  274. package/dist/swap/router/types.d.ts +0 -120
  275. package/dist/swap/router/types.d.ts.map +0 -1
  276. package/dist/swap/router/types.js +0 -16
  277. package/dist/swap/router/types.js.map +0 -1
  278. package/dist/tax/engine.d.ts +0 -131
  279. package/dist/tax/engine.d.ts.map +0 -1
  280. package/dist/tax/engine.js +0 -307
  281. package/dist/tax/engine.js.map +0 -1
  282. package/dist/tax/index.d.ts +0 -9
  283. package/dist/tax/index.d.ts.map +0 -1
  284. package/dist/tax/index.js +0 -12
  285. package/dist/tax/index.js.map +0 -1
  286. package/dist/tax/lots.d.ts +0 -60
  287. package/dist/tax/lots.d.ts.map +0 -1
  288. package/dist/tax/lots.js +0 -129
  289. package/dist/tax/lots.js.map +0 -1
  290. package/dist/tax/types.d.ts +0 -113
  291. package/dist/tax/types.d.ts.map +0 -1
  292. package/dist/tax/types.js +0 -18
  293. package/dist/tax/types.js.map +0 -1
  294. package/dist/verifiable-intent/index.d.ts +0 -84
  295. package/dist/verifiable-intent/index.js +0 -385
  296. package/dist/yield/index.d.ts +0 -26
  297. package/dist/yield/index.d.ts.map +0 -1
  298. package/dist/yield/index.js +0 -29
  299. package/dist/yield/index.js.map +0 -1
  300. package/dist/yield/rates.d.ts +0 -114
  301. package/dist/yield/rates.d.ts.map +0 -1
  302. package/dist/yield/rates.js +0 -351
  303. package/dist/yield/rates.js.map +0 -1
  304. package/dist/yield/types.d.ts +0 -134
  305. package/dist/yield/types.d.ts.map +0 -1
  306. package/dist/yield/types.js +0 -24
  307. package/dist/yield/types.js.map +0 -1
  308. package/dist/yield/vault.d.ts +0 -112
  309. package/dist/yield/vault.d.ts.map +0 -1
  310. package/dist/yield/vault.js +0 -264
  311. package/dist/yield/vault.js.map +0 -1
@@ -1,300 +0,0 @@
1
- /**
2
- * MIT License
3
- *
4
- * Copyright (c) 2026 AgentNexus / agentwallet-sdk contributors
5
- *
6
- * Permission is hereby granted, free of charge, to any person obtaining a copy
7
- * of this software and associated documentation files (the "Software"), to deal
8
- * in the Software without restriction, including without limitation the rights
9
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- * copies of the Software, and to permit persons to whom the Software is
11
- * furnished to do so, subject to the following conditions:
12
- *
13
- * The above copyright notice and this permission notice shall be included in all
14
- * copies or substantial portions of the Software.
15
- *
16
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
- * SOFTWARE.
23
- */
24
- import { ERC8004Client, } from './erc8004.js';
25
- import { ERC6551Client, DEFAULT_SALT, } from './erc6551.js';
26
- // ─── AgentIdentity ────────────────────────────────────────────────────────────
27
- /**
28
- * AgentIdentity — unified ERC-8004 + ERC-6551 identity manager.
29
- *
30
- * Provides a single interface to manage an agent's complete on-chain identity:
31
- * - ERC-8004: NFT registration with metadata and service endpoints
32
- * - ERC-6551: Token Bound Account (TBA) — the agent's autonomous wallet
33
- *
34
- * @example
35
- * ```typescript
36
- * import { AgentIdentity } from 'agentwallet-sdk';
37
- * import { createWalletClient, http } from 'viem';
38
- * import { privateKeyToAccount } from 'viem/accounts';
39
- * import { base } from 'viem/chains';
40
- *
41
- * const wallet = createWalletClient({
42
- * account: privateKeyToAccount('0xYOUR_PRIVATE_KEY'),
43
- * chain: base,
44
- * transport: http(),
45
- * });
46
- *
47
- * const identity = new AgentIdentity({
48
- * wallet,
49
- * chain: 'base',
50
- * registryAddress: '0xYOUR_ERC8004_REGISTRY',
51
- * });
52
- *
53
- * // 1. Register agent NFT (ERC-8004)
54
- * const { agentId } = await identity.register({
55
- * name: 'MyTradingAgent',
56
- * description: 'Autonomous DeFi trading agent',
57
- * x402Support: true,
58
- * });
59
- *
60
- * // 2. Deploy TBA (ERC-6551) — NFT now owns an autonomous wallet
61
- * await identity.deployTBA();
62
- * console.log('Agent TBA:', identity.tbaAddress);
63
- *
64
- * // 3. Execute from TBA (agent acts on-chain)
65
- * await identity.execute({
66
- * to: TASKBRIDGE_CONTRACT,
67
- * value: parseEther('0.01'),
68
- * data: encodedCalldata,
69
- * });
70
- * ```
71
- */
72
- export class AgentIdentity {
73
- constructor(config) {
74
- this._agentId = null;
75
- this._nftContract = null;
76
- this._tbaAccount = null;
77
- this.wallet = config.wallet;
78
- this.chain = config.chain ?? 'base';
79
- this.tbaSalt = config.tbaSalt ?? DEFAULT_SALT;
80
- // ERC-8004 client — optional (some agents may only use ERC-6551)
81
- if (config.registryAddress) {
82
- this.erc8004 = new ERC8004Client({
83
- registryAddress: config.registryAddress,
84
- chain: this.chain,
85
- rpcUrl: config.rpcUrl,
86
- });
87
- this._nftContract = config.registryAddress;
88
- }
89
- else {
90
- this.erc8004 = null;
91
- }
92
- // ERC-6551 client — always initialized
93
- this.erc6551 = new ERC6551Client({
94
- chain: this.chain,
95
- registryAddress: config.tbaRegistryAddress,
96
- implementationAddress: config.tbaImplementationAddress,
97
- rpcUrl: config.rpcUrl,
98
- });
99
- }
100
- // ─── ERC-8004: Registration ───────────────────────────────────────────────
101
- /**
102
- * Register this agent as an ERC-8004 identity NFT on-chain.
103
- *
104
- * Builds a spec-compliant agent registration file and mints an ERC-721 NFT
105
- * via the ERC-8004 Identity Registry. After registration, the NFT represents
106
- * the agent's permanent, portable on-chain identity.
107
- *
108
- * Non-custodial: the wallet signs the registration transaction locally.
109
- *
110
- * @param metadata - Agent metadata for the registration file
111
- * @param agentURI - Optional external URI (IPFS/HTTPS). Auto-builds data URI if omitted.
112
- * @returns Registration result with txHash and agentId
113
- * @throws Error if no registryAddress was provided in config
114
- */
115
- async register(metadata, agentURI) {
116
- if (!this.erc8004) {
117
- throw new Error('AgentIdentity: registryAddress is required for ERC-8004 registration. ' +
118
- 'Provide it in the constructor config.');
119
- }
120
- const result = await this.erc8004.registerAgent(this.wallet, metadata, agentURI);
121
- if (result.agentId !== null) {
122
- this._agentId = result.agentId;
123
- }
124
- return result;
125
- }
126
- /**
127
- * Restore a previously registered agent identity.
128
- *
129
- * Use this when you already have an agentId from a prior session.
130
- * Sets the internal agentId so deployTBA() and execute() work correctly.
131
- *
132
- * @param agentId - Previously registered ERC-8004 token ID
133
- * @param nftContract - The ERC-8004 registry contract (= registryAddress in config)
134
- */
135
- setAgentId(agentId, nftContract) {
136
- this._agentId = agentId;
137
- if (nftContract)
138
- this._nftContract = nftContract;
139
- }
140
- // ─── ERC-6551: TBA Deployment ─────────────────────────────────────────────
141
- /**
142
- * Deploy the Token Bound Account for this agent's NFT.
143
- *
144
- * The TBA address is deterministic — you can compute it before deployment
145
- * via `computeTBAAddress()`. This call deploys the actual smart contract at
146
- * that address, enabling the agent to act autonomously on-chain.
147
- *
148
- * Idempotent: calling deployTBA() on an already-deployed TBA is safe.
149
- *
150
- * @param nftContract - Override: NFT contract to bind the TBA to.
151
- * Defaults to the registryAddress (ERC-8004 registry is also the NFT contract).
152
- * @param tokenId - Override: token ID. Defaults to the registered agentId.
153
- * @returns Deployed TBAAccount
154
- * @throws Error if agentId not set (call register() first or use setAgentId())
155
- */
156
- async deployTBA(nftContract, tokenId) {
157
- const resolvedContract = nftContract ?? this._nftContract;
158
- const resolvedTokenId = tokenId ?? this._agentId;
159
- if (!resolvedContract) {
160
- throw new Error('AgentIdentity: NFT contract address unknown. ' +
161
- 'Provide registryAddress in config or pass nftContract to deployTBA().');
162
- }
163
- if (resolvedTokenId === null) {
164
- throw new Error('AgentIdentity: agentId not set. ' +
165
- 'Call register() first or use setAgentId() to restore a prior identity.');
166
- }
167
- const tbaAccount = await this.erc6551.createTBA(this.wallet, resolvedContract, resolvedTokenId, this.tbaSalt);
168
- this._tbaAccount = tbaAccount;
169
- return tbaAccount;
170
- }
171
- /**
172
- * Compute the deterministic TBA address without deploying.
173
- *
174
- * Useful for pre-computing the address to fund it before deployment,
175
- * or to check if a TBA already exists.
176
- *
177
- * @param nftContract - NFT contract (defaults to registryAddress)
178
- * @param tokenId - Token ID (defaults to agentId)
179
- * @returns Deterministic TBA address
180
- */
181
- computeTBAAddress(nftContract, tokenId) {
182
- const resolvedContract = nftContract ?? this._nftContract;
183
- const resolvedTokenId = tokenId ?? this._agentId;
184
- if (!resolvedContract || resolvedTokenId === null) {
185
- throw new Error('AgentIdentity: nftContract and tokenId required to compute TBA address.');
186
- }
187
- return this.erc6551.computeTBAAddress(resolvedContract, resolvedTokenId, this.tbaSalt);
188
- }
189
- /**
190
- * Load TBA state without deploying — useful for resuming a session.
191
- * Sets internal TBA state so execute() works without re-deploying.
192
- *
193
- * @param nftContract - NFT contract (defaults to registryAddress)
194
- * @param tokenId - Token ID (defaults to agentId)
195
- */
196
- async loadTBA(nftContract, tokenId) {
197
- const resolvedContract = nftContract ?? this._nftContract;
198
- const resolvedTokenId = tokenId ?? this._agentId;
199
- if (!resolvedContract || resolvedTokenId === null) {
200
- throw new Error('AgentIdentity: nftContract and tokenId required to load TBA.');
201
- }
202
- const tbaAccount = await this.erc6551.getTBAAccount(resolvedContract, resolvedTokenId, this.tbaSalt);
203
- this._tbaAccount = tbaAccount;
204
- return tbaAccount;
205
- }
206
- // ─── ERC-6551: Execution ──────────────────────────────────────────────────
207
- /**
208
- * Execute a call from the agent's TBA (the agent acts autonomously).
209
- *
210
- * Routes the call through the TBA's `execute()` function, which verifies
211
- * the caller owns the NFT before dispatching to the target contract.
212
- *
213
- * @param params - Call parameters (to, value, data, operation)
214
- * @returns Transaction hash and return data
215
- * @throws Error if TBA not deployed (call deployTBA() first)
216
- *
217
- * @example
218
- * ```typescript
219
- * // Agent bids on a TaskBridge task
220
- * await identity.execute({
221
- * to: TASKBRIDGE_ADDRESS,
222
- * value: 0n,
223
- * data: encodeFunctionData({
224
- * abi: TaskBridgeAbi,
225
- * functionName: 'bid',
226
- * args: [taskId, bidAmount],
227
- * }),
228
- * });
229
- * ```
230
- */
231
- async execute(params) {
232
- const tbaAddress = this.tbaAddress;
233
- if (!tbaAddress) {
234
- throw new Error('AgentIdentity: TBA not deployed. Call deployTBA() first or loadTBA() to restore.');
235
- }
236
- return this.erc6551.executeTBA(this.wallet, tbaAddress, params);
237
- }
238
- // ─── State accessors ──────────────────────────────────────────────────────
239
- /**
240
- * The agent's ERC-8004 token ID (null before registration).
241
- */
242
- get agentId() {
243
- return this._agentId;
244
- }
245
- /**
246
- * The agent's TBA address (null before deployTBA() or loadTBA()).
247
- */
248
- get tbaAddress() {
249
- return this._tbaAccount?.address ?? null;
250
- }
251
- /**
252
- * Full TBA account details (null before deployTBA() or loadTBA()).
253
- */
254
- get tbaAccount() {
255
- return this._tbaAccount;
256
- }
257
- /**
258
- * Whether the agent's ERC-8004 NFT is registered.
259
- */
260
- get isRegistered() {
261
- return this._agentId !== null;
262
- }
263
- /**
264
- * Whether the agent's TBA is deployed on-chain.
265
- */
266
- get isTBADeployed() {
267
- return this._tbaAccount?.isDeployed === true;
268
- }
269
- /**
270
- * The wallet account address (human principal / NFT owner).
271
- */
272
- get ownerAddress() {
273
- return this.wallet.account?.address ?? null;
274
- }
275
- /**
276
- * Full identity state snapshot.
277
- */
278
- get state() {
279
- return {
280
- agentId: this._agentId,
281
- tbaAddress: this.tbaAddress,
282
- isRegistered: this.isRegistered,
283
- isTBADeployed: this.isTBADeployed,
284
- owner: this.ownerAddress,
285
- };
286
- }
287
- /**
288
- * Direct access to the underlying ERC6551Client for advanced usage.
289
- */
290
- get erc6551Client() {
291
- return this.erc6551;
292
- }
293
- /**
294
- * Direct access to the underlying ERC8004Client (null if no registryAddress provided).
295
- */
296
- get erc8004Client() {
297
- return this.erc8004;
298
- }
299
- }
300
- //# sourceMappingURL=agent-identity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-identity.js","sourceRoot":"","sources":["../../src/identity/agent-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAoBH,OAAO,EACL,aAAa,GAId,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,EACb,YAAY,GAKb,MAAM,cAAc,CAAC;AAsEtB,iFAAiF;AAEjF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,OAAO,aAAa;IAYxB,YAAY,MAA2B;QAJ/B,aAAQ,GAAkB,IAAI,CAAC;QAC/B,iBAAY,GAAmB,IAAI,CAAC;QACpC,gBAAW,GAAsB,IAAI,CAAC;QAG5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC;QAE9C,iEAAiE;QACjE,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC;gBAC/B,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;YACH,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,uCAAuC;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,aAAa,CAAC;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,eAAe,EAAE,MAAM,CAAC,kBAAkB;YAC1C,qBAAqB,EAAE,MAAM,CAAC,wBAAwB;YACtD,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAE7E;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,QAAQ,CACZ,QAA6C,EAC7C,QAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,wEAAwE;gBACxE,uCAAuC,CACxC,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAC7C,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,QAAQ,CACT,CAAC;QAEF,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;OAQG;IACH,UAAU,CAAC,OAAe,EAAE,WAAqB;QAC/C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,WAAW;YAAE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;IACnD,CAAC;IAED,6EAA6E;IAE7E;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,SAAS,CACb,WAAqB,EACrB,OAAgB;QAEhB,MAAM,gBAAgB,GAAG,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC;QAC1D,MAAM,eAAe,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC;QAEjD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,+CAA+C;gBAC/C,uEAAuE,CACxE,CAAC;QACJ,CAAC;QACD,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,kCAAkC;gBAClC,wEAAwE,CACzE,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAC7C,IAAI,CAAC,MAAM,EACX,gBAAgB,EAChB,eAAe,EACf,IAAI,CAAC,OAAO,CACb,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;;;;;;;OASG;IACH,iBAAiB,CAAC,WAAqB,EAAE,OAAgB;QACvD,MAAM,gBAAgB,GAAG,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC;QAC1D,MAAM,eAAe,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC;QAEjD,IAAI,CAAC,gBAAgB,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7F,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzF,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,CAAC,WAAqB,EAAE,OAAgB;QACnD,MAAM,gBAAgB,GAAG,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC;QAC1D,MAAM,eAAe,GAAG,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC;QAEjD,IAAI,CAAC,gBAAgB,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CACjD,gBAAgB,EAChB,eAAe,EACf,IAAI,CAAC,OAAO,CACb,CAAC;QACF,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,6EAA6E;IAE7E;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC;IAED,6EAA6E;IAE7E;;OAEG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACP,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,KAAK,EAAE,IAAI,CAAC,YAAY;SACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
@@ -1,235 +0,0 @@
1
- /**
2
- * AgentMail Integration — Email ↔ Wallet Resolver
3
- *
4
- * Gives every agent in agentwallet-sdk its own email address via AgentMail,
5
- * and resolves email addresses back to wallet addresses for payment routing.
6
- *
7
- * Architecture:
8
- * EmailResolver
9
- * ├── AgentMail API → inbox creation, send/receive, identity
10
- * └── ERC-8004 → on-chain agent registration (email stored as metadata)
11
- *
12
- * @module identity/email-resolver
13
- */
14
-
15
- /** Config to initialise the EmailResolver */
16
- export interface EmailResolverConfig {
17
- /**
18
- * AgentMail API key.
19
- * Get one at https://app.agentmail.to
20
- */
21
- agentMailApiKey: string;
22
-
23
- /**
24
- * Base URL override (default: https://api.agentmail.to/v0)
25
- */
26
- baseUrl?: string;
27
-
28
- /**
29
- * Optional local in-memory cache TTL in seconds (default: 300).
30
- * Avoids repeated lookups for the same address.
31
- */
32
- cacheTtlSeconds?: number;
33
- }
34
-
35
- /** A registered agent inbox */
36
- export interface AgentInbox {
37
- /** Fully-qualified email address, e.g. trading-agent@agentmail.to */
38
- emailAddress: string;
39
- /** AgentMail inbox ID */
40
- inboxId: string;
41
- /** Display name (usually the agent's ERC-8004 name) */
42
- displayName: string;
43
- /** ISO timestamp of creation */
44
- createdAt: string;
45
- }
46
-
47
- /** Result of resolving an email → wallet */
48
- export interface WalletResolution {
49
- /** The email address that was resolved */
50
- emailAddress: string;
51
- /** On-chain wallet address (or TBA address) */
52
- walletAddress: string;
53
- /** Chain the wallet is on (default: 'base') */
54
- chain: string;
55
- /** Source of the resolution */
56
- source: 'agentmail' | 'ens' | 'local-registry';
57
- /** Unix timestamp when this resolution was cached */
58
- resolvedAt: number;
59
- }
60
-
61
- /** An email message sent to/from an agent inbox */
62
- export interface AgentEmail {
63
- messageId: string;
64
- from: string;
65
- to: string[];
66
- subject: string;
67
- body: string;
68
- timestamp: string;
69
- threadId?: string;
70
- /** Parsed x402 payment request if the email contains one */
71
- paymentRequest?: {
72
- amount: number;
73
- currency: string;
74
- recipientWallet: string;
75
- memo?: string;
76
- };
77
- }
78
-
79
- /** Parameters for sending an email from an agent inbox */
80
- export interface SendEmailParams {
81
- inboxId: string;
82
- to: string | string[];
83
- subject: string;
84
- body: string;
85
- /** Attach an x402 payment request to the email body */
86
- paymentRequest?: {
87
- amount: number;
88
- currency: string;
89
- recipientWallet: string;
90
- memo?: string;
91
- };
92
- replyToMessageId?: string;
93
- }
94
-
95
- /**
96
- * EmailResolver — AgentMail integration for agentwallet-sdk.
97
- *
98
- * Creates and manages per-agent email inboxes, and resolves email addresses
99
- * to wallet addresses for payment routing.
100
- *
101
- * @example
102
- * ```typescript
103
- * import { EmailResolver } from 'agentwallet-sdk';
104
- *
105
- * const resolver = new EmailResolver({
106
- * agentMailApiKey: process.env.AGENTMAIL_API_KEY!,
107
- * });
108
- *
109
- * // Give your agent an email inbox
110
- * const inbox = await resolver.createInbox({
111
- * agentName: 'trading-agent',
112
- * displayName: 'Trading Agent',
113
- * walletAddress: '0xYourAgentWallet',
114
- * chain: 'base',
115
- * });
116
- * console.log(inbox.emailAddress); // trading-agent@agentmail.to
117
- *
118
- * // Resolve any agent email → wallet address
119
- * const resolution = await resolver.resolveEmailToWallet('some-agent@agentmail.to');
120
- * console.log(resolution.walletAddress); // 0x...
121
- *
122
- * // Send an email from your agent with a payment request
123
- * await resolver.sendEmail({
124
- * inboxId: inbox.inboxId,
125
- * to: 'contractor@agentmail.to',
126
- * subject: 'Task payment',
127
- * body: 'Here is your payment for the completed task.',
128
- * paymentRequest: { amount: 5, currency: 'USDC', recipientWallet: '0x...' },
129
- * });
130
- * ```
131
- */
132
- export declare class EmailResolver {
133
- private readonly apiKey: string;
134
- private readonly baseUrl: string;
135
- private readonly cacheTtl: number;
136
- private readonly cache: Map<string, WalletResolution>;
137
-
138
- constructor(config: EmailResolverConfig);
139
-
140
- /**
141
- * Create a new email inbox for an agent.
142
- * The wallet address is stored as metadata in AgentMail and linked to the inbox.
143
- *
144
- * @param params - Agent details for inbox creation
145
- * @returns The created inbox (includes the email address)
146
- */
147
- createInbox(params: {
148
- agentName: string;
149
- displayName: string;
150
- walletAddress: string;
151
- chain?: string;
152
- }): Promise<AgentInbox>;
153
-
154
- /**
155
- * List all inboxes for this API key.
156
- */
157
- listInboxes(): Promise<AgentInbox[]>;
158
-
159
- /**
160
- * Get a specific inbox by ID.
161
- */
162
- getInbox(inboxId: string): Promise<AgentInbox>;
163
-
164
- /**
165
- * Delete an inbox (e.g., when an agent is decommissioned).
166
- */
167
- deleteInbox(inboxId: string): Promise<void>;
168
-
169
- /**
170
- * Resolve an email address to a wallet address.
171
- *
172
- * Resolution order:
173
- * 1. Local cache (fast, TTL-based)
174
- * 2. AgentMail API (looks up inbox metadata)
175
- * 3. ENS reverse lookup (agent.eth-style names)
176
- *
177
- * @param emailAddress - The agent email to resolve
178
- * @returns Resolved wallet address and chain
179
- */
180
- resolveEmailToWallet(emailAddress: string): Promise<WalletResolution>;
181
-
182
- /**
183
- * Reverse lookup: find the email address for a wallet address.
184
- * Queries AgentMail for inboxes with matching wallet metadata.
185
- *
186
- * @param walletAddress - Onchain wallet address
187
- * @returns The agent's email address, or null if not found
188
- */
189
- resolveWalletToEmail(walletAddress: string): Promise<string | null>;
190
-
191
- /**
192
- * Fetch unread messages from an agent inbox.
193
- * Automatically parses x402 payment requests embedded in email bodies.
194
- *
195
- * @param inboxId - The inbox to check
196
- * @param options - Filter options
197
- */
198
- fetchMessages(
199
- inboxId: string,
200
- options?: {
201
- unreadOnly?: boolean;
202
- limit?: number;
203
- threadId?: string;
204
- }
205
- ): Promise<AgentEmail[]>;
206
-
207
- /**
208
- * Send an email from an agent inbox.
209
- * Optionally embeds an x402 payment request in the email body.
210
- *
211
- * @param params - Send parameters
212
- * @returns The sent message ID
213
- */
214
- sendEmail(params: SendEmailParams): Promise<{ messageId: string }>;
215
-
216
- /**
217
- * Reply to an existing email thread.
218
- */
219
- replyToEmail(params: {
220
- inboxId: string;
221
- messageId: string;
222
- body: string;
223
- paymentRequest?: SendEmailParams['paymentRequest'];
224
- }): Promise<{ messageId: string }>;
225
-
226
- /**
227
- * Mark a message as read.
228
- */
229
- markAsRead(inboxId: string, messageId: string): Promise<void>;
230
-
231
- /**
232
- * Clear the local resolution cache.
233
- */
234
- clearCache(): void;
235
- }