@atxp/base 0.2.17 → 0.2.18

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 (39) hide show
  1. package/README.md +6 -0
  2. package/dist/baseAppAccount.d.ts +3 -1
  3. package/dist/baseAppAccount.d.ts.map +1 -1
  4. package/dist/baseAppAccount.ephemeral.test.d.ts +2 -0
  5. package/dist/baseAppAccount.ephemeral.test.d.ts.map +1 -0
  6. package/dist/baseAppAccount.ephemeral.test.js +420 -0
  7. package/dist/baseAppAccount.ephemeral.test.js.map +1 -0
  8. package/dist/baseAppAccount.js +43 -16
  9. package/dist/baseAppAccount.js.map +1 -1
  10. package/dist/baseAppAccount.mainWallet.test.d.ts +2 -0
  11. package/dist/baseAppAccount.mainWallet.test.d.ts.map +1 -0
  12. package/dist/baseAppAccount.mainWallet.test.js +259 -0
  13. package/dist/baseAppAccount.mainWallet.test.js.map +1 -0
  14. package/dist/baseAppPaymentMaker.d.ts.map +1 -1
  15. package/dist/baseAppPaymentMaker.js +4 -3
  16. package/dist/baseAppPaymentMaker.js.map +1 -1
  17. package/dist/baseAppPaymentMaker.test.js +81 -69
  18. package/dist/baseAppPaymentMaker.test.js.map +1 -1
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +1 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/mainWalletPaymentMaker.d.ts +22 -0
  24. package/dist/mainWalletPaymentMaker.d.ts.map +1 -0
  25. package/dist/mainWalletPaymentMaker.js +141 -0
  26. package/dist/mainWalletPaymentMaker.js.map +1 -0
  27. package/dist/mainWalletPaymentMaker.test.d.ts +2 -0
  28. package/dist/mainWalletPaymentMaker.test.d.ts.map +1 -0
  29. package/dist/mainWalletPaymentMaker.test.js +310 -0
  30. package/dist/mainWalletPaymentMaker.test.js.map +1 -0
  31. package/dist/storage.d.ts +1 -0
  32. package/dist/storage.d.ts.map +1 -1
  33. package/dist/storage.js +9 -0
  34. package/dist/storage.js.map +1 -1
  35. package/dist/testHelpers.d.ts +88 -0
  36. package/dist/testHelpers.d.ts.map +1 -0
  37. package/dist/testHelpers.js +202 -0
  38. package/dist/testHelpers.js.map +1 -0
  39. package/package.json +3 -3
@@ -0,0 +1,141 @@
1
+ import { encodeFunctionData } from 'viem';
2
+ import { USDC_CONTRACT_ADDRESS_BASE } from '@atxp/client';
3
+ import { ConsoleLogger } from '@atxp/common';
4
+ const USDC_DECIMALS = 6;
5
+ // Helper function to convert to base64url that works in both Node.js and browsers
6
+ function toBase64Url(data) {
7
+ // Convert string to base64
8
+ const base64 = typeof Buffer !== 'undefined'
9
+ ? Buffer.from(data).toString('base64')
10
+ : btoa(data);
11
+ // Convert base64 to base64url
12
+ return base64
13
+ .replace(/\+/g, '-')
14
+ .replace(/\//g, '_')
15
+ .replace(/=/g, '');
16
+ }
17
+ export class MainWalletPaymentMaker {
18
+ constructor(walletAddress, provider, logger) {
19
+ this.walletAddress = walletAddress;
20
+ this.provider = provider;
21
+ this.logger = logger || new ConsoleLogger();
22
+ }
23
+ async generateJWT(payload) {
24
+ this.logger.info(`codeChallenge: ${payload.codeChallenge}`);
25
+ this.logger.info(`paymentRequestId: ${payload.paymentRequestId}`);
26
+ this.logger.info(`walletAddress: ${this.walletAddress}`);
27
+ // Generate EIP-1271 auth data for main wallet authentication
28
+ const timestamp = Math.floor(Date.now() / 1000);
29
+ const nonce = Math.random().toString(36).substring(2, 15);
30
+ // Construct the message in the required format - must match BaseAppPaymentMaker exactly
31
+ const messageParts = [
32
+ `PayMCP Authorization Request`,
33
+ ``,
34
+ `Wallet: ${this.walletAddress}`,
35
+ `Timestamp: ${timestamp}`,
36
+ `Nonce: ${nonce}`
37
+ ];
38
+ if (payload.codeChallenge) {
39
+ messageParts.push(`Code Challenge: ${payload.codeChallenge}`);
40
+ }
41
+ if (payload.paymentRequestId) {
42
+ messageParts.push(`Payment Request ID: ${payload.paymentRequestId}`);
43
+ }
44
+ messageParts.push('', '', 'Sign this message to prove you control this wallet.');
45
+ const message = messageParts.join('\n');
46
+ // Sign with the main wallet
47
+ const signature = await this.provider.request({
48
+ method: 'personal_sign',
49
+ params: [message, this.walletAddress]
50
+ });
51
+ // Create EIP-1271 auth data
52
+ const authData = {
53
+ type: 'EIP1271_AUTH',
54
+ walletAddress: this.walletAddress,
55
+ message: message,
56
+ signature: signature,
57
+ timestamp: timestamp,
58
+ nonce: nonce,
59
+ ...(payload.codeChallenge && { code_challenge: payload.codeChallenge }),
60
+ ...(payload.paymentRequestId && { payment_request_id: payload.paymentRequestId })
61
+ };
62
+ // Encode as base64url
63
+ const encodedAuth = toBase64Url(JSON.stringify(authData));
64
+ this.logger.info(`Generated EIP-1271 auth data: ${encodedAuth}`);
65
+ return encodedAuth;
66
+ }
67
+ async makePayment(amount, currency, receiver, _reason) {
68
+ if (currency !== 'USDC') {
69
+ throw new Error('Only usdc currency is supported');
70
+ }
71
+ this.logger.info(`Making direct payment of ${amount} ${currency} to ${receiver} on Base`);
72
+ // Convert amount to USDC units (6 decimals)
73
+ const amountInUSDCUnits = BigInt(amount.multipliedBy(10 ** USDC_DECIMALS).toFixed(0));
74
+ // Encode the transfer function data
75
+ const transferData = encodeFunctionData({
76
+ abi: [{
77
+ name: 'transfer',
78
+ type: 'function',
79
+ inputs: [
80
+ { name: 'to', type: 'address' },
81
+ { name: 'amount', type: 'uint256' }
82
+ ],
83
+ outputs: [{ name: '', type: 'bool' }]
84
+ }],
85
+ functionName: 'transfer',
86
+ args: [receiver, amountInUSDCUnits]
87
+ });
88
+ // Send the transaction through the user's wallet
89
+ const txHash = await this.provider.request({
90
+ method: 'eth_sendTransaction',
91
+ params: [{
92
+ from: this.walletAddress,
93
+ to: USDC_CONTRACT_ADDRESS_BASE,
94
+ data: transferData,
95
+ value: '0x0'
96
+ }]
97
+ });
98
+ this.logger.info(`Transaction submitted. TxHash: ${txHash}`);
99
+ // Wait for confirmations
100
+ const CONFIRMATIONS = 2;
101
+ await this.waitForTransactionConfirmations(txHash, CONFIRMATIONS);
102
+ return txHash;
103
+ }
104
+ async waitForTransactionConfirmations(txHash, confirmations) {
105
+ this.logger.info(`Waiting for ${confirmations} confirmations...`);
106
+ // Poll for transaction receipt
107
+ let receipt = null;
108
+ while (!receipt) {
109
+ try {
110
+ receipt = await this.provider.request({
111
+ method: 'eth_getTransactionReceipt',
112
+ params: [txHash]
113
+ });
114
+ if (!receipt) {
115
+ await new Promise(resolve => setTimeout(resolve, 1000));
116
+ }
117
+ }
118
+ catch (error) {
119
+ this.logger.warn(`Error getting receipt: ${error}`);
120
+ await new Promise(resolve => setTimeout(resolve, 1000));
121
+ }
122
+ }
123
+ // Check if transaction was successful
124
+ if (receipt.status === '0x0') {
125
+ throw new Error(`Transaction failed. TxHash: ${txHash}`);
126
+ }
127
+ // Wait for confirmations
128
+ const startBlock = parseInt(receipt.blockNumber, 16);
129
+ let currentBlock = startBlock;
130
+ while (currentBlock - startBlock < confirmations - 1) {
131
+ await new Promise(resolve => setTimeout(resolve, 1000));
132
+ const blockNumber = await this.provider.request({
133
+ method: 'eth_blockNumber',
134
+ params: []
135
+ });
136
+ currentBlock = parseInt(blockNumber, 16);
137
+ }
138
+ this.logger.info(`Transaction confirmed with ${confirmations} confirmations`);
139
+ }
140
+ }
141
+ //# sourceMappingURL=mainWalletPaymentMaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mainWalletPaymentMaker.js","sourceRoot":"","sources":["../src/mainWalletPaymentMaker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,0BAA0B,EAAY,MAAM,cAAc,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAoB,MAAM,cAAc,CAAC;AAE/D,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,kFAAkF;AAClF,SAAS,WAAW,CAAC,IAAY;IAC/B,2BAA2B;IAC3B,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW;QAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,8BAA8B;IAC9B,OAAO,MAAM;SACV,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACvB,CAAC;AASD,MAAM,OAAO,sBAAsB;IAGjC,YACU,aAAqB,EACrB,QAA4B,EACpC,MAAe;QAFP,kBAAa,GAAb,aAAa,CAAQ;QACrB,aAAQ,GAAR,QAAQ,CAAoB;QAGpC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAGjB;QACC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAEzD,6DAA6D;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE1D,wFAAwF;QACxF,MAAM,YAAY,GAAG;YACnB,8BAA8B;YAC9B,EAAE;YACF,WAAW,IAAI,CAAC,aAAa,EAAE;YAC/B,cAAc,SAAS,EAAE;YACzB,UAAU,KAAK,EAAE;SAClB,CAAC;QAEF,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,uBAAuB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,qDAAqD,CAAC,CAAC;QACjF,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExC,4BAA4B;QAC5B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC5C,MAAM,EAAE,eAAe;YACvB,MAAM,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC;SACtC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,MAAM,QAAQ,GAAG;YACf,IAAI,EAAE,cAAc;YACpB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,KAAK;YACZ,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC;SAClF,CAAC;QAEF,sBAAsB;QACtB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,WAAW,EAAE,CAAC,CAAC;QAEjE,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,WAAW,CACf,MAAiB,EACjB,QAAkB,EAClB,QAAgB,EAChB,OAAe;QAEf,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,MAAM,IAAI,QAAQ,OAAO,QAAQ,UAAU,CAAC,CAAC;QAE1F,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,IAAI,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtF,oCAAoC;QACpC,MAAM,YAAY,GAAG,kBAAkB,CAAC;YACtC,GAAG,EAAE,CAAC;oBACJ,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE;wBACN,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;wBAC/B,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;qBACpC;oBACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;iBACtC,CAAC;YACF,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,QAAe,EAAE,iBAAiB,CAAC;SAC3C,CAAC,CAAC;QAEH,iDAAiD;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE,qBAAqB;YAC7B,MAAM,EAAE,CAAC;oBACP,IAAI,EAAE,IAAI,CAAC,aAAa;oBACxB,EAAE,EAAE,0BAA0B;oBAC9B,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,KAAK;iBACb,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,MAAM,EAAE,CAAC,CAAC;QAE7D,yBAAyB;QACzB,MAAM,aAAa,GAAG,CAAC,CAAC;QACxB,MAAM,IAAI,CAAC,+BAA+B,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAElE,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,+BAA+B,CAAC,MAAc,EAAE,aAAqB;QACjF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,aAAa,mBAAmB,CAAC,CAAC;QAElE,+BAA+B;QAC/B,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,OAAO,CAAC,OAAO,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACpC,MAAM,EAAE,2BAA2B;oBACnC,MAAM,EAAE,CAAC,MAAM,CAAC;iBACjB,CAAC,CAAC;gBAEH,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBACpD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,sCAAsC;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,yBAAyB;QACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,YAAY,GAAG,UAAU,CAAC;QAE9B,OAAO,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;YAExD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC9C,MAAM,EAAE,iBAAiB;gBACzB,MAAM,EAAE,EAAE;aACX,CAAC,CAAC;YAEH,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,aAAa,gBAAgB,CAAC,CAAC;IAChF,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mainWalletPaymentMaker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mainWalletPaymentMaker.test.d.ts","sourceRoot":"","sources":["../src/mainWalletPaymentMaker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,310 @@
1
+ // Mock viem before imports
2
+ vi.mock('viem', () => ({
3
+ encodeFunctionData: vi.fn(() => '0xmocktransferdata')
4
+ }));
5
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
6
+ import { MainWalletPaymentMaker } from './mainWalletPaymentMaker.js';
7
+ import BigNumber from 'bignumber.js';
8
+ import { TEST_WALLET_ADDRESS, TEST_RECEIVER_ADDRESS, mockProvider } from './testHelpers.js';
9
+ import { USDC_CONTRACT_ADDRESS_BASE } from '@atxp/client';
10
+ const { encodeFunctionData } = await import('viem');
11
+ describe('MainWalletPaymentMaker', () => {
12
+ let provider;
13
+ let paymentMaker;
14
+ beforeEach(() => {
15
+ vi.clearAllMocks();
16
+ provider = mockProvider();
17
+ paymentMaker = new MainWalletPaymentMaker(TEST_WALLET_ADDRESS, provider);
18
+ });
19
+ afterEach(() => {
20
+ vi.restoreAllMocks();
21
+ });
22
+ describe('generateJWT', () => {
23
+ it('should generate JWT with wallet signature', async () => {
24
+ const mockSignature = '0xmocksignature';
25
+ provider.request.mockResolvedValueOnce(mockSignature);
26
+ const jwt = await paymentMaker.generateJWT({
27
+ paymentRequestId: 'test-payment-id',
28
+ codeChallenge: 'test-challenge'
29
+ });
30
+ // Should request personal_sign
31
+ expect(provider.request).toHaveBeenCalledWith({
32
+ method: 'personal_sign',
33
+ params: [
34
+ expect.stringContaining('PayMCP Authorization Request'),
35
+ TEST_WALLET_ADDRESS
36
+ ]
37
+ });
38
+ // Should return base64url encoded JWT
39
+ // Decode base64url
40
+ const base64 = jwt.replace(/-/g, '+').replace(/_/g, '/');
41
+ const padding = '='.repeat((4 - base64.length % 4) % 4);
42
+ const decodedJwt = JSON.parse(Buffer.from(base64 + padding, 'base64').toString());
43
+ expect(decodedJwt).toMatchObject({
44
+ type: 'EIP1271_AUTH',
45
+ walletAddress: TEST_WALLET_ADDRESS,
46
+ signature: mockSignature,
47
+ payment_request_id: 'test-payment-id',
48
+ code_challenge: 'test-challenge'
49
+ });
50
+ expect(decodedJwt.timestamp).toBeDefined();
51
+ expect(decodedJwt.nonce).toBeDefined();
52
+ expect(decodedJwt.message).toContain('PayMCP Authorization Request');
53
+ });
54
+ it('should generate JWT without optional fields', async () => {
55
+ const mockSignature = '0xmocksignature';
56
+ provider.request.mockResolvedValueOnce(mockSignature);
57
+ const jwt = await paymentMaker.generateJWT({
58
+ paymentRequestId: '',
59
+ codeChallenge: ''
60
+ });
61
+ // Decode base64url
62
+ const base64 = jwt.replace(/-/g, '+').replace(/_/g, '/');
63
+ const padding = '='.repeat((4 - base64.length % 4) % 4);
64
+ const decodedJwt = JSON.parse(Buffer.from(base64 + padding, 'base64').toString());
65
+ expect(decodedJwt.type).toBe('EIP1271_AUTH');
66
+ expect(decodedJwt.payment_request_id).toBeUndefined();
67
+ expect(decodedJwt.code_challenge).toBeUndefined();
68
+ });
69
+ it('should construct message in correct format', async () => {
70
+ const mockSignature = '0xmocksignature';
71
+ let capturedMessage = '';
72
+ provider.request.mockImplementation(async ({ method, params }) => {
73
+ if (method === 'personal_sign' && params) {
74
+ capturedMessage = params[0];
75
+ return mockSignature;
76
+ }
77
+ throw new Error(`Unexpected method: ${method}`);
78
+ });
79
+ await paymentMaker.generateJWT({
80
+ paymentRequestId: 'test-payment-id',
81
+ codeChallenge: 'test-challenge'
82
+ });
83
+ // Verify exact message format
84
+ expect(capturedMessage).toContain('PayMCP Authorization Request\n\n');
85
+ expect(capturedMessage).toContain(`Wallet: ${TEST_WALLET_ADDRESS}`);
86
+ expect(capturedMessage).toContain('Timestamp: ');
87
+ expect(capturedMessage).toContain('Nonce: ');
88
+ expect(capturedMessage).toContain('Code Challenge: test-challenge');
89
+ expect(capturedMessage).toContain('Payment Request ID: test-payment-id');
90
+ expect(capturedMessage).toContain('\n\n\nSign this message to prove you control this wallet.');
91
+ });
92
+ it('should handle signature errors', async () => {
93
+ provider.request.mockRejectedValueOnce(new Error('User rejected signature'));
94
+ await expect(paymentMaker.generateJWT({
95
+ paymentRequestId: 'test',
96
+ codeChallenge: 'test'
97
+ })).rejects.toThrow('User rejected signature');
98
+ });
99
+ });
100
+ describe('makePayment', () => {
101
+ it('should make USDC payment through main wallet', async () => {
102
+ const txHash = '0xtxhash';
103
+ const receipt = {
104
+ status: '0x1',
105
+ blockNumber: '0x100'
106
+ };
107
+ // Mock transaction submission
108
+ provider.request.mockImplementation(async ({ method }) => {
109
+ if (method === 'eth_sendTransaction')
110
+ return txHash;
111
+ if (method === 'eth_getTransactionReceipt')
112
+ return receipt;
113
+ if (method === 'eth_blockNumber')
114
+ return '0x102'; // 2 blocks after receipt
115
+ throw new Error(`Unexpected method: ${method}`);
116
+ });
117
+ const result = await paymentMaker.makePayment(new BigNumber(1.5), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
118
+ // Should encode transfer function
119
+ expect(encodeFunctionData).toHaveBeenCalledWith({
120
+ abi: expect.any(Array),
121
+ functionName: 'transfer',
122
+ args: [TEST_RECEIVER_ADDRESS, 1500000n] // 1.5 USDC = 1,500,000 units
123
+ });
124
+ // Should send transaction
125
+ expect(provider.request).toHaveBeenCalledWith({
126
+ method: 'eth_sendTransaction',
127
+ params: [{
128
+ from: TEST_WALLET_ADDRESS,
129
+ to: USDC_CONTRACT_ADDRESS_BASE,
130
+ data: '0xmocktransferdata',
131
+ value: '0x0'
132
+ }]
133
+ });
134
+ expect(result).toBe(txHash);
135
+ });
136
+ it('should throw error for non-USDC currency', async () => {
137
+ await expect(paymentMaker.makePayment(new BigNumber(1), 'ETH', TEST_RECEIVER_ADDRESS, 'Test payment')).rejects.toThrow('Only usdc currency is supported');
138
+ });
139
+ it('should throw error if transaction fails', async () => {
140
+ const txHash = '0xtxhash';
141
+ const receipt = {
142
+ status: '0x0', // Failed transaction
143
+ blockNumber: '0x100'
144
+ };
145
+ provider.request.mockImplementation(async ({ method }) => {
146
+ if (method === 'eth_sendTransaction')
147
+ return txHash;
148
+ if (method === 'eth_getTransactionReceipt')
149
+ return receipt;
150
+ throw new Error(`Unexpected method: ${method}`);
151
+ });
152
+ await expect(paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment')).rejects.toThrow(`Transaction failed. TxHash: ${txHash}`);
153
+ });
154
+ it('should handle decimal amounts correctly', async () => {
155
+ const txHash = '0xtxhash';
156
+ const receipt = {
157
+ status: '0x1',
158
+ blockNumber: '0x100'
159
+ };
160
+ provider.request.mockImplementation(async ({ method }) => {
161
+ if (method === 'eth_sendTransaction')
162
+ return txHash;
163
+ if (method === 'eth_getTransactionReceipt')
164
+ return receipt;
165
+ if (method === 'eth_blockNumber')
166
+ return '0x102';
167
+ throw new Error(`Unexpected method: ${method}`);
168
+ });
169
+ await paymentMaker.makePayment(new BigNumber(0.123456), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
170
+ // Should round to 6 decimals for USDC
171
+ expect(encodeFunctionData).toHaveBeenCalledWith({
172
+ abi: expect.any(Array),
173
+ functionName: 'transfer',
174
+ args: [TEST_RECEIVER_ADDRESS, 123456n] // 0.123456 USDC = 123,456 units
175
+ });
176
+ });
177
+ it('should wait for confirmations', async () => {
178
+ const txHash = '0xtxhash';
179
+ const receipt = {
180
+ status: '0x1',
181
+ blockNumber: '0x100' // Block 256
182
+ };
183
+ let blockNumberCalls = 0;
184
+ provider.request.mockImplementation(async ({ method }) => {
185
+ if (method === 'eth_sendTransaction')
186
+ return txHash;
187
+ if (method === 'eth_getTransactionReceipt')
188
+ return receipt;
189
+ if (method === 'eth_blockNumber') {
190
+ blockNumberCalls++;
191
+ // Return increasing block numbers
192
+ return blockNumberCalls === 1 ? '0x100' : '0x101'; // Need 2 confirmations
193
+ }
194
+ throw new Error(`Unexpected method: ${method}`);
195
+ });
196
+ await paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
197
+ // Should poll for block number until we have 2 confirmations
198
+ expect(provider.request).toHaveBeenCalledWith({
199
+ method: 'eth_blockNumber',
200
+ params: []
201
+ });
202
+ });
203
+ it('should verify all blockchain calls are made in correct order', async () => {
204
+ const txHash = '0xtxhash';
205
+ const receipt = {
206
+ status: '0x1',
207
+ blockNumber: '0x100'
208
+ };
209
+ const callOrder = [];
210
+ provider.request.mockImplementation(async ({ method }) => {
211
+ callOrder.push(method);
212
+ if (method === 'eth_sendTransaction')
213
+ return txHash;
214
+ if (method === 'eth_getTransactionReceipt')
215
+ return receipt;
216
+ if (method === 'eth_blockNumber')
217
+ return '0x102';
218
+ throw new Error(`Unexpected method: ${method}`);
219
+ });
220
+ await paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
221
+ // Verify correct order of calls
222
+ expect(callOrder).toEqual([
223
+ 'eth_sendTransaction',
224
+ 'eth_getTransactionReceipt',
225
+ 'eth_blockNumber'
226
+ ]);
227
+ // Verify encode function data was called before send
228
+ expect(encodeFunctionData).toHaveBeenCalledBefore(provider.request);
229
+ });
230
+ it('should handle receipt polling timeout', async () => {
231
+ const txHash = '0xtxhash';
232
+ provider.request.mockImplementation(async ({ method }) => {
233
+ if (method === 'eth_sendTransaction')
234
+ return txHash;
235
+ if (method === 'eth_getTransactionReceipt')
236
+ return null; // Transaction not mined yet
237
+ throw new Error(`Unexpected method: ${method}`);
238
+ });
239
+ // This should eventually timeout (in real implementation)
240
+ // For now, it will keep polling - we should add a timeout mechanism
241
+ const promise = paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
242
+ // Wait a bit and then provide a receipt
243
+ setTimeout(() => {
244
+ provider.request.mockImplementation(async ({ method }) => {
245
+ if (method === 'eth_getTransactionReceipt') {
246
+ return { status: '0x1', blockNumber: '0x100' };
247
+ }
248
+ if (method === 'eth_blockNumber')
249
+ return '0x102';
250
+ throw new Error(`Unexpected method: ${method}`);
251
+ });
252
+ }, 100);
253
+ const result = await promise;
254
+ expect(result).toBe(txHash);
255
+ });
256
+ it('should handle transaction submission errors', async () => {
257
+ provider.request.mockRejectedValueOnce(new Error('insufficient funds'));
258
+ await expect(paymentMaker.makePayment(new BigNumber(1), 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment')).rejects.toThrow('insufficient funds');
259
+ // Should have attempted to send transaction
260
+ expect(provider.request).toHaveBeenCalledWith({
261
+ method: 'eth_sendTransaction',
262
+ params: expect.any(Array)
263
+ });
264
+ });
265
+ it('should handle large amounts correctly', async () => {
266
+ const txHash = '0xtxhash';
267
+ const receipt = {
268
+ status: '0x1',
269
+ blockNumber: '0x100'
270
+ };
271
+ provider.request.mockImplementation(async ({ method }) => {
272
+ if (method === 'eth_sendTransaction')
273
+ return txHash;
274
+ if (method === 'eth_getTransactionReceipt')
275
+ return receipt;
276
+ if (method === 'eth_blockNumber')
277
+ return '0x102';
278
+ throw new Error(`Unexpected method: ${method}`);
279
+ });
280
+ await paymentMaker.makePayment(new BigNumber(1000000), // 1 million USDC
281
+ 'USDC', TEST_RECEIVER_ADDRESS, 'Test payment');
282
+ // Should handle large amounts correctly
283
+ expect(encodeFunctionData).toHaveBeenCalledWith({
284
+ abi: expect.any(Array),
285
+ functionName: 'transfer',
286
+ args: [TEST_RECEIVER_ADDRESS, 1000000000000n] // 1M USDC = 1,000,000,000,000 units
287
+ });
288
+ });
289
+ });
290
+ describe('error handling', () => {
291
+ it('should handle provider errors gracefully', async () => {
292
+ provider.request.mockRejectedValue(new Error('Provider disconnected'));
293
+ await expect(paymentMaker.generateJWT({
294
+ paymentRequestId: 'test',
295
+ codeChallenge: 'test'
296
+ })).rejects.toThrow('Provider disconnected');
297
+ });
298
+ it('should handle invalid addresses', async () => {
299
+ const invalidAddress = '0xinvalid';
300
+ provider.request.mockImplementation(async ({ method, params }) => {
301
+ if (method === 'eth_sendTransaction' && params?.[0]?.to === USDC_CONTRACT_ADDRESS_BASE) {
302
+ throw new Error('invalid address');
303
+ }
304
+ throw new Error(`Unexpected method: ${method}`);
305
+ });
306
+ await expect(paymentMaker.makePayment(new BigNumber(1), 'USDC', invalidAddress, 'Test payment')).rejects.toThrow();
307
+ });
308
+ });
309
+ });
310
+ //# sourceMappingURL=mainWalletPaymentMaker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mainWalletPaymentMaker.test.js","sourceRoot":"","sources":["../src/mainWalletPaymentMaker.test.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts CHANGED
@@ -33,6 +33,7 @@ export declare class IntermediaryStorage {
33
33
  * Browser localStorage implementation
34
34
  */
35
35
  export declare class BrowserStorage implements IStorage<string> {
36
+ private isAvailable;
36
37
  get(key: string): string | null;
37
38
  set(key: string, value: string): void;
38
39
  delete(key: string): void;
@@ -1 +1 @@
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,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;CAG1B;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
+ {"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"}
package/dist/storage.js CHANGED
@@ -28,13 +28,22 @@ export class IntermediaryStorage {
28
28
  * Browser localStorage implementation
29
29
  */
30
30
  export class BrowserStorage {
31
+ isAvailable() {
32
+ return typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';
33
+ }
31
34
  get(key) {
35
+ if (!this.isAvailable())
36
+ return null;
32
37
  return localStorage.getItem(key);
33
38
  }
34
39
  set(key, value) {
40
+ if (!this.isAvailable())
41
+ return;
35
42
  localStorage.setItem(key, value);
36
43
  }
37
44
  delete(key) {
45
+ if (!this.isAvailable())
46
+ return;
38
47
  localStorage.removeItem(key);
39
48
  }
40
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAwBA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC9B,YAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAEjD,GAAG,CAAC,GAAW;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,MAAsB,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,IAAkB;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACzB,GAAG,CAAC,GAAW;QACb,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC5B,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IAA1B;QACU,UAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;IAiBjD,CAAC;IAfC,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAwBA;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC9B,YAAoB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;IAAG,CAAC;IAEjD,GAAG,CAAC,GAAW;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,MAAsB,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,IAAkB;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACjB,WAAW;QACjB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,WAAW,CAAC;IACrF,CAAC;IAED,GAAG,CAAC,GAAW;QACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;QACrC,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO;QAChC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO;QAChC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAa;IAA1B;QACU,UAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;IAiBjD,CAAC;IAfC,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAa;QAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF"}
@@ -0,0 +1,88 @@
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
@@ -0,0 +1 @@
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"}