agentwallet-sdk 4.0.4 → 5.0.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 (119) hide show
  1. package/index.js +2 -0
  2. package/package.json +6 -59
  3. package/README.md +0 -207
  4. package/dist/__tests__/identity.did.test.d.ts +0 -2
  5. package/dist/__tests__/identity.did.test.d.ts.map +0 -1
  6. package/dist/__tests__/identity.did.test.js +0 -56
  7. package/dist/__tests__/identity.did.test.js.map +0 -1
  8. package/dist/__tests__/staking.test.d.ts +0 -2
  9. package/dist/__tests__/staking.test.d.ts.map +0 -1
  10. package/dist/__tests__/staking.test.js +0 -70
  11. package/dist/__tests__/staking.test.js.map +0 -1
  12. package/dist/__tests__/verify.test.d.ts +0 -2
  13. package/dist/__tests__/verify.test.d.ts.map +0 -1
  14. package/dist/__tests__/verify.test.js +0 -57
  15. package/dist/__tests__/verify.test.js.map +0 -1
  16. package/dist/abi.d.ts +0 -47
  17. package/dist/abi.d.ts.map +0 -1
  18. package/dist/abi.js +0 -257
  19. package/dist/abi.js.map +0 -1
  20. package/dist/bridge/abis.d.ts +0 -64
  21. package/dist/bridge/abis.d.ts.map +0 -1
  22. package/dist/bridge/abis.js +0 -131
  23. package/dist/bridge/abis.js.map +0 -1
  24. package/dist/bridge/client.d.ts +0 -50
  25. package/dist/bridge/client.d.ts.map +0 -1
  26. package/dist/bridge/client.js +0 -232
  27. package/dist/bridge/client.js.map +0 -1
  28. package/dist/bridge/index.d.ts +0 -3
  29. package/dist/bridge/index.d.ts.map +0 -1
  30. package/dist/bridge/index.js +0 -5
  31. package/dist/bridge/index.js.map +0 -1
  32. package/dist/bridge/types.d.ts +0 -53
  33. package/dist/bridge/types.d.ts.map +0 -1
  34. package/dist/bridge/types.js +0 -55
  35. package/dist/bridge/types.js.map +0 -1
  36. package/dist/identity/did.d.ts +0 -66
  37. package/dist/identity/did.d.ts.map +0 -1
  38. package/dist/identity/did.js +0 -186
  39. package/dist/identity/did.js.map +0 -1
  40. package/dist/identity/erc8004.d.ts +0 -150
  41. package/dist/identity/erc8004.d.ts.map +0 -1
  42. package/dist/identity/erc8004.js +0 -382
  43. package/dist/identity/erc8004.js.map +0 -1
  44. package/dist/identity/index.d.ts +0 -3
  45. package/dist/identity/index.d.ts.map +0 -1
  46. package/dist/identity/index.js +0 -3
  47. package/dist/identity/index.js.map +0 -1
  48. package/dist/index.d.ts +0 -7190
  49. package/dist/index.d.ts.map +0 -1
  50. package/dist/index.js +0 -372
  51. package/dist/index.js.map +0 -1
  52. package/dist/plugins/elizaos.d.ts +0 -40
  53. package/dist/plugins/elizaos.d.ts.map +0 -1
  54. package/dist/plugins/elizaos.js +0 -91
  55. package/dist/plugins/elizaos.js.map +0 -1
  56. package/dist/policy/SpendingPolicy.d.ts +0 -32
  57. package/dist/policy/SpendingPolicy.d.ts.map +0 -1
  58. package/dist/policy/SpendingPolicy.js +0 -157
  59. package/dist/policy/SpendingPolicy.js.map +0 -1
  60. package/dist/staking/AgentStakingPool.d.ts +0 -100
  61. package/dist/staking/AgentStakingPool.d.ts.map +0 -1
  62. package/dist/staking/AgentStakingPool.js +0 -298
  63. package/dist/staking/AgentStakingPool.js.map +0 -1
  64. package/dist/staking/index.d.ts +0 -2
  65. package/dist/staking/index.d.ts.map +0 -1
  66. package/dist/staking/index.js +0 -2
  67. package/dist/staking/index.js.map +0 -1
  68. package/dist/swap/SwapModule.d.ts +0 -45
  69. package/dist/swap/SwapModule.d.ts.map +0 -1
  70. package/dist/swap/SwapModule.js +0 -146
  71. package/dist/swap/SwapModule.js.map +0 -1
  72. package/dist/swap/abi.d.ts +0 -51
  73. package/dist/swap/abi.d.ts.map +0 -1
  74. package/dist/swap/abi.js +0 -120
  75. package/dist/swap/abi.js.map +0 -1
  76. package/dist/swap/index.d.ts +0 -4
  77. package/dist/swap/index.d.ts.map +0 -1
  78. package/dist/swap/index.js +0 -6
  79. package/dist/swap/index.js.map +0 -1
  80. package/dist/swap/types.d.ts +0 -17
  81. package/dist/swap/types.d.ts.map +0 -1
  82. package/dist/swap/types.js +0 -19
  83. package/dist/swap/types.js.map +0 -1
  84. package/dist/types.d.ts +0 -9
  85. package/dist/types.d.ts.map +0 -1
  86. package/dist/types.js +0 -11
  87. package/dist/types.js.map +0 -1
  88. package/dist/verify/index.d.ts +0 -2
  89. package/dist/verify/index.d.ts.map +0 -1
  90. package/dist/verify/index.js +0 -2
  91. package/dist/verify/index.js.map +0 -1
  92. package/dist/verify/verifyAgent.d.ts +0 -42
  93. package/dist/verify/verifyAgent.d.ts.map +0 -1
  94. package/dist/verify/verifyAgent.js +0 -216
  95. package/dist/verify/verifyAgent.js.map +0 -1
  96. package/dist/x402/budget.d.ts +0 -44
  97. package/dist/x402/budget.d.ts.map +0 -1
  98. package/dist/x402/budget.js +0 -115
  99. package/dist/x402/budget.js.map +0 -1
  100. package/dist/x402/chains/abstract/index.d.ts +0 -107
  101. package/dist/x402/chains/abstract/index.d.ts.map +0 -1
  102. package/dist/x402/chains/abstract/index.js +0 -192
  103. package/dist/x402/chains/abstract/index.js.map +0 -1
  104. package/dist/x402/client.d.ts +0 -46
  105. package/dist/x402/client.d.ts.map +0 -1
  106. package/dist/x402/client.js +0 -207
  107. package/dist/x402/client.js.map +0 -1
  108. package/dist/x402/index.d.ts +0 -6
  109. package/dist/x402/index.d.ts.map +0 -1
  110. package/dist/x402/index.js +0 -10
  111. package/dist/x402/index.js.map +0 -1
  112. package/dist/x402/middleware.d.ts +0 -37
  113. package/dist/x402/middleware.d.ts.map +0 -1
  114. package/dist/x402/middleware.js +0 -67
  115. package/dist/x402/middleware.js.map +0 -1
  116. package/dist/x402/types.d.ts +0 -8
  117. package/dist/x402/types.d.ts.map +0 -1
  118. package/dist/x402/types.js +0 -11
  119. package/dist/x402/types.js.map +0 -1
package/index.js ADDED
@@ -0,0 +1,2 @@
1
+ console.warn('[agentwallet-sdk] This package has moved to @agenteconomy/wallet. Please update: npm install @agenteconomy/wallet');
2
+ module.exports = require('@agenteconomy/wallet');
package/package.json CHANGED
@@ -1,65 +1,12 @@
1
1
  {
2
2
  "name": "agentwallet-sdk",
3
- "version": "4.0.4",
4
- "description": "Non-custodial AI agent wallet SDK. x402 payments, 17-chain CCTP bridging, ERC-6551 identity, SpendingPolicy guardrails, agent DID, staking, trust verification. The agent holds the keys.",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "import": "./dist/index.js",
11
- "types": "./dist/index.d.ts"
12
- },
13
- "./identity": {
14
- "import": "./dist/identity/index.js",
15
- "types": "./dist/identity/index.d.ts"
16
- },
17
- "./staking": {
18
- "import": "./dist/staking/index.js",
19
- "types": "./dist/staking/index.d.ts"
20
- },
21
- "./verify": {
22
- "import": "./dist/verify/index.js",
23
- "types": "./dist/verify/index.d.ts"
24
- }
25
- },
26
- "files": [
27
- "dist"
28
- ],
29
- "scripts": {
30
- "build": "tsc",
31
- "dev": "tsc --watch",
32
- "clean": "rm -rf dist",
33
- "test": "vitest run"
34
- },
35
- "keywords": [
36
- "agent-wallet",
37
- "ai-agent",
38
- "crypto",
39
- "web3",
40
- "did",
41
- "verifiable-credentials",
42
- "aave",
43
- "staking",
44
- "x402",
45
- "non-custodial",
46
- "agent-payments",
47
- "autonomous-agent"
48
- ],
3
+ "version": "5.0.0",
4
+ "description": "MOVED: This package has moved to @agenteconomy/wallet",
5
+ "main": "index.js",
6
+ "keywords": ["ai-agent", "wallet", "deprecated"],
7
+ "author": "AI Agent Economy <max@ai-agent-economy.com>",
49
8
  "license": "MIT",
50
- "repository": {
51
- "type": "git",
52
- "url": "https://github.com/up2itnow0822/agentwallet-sdk"
53
- },
54
- "author": "up2itnow5280",
55
9
  "dependencies": {
56
- "@noble/ed25519": "^2.1.0",
57
- "@noble/hashes": "^1.4.0",
58
- "viem": "2.46.0"
59
- },
60
- "devDependencies": {
61
- "@types/node": "^20.0.0",
62
- "typescript": "5.3.3",
63
- "vitest": "4.0.18"
10
+ "@agenteconomy/wallet": "^4.0.4"
64
11
  }
65
12
  }
package/README.md DELETED
@@ -1,207 +0,0 @@
1
- # agentwallet-sdk
2
-
3
- Non-custodial agent wallet SDK. Your agent holds its own keys — no custodian, no KYC, no freeze risk.
4
-
5
- [![npm](https://img.shields.io/npm/v/agentwallet-sdk?style=flat-square)](https://www.npmjs.com/package/agentwallet-sdk)
6
- [![Discord](https://img.shields.io/discord/1475549260140253194?label=Community&logo=discord&color=5865F2)](https://discord.gg/958AACqf7Y)
7
- ![x402](https://img.shields.io/badge/x402-native-green?style=flat-square)
8
- ![CCTP V2](https://img.shields.io/badge/CCTP_V2-17_chains-red?style=flat-square)
9
- ![Tests](https://img.shields.io/badge/tests-629_passing-brightgreen?style=flat-square)
10
- ![Swap Fee](https://img.shields.io/badge/swap_fee-0.77%25-blue?style=flat-square)
11
-
12
- ```bash
13
- npm i agentwallet-sdk
14
- ```
15
-
16
- ---
17
-
18
- ## Why agentwallet-sdk?
19
-
20
- Most agent wallet solutions compromise on the thing that matters most: who controls the keys.
21
-
22
- | | agentwallet-sdk | Coinbase Agentic Wallets | MoonPay Agents |
23
- |---|---|---|---|
24
- | **Key custody** | Agent holds own keys | Coinbase TEE (custodial) | MoonPay managed |
25
- | **Freeze risk** | None — on-chain only | Yes — platform can freeze | Yes — KYC-gated |
26
- | **Cross-chain** | 17 chains via CCTP V2 | Base only | Limited |
27
- | **Swap fee** | **0.77%** | 0.875% | N/A |
28
- | **x402 support** | Native (v2.0.1+) | No public x402 client | No |
29
- | **Spend limits** | On-chain, enforced by contract | Platform-enforced | Platform-enforced |
30
- | **Agent identity** | DID + Verifiable Credentials | No | No |
31
- | **Agent staking** | AAVE USDC yield pool | No | No |
32
- | **KYC required** | No | No | Yes |
33
- | **MCP compatible** | Yes | No | No |
34
-
35
- ### 0.77% swap fee — 12% cheaper than MetaMask and Coinbase Wallet
36
-
37
- Both MetaMask and Coinbase Wallet charge **0.875%** on every swap. We charge **0.77%** — the lowest fee from any major wallet SDK. Built for agents that execute hundreds of swaps autonomously. Every basis point compounds.
38
-
39
- ```typescript
40
- import { SwapModule } from 'agentwallet-sdk/swap';
41
-
42
- const swap = new SwapModule(publicClient, walletClient, accountAddress);
43
-
44
- // 0.77% fee — cheaper than MetaMask, cheaper than Coinbase Wallet
45
- const result = await swap.executeSwap(USDC_ADDRESS, WETH_ADDRESS, 1000_000000n);
46
- ```
47
-
48
- ### True non-custody
49
-
50
- The wallet is an ERC-6551 token-bound account on-chain. The agent's private key lives in the agent's environment, controlled by whoever runs the agent. Nobody else has it. Spend limits are enforced by the smart contract — not by a platform policy that can change overnight.
51
-
52
- ```typescript
53
- import { createWallet, createX402Fetch, NATIVE_TOKEN } from 'agentwallet-sdk';
54
-
55
- const wallet = createWallet({ accountAddress: '0x...', chain: 'base', walletClient });
56
-
57
- // x402 payments: agent pays APIs automatically, no human needed
58
- const fetch = createX402Fetch(wallet, { globalDailyLimit: 10_000_000n });
59
- const data = await fetch('https://api.example.com/premium');
60
- // Server returned 402? Payment handled. Original request retried. Human not consulted.
61
- ```
62
-
63
- ### Agent identity — permanent DID + Verifiable Credentials
64
-
65
- Every agent gets a permanent, self-sovereign decentralized identity derived directly from its wallet key. No external registry. No KYC. Just cryptographic proof that this agent is who it claims to be.
66
-
67
- ```typescript
68
- import { deriveAgentDID, issueCredential, verifyCredential } from 'agentwallet-sdk/identity';
69
-
70
- // Permanent DID — same key always produces the same DID
71
- const did = deriveAgentDID(privateKey);
72
- // → "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK"
73
-
74
- // Issue a signed Verifiable Credential
75
- const vc = issueCredential(did, privateKey, {
76
- agentName: 'TradingAgent-01',
77
- capabilities: ['swap', 'bridge', 'pay'],
78
- owner: '0xff86...',
79
- });
80
-
81
- // Any counterparty can verify without phoning home
82
- console.log(verifyCredential(vc)); // true
83
- ```
84
-
85
- ### Agent staking — earn yield on idle USDC
86
-
87
- Agents can deposit USDC into an AAVE V3-backed staking pool and earn yield on earnings instead of holding cash in a wallet. **Agent participants only** — verified by DID at deposit time. No human participants.
88
-
89
- ```typescript
90
- import { AgentStakingPool } from 'agentwallet-sdk/staking';
91
-
92
- const pool = new AgentStakingPool();
93
-
94
- // Deposit TaskBridge earnings — starts earning yield immediately
95
- await pool.deposit({
96
- agentDID: did,
97
- amountUsdc: 500_000000n, // 500 USDC
98
- walletClient,
99
- chain: 'base',
100
- });
101
-
102
- // Check balance (principal + yield, minus 0.5% annual management fee)
103
- const balance = await pool.getBalance(did, 'base');
104
- console.log(balance.currentBalanceUsdc); // growing
105
- ```
106
-
107
- ### Agent verification — machine-readable trust score
108
-
109
- Before transacting with an unknown agent, request a trust bundle. Staking balance, task history, wallet age — all signed by the agent's DID. No PII. No central authority.
110
-
111
- ```typescript
112
- import { verifyAgent, verifyTrustBundle } from 'agentwallet-sdk/verify';
113
-
114
- const bundle = await verifyAgent({ privateKey, chain: 'base' });
115
- // {
116
- // did: "did:key:z6Mk...",
117
- // walletAddress: "0x...",
118
- // stakingBalance: 500000000n, // 500 USDC staked
119
- // reputationScore: 87, // 0-100
120
- // taskBridgeTasksCompleted: 47,
121
- // walletAgeDays: 183,
122
- // signature: "..." // tamper-proof
123
- // }
124
-
125
- // Counterparty verifies before accepting payment or task
126
- console.log(verifyTrustBundle(bundle)); // true
127
- ```
128
-
129
- ### Cross-chain without the ceremony
130
-
131
- One bridge interface across 17 chains. Coinbase Agentic Wallets are Base-only.
132
-
133
- ```typescript
134
- import { UnifiedBridge } from 'agentwallet-sdk';
135
-
136
- const bridge = new UnifiedBridge({ evmSigner, solanaWallet });
137
-
138
- await bridge.bridge({
139
- amount: 1_000_000n,
140
- sourceChain: 'solana',
141
- destinationChain: 'base',
142
- destinationAddress: '0x...',
143
- });
144
- ```
145
-
146
- Supported chains: Base, Ethereum, Solana, Arbitrum, Optimism, Polygon, Avalanche, Unichain, Linea, Codex, Sonic, World Chain, Sei, XDC, HyperEVM, Ink, Plume.
147
-
148
- ---
149
-
150
- ## Install
151
-
152
- ```bash
153
- npm i agentwallet-sdk
154
- ```
155
-
156
- ## Quick Start
157
-
158
- ```typescript
159
- import { createWallet, setSpendPolicy, agentExecute, NATIVE_TOKEN } from 'agentwallet-sdk';
160
- import { createWalletClient, http } from 'viem';
161
- import { privateKeyToAccount } from 'viem/accounts';
162
-
163
- const walletClient = createWalletClient({
164
- account: privateKeyToAccount(process.env.AGENT_PRIVATE_KEY),
165
- transport: http('https://mainnet.base.org'),
166
- });
167
-
168
- const wallet = createWallet({
169
- accountAddress: '0xYOUR_AGENT_ACCOUNT',
170
- chain: 'base',
171
- walletClient,
172
- });
173
-
174
- // Set spend limits once (owner operation)
175
- await setSpendPolicy(wallet, {
176
- token: NATIVE_TOKEN,
177
- perTxLimit: 25_000000000000000n, // 0.025 ETH per tx
178
- periodLimit: 500_000000000000000n, // 0.5 ETH per day
179
- periodLength: 86400,
180
- });
181
-
182
- // Agent executes autonomously within limits
183
- await agentExecute(wallet, { to: '0xSOME_SERVICE', value: 10_000000000000000n });
184
- ```
185
-
186
- ## Modules
187
-
188
- | Module | Import | What it does |
189
- |---|---|---|
190
- | Core | `agentwallet-sdk` | Wallet creation, spend limits, agent execution |
191
- | x402 | `agentwallet-sdk/x402` | Automatic API payment handling (HTTP 402) |
192
- | Bridge | `agentwallet-sdk/bridge` | CCTP V2 cross-chain USDC (17 chains) |
193
- | Swap | `agentwallet-sdk/swap` | Uniswap V3 token swaps @ **0.77% fee** |
194
- | Policy | `agentwallet-sdk/policy` | SpendingPolicy — allowlists, rolling caps |
195
- | Identity | `agentwallet-sdk/identity` | Agent DID (W3C did:key) + Verifiable Credentials |
196
- | Staking | `agentwallet-sdk/staking` | Agent-only AAVE USDC yield pool |
197
- | Verify | `agentwallet-sdk/verify` | Trust bundle — DID + staking + reputation |
198
-
199
- ## Resources
200
-
201
- - [npm package](https://www.npmjs.com/package/agentwallet-sdk)
202
- - [Discord community](https://discord.gg/958AACqf7Y)
203
- - [x402 docs](https://docs.x402.org)
204
-
205
- ## License
206
-
207
- MIT
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=identity.did.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.did.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/identity.did.test.ts"],"names":[],"mappings":""}
@@ -1,56 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { deriveAgentDID, issueCredential, verifyCredential, exportDIDDocument, } from '../identity/did.js';
3
- const TEST_PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
4
- describe('Agent DID (did:key)', () => {
5
- it('derives a deterministic DID from a private key', () => {
6
- const did1 = deriveAgentDID(TEST_PRIVATE_KEY);
7
- const did2 = deriveAgentDID(TEST_PRIVATE_KEY);
8
- expect(did1.did).toBe(did2.did);
9
- expect(did1.did).toMatch(/^did:key:z6Mk/);
10
- });
11
- it('derives different DIDs for different private keys', () => {
12
- const key2 = '0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d';
13
- const did1 = deriveAgentDID(TEST_PRIVATE_KEY);
14
- const did2 = deriveAgentDID(key2);
15
- expect(did1.did).not.toBe(did2.did);
16
- });
17
- it('exports a valid W3C DID Document', () => {
18
- const did = deriveAgentDID(TEST_PRIVATE_KEY);
19
- const doc = exportDIDDocument(did);
20
- expect(doc['@context']).toContain('https://www.w3.org/ns/did/v1');
21
- expect(doc.id).toBe(did.did);
22
- expect(doc.verificationMethod).toHaveLength(1);
23
- expect(doc.verificationMethod[0].type).toBe('Ed25519VerificationKey2020');
24
- expect(doc.authentication).toHaveLength(1);
25
- });
26
- it('issues and verifies a Verifiable Credential', () => {
27
- const did = deriveAgentDID(TEST_PRIVATE_KEY);
28
- const vc = issueCredential(did, TEST_PRIVATE_KEY, {
29
- agentType: 'autonomous',
30
- capability: 'payment',
31
- });
32
- expect(vc['@context']).toContain('https://www.w3.org/2018/credentials/v1');
33
- expect(vc.issuer).toBe(did.did);
34
- expect(vc.type).toContain('VerifiableCredential');
35
- expect(vc.credentialSubject.agentType).toBe('autonomous');
36
- expect(vc.proof.type).toBe('Ed25519Signature2020');
37
- const valid = verifyCredential(vc);
38
- expect(valid).toBe(true);
39
- });
40
- it('rejects a tampered credential', () => {
41
- const did = deriveAgentDID(TEST_PRIVATE_KEY);
42
- const vc = issueCredential(did, TEST_PRIVATE_KEY, { role: 'agent' });
43
- const tampered = {
44
- ...vc,
45
- credentialSubject: { ...vc.credentialSubject, role: 'admin' },
46
- };
47
- expect(verifyCredential(tampered)).toBe(false);
48
- });
49
- it('rejects credential with wrong issuer DID', () => {
50
- const did = deriveAgentDID(TEST_PRIVATE_KEY);
51
- const vc = issueCredential(did, TEST_PRIVATE_KEY, { role: 'agent' });
52
- const tampered = { ...vc, issuer: 'did:key:z6MkFake' };
53
- expect(verifyCredential(tampered)).toBe(false);
54
- });
55
- });
56
- //# sourceMappingURL=identity.did.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.did.test.js","sourceRoot":"","sources":["../../src/__tests__/identity.did.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,gBAAgB,GAAG,oEAAoE,CAAC;AAE9F,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,IAAI,GAAG,oEAAoE,CAAC;QAClF,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,GAAG,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAClE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1E,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,GAAG,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE;YAChD,SAAS,EAAE,YAAY;YACvB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QAC3E,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;QAClD,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1D,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAEnD,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,GAAG,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG;YACf,GAAG,EAAE;YACL,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE;SAC9D,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAErE,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;QACvD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=staking.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"staking.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/staking.test.ts"],"names":[],"mappings":""}
@@ -1,70 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { AgentStakingPool } from '../staking/AgentStakingPool.js';
3
- import { deriveAgentDID } from '../identity/did.js';
4
- const TEST_PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
5
- describe('AgentStakingPool', () => {
6
- const pool = new AgentStakingPool();
7
- const agentDID = deriveAgentDID(TEST_PRIVATE_KEY);
8
- it('rejects deposit with invalid DID format', async () => {
9
- const badDID = {
10
- did: 'did:web:example.com',
11
- publicKeyHex: 'a'.repeat(64),
12
- publicKeyMultibase: 'z6MkFake',
13
- };
14
- const mockWallet = {
15
- account: { address: '0x1234567890123456789012345678901234567890' },
16
- writeContract: async () => '0xhash',
17
- };
18
- await expect(pool.deposit({
19
- agentDID: badDID,
20
- amountUsdc: 1000000n,
21
- walletClient: mockWallet,
22
- chain: 'base',
23
- })).rejects.toThrow('AGENT_ONLY');
24
- });
25
- it('rejects deposit with malformed public key', async () => {
26
- const badDID = {
27
- did: 'did:key:z6MkSomething',
28
- publicKeyHex: 'short',
29
- publicKeyMultibase: 'z6MkSomething',
30
- };
31
- const mockWallet = {
32
- account: { address: '0x1234567890123456789012345678901234567890' },
33
- };
34
- await expect(pool.deposit({
35
- agentDID: badDID,
36
- amountUsdc: 1000000n,
37
- walletClient: mockWallet,
38
- chain: 'base',
39
- })).rejects.toThrow('AGENT_ONLY');
40
- });
41
- it('computes management fee correctly', () => {
42
- // Access via any cast for private method testing
43
- const fee = pool.calculateManagementFee(1000000000n, 365);
44
- // Expected: 1,000,000,000 * 50 / 10000 / 365 * 365 = 5,000,000 (0.5%)
45
- expect(fee).toBe(5000000n);
46
- });
47
- it('computes zero fee for 0 days', () => {
48
- const fee = pool.calculateManagementFee(1000000000n, 0);
49
- expect(fee).toBe(0n);
50
- });
51
- it('computes fee proportional to days staked', () => {
52
- const fee365 = pool.calculateManagementFee(1000000000n, 365);
53
- const fee182 = pool.calculateManagementFee(1000000000n, 182);
54
- // 182 days should be roughly half of 365 days fee
55
- expect(fee182).toBeLessThan(fee365);
56
- expect(fee182).toBeGreaterThan(0n);
57
- });
58
- it('returns zero balance for unknown DID', async () => {
59
- const balance = await pool.getBalance(agentDID, 'base');
60
- expect(balance.principalUsdc).toBe(0n);
61
- expect(balance.netBalanceUsdc).toBe(0n);
62
- expect(balance.agentDID).toBe(agentDID.did);
63
- });
64
- it('AgentDID has correct format from test key', () => {
65
- expect(agentDID.did).toMatch(/^did:key:z6Mk/);
66
- expect(agentDID.publicKeyHex).toHaveLength(64);
67
- expect(agentDID.publicKeyMultibase).toMatch(/^z6Mk/);
68
- });
69
- });
70
- //# sourceMappingURL=staking.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"staking.test.js","sourceRoot":"","sources":["../../src/__tests__/staking.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=verify.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/verify.test.ts"],"names":[],"mappings":""}
@@ -1,57 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { verifyTrustBundle } from '../verify/verifyAgent.js';
3
- import { deriveAgentDID, issueCredential, verifyCredential } from '../identity/did.js';
4
- const TEST_PRIVATE_KEY = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80';
5
- describe('verifyTrustBundle', () => {
6
- it('verifies a valid trust bundle signature', () => {
7
- // Build a mock bundle that was signed with the same mechanism
8
- // We'll use the verifyAgent output structure directly via manual construction
9
- const agentDID = deriveAgentDID(TEST_PRIVATE_KEY);
10
- // Since verifyAgent makes network calls, we test verifyTrustBundle directly
11
- // with a crafted bundle that matches the signing logic
12
- const bundle = {
13
- did: agentDID.did,
14
- walletAddress: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
15
- stakingBalance: 0n,
16
- reputationScore: 0,
17
- taskBridgeTasksCompleted: 0,
18
- walletAgeDays: 0,
19
- verifiedAt: 1000000,
20
- signature: 'invalid',
21
- };
22
- // Bundle with invalid signature should return false
23
- expect(verifyTrustBundle(bundle)).toBe(false);
24
- });
25
- it('returns false for tampered bundle data', () => {
26
- const bundle = {
27
- did: 'did:key:z6MkFakeNotReal',
28
- walletAddress: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',
29
- stakingBalance: 0n,
30
- reputationScore: 100, // tampered up
31
- taskBridgeTasksCompleted: 0,
32
- walletAgeDays: 0,
33
- verifiedAt: 1000000,
34
- signature: 'zFakeSignature',
35
- };
36
- expect(verifyTrustBundle(bundle)).toBe(false);
37
- });
38
- });
39
- describe('DID + VC integration', () => {
40
- it('issues credential with agent-specific claims', () => {
41
- const agentDID = deriveAgentDID(TEST_PRIVATE_KEY);
42
- const vc = issueCredential(agentDID, TEST_PRIVATE_KEY, {
43
- agentVersion: '4.0.0',
44
- capabilities: ['payment', 'staking', 'bridge'],
45
- network: 'base',
46
- });
47
- expect(vc.credentialSubject.capabilities).toEqual(['payment', 'staking', 'bridge']);
48
- expect(verifyCredential(vc)).toBe(true);
49
- });
50
- it('round-trips DID derivation with hex without 0x prefix', () => {
51
- const noPrefix = TEST_PRIVATE_KEY.replace('0x', '');
52
- const did1 = deriveAgentDID(TEST_PRIVATE_KEY);
53
- const did2 = deriveAgentDID(noPrefix);
54
- expect(did1.did).toBe(did2.did);
55
- });
56
- });
57
- //# sourceMappingURL=verify.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.test.js","sourceRoot":"","sources":["../../src/__tests__/verify.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvF,MAAM,gBAAgB,GAAG,oEAAoE,CAAC;AAE9F,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,8DAA8D;QAC9D,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAElD,4EAA4E;QAC5E,uDAAuD;QACvD,MAAM,MAAM,GAAG;YACb,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,aAAa,EAAE,4CAA6D;YAC5E,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,CAAC;YAClB,wBAAwB,EAAE,CAAC;YAC3B,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,OAAO;YACnB,SAAS,EAAE,SAAS;SACrB,CAAC;QAEF,oDAAoD;QACpD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG;YACb,GAAG,EAAE,yBAAyB;YAC9B,aAAa,EAAE,4CAA6D;YAC5E,cAAc,EAAE,EAAE;YAClB,eAAe,EAAE,GAAG,EAAE,cAAc;YACpC,wBAAwB,EAAE,CAAC;YAC3B,aAAa,EAAE,CAAC;YAChB,UAAU,EAAE,OAAO;YACnB,SAAS,EAAE,gBAAgB;SAC5B,CAAC;QACF,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,EAAE,gBAAgB,EAAE;YACrD,YAAY,EAAE,OAAO;YACrB,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;YAC9C,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpF,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,cAAc,CAAC,QAAyB,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/dist/abi.d.ts DELETED
@@ -1,47 +0,0 @@
1
- export declare const AgentAccountV2Abi: ({
2
- name: string;
3
- type: string;
4
- stateMutability: string;
5
- inputs: {
6
- name: string;
7
- type: string;
8
- }[];
9
- outputs: {
10
- name: string;
11
- type: string;
12
- }[];
13
- } | {
14
- name: string;
15
- type: string;
16
- inputs: {
17
- name: string;
18
- type: string;
19
- indexed: boolean;
20
- }[];
21
- stateMutability?: undefined;
22
- outputs?: undefined;
23
- })[];
24
- export declare const AgentAccountFactoryV2Abi: ({
25
- name: string;
26
- type: string;
27
- stateMutability: string;
28
- inputs: {
29
- name: string;
30
- type: string;
31
- }[];
32
- outputs: {
33
- name: string;
34
- type: string;
35
- }[];
36
- } | {
37
- name: string;
38
- type: string;
39
- inputs: {
40
- name: string;
41
- type: string;
42
- indexed: boolean;
43
- }[];
44
- stateMutability?: undefined;
45
- outputs?: undefined;
46
- })[];
47
- //# sourceMappingURL=abi.d.ts.map
package/dist/abi.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"abi.d.ts","sourceRoot":"","sources":["../src/abi.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;IAmN7B,CAAC;AACF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;IAyCpC,CAAC"}