agentwallet-sdk 4.0.3 → 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.
- package/index.js +2 -0
- package/package.json +6 -59
- package/README.md +0 -132
- package/dist/__tests__/identity.did.test.d.ts +0 -2
- package/dist/__tests__/identity.did.test.d.ts.map +0 -1
- package/dist/__tests__/identity.did.test.js +0 -56
- package/dist/__tests__/identity.did.test.js.map +0 -1
- package/dist/__tests__/staking.test.d.ts +0 -2
- package/dist/__tests__/staking.test.d.ts.map +0 -1
- package/dist/__tests__/staking.test.js +0 -70
- package/dist/__tests__/staking.test.js.map +0 -1
- package/dist/__tests__/verify.test.d.ts +0 -2
- package/dist/__tests__/verify.test.d.ts.map +0 -1
- package/dist/__tests__/verify.test.js +0 -57
- package/dist/__tests__/verify.test.js.map +0 -1
- package/dist/abi.d.ts +0 -47
- package/dist/abi.d.ts.map +0 -1
- package/dist/abi.js +0 -257
- package/dist/abi.js.map +0 -1
- package/dist/bridge/abis.d.ts +0 -64
- package/dist/bridge/abis.d.ts.map +0 -1
- package/dist/bridge/abis.js +0 -131
- package/dist/bridge/abis.js.map +0 -1
- package/dist/bridge/client.d.ts +0 -50
- package/dist/bridge/client.d.ts.map +0 -1
- package/dist/bridge/client.js +0 -232
- package/dist/bridge/client.js.map +0 -1
- package/dist/bridge/index.d.ts +0 -3
- package/dist/bridge/index.d.ts.map +0 -1
- package/dist/bridge/index.js +0 -5
- package/dist/bridge/index.js.map +0 -1
- package/dist/bridge/types.d.ts +0 -53
- package/dist/bridge/types.d.ts.map +0 -1
- package/dist/bridge/types.js +0 -55
- package/dist/bridge/types.js.map +0 -1
- package/dist/identity/did.d.ts +0 -66
- package/dist/identity/did.d.ts.map +0 -1
- package/dist/identity/did.js +0 -186
- package/dist/identity/did.js.map +0 -1
- package/dist/identity/erc8004.d.ts +0 -150
- package/dist/identity/erc8004.d.ts.map +0 -1
- package/dist/identity/erc8004.js +0 -382
- package/dist/identity/erc8004.js.map +0 -1
- package/dist/identity/index.d.ts +0 -3
- package/dist/identity/index.d.ts.map +0 -1
- package/dist/identity/index.js +0 -3
- package/dist/identity/index.js.map +0 -1
- package/dist/index.d.ts +0 -7190
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -372
- package/dist/index.js.map +0 -1
- package/dist/plugins/elizaos.d.ts +0 -40
- package/dist/plugins/elizaos.d.ts.map +0 -1
- package/dist/plugins/elizaos.js +0 -91
- package/dist/plugins/elizaos.js.map +0 -1
- package/dist/policy/SpendingPolicy.d.ts +0 -32
- package/dist/policy/SpendingPolicy.d.ts.map +0 -1
- package/dist/policy/SpendingPolicy.js +0 -157
- package/dist/policy/SpendingPolicy.js.map +0 -1
- package/dist/staking/AgentStakingPool.d.ts +0 -100
- package/dist/staking/AgentStakingPool.d.ts.map +0 -1
- package/dist/staking/AgentStakingPool.js +0 -298
- package/dist/staking/AgentStakingPool.js.map +0 -1
- package/dist/staking/index.d.ts +0 -2
- package/dist/staking/index.d.ts.map +0 -1
- package/dist/staking/index.js +0 -2
- package/dist/staking/index.js.map +0 -1
- package/dist/swap/SwapModule.d.ts +0 -45
- package/dist/swap/SwapModule.d.ts.map +0 -1
- package/dist/swap/SwapModule.js +0 -146
- package/dist/swap/SwapModule.js.map +0 -1
- package/dist/swap/abi.d.ts +0 -51
- package/dist/swap/abi.d.ts.map +0 -1
- package/dist/swap/abi.js +0 -120
- package/dist/swap/abi.js.map +0 -1
- package/dist/swap/index.d.ts +0 -4
- package/dist/swap/index.d.ts.map +0 -1
- package/dist/swap/index.js +0 -6
- package/dist/swap/index.js.map +0 -1
- package/dist/swap/types.d.ts +0 -17
- package/dist/swap/types.d.ts.map +0 -1
- package/dist/swap/types.js +0 -19
- package/dist/swap/types.js.map +0 -1
- package/dist/types.d.ts +0 -9
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -11
- package/dist/types.js.map +0 -1
- package/dist/verify/index.d.ts +0 -2
- package/dist/verify/index.d.ts.map +0 -1
- package/dist/verify/index.js +0 -2
- package/dist/verify/index.js.map +0 -1
- package/dist/verify/verifyAgent.d.ts +0 -42
- package/dist/verify/verifyAgent.d.ts.map +0 -1
- package/dist/verify/verifyAgent.js +0 -216
- package/dist/verify/verifyAgent.js.map +0 -1
- package/dist/x402/budget.d.ts +0 -44
- package/dist/x402/budget.d.ts.map +0 -1
- package/dist/x402/budget.js +0 -115
- package/dist/x402/budget.js.map +0 -1
- package/dist/x402/chains/abstract/index.d.ts +0 -107
- package/dist/x402/chains/abstract/index.d.ts.map +0 -1
- package/dist/x402/chains/abstract/index.js +0 -192
- package/dist/x402/chains/abstract/index.js.map +0 -1
- package/dist/x402/client.d.ts +0 -46
- package/dist/x402/client.d.ts.map +0 -1
- package/dist/x402/client.js +0 -207
- package/dist/x402/client.js.map +0 -1
- package/dist/x402/index.d.ts +0 -6
- package/dist/x402/index.d.ts.map +0 -1
- package/dist/x402/index.js +0 -10
- package/dist/x402/index.js.map +0 -1
- package/dist/x402/middleware.d.ts +0 -37
- package/dist/x402/middleware.d.ts.map +0 -1
- package/dist/x402/middleware.js +0 -67
- package/dist/x402/middleware.js.map +0 -1
- package/dist/x402/types.d.ts +0 -8
- package/dist/x402/types.d.ts.map +0 -1
- package/dist/x402/types.js +0 -11
- package/dist/x402/types.js.map +0 -1
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* verifyAgent — Agent Trust Bundle
|
|
3
|
-
*
|
|
4
|
-
* Generates a cryptographically signed trust bundle that proves:
|
|
5
|
-
* - The agent's DID (permanent, derived from private key)
|
|
6
|
-
* - The agent's wallet address (onchain)
|
|
7
|
-
* - The agent's staking balance in the AgentStakingPool
|
|
8
|
-
* - A reputation score (0-100) based on observable onchain data
|
|
9
|
-
* - TaskBridge task completion count (if API URL provided)
|
|
10
|
-
* - Wallet age in days
|
|
11
|
-
*
|
|
12
|
-
* The bundle is signed by the agent's DID, making it tamper-proof.
|
|
13
|
-
* Any third party can call verifyTrustBundle() to confirm authenticity.
|
|
14
|
-
*/
|
|
15
|
-
import { createPublicClient, http } from 'viem';
|
|
16
|
-
import { base, arbitrum } from 'viem/chains';
|
|
17
|
-
import { deriveAgentDID } from '../identity/did.js';
|
|
18
|
-
import { AgentStakingPool } from '../staking/AgentStakingPool.js';
|
|
19
|
-
import * as ed from '@noble/ed25519';
|
|
20
|
-
import { sha512 } from '@noble/hashes/sha512';
|
|
21
|
-
import { sha256 } from '@noble/hashes/sha256';
|
|
22
|
-
// @noble/ed25519 v2 sha512 sync setup
|
|
23
|
-
ed.etc.sha512Sync = (...m) => sha512(ed.etc.concatBytes(...m));
|
|
24
|
-
const CHAINS = {
|
|
25
|
-
base,
|
|
26
|
-
arbitrum,
|
|
27
|
-
};
|
|
28
|
-
// ─── Base58btc (copied from did.ts for standalone use) ────────────────────────
|
|
29
|
-
const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
30
|
-
function base58Encode(bytes) {
|
|
31
|
-
let num = BigInt('0x' + Buffer.from(bytes).toString('hex'));
|
|
32
|
-
const result = [];
|
|
33
|
-
while (num > 0n) {
|
|
34
|
-
const mod = num % 58n;
|
|
35
|
-
result.unshift(BASE58_ALPHABET[Number(mod)]);
|
|
36
|
-
num = num / 58n;
|
|
37
|
-
}
|
|
38
|
-
for (let i = 0; i < bytes.length && bytes[i] === 0; i++)
|
|
39
|
-
result.unshift('1');
|
|
40
|
-
return result.join('');
|
|
41
|
-
}
|
|
42
|
-
function base58Decode(str) {
|
|
43
|
-
let num = 0n;
|
|
44
|
-
for (const char of str) {
|
|
45
|
-
const idx = BASE58_ALPHABET.indexOf(char);
|
|
46
|
-
if (idx === -1)
|
|
47
|
-
throw new Error(`Invalid base58 char: ${char}`);
|
|
48
|
-
num = num * 58n + BigInt(idx);
|
|
49
|
-
}
|
|
50
|
-
const rawHex = num.toString(16);
|
|
51
|
-
const hex = rawHex.length % 2 ? "0" + rawHex : rawHex;
|
|
52
|
-
const bytes = new Uint8Array(hex.length / 2);
|
|
53
|
-
for (let i = 0; i < bytes.length; i++)
|
|
54
|
-
bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
|
|
55
|
-
const leadingZeros = str.split('').findIndex(c => c !== '1');
|
|
56
|
-
const prefix = new Uint8Array(leadingZeros === -1 ? str.length : leadingZeros);
|
|
57
|
-
return new Uint8Array([...prefix, ...bytes]);
|
|
58
|
-
}
|
|
59
|
-
const ED25519_PUB_MULTICODEC = new Uint8Array([0xed, 0x01]);
|
|
60
|
-
function multibaseToPubkey(multibase) {
|
|
61
|
-
if (!multibase.startsWith('z'))
|
|
62
|
-
throw new Error('Expected base58btc multibase');
|
|
63
|
-
const decoded = base58Decode(multibase.slice(1));
|
|
64
|
-
return decoded.slice(2); // Strip 2-byte multicodec prefix
|
|
65
|
-
}
|
|
66
|
-
function canonicalize(obj) {
|
|
67
|
-
if (typeof obj !== 'object' || obj === null)
|
|
68
|
-
return JSON.stringify(obj);
|
|
69
|
-
if (Array.isArray(obj))
|
|
70
|
-
return '[' + obj.map(canonicalize).join(',') + ']';
|
|
71
|
-
const keys = Object.keys(obj).sort();
|
|
72
|
-
return '{' + keys.map(k => JSON.stringify(k) + ':' + canonicalize(obj[k])).join(',') + '}';
|
|
73
|
-
}
|
|
74
|
-
// ─── Core Functions ───────────────────────────────────────────────────────────
|
|
75
|
-
/**
|
|
76
|
-
* Generate a complete trust bundle for an agent.
|
|
77
|
-
* Fetches real onchain data for staking balance and wallet age.
|
|
78
|
-
*/
|
|
79
|
-
export async function verifyAgent(params) {
|
|
80
|
-
const { privateKey, chain, taskBridgeApiUrl } = params;
|
|
81
|
-
const privKeyBytes = new Uint8Array(Buffer.from(privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey, 'hex'));
|
|
82
|
-
// 1. Derive DID
|
|
83
|
-
const agentDID = deriveAgentDID(privateKey);
|
|
84
|
-
// 2. Derive wallet address from private key (secp256k1)
|
|
85
|
-
const { privateKeyToAccount } = await import('viem/accounts');
|
|
86
|
-
const account = privateKeyToAccount(privateKey);
|
|
87
|
-
const walletAddress = account.address;
|
|
88
|
-
// 3. Get staking balance
|
|
89
|
-
const pool = new AgentStakingPool();
|
|
90
|
-
let stakingBalance = 0n;
|
|
91
|
-
try {
|
|
92
|
-
const balance = await pool.getBalance(agentDID, chain);
|
|
93
|
-
stakingBalance = balance.netBalanceUsdc;
|
|
94
|
-
}
|
|
95
|
-
catch {
|
|
96
|
-
// No staking position — that's fine
|
|
97
|
-
stakingBalance = 0n;
|
|
98
|
-
}
|
|
99
|
-
// 4. Get wallet age from first transaction block
|
|
100
|
-
const viemChain = CHAINS[chain];
|
|
101
|
-
const publicClient = createPublicClient({
|
|
102
|
-
chain: viemChain,
|
|
103
|
-
transport: http(),
|
|
104
|
-
});
|
|
105
|
-
let walletAgeDays = 0;
|
|
106
|
-
try {
|
|
107
|
-
const txCount = await publicClient.getTransactionCount({ address: walletAddress });
|
|
108
|
-
if (txCount > 0) {
|
|
109
|
-
// Use a rough heuristic: query current block timestamp vs estimated first tx
|
|
110
|
-
// Full indexer query would require third-party RPC or block explorers
|
|
111
|
-
// We use the current block as a lower bound
|
|
112
|
-
const block = await publicClient.getBlock();
|
|
113
|
-
const latestTimestamp = Number(block.timestamp);
|
|
114
|
-
// Assume first tx was ~30 days per 10k txs heuristic (rough but non-zero)
|
|
115
|
-
// In production: use eth_getLogs or a Dune query to find exact first tx
|
|
116
|
-
walletAgeDays = Math.min(txCount * 0.1, 365 * 5); // cap at 5 years
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
walletAgeDays = 0;
|
|
121
|
-
}
|
|
122
|
-
// 5. Get TaskBridge task count (optional)
|
|
123
|
-
let taskBridgeTasksCompleted = 0;
|
|
124
|
-
if (taskBridgeApiUrl) {
|
|
125
|
-
try {
|
|
126
|
-
const url = `${taskBridgeApiUrl.replace(/\/$/, '')}/agents/${walletAddress}/tasks/completed`;
|
|
127
|
-
const resp = await fetch(url, {
|
|
128
|
-
headers: { 'Content-Type': 'application/json' },
|
|
129
|
-
signal: AbortSignal.timeout(5000),
|
|
130
|
-
});
|
|
131
|
-
if (resp.ok) {
|
|
132
|
-
const data = await resp.json();
|
|
133
|
-
taskBridgeTasksCompleted = data.count ?? 0;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
catch {
|
|
137
|
-
// TaskBridge unavailable — proceed with 0
|
|
138
|
-
taskBridgeTasksCompleted = 0;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// 6. Compute reputation score (0-100)
|
|
142
|
-
const reputationScore = computeReputationScore({
|
|
143
|
-
stakingBalance,
|
|
144
|
-
taskBridgeTasksCompleted,
|
|
145
|
-
walletAgeDays,
|
|
146
|
-
});
|
|
147
|
-
// 7. Build bundle payload and sign with DID private key
|
|
148
|
-
const verifiedAt = Math.floor(Date.now() / 1000);
|
|
149
|
-
const bundlePayload = {
|
|
150
|
-
did: agentDID.did,
|
|
151
|
-
walletAddress,
|
|
152
|
-
stakingBalance: stakingBalance.toString(),
|
|
153
|
-
reputationScore,
|
|
154
|
-
taskBridgeTasksCompleted,
|
|
155
|
-
walletAgeDays,
|
|
156
|
-
verifiedAt,
|
|
157
|
-
};
|
|
158
|
-
const payloadBytes = new TextEncoder().encode(canonicalize(bundlePayload));
|
|
159
|
-
const hash = sha256(payloadBytes);
|
|
160
|
-
const sig = ed.sign(hash, privKeyBytes);
|
|
161
|
-
const signature = 'z' + base58Encode(sig);
|
|
162
|
-
return {
|
|
163
|
-
did: agentDID.did,
|
|
164
|
-
walletAddress,
|
|
165
|
-
stakingBalance,
|
|
166
|
-
reputationScore,
|
|
167
|
-
taskBridgeTasksCompleted,
|
|
168
|
-
walletAgeDays,
|
|
169
|
-
verifiedAt,
|
|
170
|
-
signature,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Verify a trust bundle was signed by the claimed DID.
|
|
175
|
-
* Returns true if signature is valid.
|
|
176
|
-
*/
|
|
177
|
-
export function verifyTrustBundle(bundle) {
|
|
178
|
-
try {
|
|
179
|
-
// Extract public key from DID
|
|
180
|
-
const multibase = bundle.did.replace('did:key:', '');
|
|
181
|
-
const pubkey = multibaseToPubkey(multibase);
|
|
182
|
-
// Reconstruct the signed payload (same fields, same order as above)
|
|
183
|
-
const bundlePayload = {
|
|
184
|
-
did: bundle.did,
|
|
185
|
-
walletAddress: bundle.walletAddress,
|
|
186
|
-
stakingBalance: bundle.stakingBalance.toString(),
|
|
187
|
-
reputationScore: bundle.reputationScore,
|
|
188
|
-
taskBridgeTasksCompleted: bundle.taskBridgeTasksCompleted,
|
|
189
|
-
walletAgeDays: bundle.walletAgeDays,
|
|
190
|
-
verifiedAt: bundle.verifiedAt,
|
|
191
|
-
};
|
|
192
|
-
const payloadBytes = new TextEncoder().encode(canonicalize(bundlePayload));
|
|
193
|
-
const hash = sha256(payloadBytes);
|
|
194
|
-
const sigBytes = base58Decode(bundle.signature.slice(1)); // strip 'z'
|
|
195
|
-
return ed.verify(sigBytes, hash, pubkey);
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Compute a 0-100 reputation score based on observable agent signals:
|
|
203
|
-
* - Staking balance (up to 40 pts): $1000 USDC = 40pts, linear below
|
|
204
|
-
* - TaskBridge tasks completed (up to 40 pts): 100 tasks = 40pts, linear below
|
|
205
|
-
* - Wallet age (up to 20 pts): 180 days = 20pts, linear below
|
|
206
|
-
*/
|
|
207
|
-
function computeReputationScore(input) {
|
|
208
|
-
const { stakingBalance, taskBridgeTasksCompleted, walletAgeDays } = input;
|
|
209
|
-
// USDC has 6 decimals
|
|
210
|
-
const usdcValue = Number(stakingBalance) / 1e6;
|
|
211
|
-
const stakingScore = Math.min(40, (usdcValue / 1000) * 40);
|
|
212
|
-
const taskScore = Math.min(40, (taskBridgeTasksCompleted / 100) * 40);
|
|
213
|
-
const ageScore = Math.min(20, (walletAgeDays / 180) * 20);
|
|
214
|
-
return Math.round(stakingScore + taskScore + ageScore);
|
|
215
|
-
}
|
|
216
|
-
//# sourceMappingURL=verifyAgent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verifyAgent.js","sourceRoot":"","sources":["../../src/verify/verifyAgent.ts"],"names":[],"mappings":"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"}
|
package/dist/x402/budget.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* [MAX-ADDED] In-memory budget tracker for x402 payments.
|
|
3
|
-
* Enforces per-service caps, daily limits, and per-request maximums.
|
|
4
|
-
* On-chain spend limits are ALSO enforced by the AgentWallet contract —
|
|
5
|
-
* this is an additional client-side layer for granular service-level control.
|
|
6
|
-
*/
|
|
7
|
-
export declare class X402BudgetTracker {
|
|
8
|
-
constructor(config?: {});
|
|
9
|
-
/**
|
|
10
|
-
* Check if a payment is within budget limits.
|
|
11
|
-
* Returns { allowed: true } or { allowed: false, reason: string }.
|
|
12
|
-
*/
|
|
13
|
-
checkBudget(service: any, amount: any): {
|
|
14
|
-
allowed: boolean;
|
|
15
|
-
reason: string;
|
|
16
|
-
} | {
|
|
17
|
-
allowed: boolean;
|
|
18
|
-
reason?: undefined;
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* Record a completed payment.
|
|
22
|
-
*/
|
|
23
|
-
recordPayment(log: any): void;
|
|
24
|
-
/**
|
|
25
|
-
* Get transaction history, optionally filtered.
|
|
26
|
-
*/
|
|
27
|
-
getTransactionLog(filter: any): any;
|
|
28
|
-
/**
|
|
29
|
-
* Get current daily spend summary.
|
|
30
|
-
*/
|
|
31
|
-
getDailySpendSummary(): {
|
|
32
|
-
global: any;
|
|
33
|
-
byService: {};
|
|
34
|
-
resetsAt: any;
|
|
35
|
-
};
|
|
36
|
-
/**
|
|
37
|
-
* Add or update a service budget at runtime.
|
|
38
|
-
*/
|
|
39
|
-
setServiceBudget(budget: any): void;
|
|
40
|
-
findServiceBudget(service: any): any;
|
|
41
|
-
maybeResetDaily(): void;
|
|
42
|
-
startOfDay(): number;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=budget.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/x402/budget.ts"],"names":[],"mappings":"AACA;;;;;GAKG;AACH,qBAAa,iBAAiB;gBACd,MAAM,KAAK;IAcvB;;;OAGG;IACH,WAAW,CAAC,OAAO,KAAA,EAAE,MAAM,KAAA;;;;;;;IAuB3B;;OAEG;IACH,aAAa,CAAC,GAAG,KAAA;IASjB;;OAEG;IACH,iBAAiB,CAAC,MAAM,KAAA;IAUxB;;OAEG;IACH,oBAAoB;;;;;IAYpB;;OAEG;IACH,gBAAgB,CAAC,MAAM,KAAA;IAIvB,iBAAiB,CAAC,OAAO,KAAA;IAIzB,eAAe;IAQf,UAAU;CAIb"}
|
package/dist/x402/budget.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
/**
|
|
3
|
-
* [MAX-ADDED] In-memory budget tracker for x402 payments.
|
|
4
|
-
* Enforces per-service caps, daily limits, and per-request maximums.
|
|
5
|
-
* On-chain spend limits are ALSO enforced by the AgentWallet contract —
|
|
6
|
-
* this is an additional client-side layer for granular service-level control.
|
|
7
|
-
*/
|
|
8
|
-
export class X402BudgetTracker {
|
|
9
|
-
constructor(config = {}) {
|
|
10
|
-
this.serviceBudgets = new Map();
|
|
11
|
-
this.dailySpend = new Map(); // service -> today's total
|
|
12
|
-
this.globalDailySpend = 0n;
|
|
13
|
-
this.transactionLog = [];
|
|
14
|
-
this.globalDailyLimit = config.globalDailyLimit ?? BigInt('0xFFFFFFFFFFFFFFFFFFFFFFFF'); // effectively unlimited
|
|
15
|
-
this.globalPerRequestMax = config.globalPerRequestMax ?? BigInt('0xFFFFFFFFFFFFFFFFFFFFFFFF');
|
|
16
|
-
this.dailyResetTimestamp = this.startOfDay();
|
|
17
|
-
if (config.serviceBudgets) {
|
|
18
|
-
for (const budget of config.serviceBudgets) {
|
|
19
|
-
this.serviceBudgets.set(budget.service, budget);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Check if a payment is within budget limits.
|
|
25
|
-
* Returns { allowed: true } or { allowed: false, reason: string }.
|
|
26
|
-
*/
|
|
27
|
-
checkBudget(service, amount) {
|
|
28
|
-
this.maybeResetDaily();
|
|
29
|
-
// Global per-request check
|
|
30
|
-
if (amount > this.globalPerRequestMax) {
|
|
31
|
-
return { allowed: false, reason: `Amount ${amount} exceeds global per-request max ${this.globalPerRequestMax}` };
|
|
32
|
-
}
|
|
33
|
-
// Global daily check
|
|
34
|
-
if (this.globalDailySpend + amount > this.globalDailyLimit) {
|
|
35
|
-
return { allowed: false, reason: `Would exceed global daily limit ${this.globalDailyLimit}` };
|
|
36
|
-
}
|
|
37
|
-
// Service-specific checks
|
|
38
|
-
const budget = this.findServiceBudget(service);
|
|
39
|
-
if (budget) {
|
|
40
|
-
if (amount > budget.maxPerRequest) {
|
|
41
|
-
return { allowed: false, reason: `Amount ${amount} exceeds service per-request max ${budget.maxPerRequest} for ${service}` };
|
|
42
|
-
}
|
|
43
|
-
const serviceDailySpend = this.dailySpend.get(service) ?? 0n;
|
|
44
|
-
if (serviceDailySpend + amount > budget.dailyLimit) {
|
|
45
|
-
return { allowed: false, reason: `Would exceed daily limit ${budget.dailyLimit} for ${service}` };
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return { allowed: true };
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Record a completed payment.
|
|
52
|
-
*/
|
|
53
|
-
recordPayment(log) {
|
|
54
|
-
this.maybeResetDaily();
|
|
55
|
-
this.transactionLog.push(log);
|
|
56
|
-
if (log.success) {
|
|
57
|
-
const service = log.service;
|
|
58
|
-
this.dailySpend.set(service, (this.dailySpend.get(service) ?? 0n) + log.amount);
|
|
59
|
-
this.globalDailySpend += log.amount;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Get transaction history, optionally filtered.
|
|
64
|
-
*/
|
|
65
|
-
getTransactionLog(filter) {
|
|
66
|
-
let logs = this.transactionLog;
|
|
67
|
-
if (filter?.service) {
|
|
68
|
-
logs = logs.filter(l => l.service === filter.service);
|
|
69
|
-
}
|
|
70
|
-
if (filter?.since) {
|
|
71
|
-
logs = logs.filter(l => l.timestamp >= filter.since);
|
|
72
|
-
}
|
|
73
|
-
return logs;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Get current daily spend summary.
|
|
77
|
-
*/
|
|
78
|
-
getDailySpendSummary() {
|
|
79
|
-
this.maybeResetDaily();
|
|
80
|
-
const byService = {};
|
|
81
|
-
for (const [service, amount] of this.dailySpend) {
|
|
82
|
-
byService[service] = amount;
|
|
83
|
-
}
|
|
84
|
-
return {
|
|
85
|
-
global: this.globalDailySpend,
|
|
86
|
-
byService,
|
|
87
|
-
resetsAt: this.dailyResetTimestamp + 86400,
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Add or update a service budget at runtime.
|
|
92
|
-
*/
|
|
93
|
-
setServiceBudget(budget) {
|
|
94
|
-
this.serviceBudgets.set(budget.service, budget);
|
|
95
|
-
}
|
|
96
|
-
// ─── Internals ───
|
|
97
|
-
findServiceBudget(service) {
|
|
98
|
-
// Exact match first, then wildcard
|
|
99
|
-
return this.serviceBudgets.get(service) ?? this.serviceBudgets.get('*');
|
|
100
|
-
}
|
|
101
|
-
maybeResetDaily() {
|
|
102
|
-
const now = this.startOfDay();
|
|
103
|
-
if (now > this.dailyResetTimestamp) {
|
|
104
|
-
this.dailySpend.clear();
|
|
105
|
-
this.globalDailySpend = 0n;
|
|
106
|
-
this.dailyResetTimestamp = now;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
startOfDay() {
|
|
110
|
-
const now = Math.floor(Date.now() / 1000);
|
|
111
|
-
return now - (now % 86400);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
//# sourceMappingURL=budget.js.map
|
|
115
|
-
//# sourceMappingURL=budget.js.map
|
package/dist/x402/budget.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/x402/budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
export declare const ABSTRACT_CHAIN_IDS: {
|
|
2
|
-
mainnet: number;
|
|
3
|
-
testnet: number;
|
|
4
|
-
};
|
|
5
|
-
/** USDC on Abstract Mainnet (official Bridged USDC) */
|
|
6
|
-
export declare const ABSTRACT_USDC: {
|
|
7
|
-
2741: string;
|
|
8
|
-
11124: string;
|
|
9
|
-
};
|
|
10
|
-
/** Abstract's approved payment facilitator contracts */
|
|
11
|
-
export declare const ABSTRACT_APPROVED_FACILITATORS: string[];
|
|
12
|
-
/**
|
|
13
|
-
* Adapter for Abstract's delegated payment facilitator x402 model.
|
|
14
|
-
*
|
|
15
|
-
* Instead of signing a direct payment transaction, the agent signs an EIP-712
|
|
16
|
-
* permit authorizing a facilitator contract to execute the payment on its behalf.
|
|
17
|
-
* This is Abstract's model — the agent's keys never touch the chain directly.
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* ```typescript
|
|
21
|
-
* const adapter = new AbstractDelegatedFacilitatorAdapter(walletClient, {
|
|
22
|
-
* facilitatorAddress: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
|
|
23
|
-
* });
|
|
24
|
-
*
|
|
25
|
-
* const result = await adapter.signPaymentPermit({
|
|
26
|
-
* amount: 1_000_000n, // 1 USDC (6 decimals)
|
|
27
|
-
* payTo: '0xmerchant...',
|
|
28
|
-
* nonce: 0n,
|
|
29
|
-
* resource: 'https://api.example.com/resource',
|
|
30
|
-
* });
|
|
31
|
-
* ```
|
|
32
|
-
*/
|
|
33
|
-
export declare class AbstractDelegatedFacilitatorAdapter {
|
|
34
|
-
constructor(walletClient: any, config: any, chainId?: number);
|
|
35
|
-
/**
|
|
36
|
-
* Sign an EIP-712 delegated payment permit for the Abstract facilitator.
|
|
37
|
-
* This replaces direct tx signing — the permit is submitted to the facilitator contract.
|
|
38
|
-
*/
|
|
39
|
-
signPaymentPermit(params: any): Promise<{
|
|
40
|
-
permitSignature: any;
|
|
41
|
-
permitData: `0x${string}`;
|
|
42
|
-
permit: {
|
|
43
|
-
facilitator: any;
|
|
44
|
-
token: any;
|
|
45
|
-
amount: any;
|
|
46
|
-
payTo: any;
|
|
47
|
-
nonce: any;
|
|
48
|
-
deadline: bigint;
|
|
49
|
-
resource: any;
|
|
50
|
-
};
|
|
51
|
-
chainId: any;
|
|
52
|
-
}>;
|
|
53
|
-
/**
|
|
54
|
-
* Build the x402 payment payload for Abstract's delegated facilitator model.
|
|
55
|
-
* This payload replaces the standard txHash payload in the X-PAYMENT header.
|
|
56
|
-
*/
|
|
57
|
-
buildX402Payload(params: any): Promise<{
|
|
58
|
-
scheme: string;
|
|
59
|
-
chainId: any;
|
|
60
|
-
facilitator: any;
|
|
61
|
-
token: any;
|
|
62
|
-
amount: any;
|
|
63
|
-
payTo: any;
|
|
64
|
-
nonce: any;
|
|
65
|
-
deadline: string;
|
|
66
|
-
resource: any;
|
|
67
|
-
permitSignature: any;
|
|
68
|
-
permitData: `0x${string}`;
|
|
69
|
-
}>;
|
|
70
|
-
/** Check if a chain ID is an Abstract chain */
|
|
71
|
-
static isAbstractChain(chainId: any): boolean;
|
|
72
|
-
/** Get the network string for x402 payment requirements (e.g. "abstract:2741") */
|
|
73
|
-
static getNetworkString(chainId: any): string;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Abstract chain IDs to add to SUPPORTED_CHAINS in the main SDK.
|
|
77
|
-
* These route through AbstractDelegatedFacilitatorAdapter for x402 payments.
|
|
78
|
-
*/
|
|
79
|
-
export declare const ABSTRACT_SUPPORTED_CHAINS: {
|
|
80
|
-
'abstract:2741': {
|
|
81
|
-
chainId: number;
|
|
82
|
-
name: string;
|
|
83
|
-
rpcUrl: string;
|
|
84
|
-
nativeCurrency: {
|
|
85
|
-
name: string;
|
|
86
|
-
symbol: string;
|
|
87
|
-
decimals: number;
|
|
88
|
-
};
|
|
89
|
-
blockExplorer: string;
|
|
90
|
-
x402Model: string;
|
|
91
|
-
usdc: any;
|
|
92
|
-
};
|
|
93
|
-
'abstract-testnet:11124': {
|
|
94
|
-
chainId: number;
|
|
95
|
-
name: string;
|
|
96
|
-
rpcUrl: string;
|
|
97
|
-
nativeCurrency: {
|
|
98
|
-
name: string;
|
|
99
|
-
symbol: string;
|
|
100
|
-
decimals: number;
|
|
101
|
-
};
|
|
102
|
-
blockExplorer: string;
|
|
103
|
-
x402Model: string;
|
|
104
|
-
usdc: any;
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/x402/chains/abstract/index.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,kBAAkB;;;CAG9B,CAAC;AACF,uDAAuD;AACvD,eAAO,MAAM,aAAa;;;CAGzB,CAAC;AACF,wDAAwD;AACxD,eAAO,MAAM,8BAA8B,UAE1C,CAAC;AAmBF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,mCAAmC;gBAChC,YAAY,KAAA,EAAE,MAAM,KAAA,EAAE,OAAO,SAA6B;IAoBtE;;;OAGG;IACG,iBAAiB,CAAC,MAAM,KAAA;;;;;;;;;;;;;;IA2C9B;;;OAGG;IACG,gBAAgB,CAAC,MAAM,KAAA;;;;;;;;;;;;;IAgB7B,+CAA+C;IAC/C,MAAM,CAAC,eAAe,CAAC,OAAO,KAAA;IAG9B,kFAAkF;IAClF,MAAM,CAAC,gBAAgB,CAAC,OAAO,KAAA;CAGlC;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBrC,CAAC"}
|