@atxp/base 0.2.22 → 0.4.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 (65) hide show
  1. package/dist/baseAppAccount.js +6 -3
  2. package/dist/baseAppAccount.js.map +1 -1
  3. package/dist/baseAppPaymentMaker.js +22 -42
  4. package/dist/baseAppPaymentMaker.js.map +1 -1
  5. package/dist/eip1271JwtHelper.js +83 -0
  6. package/dist/eip1271JwtHelper.js.map +1 -0
  7. package/dist/index.cjs +630 -0
  8. package/dist/index.cjs.map +1 -0
  9. package/dist/index.d.ts +157 -6
  10. package/dist/index.js +623 -5
  11. package/dist/index.js.map +1 -1
  12. package/dist/mainWalletPaymentMaker.js +26 -48
  13. package/dist/mainWalletPaymentMaker.js.map +1 -1
  14. package/dist/smartWalletHelpers.js +6 -3
  15. package/dist/smartWalletHelpers.js.map +1 -1
  16. package/dist/spendPermissionUtils.js +4 -2
  17. package/dist/spendPermissionUtils.js.map +1 -1
  18. package/dist/storage.js +6 -4
  19. package/dist/storage.js.map +1 -1
  20. package/package.json +21 -7
  21. package/dist/baseAppAccount.d.ts +0 -33
  22. package/dist/baseAppAccount.d.ts.map +0 -1
  23. package/dist/baseAppAccount.ephemeral.test.d.ts +0 -2
  24. package/dist/baseAppAccount.ephemeral.test.d.ts.map +0 -1
  25. package/dist/baseAppAccount.ephemeral.test.js +0 -426
  26. package/dist/baseAppAccount.ephemeral.test.js.map +0 -1
  27. package/dist/baseAppAccount.mainWallet.test.d.ts +0 -2
  28. package/dist/baseAppAccount.mainWallet.test.d.ts.map +0 -1
  29. package/dist/baseAppAccount.mainWallet.test.js +0 -259
  30. package/dist/baseAppAccount.mainWallet.test.js.map +0 -1
  31. package/dist/baseAppPaymentMaker.d.ts +0 -16
  32. package/dist/baseAppPaymentMaker.d.ts.map +0 -1
  33. package/dist/baseAppPaymentMaker.test.d.ts +0 -2
  34. package/dist/baseAppPaymentMaker.test.d.ts.map +0 -1
  35. package/dist/baseAppPaymentMaker.test.js +0 -113
  36. package/dist/baseAppPaymentMaker.test.js.map +0 -1
  37. package/dist/compatibility.test.d.ts +0 -2
  38. package/dist/compatibility.test.d.ts.map +0 -1
  39. package/dist/compatibility.test.js +0 -94
  40. package/dist/compatibility.test.js.map +0 -1
  41. package/dist/environment.test.d.ts +0 -2
  42. package/dist/environment.test.d.ts.map +0 -1
  43. package/dist/environment.test.js +0 -77
  44. package/dist/environment.test.js.map +0 -1
  45. package/dist/index.d.ts.map +0 -1
  46. package/dist/mainWalletPaymentMaker.d.ts +0 -22
  47. package/dist/mainWalletPaymentMaker.d.ts.map +0 -1
  48. package/dist/mainWalletPaymentMaker.test.d.ts +0 -2
  49. package/dist/mainWalletPaymentMaker.test.d.ts.map +0 -1
  50. package/dist/mainWalletPaymentMaker.test.js +0 -340
  51. package/dist/mainWalletPaymentMaker.test.js.map +0 -1
  52. package/dist/smartWalletHelpers.d.ts +0 -13
  53. package/dist/smartWalletHelpers.d.ts.map +0 -1
  54. package/dist/spendPermissionUtils.d.ts +0 -9
  55. package/dist/spendPermissionUtils.d.ts.map +0 -1
  56. package/dist/storage.d.ts +0 -51
  57. package/dist/storage.d.ts.map +0 -1
  58. package/dist/testHelpers.d.ts +0 -88
  59. package/dist/testHelpers.d.ts.map +0 -1
  60. package/dist/testHelpers.js +0 -202
  61. package/dist/testHelpers.js.map +0 -1
  62. package/dist/types.d.ts +0 -35
  63. package/dist/types.d.ts.map +0 -1
  64. package/dist/types.js +0 -3
  65. package/dist/types.js.map +0 -1
@@ -1,22 +0,0 @@
1
- import { PaymentMaker } from '@atxp/client';
2
- import BigNumber from 'bignumber.js';
3
- import { Logger, Currency } from '@atxp/common';
4
- export type MainWalletProvider = {
5
- request: (params: {
6
- method: string;
7
- params?: any[];
8
- }) => Promise<any>;
9
- };
10
- export declare class MainWalletPaymentMaker implements PaymentMaker {
11
- private walletAddress;
12
- private provider;
13
- private logger;
14
- constructor(walletAddress: string, provider: MainWalletProvider, logger?: Logger);
15
- generateJWT(payload: {
16
- paymentRequestId: string;
17
- codeChallenge: string;
18
- }): Promise<string>;
19
- makePayment(amount: BigNumber, currency: Currency, receiver: string, _reason: string): Promise<string>;
20
- private waitForTransactionConfirmations;
21
- }
22
- //# sourceMappingURL=mainWalletPaymentMaker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mainWalletPaymentMaker.d.ts","sourceRoot":"","sources":["../src/mainWalletPaymentMaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAiB,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAiB/D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;KAChB,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACpB,CAAC;AAEF,qBAAa,sBAAuB,YAAW,YAAY;IAIvD,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,QAAQ;IAJlB,OAAO,CAAC,MAAM,CAAS;gBAGb,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,kBAAkB,EACpC,MAAM,CAAC,EAAE,MAAM;IAKX,WAAW,CAAC,OAAO,EAAE;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,OAAO,CAAC,MAAM,CAAC;IAuEb,WAAW,CACf,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;YA6CJ,+BAA+B;CA2C9C"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mainWalletPaymentMaker.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mainWalletPaymentMaker.test.d.ts","sourceRoot":"","sources":["../src/mainWalletPaymentMaker.test.ts"],"names":[],"mappings":""}
@@ -1,340 +0,0 @@
1
- // Mock viem before imports
2
- vi.mock('viem', () => ({
3
- encodeFunctionData: vi.fn(() => '0xmocktransferdata'),
4
- toHex: vi.fn((str) => '0x' + Buffer.from(str).toString('hex')),
5
- fromHex: vi.fn((hex) => Buffer.from(hex.slice(2), 'hex').toString())
6
- }));
7
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
8
- import { MainWalletPaymentMaker } from './mainWalletPaymentMaker.js';
9
- import BigNumber from 'bignumber.js';
10
- import { TEST_WALLET_ADDRESS, TEST_RECEIVER_ADDRESS, mockProvider } from './testHelpers.js';
11
- import { USDC_CONTRACT_ADDRESS_BASE } from '@atxp/client';
12
- const { encodeFunctionData, fromHex } = await import('viem');
13
- describe('MainWalletPaymentMaker', () => {
14
- let provider;
15
- let paymentMaker;
16
- beforeEach(() => {
17
- vi.clearAllMocks();
18
- provider = mockProvider();
19
- paymentMaker = new MainWalletPaymentMaker(TEST_WALLET_ADDRESS, provider);
20
- });
21
- afterEach(() => {
22
- vi.restoreAllMocks();
23
- });
24
- describe('generateJWT', () => {
25
- it('should generate JWT with wallet signature', async () => {
26
- const mockSignature = '0xmocksignature';
27
- provider.request.mockResolvedValueOnce(mockSignature);
28
- const jwt = await paymentMaker.generateJWT({
29
- paymentRequestId: 'test-payment-id',
30
- codeChallenge: 'test-challenge'
31
- });
32
- // Should request personal_sign
33
- expect(provider.request).toHaveBeenCalledWith({
34
- method: 'personal_sign',
35
- params: [
36
- expect.stringContaining('PayMCP Authorization Request'),
37
- TEST_WALLET_ADDRESS
38
- ]
39
- });
40
- // Should return base64url encoded JWT
41
- // Decode base64url
42
- const base64 = jwt.replace(/-/g, '+').replace(/_/g, '/');
43
- const padding = '='.repeat((4 - base64.length % 4) % 4);
44
- const decodedJwt = JSON.parse(Buffer.from(base64 + padding, 'base64').toString());
45
- expect(decodedJwt).toMatchObject({
46
- type: 'EIP1271_AUTH',
47
- walletAddress: TEST_WALLET_ADDRESS,
48
- signature: mockSignature,
49
- payment_request_id: 'test-payment-id',
50
- code_challenge: 'test-challenge'
51
- });
52
- expect(decodedJwt.timestamp).toBeDefined();
53
- expect(decodedJwt.nonce).toBeDefined();
54
- expect(decodedJwt.message).toContain('PayMCP Authorization Request');
55
- });
56
- it('should generate JWT without optional fields', async () => {
57
- const mockSignature = '0xmocksignature';
58
- provider.request.mockResolvedValueOnce(mockSignature);
59
- const jwt = await paymentMaker.generateJWT({
60
- paymentRequestId: '',
61
- codeChallenge: ''
62
- });
63
- // Decode base64url
64
- const base64 = jwt.replace(/-/g, '+').replace(/_/g, '/');
65
- const padding = '='.repeat((4 - base64.length % 4) % 4);
66
- const decodedJwt = JSON.parse(Buffer.from(base64 + padding, 'base64').toString());
67
- expect(decodedJwt.type).toBe('EIP1271_AUTH');
68
- expect(decodedJwt.payment_request_id).toBeUndefined();
69
- expect(decodedJwt.code_challenge).toBeUndefined();
70
- });
71
- it('should construct message in correct format', async () => {
72
- const mockSignature = '0xmocksignature';
73
- let capturedMessage = '';
74
- provider.request.mockImplementation(async ({ method, params }) => {
75
- if (method === 'personal_sign' && params) {
76
- capturedMessage = params[0];
77
- return mockSignature;
78
- }
79
- throw new Error(`Unexpected method: ${method}`);
80
- });
81
- await paymentMaker.generateJWT({
82
- paymentRequestId: 'test-payment-id',
83
- codeChallenge: 'test-challenge'
84
- });
85
- // Since mock provider doesn't have isCoinbaseWallet, it should pass plain string
86
- // Verify exact message format
87
- expect(capturedMessage).toContain('PayMCP Authorization Request\n\n');
88
- expect(capturedMessage).toContain(`Wallet: ${TEST_WALLET_ADDRESS}`);
89
- expect(capturedMessage).toContain('Timestamp: ');
90
- expect(capturedMessage).toContain('Nonce: ');
91
- expect(capturedMessage).toContain('Code Challenge: test-challenge');
92
- expect(capturedMessage).toContain('Payment Request ID: test-payment-id');
93
- expect(capturedMessage).toContain('\n\n\nSign this message to prove you control this wallet.');
94
- });
95
- it('should handle signature errors', async () => {
96
- provider.request.mockRejectedValueOnce(new Error('User rejected signature'));
97
- await expect(paymentMaker.generateJWT({
98
- paymentRequestId: 'test',
99
- codeChallenge: 'test'
100
- })).rejects.toThrow('User rejected signature');
101
- });
102
- it('should use hex encoding for Coinbase Wallet', async () => {
103
- const mockSignature = '0xmocksignature';
104
- let capturedMessage = '';
105
- // Create a provider that identifies as Coinbase Wallet
106
- const coinbaseProvider = {
107
- ...provider,
108
- isCoinbaseWallet: true,
109
- request: vi.fn(async ({ method, params }) => {
110
- if (method === 'personal_sign' && params) {
111
- capturedMessage = params[0];
112
- return mockSignature;
113
- }
114
- throw new Error(`Unexpected method: ${method}`);
115
- })
116
- };
117
- const coinbasePaymentMaker = new MainWalletPaymentMaker(TEST_WALLET_ADDRESS, coinbaseProvider);
118
- await coinbasePaymentMaker.generateJWT({
119
- paymentRequestId: 'test-payment-id',
120
- codeChallenge: 'test-challenge'
121
- });
122
- // Should pass hex-encoded message for Coinbase Wallet
123
- expect(capturedMessage).toMatch(/^0x[0-9a-fA-F]+$/);
124
- // Decode and verify content
125
- const decodedMessage = fromHex(capturedMessage, 'string');
126
- expect(decodedMessage).toContain('PayMCP Authorization Request');
127
- expect(decodedMessage).toContain(`Wallet: ${TEST_WALLET_ADDRESS}`);
128
- });
129
- });
130
- describe('makePayment', () => {
131
- it('should make USDC payment through main wallet', async () => {
132
- const txHash = '0xtxhash';
133
- const receipt = {
134
- status: '0x1',
135
- blockNumber: '0x100'
136
- };
137
- // Mock transaction submission
138
- provider.request.mockImplementation(async ({ method }) => {
139
- if (method === 'eth_sendTransaction')
140
- return txHash;
141
- if (method === 'eth_getTransactionReceipt')
142
- return receipt;
143
- if (method === 'eth_blockNumber')
144
- return '0x102'; // 2 blocks after receipt
145
- throw new Error(`Unexpected method: ${method}`);
146
- });
147
- const result = await paymentMaker.makePayment(new BigNumber(1.5), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
148
- // Should encode transfer function
149
- expect(encodeFunctionData).toHaveBeenCalledWith({
150
- abi: expect.any(Array),
151
- functionName: 'transfer',
152
- args: [TEST_RECEIVER_ADDRESS, 1500000n] // 1.5 USDC = 1,500,000 units
153
- });
154
- // Should send transaction
155
- expect(provider.request).toHaveBeenCalledWith({
156
- method: 'eth_sendTransaction',
157
- params: [{
158
- from: TEST_WALLET_ADDRESS,
159
- to: USDC_CONTRACT_ADDRESS_BASE,
160
- data: '0xmocktransferdata',
161
- value: '0x0'
162
- }]
163
- });
164
- expect(result).toBe(txHash);
165
- });
166
- it('should throw error for non-USDC currency', async () => {
167
- await expect(paymentMaker.makePayment(new BigNumber(1), 'ETH', TEST_RECEIVER_ADDRESS, 'Test payment')).rejects.toThrow('Only usdc currency is supported');
168
- });
169
- it('should throw error if transaction fails', async () => {
170
- const txHash = '0xtxhash';
171
- const receipt = {
172
- status: '0x0', // Failed transaction
173
- blockNumber: '0x100'
174
- };
175
- provider.request.mockImplementation(async ({ method }) => {
176
- if (method === 'eth_sendTransaction')
177
- return txHash;
178
- if (method === 'eth_getTransactionReceipt')
179
- return receipt;
180
- throw new Error(`Unexpected method: ${method}`);
181
- });
182
- await expect(paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment')).rejects.toThrow(`Transaction failed. TxHash: ${txHash}`);
183
- });
184
- it('should handle decimal amounts correctly', async () => {
185
- const txHash = '0xtxhash';
186
- const receipt = {
187
- status: '0x1',
188
- blockNumber: '0x100'
189
- };
190
- provider.request.mockImplementation(async ({ method }) => {
191
- if (method === 'eth_sendTransaction')
192
- return txHash;
193
- if (method === 'eth_getTransactionReceipt')
194
- return receipt;
195
- if (method === 'eth_blockNumber')
196
- return '0x102';
197
- throw new Error(`Unexpected method: ${method}`);
198
- });
199
- await paymentMaker.makePayment(new BigNumber(0.123456), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
200
- // Should round to 6 decimals for USDC
201
- expect(encodeFunctionData).toHaveBeenCalledWith({
202
- abi: expect.any(Array),
203
- functionName: 'transfer',
204
- args: [TEST_RECEIVER_ADDRESS, 123456n] // 0.123456 USDC = 123,456 units
205
- });
206
- });
207
- it('should wait for confirmations', async () => {
208
- const txHash = '0xtxhash';
209
- const receipt = {
210
- status: '0x1',
211
- blockNumber: '0x100' // Block 256
212
- };
213
- let blockNumberCalls = 0;
214
- provider.request.mockImplementation(async ({ method }) => {
215
- if (method === 'eth_sendTransaction')
216
- return txHash;
217
- if (method === 'eth_getTransactionReceipt')
218
- return receipt;
219
- if (method === 'eth_blockNumber') {
220
- blockNumberCalls++;
221
- // Return increasing block numbers
222
- return blockNumberCalls === 1 ? '0x100' : '0x101'; // Need 2 confirmations
223
- }
224
- throw new Error(`Unexpected method: ${method}`);
225
- });
226
- await paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
227
- // Should poll for block number until we have 2 confirmations
228
- expect(provider.request).toHaveBeenCalledWith({
229
- method: 'eth_blockNumber',
230
- params: []
231
- });
232
- });
233
- it('should verify all blockchain calls are made in correct order', async () => {
234
- const txHash = '0xtxhash';
235
- const receipt = {
236
- status: '0x1',
237
- blockNumber: '0x100'
238
- };
239
- const callOrder = [];
240
- provider.request.mockImplementation(async ({ method }) => {
241
- callOrder.push(method);
242
- if (method === 'eth_sendTransaction')
243
- return txHash;
244
- if (method === 'eth_getTransactionReceipt')
245
- return receipt;
246
- if (method === 'eth_blockNumber')
247
- return '0x102';
248
- throw new Error(`Unexpected method: ${method}`);
249
- });
250
- await paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
251
- // Verify correct order of calls
252
- expect(callOrder).toEqual([
253
- 'eth_sendTransaction',
254
- 'eth_getTransactionReceipt',
255
- 'eth_blockNumber'
256
- ]);
257
- // Verify encode function data was called before send
258
- expect(encodeFunctionData).toHaveBeenCalledBefore(provider.request);
259
- });
260
- it('should handle receipt polling timeout', async () => {
261
- const txHash = '0xtxhash';
262
- provider.request.mockImplementation(async ({ method }) => {
263
- if (method === 'eth_sendTransaction')
264
- return txHash;
265
- if (method === 'eth_getTransactionReceipt')
266
- return null; // Transaction not mined yet
267
- throw new Error(`Unexpected method: ${method}`);
268
- });
269
- // This should eventually timeout (in real implementation)
270
- // For now, it will keep polling - we should add a timeout mechanism
271
- const promise = paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
272
- // Wait a bit and then provide a receipt
273
- setTimeout(() => {
274
- provider.request.mockImplementation(async ({ method }) => {
275
- if (method === 'eth_getTransactionReceipt') {
276
- return { status: '0x1', blockNumber: '0x100' };
277
- }
278
- if (method === 'eth_blockNumber')
279
- return '0x102';
280
- throw new Error(`Unexpected method: ${method}`);
281
- });
282
- }, 100);
283
- const result = await promise;
284
- expect(result).toBe(txHash);
285
- });
286
- it('should handle transaction submission errors', async () => {
287
- provider.request.mockRejectedValueOnce(new Error('insufficient funds'));
288
- await expect(paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment')).rejects.toThrow('insufficient funds');
289
- // Should have attempted to send transaction
290
- expect(provider.request).toHaveBeenCalledWith({
291
- method: 'eth_sendTransaction',
292
- params: expect.any(Array)
293
- });
294
- });
295
- it('should handle large amounts correctly', async () => {
296
- const txHash = '0xtxhash';
297
- const receipt = {
298
- status: '0x1',
299
- blockNumber: '0x100'
300
- };
301
- provider.request.mockImplementation(async ({ method }) => {
302
- if (method === 'eth_sendTransaction')
303
- return txHash;
304
- if (method === 'eth_getTransactionReceipt')
305
- return receipt;
306
- if (method === 'eth_blockNumber')
307
- return '0x102';
308
- throw new Error(`Unexpected method: ${method}`);
309
- });
310
- await paymentMaker.makePayment(new BigNumber(1000000), // 1 million USDC
311
- 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
312
- // Should handle large amounts correctly
313
- expect(encodeFunctionData).toHaveBeenCalledWith({
314
- abi: expect.any(Array),
315
- functionName: 'transfer',
316
- args: [TEST_RECEIVER_ADDRESS, 1000000000000n] // 1M USDC = 1,000,000,000,000 units
317
- });
318
- });
319
- });
320
- describe('error handling', () => {
321
- it('should handle provider errors gracefully', async () => {
322
- provider.request.mockRejectedValue(new Error('Provider disconnected'));
323
- await expect(paymentMaker.generateJWT({
324
- paymentRequestId: 'test',
325
- codeChallenge: 'test'
326
- })).rejects.toThrow('Provider disconnected');
327
- });
328
- it('should handle invalid addresses', async () => {
329
- const invalidAddress = '0xinvalid';
330
- provider.request.mockImplementation(async ({ method, params }) => {
331
- if (method === 'eth_sendTransaction' && params?.[0]?.to === USDC_CONTRACT_ADDRESS_BASE) {
332
- throw new Error('invalid address');
333
- }
334
- throw new Error(`Unexpected method: ${method}`);
335
- });
336
- await expect(paymentMaker.makePayment(new BigNumber(1), 'USDC', invalidAddress, 'Test payment')).rejects.toThrow();
337
- });
338
- });
339
- });
340
- //# sourceMappingURL=mainWalletPaymentMaker.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mainWalletPaymentMaker.test.js","sourceRoot":"","sources":["../src/mainWalletPaymentMaker.test.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import { type Account, type Address, type Hex } from 'viem';
2
- import { type BundlerClient, type SmartAccount } from 'viem/account-abstraction';
3
- export interface EphemeralSmartWallet {
4
- address: Address;
5
- client: BundlerClient;
6
- account: SmartAccount;
7
- signer: Account;
8
- }
9
- /**
10
- * Creates an ephemeral smart wallet with paymaster support
11
- */
12
- export declare function toEphemeralSmartWallet(privateKey: Hex, apiKey: string): Promise<EphemeralSmartWallet>;
13
- //# sourceMappingURL=smartWalletHelpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smartWalletHelpers.d.ts","sourceRoot":"","sources":["../src/smartWalletHelpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,GAAG,EACT,MAAM,MAAM,CAAC;AAGd,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,0BAA0B,CAAC;AAMlC,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,UAAU,EAAE,GAAG,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC,CAiC/B"}
@@ -1,9 +0,0 @@
1
- /**
2
- * Loads the browser-only spend permission module.
3
- * Throws an error if called in a server environment.
4
- *
5
- * Both BaseAppAccount and BaseAppPaymentMaker should only run in browser environments
6
- * since they require wallet interaction and browser APIs.
7
- */
8
- export declare function getSpendPermissionModule(): Promise<typeof import("@base-org/account/spend-permission/browser")>;
9
- //# sourceMappingURL=spendPermissionUtils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spendPermissionUtils.d.ts","sourceRoot":"","sources":["../src/spendPermissionUtils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAsB,wBAAwB,yEAW7C"}
package/dist/storage.d.ts DELETED
@@ -1,51 +0,0 @@
1
- import { SpendPermission } from './types.js';
2
- import { Hex } from '@atxp/client';
3
- /**
4
- * Stored permission data structure
5
- */
6
- export interface Intermediary {
7
- /** Ephemeral wallet private key */
8
- privateKey: Hex;
9
- /** Spend permission from Base */
10
- permission: SpendPermission;
11
- }
12
- /**
13
- * Storage interface for abstracting storage mechanisms
14
- * This allows for easy mocking in tests and potential future
15
- * support for different storage backends (e.g., React Native AsyncStorage)
16
- */
17
- export interface IStorage<T = string> {
18
- get(key: string): T | null;
19
- set(key: string, value: T): void;
20
- delete(key: string): void;
21
- }
22
- /**
23
- * Type-safe storage wrapper for permission data
24
- */
25
- export declare class IntermediaryStorage {
26
- private storage;
27
- constructor(storage: IStorage<string>);
28
- get(key: string): Intermediary | null;
29
- set(key: string, data: Intermediary): void;
30
- delete(key: string): void;
31
- }
32
- /**
33
- * Browser localStorage implementation
34
- */
35
- export declare class BrowserStorage implements IStorage<string> {
36
- private isAvailable;
37
- get(key: string): string | null;
38
- set(key: string, value: string): void;
39
- delete(key: string): void;
40
- }
41
- /**
42
- * In-memory storage implementation for testing
43
- */
44
- export declare class MemoryStorage implements IStorage<string> {
45
- private store;
46
- get(key: string): string | null;
47
- set(key: string, value: string): void;
48
- delete(key: string): void;
49
- clear(): void;
50
- }
51
- //# sourceMappingURL=storage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,UAAU,EAAE,GAAG,CAAC;IAChB,iCAAiC;IACjC,UAAU,EAAE,eAAe,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,MAAM;IAClC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAClB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;IAE7C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAYrC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI;IAI1C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAG1B;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,QAAQ,CAAC,MAAM,CAAC;IACrD,OAAO,CAAC,WAAW;IAInB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAI1B;AAED;;GAEG;AACH,qBAAa,aAAc,YAAW,QAAQ,CAAC,MAAM,CAAC;IACpD,OAAO,CAAC,KAAK,CAAkC;IAE/C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAI/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,KAAK,IAAI,IAAI;CAGd"}
@@ -1,88 +0,0 @@
1
- import type { SpendPermission } from './types.js';
2
- import type { EphemeralSmartWallet } from './smartWalletHelpers.js';
3
- import type { Address } from 'viem';
4
- export declare const TEST_API_KEY = "test-api-key";
5
- export declare const TEST_WALLET_ADDRESS: Address;
6
- export declare const TEST_SMART_WALLET_ADDRESS: Address;
7
- export declare const TEST_RECEIVER_ADDRESS: Address;
8
- export declare const TEST_PRIVATE_KEY: `0x${string}`;
9
- export declare const TEST_PAYMASTER_URL = "https://api.developer.coinbase.com/rpc/v1/base/snPdXqIzOGhRkGNJvEHM5bl9Hm3yRO3m";
10
- export declare const TEST_BUNDLER_URL = "https://api.developer.coinbase.com/rpc/v1/base";
11
- export declare function mockProvider({ request }?: {
12
- request?: import("vitest").Mock<(...args: any[]) => any> | undefined;
13
- }): {
14
- request: import("vitest").Mock<(...args: any[]) => any>;
15
- };
16
- export declare function mockBaseAccountSDK({ provider }?: {
17
- provider?: {
18
- request: import("vitest").Mock<(...args: any[]) => any>;
19
- } | undefined;
20
- }): {
21
- getProvider: import("vitest").Mock<() => {
22
- request: import("vitest").Mock<(...args: any[]) => any>;
23
- }>;
24
- };
25
- export declare function mockSpendPermission({ signature, account, spender, token, allowance, // 10 USDC
26
- period, // 7 days
27
- start, end, salt, extraData, chainId }?: {
28
- signature?: `0x${string}` | undefined;
29
- account?: `0x${string}` | undefined;
30
- spender?: `0x${string}` | undefined;
31
- token?: string | undefined;
32
- allowance?: string | undefined;
33
- period?: number | undefined;
34
- start?: number | undefined;
35
- end?: number | undefined;
36
- salt?: string | undefined;
37
- extraData?: `0x${string}` | undefined;
38
- chainId?: 8453 | undefined;
39
- }): SpendPermission;
40
- export declare function removeTimestamps<T extends Record<string, any>>(obj: T): T;
41
- export declare function expectTimestampAround(timestamp: number, expectedOffset?: number, tolerance?: number): void;
42
- export declare function mockExpiredSpendPermission(overrides?: {}): SpendPermission;
43
- export declare function mockSmartAccount({ address, signMessage }?: {
44
- address?: `0x${string}` | undefined;
45
- signMessage?: import("vitest").Mock<(...args: any[]) => any> | undefined;
46
- }): any;
47
- export declare function mockBundlerClient({ sendUserOperation, waitForUserOperationReceipt, waitForTransactionReceipt }?: {
48
- sendUserOperation?: import("vitest").Mock<(...args: any[]) => any> | undefined;
49
- waitForUserOperationReceipt?: import("vitest").Mock<(...args: any[]) => any> | undefined;
50
- waitForTransactionReceipt?: import("vitest").Mock<(...args: any[]) => any> | undefined;
51
- }): any;
52
- export declare function mockFailedBundlerClient({ failureType }?: {
53
- failureType?: string | undefined;
54
- }): any;
55
- export declare function mockEphemeralSmartWallet({ address, account, client, privateKey }?: {
56
- address?: `0x${string}` | undefined;
57
- account?: any;
58
- client?: any;
59
- privateKey?: `0x${string}` | undefined;
60
- }): EphemeralSmartWallet;
61
- export declare function mockSpendCalls({ calls }?: {
62
- calls?: {
63
- to: string;
64
- data: string;
65
- value: string;
66
- }[] | undefined;
67
- }): {
68
- to: string;
69
- data: string;
70
- value: string;
71
- }[];
72
- export declare function setupInitializationMocks({ provider, spendPermission, smartAccount, bundlerClient }?: {
73
- provider?: {
74
- request: import("vitest").Mock<(...args: any[]) => any>;
75
- } | undefined;
76
- spendPermission?: SpendPermission | undefined;
77
- smartAccount?: any;
78
- bundlerClient?: any;
79
- }): Promise<any>;
80
- export declare function setupPaymentMocks({ spendCalls }?: {
81
- spendCalls?: {
82
- to: string;
83
- data: string;
84
- value: string;
85
- }[] | undefined;
86
- }): Promise<any>;
87
- export declare function getStorageKey(walletAddress: string): string;
88
- //# sourceMappingURL=testHelpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testHelpers.d.ts","sourceRoot":"","sources":["../src/testHelpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAIpE,OAAO,KAAK,EAAE,OAAO,EAAO,MAAM,MAAM,CAAC;AAGzC,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,mBAAmB,EAAmD,OAAO,CAAC;AAC3F,eAAO,MAAM,yBAAyB,EAAmD,OAAO,CAAC;AACjG,eAAO,MAAM,qBAAqB,EAAmD,OAAO,CAAC;AAC7F,eAAO,MAAM,gBAAgB,eAAuB,CAAC;AACrD,eAAO,MAAM,kBAAkB,oFAAoF,CAAC;AACpH,eAAO,MAAM,gBAAgB,mDAAmD,CAAC;AAGjF,wBAAgB,YAAY,CAAC,EAC3B,OAAiB,EAClB;;CAAK;;EAIL;AAGD,wBAAgB,kBAAkB,CAAC,EACjC,QAAyB,EAC1B;;;;CAAK;;;;EAIL;AAGD,wBAAgB,mBAAmB,CAAC,EAClC,SAAoC,EACpC,OAA6B,EAC7B,OAAmC,EACnC,KAAkC,EAClC,SAAsB,EAAE,UAAU;AAClC,MAAe,EAAE,SAAS;AAC1B,KAAqC,EACrC,GAA4C,EAC5C,IAAU,EACV,SAAuB,EACvB,OAAiB,EAClB;;;;;;;;;;;;CAAK,GAAG,eAAe,CAgBvB;AAGD,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAiCzE;AAKD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,GAAE,MAAU,EAAE,SAAS,GAAE,MAAW,QAK1G;AAGD,wBAAgB,0BAA0B,CAAC,SAAS,KAAK,GAAG,eAAe,CAO1E;AAGD,wBAAgB,gBAAgB,CAAC,EAC/B,OAAmC,EACnC,WAA0D,EAC3D;;;CAAK,GAIC,GAAG,CACT;AAGD,wBAAgB,iBAAiB,CAAC,EAChC,iBAAgE,EAChE,2BAIE,EACF,yBAAyD,EAC1D;;;;CAAK,GASC,GAAG,CACT;AAGD,wBAAgB,uBAAuB,CAAC,EACtC,WAAuB,EACxB;;CAAK,OAsBL;AAGD,wBAAgB,wBAAwB,CAAC,EACvC,OAAmC,EACnC,OAAuC,EACvC,MAA4B,EAC5B,UAA6B,EAC9B;;;;;CAAK,GAAG,oBAAoB,CAe5B;AAGD,wBAAgB,cAAc,CAAC,EAC7B,KAGC,EACF;;;;;;CAAK;;;;IAEL;AAKD,wBAAsB,wBAAwB,CAAC,EAC7C,QAAyB,EACzB,eAAuC,EACvC,YAAiC,EACjC,aAAmC,EACpC;;;;;;;CAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAuBpB;AAGD,wBAAsB,iBAAiB,CAAC,EACtC,UAA6B,EAC9B;;;;;;CAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAOpB;AAGD,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE3D"}