agentwallet-sdk 2.4.0 → 2.5.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/README.md +46 -19
- package/dist/bridge/abis.d.ts +187 -0
- package/dist/bridge/abis.d.ts.map +1 -0
- package/dist/bridge/abis.js +129 -0
- package/dist/bridge/abis.js.map +1 -0
- package/dist/bridge/client.d.ts +106 -0
- package/dist/bridge/client.d.ts.map +1 -0
- package/dist/bridge/client.js +393 -0
- package/dist/bridge/client.js.map +1 -0
- package/dist/bridge/index.d.ts +4 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +4 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/types.d.ts +107 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +58 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/chains.d.ts +37 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +75 -0
- package/dist/chains.js.map +1 -0
- package/dist/index.d.ts +11 -215
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +78 -0
- package/dist/swap/SwapModule.d.ts.map +1 -0
- package/dist/swap/SwapModule.js +272 -0
- package/dist/swap/SwapModule.js.map +1 -0
- package/dist/swap/abi.d.ts +169 -0
- package/dist/swap/abi.d.ts.map +1 -0
- package/dist/swap/abi.js +118 -0
- package/dist/swap/abi.js.map +1 -0
- package/dist/swap/index.d.ts +5 -0
- package/dist/swap/index.d.ts.map +1 -0
- package/dist/swap/index.js +5 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/swap/types.d.ts +81 -0
- package/dist/swap/types.d.ts.map +1 -0
- package/dist/swap/types.js +18 -0
- package/dist/swap/types.js.map +1 -0
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/x402/types.d.ts +2 -2
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +6 -2
- package/dist/x402/types.js.map +1 -1
- package/package.json +27 -12
- package/dist/x402/__tests__/budget.test.d.ts +0 -2
- package/dist/x402/__tests__/budget.test.d.ts.map +0 -1
- package/dist/x402/__tests__/budget.test.js +0 -114
- package/dist/x402/__tests__/budget.test.js.map +0 -1
- package/dist/x402/__tests__/client.test.d.ts +0 -2
- package/dist/x402/__tests__/client.test.d.ts.map +0 -1
- package/dist/x402/__tests__/client.test.js +0 -107
- package/dist/x402/__tests__/client.test.js.map +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { Address, Hash } from 'viem';
|
|
2
|
+
/** Uniswap V3 fee tier options */
|
|
3
|
+
export type UniswapFeeTier = 100 | 500 | 3000 | 10000;
|
|
4
|
+
/** Quote result from Uniswap V3 Quoter */
|
|
5
|
+
export interface SwapQuote {
|
|
6
|
+
/** Input token address */
|
|
7
|
+
tokenIn: Address;
|
|
8
|
+
/** Output token address */
|
|
9
|
+
tokenOut: Address;
|
|
10
|
+
/** Raw amount in (before protocol fee deduction) */
|
|
11
|
+
amountInRaw: bigint;
|
|
12
|
+
/** Amount in after protocol fee deduction (what gets swapped) */
|
|
13
|
+
amountInNet: bigint;
|
|
14
|
+
/** Protocol fee amount (0.875% of amountInRaw) */
|
|
15
|
+
feeAmount: bigint;
|
|
16
|
+
/** Expected output amount */
|
|
17
|
+
amountOut: bigint;
|
|
18
|
+
/** Minimum output after slippage */
|
|
19
|
+
amountOutMinimum: bigint;
|
|
20
|
+
/** Best Uniswap V3 pool fee tier found */
|
|
21
|
+
poolFeeTier: UniswapFeeTier;
|
|
22
|
+
/** Effective exchange rate: amountOut / amountInNet */
|
|
23
|
+
effectiveRate: number;
|
|
24
|
+
/** Gas estimate from quoter */
|
|
25
|
+
gasEstimate: bigint;
|
|
26
|
+
}
|
|
27
|
+
/** Options for a swap call */
|
|
28
|
+
export interface SwapOptions {
|
|
29
|
+
/** Slippage tolerance in basis points (default: 50 = 0.5%) */
|
|
30
|
+
slippageBps?: number;
|
|
31
|
+
/** Override fee tiers to try (default: all four tiers) */
|
|
32
|
+
feeTiers?: UniswapFeeTier[];
|
|
33
|
+
/** Deadline in seconds from now (default: 300 = 5 minutes) */
|
|
34
|
+
deadlineSecs?: number;
|
|
35
|
+
/** Override fee wallet address (default: wallet's own address) */
|
|
36
|
+
feeWallet?: Address;
|
|
37
|
+
}
|
|
38
|
+
/** Result of a completed swap */
|
|
39
|
+
export interface SwapResult {
|
|
40
|
+
/** Transaction hash of the swap */
|
|
41
|
+
txHash: Hash;
|
|
42
|
+
/** Transaction hash of the fee transfer (if separate) */
|
|
43
|
+
feeTxHash?: Hash;
|
|
44
|
+
/** The quote used for this swap */
|
|
45
|
+
quote: SwapQuote;
|
|
46
|
+
/** Whether approval tx was needed */
|
|
47
|
+
approvalRequired: boolean;
|
|
48
|
+
/** Approval tx hash (if triggered) */
|
|
49
|
+
approvalTxHash?: Hash;
|
|
50
|
+
}
|
|
51
|
+
/** SwapModule configuration */
|
|
52
|
+
export interface SwapModuleConfig {
|
|
53
|
+
/** Uniswap V3 SwapRouter02 address */
|
|
54
|
+
routerAddress: Address;
|
|
55
|
+
/** Uniswap V3 QuoterV2 address */
|
|
56
|
+
quoterAddress: Address;
|
|
57
|
+
/** Protocol fee in basis points (875 = 0.875%) */
|
|
58
|
+
feeBps: number;
|
|
59
|
+
/** Address that receives protocol fees */
|
|
60
|
+
feeWallet: Address;
|
|
61
|
+
/** Chain this swap module is operating on (default: 'base') */
|
|
62
|
+
chain?: import('../chains.js').SupportedChain;
|
|
63
|
+
}
|
|
64
|
+
/** Well-known Base Mainnet token addresses */
|
|
65
|
+
export declare const BASE_TOKENS: {
|
|
66
|
+
readonly USDC: `0x${string}`;
|
|
67
|
+
readonly WETH: `0x${string}`;
|
|
68
|
+
readonly cbETH: `0x${string}`;
|
|
69
|
+
/** Wrapped native (same as WETH on Base) */
|
|
70
|
+
readonly WNATIVE: `0x${string}`;
|
|
71
|
+
};
|
|
72
|
+
/** Uniswap V3 contract addresses on Base Mainnet (chain 8453) */
|
|
73
|
+
export declare const UNISWAP_V3_BASE: {
|
|
74
|
+
readonly ROUTER: `0x${string}`;
|
|
75
|
+
readonly QUOTER_V2: `0x${string}`;
|
|
76
|
+
};
|
|
77
|
+
/** Protocol fee in bps — 0.875% */
|
|
78
|
+
export declare const PROTOCOL_FEE_BPS = 875;
|
|
79
|
+
/** Default slippage in bps — 0.5% */
|
|
80
|
+
export declare const DEFAULT_SLIPPAGE_BPS = 50;
|
|
81
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/swap/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAO,MAAM,MAAM,CAAC;AAE/C,kCAAkC;AAClC,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC;AAEtD,0CAA0C;AAC1C,MAAM,WAAW,SAAS;IACxB,0BAA0B;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,2BAA2B;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,WAAW,EAAE,cAAc,CAAC;IAC5B,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,8BAA8B;AAC9B,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,iCAAiC;AACjC,MAAM,WAAW,UAAU;IACzB,mCAAmC;IACnC,MAAM,EAAE,IAAI,CAAC;IACb,yDAAyD;IACzD,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,mCAAmC;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,qCAAqC;IACrC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sCAAsC;IACtC,cAAc,CAAC,EAAE,IAAI,CAAC;CACvB;AAED,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,aAAa,EAAE,OAAO,CAAC;IACvB,kCAAkC;IAClC,aAAa,EAAE,OAAO,CAAC;IACvB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,OAAO,cAAc,EAAE,cAAc,CAAC;CAC/C;AAED,8CAA8C;AAC9C,eAAO,MAAM,WAAW;;;;IAItB,4CAA4C;;CAEpC,CAAC;AAEX,iEAAiE;AACjE,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX,mCAAmC;AACnC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,qCAAqC;AACrC,eAAO,MAAM,oBAAoB,KAAK,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Well-known Base Mainnet token addresses */
|
|
2
|
+
export const BASE_TOKENS = {
|
|
3
|
+
USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
4
|
+
WETH: '0x4200000000000000000000000000000000000006',
|
|
5
|
+
cbETH: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',
|
|
6
|
+
/** Wrapped native (same as WETH on Base) */
|
|
7
|
+
WNATIVE: '0x4200000000000000000000000000000000000006',
|
|
8
|
+
};
|
|
9
|
+
/** Uniswap V3 contract addresses on Base Mainnet (chain 8453) */
|
|
10
|
+
export const UNISWAP_V3_BASE = {
|
|
11
|
+
ROUTER: '0x2626664c2603336E57B271c5C0b26F421741e481',
|
|
12
|
+
QUOTER_V2: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',
|
|
13
|
+
};
|
|
14
|
+
/** Protocol fee in bps — 0.875% */
|
|
15
|
+
export const PROTOCOL_FEE_BPS = 875;
|
|
16
|
+
/** Default slippage in bps — 0.5% */
|
|
17
|
+
export const DEFAULT_SLIPPAGE_BPS = 50;
|
|
18
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/swap/types.ts"],"names":[],"mappings":"AAsEA,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,4CAAuD;IAC7D,IAAI,EAAE,4CAAuD;IAC7D,KAAK,EAAE,4CAAuD;IAC9D,4CAA4C;IAC5C,OAAO,EAAE,4CAAuD;CACxD,CAAC;AAEX,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,4CAAuD;IAC/D,SAAS,EAAE,4CAAuD;CAC1D,CAAC;AAEX,mCAAmC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,qCAAqC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export interface ExecuteResult {
|
|
|
38
38
|
/** Config for creating an AgentWallet client */
|
|
39
39
|
export interface AgentWalletConfig {
|
|
40
40
|
accountAddress: Address;
|
|
41
|
-
chain: 'base' | 'base-sepolia' | 'ethereum' | 'arbitrum' | 'polygon';
|
|
41
|
+
chain: 'base' | 'base-sepolia' | 'ethereum' | 'arbitrum' | 'optimism' | 'polygon';
|
|
42
42
|
rpcUrl?: string;
|
|
43
43
|
}
|
|
44
44
|
/** Event emitted when a transaction exceeds spend limits */
|
|
@@ -105,6 +105,7 @@ export declare const CHAIN_IDS: {
|
|
|
105
105
|
readonly 'base-sepolia': 84532;
|
|
106
106
|
readonly ethereum: 1;
|
|
107
107
|
readonly arbitrum: 42161;
|
|
108
|
+
readonly optimism: 10;
|
|
108
109
|
readonly polygon: 137;
|
|
109
110
|
};
|
|
110
111
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAE/C,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,mCAAmC;AACnC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,yDAAyD;AACzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,IAAI,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgHA,0BAA0B;AAC1B,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,KAAK;IACrB,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,GAAG;CACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgHA,0BAA0B;AAC1B,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,KAAK;IACrB,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,EAAE;IACd,SAAS,EAAE,GAAG;CACN,CAAC"}
|
package/dist/x402/types.d.ts
CHANGED
|
@@ -86,6 +86,6 @@ export interface X402ClientConfig {
|
|
|
86
86
|
}
|
|
87
87
|
/** USDC contract addresses by network */
|
|
88
88
|
export declare const USDC_ADDRESSES: Record<string, Address>;
|
|
89
|
-
/** Default supported networks */
|
|
90
|
-
export declare const DEFAULT_SUPPORTED_NETWORKS: readonly ["base:8453"];
|
|
89
|
+
/** Default supported networks — Base + Arbitrum + Optimism */
|
|
90
|
+
export declare const DEFAULT_SUPPORTED_NETWORKS: readonly ["base:8453", "arbitrum:42161", "optimism:10"];
|
|
91
91
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/x402/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/x402/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/x402/types.ts"],"names":[],"mappings":"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"}
|
package/dist/x402/types.js
CHANGED
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
export const USDC_ADDRESSES = {
|
|
4
4
|
'base:8453': '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
5
5
|
'base-sepolia:84532': '0x036CbD53842c5426634e7929541eC2318f3dCF7e',
|
|
6
|
+
// Arbitrum One — Circle native USDC (NOT USDC.e bridged)
|
|
7
|
+
'arbitrum:42161': '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
8
|
+
// OP Mainnet — Circle native USDC (NOT USDC.e bridged)
|
|
9
|
+
'optimism:10': '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
|
|
6
10
|
};
|
|
7
|
-
/** Default supported networks */
|
|
8
|
-
export const DEFAULT_SUPPORTED_NETWORKS = ['base:8453'];
|
|
11
|
+
/** Default supported networks — Base + Arbitrum + Optimism */
|
|
12
|
+
export const DEFAULT_SUPPORTED_NETWORKS = ['base:8453', 'arbitrum:42161', 'optimism:10'];
|
|
9
13
|
//# sourceMappingURL=types.js.map
|
package/dist/x402/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/x402/types.ts"],"names":[],"mappings":"AAoGA,4BAA4B;AAE5B,yCAAyC;AACzC,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,WAAW,EAAE,4CAA4C;IACzD,oBAAoB,EAAE,4CAA4C;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/x402/types.ts"],"names":[],"mappings":"AAoGA,4BAA4B;AAE5B,yCAAyC;AACzC,MAAM,CAAC,MAAM,cAAc,GAA4B;IACrD,WAAW,EAAE,4CAA4C;IACzD,oBAAoB,EAAE,4CAA4C;IAClE,yDAAyD;IACzD,gBAAgB,EAAE,4CAA4C;IAC9D,uDAAuD;IACvD,aAAa,EAAE,4CAA4C;CACnD,CAAC;AAEX,8DAA8D;AAC9D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentwallet-sdk",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "TypeScript SDK for Agent Wallet
|
|
3
|
+
"version": "2.5.0",
|
|
4
|
+
"description": "TypeScript SDK for Agent Wallet \u2014 autonomous crypto spending for AI agents with user-set limits",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
@@ -11,23 +11,38 @@
|
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"dev": "tsc --watch",
|
|
13
13
|
"clean": "rm -rf dist",
|
|
14
|
-
"test": "vitest run"
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"typecheck": "tsc --noEmit",
|
|
16
|
+
"prepublishOnly": "npm run clean && npm run build && npm run typecheck"
|
|
15
17
|
},
|
|
16
18
|
"keywords": [
|
|
19
|
+
"agent-identity",
|
|
20
|
+
"agent-payments",
|
|
17
21
|
"agent-wallet",
|
|
22
|
+
"agentic-wallet",
|
|
18
23
|
"ai-agent",
|
|
24
|
+
"autonomous-agent",
|
|
25
|
+
"base",
|
|
26
|
+
"bridge",
|
|
27
|
+
"cctp",
|
|
28
|
+
"cross-chain",
|
|
19
29
|
"crypto",
|
|
20
|
-
"
|
|
30
|
+
"defi-agent",
|
|
21
31
|
"erc-6551",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
32
|
+
"erc-8004",
|
|
33
|
+
"ethereum",
|
|
34
|
+
"machine-payments",
|
|
35
|
+
"mcp",
|
|
36
|
+
"mit-license",
|
|
37
|
+
"moonpay-alternative",
|
|
25
38
|
"non-custodial",
|
|
39
|
+
"open-source-wallet",
|
|
26
40
|
"spend-limits",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
41
|
+
"swap",
|
|
42
|
+
"token-bound-account",
|
|
43
|
+
"uniswap",
|
|
44
|
+
"web3",
|
|
45
|
+
"x402"
|
|
31
46
|
],
|
|
32
47
|
"license": "MIT",
|
|
33
48
|
"repository": {
|
|
@@ -42,4 +57,4 @@
|
|
|
42
57
|
"typescript": "5.3.3",
|
|
43
58
|
"vitest": "4.0.18"
|
|
44
59
|
}
|
|
45
|
-
}
|
|
60
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"budget.test.d.ts","sourceRoot":"","sources":["../../../src/x402/__tests__/budget.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
// [MAX-ADDED] Tests for x402 Budget Tracker
|
|
2
|
-
import { describe, it, expect, beforeEach } from 'vitest';
|
|
3
|
-
import { X402BudgetTracker } from '../budget.js';
|
|
4
|
-
describe('X402BudgetTracker', () => {
|
|
5
|
-
let tracker;
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
tracker = new X402BudgetTracker({
|
|
8
|
-
globalDailyLimit: 100000000n, // 100 USDC
|
|
9
|
-
globalPerRequestMax: 10000000n, // 10 USDC
|
|
10
|
-
serviceBudgets: [
|
|
11
|
-
{ service: 'api.example.com', maxPerRequest: 5000000n, dailyLimit: 50000000n },
|
|
12
|
-
{ service: '*', maxPerRequest: 2000000n, dailyLimit: 20000000n },
|
|
13
|
-
],
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
it('allows payments within limits', () => {
|
|
17
|
-
const result = tracker.checkBudget('api.example.com', 1000000n);
|
|
18
|
-
expect(result.allowed).toBe(true);
|
|
19
|
-
});
|
|
20
|
-
it('rejects payments exceeding global per-request max', () => {
|
|
21
|
-
const result = tracker.checkBudget('api.example.com', 15000000n);
|
|
22
|
-
expect(result.allowed).toBe(false);
|
|
23
|
-
expect(result.reason).toContain('global per-request max');
|
|
24
|
-
});
|
|
25
|
-
it('rejects payments exceeding service per-request max', () => {
|
|
26
|
-
const result = tracker.checkBudget('api.example.com', 6000000n);
|
|
27
|
-
expect(result.allowed).toBe(false);
|
|
28
|
-
expect(result.reason).toContain('service per-request max');
|
|
29
|
-
});
|
|
30
|
-
it('uses wildcard budget for unknown services', () => {
|
|
31
|
-
const result = tracker.checkBudget('unknown.com', 3000000n);
|
|
32
|
-
expect(result.allowed).toBe(false);
|
|
33
|
-
expect(result.reason).toContain('service per-request max');
|
|
34
|
-
});
|
|
35
|
-
it('tracks daily spending per service', () => {
|
|
36
|
-
const log = {
|
|
37
|
-
timestamp: Math.floor(Date.now() / 1000),
|
|
38
|
-
service: 'api.example.com',
|
|
39
|
-
url: 'https://api.example.com/data',
|
|
40
|
-
amount: 4000000n,
|
|
41
|
-
token: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
42
|
-
recipient: '0x1234567890abcdef1234567890abcdef12345678',
|
|
43
|
-
txHash: '0xabc123',
|
|
44
|
-
network: 'base:8453',
|
|
45
|
-
scheme: 'exact',
|
|
46
|
-
success: true,
|
|
47
|
-
};
|
|
48
|
-
tracker.recordPayment(log);
|
|
49
|
-
const summary = tracker.getDailySpendSummary();
|
|
50
|
-
expect(summary.global).toBe(4000000n);
|
|
51
|
-
expect(summary.byService['api.example.com']).toBe(4000000n);
|
|
52
|
-
});
|
|
53
|
-
it('rejects when daily limit would be exceeded', () => {
|
|
54
|
-
// Spend 48 USDC
|
|
55
|
-
for (let i = 0; i < 12; i++) {
|
|
56
|
-
tracker.recordPayment({
|
|
57
|
-
timestamp: Math.floor(Date.now() / 1000),
|
|
58
|
-
service: 'api.example.com',
|
|
59
|
-
url: 'https://api.example.com/data',
|
|
60
|
-
amount: 4000000n,
|
|
61
|
-
token: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
62
|
-
recipient: '0x1234567890abcdef1234567890abcdef12345678',
|
|
63
|
-
txHash: '0xabc123',
|
|
64
|
-
network: 'base:8453',
|
|
65
|
-
scheme: 'exact',
|
|
66
|
-
success: true,
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
// Next 4 USDC would exceed 50 USDC service daily limit
|
|
70
|
-
const result = tracker.checkBudget('api.example.com', 4000000n);
|
|
71
|
-
expect(result.allowed).toBe(false);
|
|
72
|
-
expect(result.reason).toContain('daily limit');
|
|
73
|
-
});
|
|
74
|
-
it('returns transaction log with filters', () => {
|
|
75
|
-
const now = Math.floor(Date.now() / 1000);
|
|
76
|
-
tracker.recordPayment({
|
|
77
|
-
timestamp: now - 100,
|
|
78
|
-
service: 'api.example.com',
|
|
79
|
-
url: 'https://api.example.com/a',
|
|
80
|
-
amount: 1000000n,
|
|
81
|
-
token: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
82
|
-
recipient: '0x1234567890abcdef1234567890abcdef12345678',
|
|
83
|
-
txHash: '0xaaa',
|
|
84
|
-
network: 'base:8453',
|
|
85
|
-
scheme: 'exact',
|
|
86
|
-
success: true,
|
|
87
|
-
});
|
|
88
|
-
tracker.recordPayment({
|
|
89
|
-
timestamp: now,
|
|
90
|
-
service: 'other.com',
|
|
91
|
-
url: 'https://other.com/b',
|
|
92
|
-
amount: 500000n,
|
|
93
|
-
token: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
94
|
-
recipient: '0x1234567890abcdef1234567890abcdef12345678',
|
|
95
|
-
txHash: '0xbbb',
|
|
96
|
-
network: 'base:8453',
|
|
97
|
-
scheme: 'exact',
|
|
98
|
-
success: true,
|
|
99
|
-
});
|
|
100
|
-
expect(tracker.getTransactionLog()).toHaveLength(2);
|
|
101
|
-
expect(tracker.getTransactionLog({ service: 'other.com' })).toHaveLength(1);
|
|
102
|
-
expect(tracker.getTransactionLog({ since: now - 50 })).toHaveLength(1);
|
|
103
|
-
});
|
|
104
|
-
it('allows runtime budget updates', () => {
|
|
105
|
-
tracker.setServiceBudget({
|
|
106
|
-
service: 'new-api.com',
|
|
107
|
-
maxPerRequest: 1000000n,
|
|
108
|
-
dailyLimit: 5000000n,
|
|
109
|
-
});
|
|
110
|
-
expect(tracker.checkBudget('new-api.com', 500000n).allowed).toBe(true);
|
|
111
|
-
expect(tracker.checkBudget('new-api.com', 2000000n).allowed).toBe(false);
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
//# sourceMappingURL=budget.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"budget.test.js","sourceRoot":"","sources":["../../../src/x402/__tests__/budget.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../../src/x402/__tests__/client.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
// [MAX-ADDED] Tests for x402 Client — protocol parsing and payment selection
|
|
2
|
-
import { describe, it, expect } from 'vitest';
|
|
3
|
-
import { X402Client } from '../client.js';
|
|
4
|
-
// Mock wallet (we test protocol logic, not on-chain execution)
|
|
5
|
-
const mockWallet = {};
|
|
6
|
-
describe('X402Client', () => {
|
|
7
|
-
describe('parse402Response', () => {
|
|
8
|
-
it('parses base64 PAYMENT-REQUIRED header', async () => {
|
|
9
|
-
const client = new X402Client(mockWallet, { autoPay: false });
|
|
10
|
-
const paymentRequired = {
|
|
11
|
-
x402Version: 1,
|
|
12
|
-
resource: { url: '/api/data', description: 'Data API', mimeType: 'application/json' },
|
|
13
|
-
accepts: [
|
|
14
|
-
{
|
|
15
|
-
scheme: 'exact',
|
|
16
|
-
network: 'base:8453',
|
|
17
|
-
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
18
|
-
amount: '1000000',
|
|
19
|
-
payTo: '0xRecipient',
|
|
20
|
-
maxTimeoutSeconds: 30,
|
|
21
|
-
extra: {},
|
|
22
|
-
},
|
|
23
|
-
],
|
|
24
|
-
};
|
|
25
|
-
const b64 = btoa(JSON.stringify(paymentRequired));
|
|
26
|
-
const response = new Response(null, {
|
|
27
|
-
status: 402,
|
|
28
|
-
headers: { 'payment-required': b64 },
|
|
29
|
-
});
|
|
30
|
-
const parsed = await client.parse402Response(response);
|
|
31
|
-
expect(parsed).not.toBeNull();
|
|
32
|
-
expect(parsed.x402Version).toBe(1);
|
|
33
|
-
expect(parsed.accepts).toHaveLength(1);
|
|
34
|
-
expect(parsed.accepts[0].scheme).toBe('exact');
|
|
35
|
-
expect(parsed.accepts[0].amount).toBe('1000000');
|
|
36
|
-
});
|
|
37
|
-
it('parses JSON body fallback', async () => {
|
|
38
|
-
const client = new X402Client(mockWallet, { autoPay: false });
|
|
39
|
-
const paymentRequired = {
|
|
40
|
-
x402Version: 1,
|
|
41
|
-
resource: { url: '/api/data', description: 'Data', mimeType: 'application/json' },
|
|
42
|
-
accepts: [
|
|
43
|
-
{
|
|
44
|
-
scheme: 'exact',
|
|
45
|
-
network: 'base:8453',
|
|
46
|
-
asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
47
|
-
amount: '500000',
|
|
48
|
-
payTo: '0xRecipient',
|
|
49
|
-
maxTimeoutSeconds: 30,
|
|
50
|
-
extra: {},
|
|
51
|
-
},
|
|
52
|
-
],
|
|
53
|
-
};
|
|
54
|
-
const response = new Response(JSON.stringify(paymentRequired), {
|
|
55
|
-
status: 402,
|
|
56
|
-
headers: { 'content-type': 'application/json' },
|
|
57
|
-
});
|
|
58
|
-
const parsed = await client.parse402Response(response);
|
|
59
|
-
expect(parsed).not.toBeNull();
|
|
60
|
-
expect(parsed.accepts[0].amount).toBe('500000');
|
|
61
|
-
});
|
|
62
|
-
it('returns null for unparseable 402', async () => {
|
|
63
|
-
const client = new X402Client(mockWallet, { autoPay: false });
|
|
64
|
-
const response = new Response('Payment Required', { status: 402 });
|
|
65
|
-
const parsed = await client.parse402Response(response);
|
|
66
|
-
expect(parsed).toBeNull();
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
describe('selectPaymentOption', () => {
|
|
70
|
-
it('selects Base USDC exact scheme', () => {
|
|
71
|
-
const client = new X402Client(mockWallet);
|
|
72
|
-
const accepts = [
|
|
73
|
-
{ scheme: 'exact', network: 'ethereum:1', asset: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', amount: '1000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
|
|
74
|
-
{ scheme: 'exact', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '1000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
|
|
75
|
-
];
|
|
76
|
-
const selected = client.selectPaymentOption(accepts);
|
|
77
|
-
expect(selected).not.toBeNull();
|
|
78
|
-
expect(selected.network).toBe('base:8453');
|
|
79
|
-
});
|
|
80
|
-
it('prefers lowest amount among compatible options', () => {
|
|
81
|
-
const client = new X402Client(mockWallet);
|
|
82
|
-
const accepts = [
|
|
83
|
-
{ scheme: 'exact', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '5000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
|
|
84
|
-
{ scheme: 'exact', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '1000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
|
|
85
|
-
];
|
|
86
|
-
const selected = client.selectPaymentOption(accepts);
|
|
87
|
-
expect(selected.amount).toBe('1000000');
|
|
88
|
-
});
|
|
89
|
-
it('returns null when no compatible option exists', () => {
|
|
90
|
-
const client = new X402Client(mockWallet);
|
|
91
|
-
const accepts = [
|
|
92
|
-
{ scheme: 'exact', network: 'solana:mainnet', asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', amount: '1000000', payTo: 'sol_addr', maxTimeoutSeconds: 30, extra: {} },
|
|
93
|
-
];
|
|
94
|
-
expect(client.selectPaymentOption(accepts)).toBeNull();
|
|
95
|
-
});
|
|
96
|
-
it('prefers exact scheme over others', () => {
|
|
97
|
-
const client = new X402Client(mockWallet);
|
|
98
|
-
const accepts = [
|
|
99
|
-
{ scheme: 'upto', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '500000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
|
|
100
|
-
{ scheme: 'exact', network: 'base:8453', asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', amount: '1000000', payTo: '0x1', maxTimeoutSeconds: 30, extra: {} },
|
|
101
|
-
];
|
|
102
|
-
const selected = client.selectPaymentOption(accepts);
|
|
103
|
-
expect(selected.scheme).toBe('exact');
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
//# sourceMappingURL=client.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../../src/x402/__tests__/client.test.ts"],"names":[],"mappings":"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"}
|