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.
- package/LICENSE +21 -0
- package/README.md +208 -21
- package/dist/bridge/__tests__/solana.test.d.ts +2 -0
- package/dist/bridge/__tests__/solana.test.d.ts.map +1 -0
- package/dist/bridge/__tests__/solana.test.js +106 -0
- package/dist/bridge/__tests__/solana.test.js.map +1 -0
- package/dist/bridge/client.d.ts +21 -7
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +16 -1
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +12 -1
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +11 -0
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/solana.d.ts +132 -0
- package/dist/bridge/solana.d.ts.map +1 -0
- package/dist/bridge/solana.js +313 -0
- package/dist/bridge/solana.js.map +1 -0
- package/dist/bridge/types.d.ts +35 -10
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +16 -4
- package/dist/bridge/types.js.map +1 -1
- package/dist/index.d.ts +215 -288
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +17 -3
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +20 -4
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/index.d.ts +9 -2
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +8 -1
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/types.d.ts +58 -1
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +56 -1
- package/dist/swap/types.js.map +1 -1
- package/dist/types.d.ts +20 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -1
- package/dist/x402/__tests__/client.test.js +77 -5
- package/dist/x402/__tests__/client.test.js.map +1 -1
- package/dist/x402/chains/stellar/index.d.ts +149 -0
- package/dist/x402/chains/stellar/index.d.ts.map +1 -0
- package/dist/x402/chains/stellar/index.js +197 -0
- package/dist/x402/chains/stellar/index.js.map +1 -0
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/types.d.ts +22 -3
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +34 -4
- package/dist/x402/types.js.map +1 -1
- package/package.json +16 -5
- package/dist/ap2/index.d.ts +0 -185
- package/dist/ap2/index.d.ts.map +0 -1
- package/dist/ap2/index.js +0 -255
- package/dist/ap2/index.js.map +0 -1
- package/dist/bridge/unified.d.ts +0 -101
- package/dist/bridge/unified.d.ts.map +0 -1
- package/dist/bridge/unified.js +0 -284
- package/dist/bridge/unified.js.map +0 -1
- package/dist/chains.d.ts +0 -62
- package/dist/chains.d.ts.map +0 -1
- package/dist/chains.js +0 -108
- package/dist/chains.js.map +0 -1
- package/dist/fiat/index.d.ts +0 -10
- package/dist/fiat/index.d.ts.map +0 -1
- package/dist/fiat/index.js +0 -9
- package/dist/fiat/index.js.map +0 -1
- package/dist/fiat/onramp.d.ts +0 -101
- package/dist/fiat/onramp.d.ts.map +0 -1
- package/dist/fiat/onramp.js +0 -155
- package/dist/fiat/onramp.js.map +0 -1
- package/dist/fiat/providers/index.d.ts +0 -16
- package/dist/fiat/providers/index.d.ts.map +0 -1
- package/dist/fiat/providers/index.js +0 -30
- package/dist/fiat/providers/index.js.map +0 -1
- package/dist/fiat/providers/moonpay.d.ts +0 -22
- package/dist/fiat/providers/moonpay.d.ts.map +0 -1
- package/dist/fiat/providers/moonpay.js +0 -107
- package/dist/fiat/providers/moonpay.js.map +0 -1
- package/dist/fiat/providers/stripe.d.ts +0 -26
- package/dist/fiat/providers/stripe.d.ts.map +0 -1
- package/dist/fiat/providers/stripe.js +0 -135
- package/dist/fiat/providers/stripe.js.map +0 -1
- package/dist/fiat/providers/transak.d.ts +0 -26
- package/dist/fiat/providers/transak.d.ts.map +0 -1
- package/dist/fiat/providers/transak.js +0 -119
- package/dist/fiat/providers/transak.js.map +0 -1
- package/dist/fiat/types.d.ts +0 -106
- package/dist/fiat/types.d.ts.map +0 -1
- package/dist/fiat/types.js +0 -13
- package/dist/fiat/types.js.map +0 -1
- package/dist/flash/executor.d.ts +0 -119
- package/dist/flash/executor.d.ts.map +0 -1
- package/dist/flash/executor.js +0 -195
- package/dist/flash/executor.js.map +0 -1
- package/dist/flash/index.d.ts +0 -28
- package/dist/flash/index.d.ts.map +0 -1
- package/dist/flash/index.js +0 -29
- package/dist/flash/index.js.map +0 -1
- package/dist/flash/scanner.d.ts +0 -133
- package/dist/flash/scanner.d.ts.map +0 -1
- package/dist/flash/scanner.js +0 -212
- package/dist/flash/scanner.js.map +0 -1
- package/dist/flash/types.d.ts +0 -136
- package/dist/flash/types.d.ts.map +0 -1
- package/dist/flash/types.js +0 -23
- package/dist/flash/types.js.map +0 -1
- package/dist/gas/index.d.ts +0 -4
- package/dist/gas/index.d.ts.map +0 -1
- package/dist/gas/index.js +0 -3
- package/dist/gas/index.js.map +0 -1
- package/dist/gas/sponsor.d.ts +0 -70
- package/dist/gas/sponsor.d.ts.map +0 -1
- package/dist/gas/sponsor.js +0 -193
- package/dist/gas/sponsor.js.map +0 -1
- package/dist/gas/types.d.ts +0 -76
- package/dist/gas/types.d.ts.map +0 -1
- package/dist/gas/types.js +0 -21
- package/dist/gas/types.js.map +0 -1
- package/dist/identity/agent-identity.d.ts +0 -276
- package/dist/identity/agent-identity.d.ts.map +0 -1
- package/dist/identity/agent-identity.js +0 -300
- package/dist/identity/agent-identity.js.map +0 -1
- package/dist/identity/email-resolver.d.ts +0 -235
- package/dist/identity/email-resolver.js +0 -283
- package/dist/identity/erc6551.d.ts +0 -441
- package/dist/identity/erc6551.d.ts.map +0 -1
- package/dist/identity/erc6551.js +0 -517
- package/dist/identity/erc6551.js.map +0 -1
- package/dist/mev/index.d.ts +0 -4
- package/dist/mev/index.d.ts.map +0 -1
- package/dist/mev/index.js +0 -8
- package/dist/mev/index.js.map +0 -1
- package/dist/mev/protection.d.ts +0 -54
- package/dist/mev/protection.d.ts.map +0 -1
- package/dist/mev/protection.js +0 -185
- package/dist/mev/protection.js.map +0 -1
- package/dist/mev/risk.d.ts +0 -19
- package/dist/mev/risk.d.ts.map +0 -1
- package/dist/mev/risk.js +0 -95
- package/dist/mev/risk.js.map +0 -1
- package/dist/mev/types.d.ts +0 -49
- package/dist/mev/types.d.ts.map +0 -1
- package/dist/mev/types.js +0 -2
- package/dist/mev/types.js.map +0 -1
- package/dist/settlement/index.d.ts +0 -4
- package/dist/settlement/index.d.ts.map +0 -1
- package/dist/settlement/index.js +0 -3
- package/dist/settlement/index.js.map +0 -1
- package/dist/settlement/types.d.ts +0 -66
- package/dist/settlement/types.d.ts.map +0 -1
- package/dist/settlement/types.js +0 -37
- package/dist/settlement/types.js.map +0 -1
- package/dist/settlement/verifier.d.ts +0 -75
- package/dist/settlement/verifier.d.ts.map +0 -1
- package/dist/settlement/verifier.js +0 -354
- package/dist/settlement/verifier.js.map +0 -1
- package/dist/solana/bridge.d.ts +0 -144
- package/dist/solana/bridge.d.ts.map +0 -1
- package/dist/solana/bridge.js +0 -352
- package/dist/solana/bridge.js.map +0 -1
- package/dist/solana/index.d.ts +0 -8
- package/dist/solana/index.d.ts.map +0 -1
- package/dist/solana/index.js +0 -6
- package/dist/solana/index.js.map +0 -1
- package/dist/solana/swap.d.ts +0 -85
- package/dist/solana/swap.d.ts.map +0 -1
- package/dist/solana/swap.js +0 -173
- package/dist/solana/swap.js.map +0 -1
- package/dist/solana/types.d.ts +0 -126
- package/dist/solana/types.d.ts.map +0 -1
- package/dist/solana/types.js +0 -10
- package/dist/solana/types.js.map +0 -1
- package/dist/solana/wallet.d.ts +0 -83
- package/dist/solana/wallet.d.ts.map +0 -1
- package/dist/solana/wallet.js +0 -164
- package/dist/solana/wallet.js.map +0 -1
- package/dist/solana/x402.d.ts +0 -69
- package/dist/solana/x402.d.ts.map +0 -1
- package/dist/solana/x402.js +0 -154
- package/dist/solana/x402.js.map +0 -1
- package/dist/solver/adapter.d.ts +0 -47
- package/dist/solver/adapter.d.ts.map +0 -1
- package/dist/solver/adapter.js +0 -146
- package/dist/solver/adapter.js.map +0 -1
- package/dist/solver/analyzer.d.ts +0 -48
- package/dist/solver/analyzer.d.ts.map +0 -1
- package/dist/solver/analyzer.js +0 -171
- package/dist/solver/analyzer.js.map +0 -1
- package/dist/solver/builder.d.ts +0 -31
- package/dist/solver/builder.d.ts.map +0 -1
- package/dist/solver/builder.js +0 -60
- package/dist/solver/builder.js.map +0 -1
- package/dist/solver/index.d.ts +0 -22
- package/dist/solver/index.d.ts.map +0 -1
- package/dist/solver/index.js +0 -25
- package/dist/solver/index.js.map +0 -1
- package/dist/solver/types.d.ts +0 -115
- package/dist/solver/types.d.ts.map +0 -1
- package/dist/solver/types.js +0 -10
- package/dist/solver/types.js.map +0 -1
- package/dist/spend-guard/index.d.ts +0 -125
- package/dist/spend-guard/index.d.ts.map +0 -1
- package/dist/spend-guard/index.js +0 -150
- package/dist/spend-guard/index.js.map +0 -1
- package/dist/swap/router/cache.d.ts +0 -13
- package/dist/swap/router/cache.d.ts.map +0 -1
- package/dist/swap/router/cache.js +0 -30
- package/dist/swap/router/cache.js.map +0 -1
- package/dist/swap/router/flashbots.d.ts +0 -10
- package/dist/swap/router/flashbots.d.ts.map +0 -1
- package/dist/swap/router/flashbots.js +0 -43
- package/dist/swap/router/flashbots.js.map +0 -1
- package/dist/swap/router/health.d.ts +0 -17
- package/dist/swap/router/health.d.ts.map +0 -1
- package/dist/swap/router/health.js +0 -38
- package/dist/swap/router/health.js.map +0 -1
- package/dist/swap/router/index.d.ts +0 -10
- package/dist/swap/router/index.d.ts.map +0 -1
- package/dist/swap/router/index.js +0 -10
- package/dist/swap/router/index.js.map +0 -1
- package/dist/swap/router/providers/cowswap.d.ts +0 -11
- package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
- package/dist/swap/router/providers/cowswap.js +0 -79
- package/dist/swap/router/providers/cowswap.js.map +0 -1
- package/dist/swap/router/providers/index.d.ts +0 -20
- package/dist/swap/router/providers/index.d.ts.map +0 -1
- package/dist/swap/router/providers/index.js +0 -32
- package/dist/swap/router/providers/index.js.map +0 -1
- package/dist/swap/router/providers/jupiter.d.ts +0 -12
- package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
- package/dist/swap/router/providers/jupiter.js +0 -73
- package/dist/swap/router/providers/jupiter.js.map +0 -1
- package/dist/swap/router/providers/lifi.d.ts +0 -11
- package/dist/swap/router/providers/lifi.d.ts.map +0 -1
- package/dist/swap/router/providers/lifi.js +0 -123
- package/dist/swap/router/providers/lifi.js.map +0 -1
- package/dist/swap/router/providers/oneinch.d.ts +0 -13
- package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
- package/dist/swap/router/providers/oneinch.js +0 -71
- package/dist/swap/router/providers/oneinch.js.map +0 -1
- package/dist/swap/router/providers/paraswap.d.ts +0 -11
- package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
- package/dist/swap/router/providers/paraswap.js +0 -73
- package/dist/swap/router/providers/paraswap.js.map +0 -1
- package/dist/swap/router/providers/uniswap.d.ts +0 -31
- package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
- package/dist/swap/router/providers/uniswap.js +0 -237
- package/dist/swap/router/providers/uniswap.js.map +0 -1
- package/dist/swap/router/providers/zerox.d.ts +0 -13
- package/dist/swap/router/providers/zerox.d.ts.map +0 -1
- package/dist/swap/router/providers/zerox.js +0 -94
- package/dist/swap/router/providers/zerox.js.map +0 -1
- package/dist/swap/router/router.d.ts +0 -86
- package/dist/swap/router/router.d.ts.map +0 -1
- package/dist/swap/router/router.js +0 -224
- package/dist/swap/router/router.js.map +0 -1
- package/dist/swap/router/rsi/engine.d.ts +0 -60
- package/dist/swap/router/rsi/engine.d.ts.map +0 -1
- package/dist/swap/router/rsi/engine.js +0 -483
- package/dist/swap/router/rsi/engine.js.map +0 -1
- package/dist/swap/router/rsi/index.d.ts +0 -3
- package/dist/swap/router/rsi/index.d.ts.map +0 -1
- package/dist/swap/router/rsi/index.js +0 -3
- package/dist/swap/router/rsi/index.js.map +0 -1
- package/dist/swap/router/rsi/types.d.ts +0 -106
- package/dist/swap/router/rsi/types.d.ts.map +0 -1
- package/dist/swap/router/rsi/types.js +0 -3
- package/dist/swap/router/rsi/types.js.map +0 -1
- package/dist/swap/router/types.d.ts +0 -120
- package/dist/swap/router/types.d.ts.map +0 -1
- package/dist/swap/router/types.js +0 -16
- package/dist/swap/router/types.js.map +0 -1
- package/dist/tax/engine.d.ts +0 -131
- package/dist/tax/engine.d.ts.map +0 -1
- package/dist/tax/engine.js +0 -307
- package/dist/tax/engine.js.map +0 -1
- package/dist/tax/index.d.ts +0 -9
- package/dist/tax/index.d.ts.map +0 -1
- package/dist/tax/index.js +0 -12
- package/dist/tax/index.js.map +0 -1
- package/dist/tax/lots.d.ts +0 -60
- package/dist/tax/lots.d.ts.map +0 -1
- package/dist/tax/lots.js +0 -129
- package/dist/tax/lots.js.map +0 -1
- package/dist/tax/types.d.ts +0 -113
- package/dist/tax/types.d.ts.map +0 -1
- package/dist/tax/types.js +0 -18
- package/dist/tax/types.js.map +0 -1
- package/dist/verifiable-intent/index.d.ts +0 -84
- package/dist/verifiable-intent/index.js +0 -385
- package/dist/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -29
- package/dist/yield/index.js.map +0 -1
- package/dist/yield/rates.d.ts +0 -114
- package/dist/yield/rates.d.ts.map +0 -1
- package/dist/yield/rates.js +0 -351
- package/dist/yield/rates.js.map +0 -1
- package/dist/yield/types.d.ts +0 -134
- package/dist/yield/types.d.ts.map +0 -1
- package/dist/yield/types.js +0 -24
- package/dist/yield/types.js.map +0 -1
- package/dist/yield/vault.d.ts +0 -112
- package/dist/yield/vault.d.ts.map +0 -1
- package/dist/yield/vault.js +0 -264
- 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":"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"}
|
|
@@ -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
|
-
}
|