@atxp/base 0.2.21 → 0.3.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/dist/baseAppAccount.js +15 -4
- package/dist/baseAppAccount.js.map +1 -1
- package/dist/baseAppPaymentMaker.js +43 -50
- package/dist/baseAppPaymentMaker.js.map +1 -1
- package/dist/eip1271JwtHelper.js +83 -0
- package/dist/eip1271JwtHelper.js.map +1 -0
- package/dist/index.cjs +630 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +157 -6
- package/dist/index.js +623 -5
- package/dist/index.js.map +1 -1
- package/dist/mainWalletPaymentMaker.js +26 -48
- package/dist/mainWalletPaymentMaker.js.map +1 -1
- package/dist/smartWalletHelpers.js +6 -3
- package/dist/smartWalletHelpers.js.map +1 -1
- package/dist/spendPermissionUtils.js +19 -0
- package/dist/spendPermissionUtils.js.map +1 -0
- package/dist/storage.js +6 -4
- package/dist/storage.js.map +1 -1
- package/package.json +22 -8
- package/dist/baseAppAccount.d.ts +0 -28
- package/dist/baseAppAccount.d.ts.map +0 -1
- package/dist/baseAppAccount.ephemeral.test.d.ts +0 -2
- package/dist/baseAppAccount.ephemeral.test.d.ts.map +0 -1
- package/dist/baseAppAccount.ephemeral.test.js +0 -420
- package/dist/baseAppAccount.ephemeral.test.js.map +0 -1
- package/dist/baseAppAccount.mainWallet.test.d.ts +0 -2
- package/dist/baseAppAccount.mainWallet.test.d.ts.map +0 -1
- package/dist/baseAppAccount.mainWallet.test.js +0 -259
- package/dist/baseAppAccount.mainWallet.test.js.map +0 -1
- package/dist/baseAppPaymentMaker.d.ts +0 -16
- package/dist/baseAppPaymentMaker.d.ts.map +0 -1
- package/dist/baseAppPaymentMaker.test.d.ts +0 -2
- package/dist/baseAppPaymentMaker.test.d.ts.map +0 -1
- package/dist/baseAppPaymentMaker.test.js +0 -107
- package/dist/baseAppPaymentMaker.test.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mainWalletPaymentMaker.d.ts +0 -22
- package/dist/mainWalletPaymentMaker.d.ts.map +0 -1
- package/dist/mainWalletPaymentMaker.test.d.ts +0 -2
- package/dist/mainWalletPaymentMaker.test.d.ts.map +0 -1
- package/dist/mainWalletPaymentMaker.test.js +0 -340
- package/dist/mainWalletPaymentMaker.test.js.map +0 -1
- package/dist/smartWalletHelpers.d.ts +0 -13
- package/dist/smartWalletHelpers.d.ts.map +0 -1
- package/dist/storage.d.ts +0 -51
- package/dist/storage.d.ts.map +0 -1
- package/dist/testHelpers.d.ts +0 -88
- package/dist/testHelpers.d.ts.map +0 -1
- package/dist/testHelpers.js +0 -202
- package/dist/testHelpers.js.map +0 -1
- package/dist/types.d.ts +0 -35
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +0 -1
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
// Mock all external modules before imports
|
|
2
|
-
vi.mock('@base-org/account', () => ({
|
|
3
|
-
createBaseAccountSDK: vi.fn(() => ({
|
|
4
|
-
getProvider: vi.fn(() => ({
|
|
5
|
-
request: vi.fn()
|
|
6
|
-
}))
|
|
7
|
-
}))
|
|
8
|
-
}));
|
|
9
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
10
|
-
import { BaseAppAccount } from './baseAppAccount.js';
|
|
11
|
-
import { MainWalletPaymentMaker } from './mainWalletPaymentMaker.js';
|
|
12
|
-
import { MemoryStorage } from './storage.js';
|
|
13
|
-
import BigNumber from 'bignumber.js';
|
|
14
|
-
import { USDC_CONTRACT_ADDRESS_BASE } from '@atxp/client';
|
|
15
|
-
import { TEST_API_KEY, TEST_WALLET_ADDRESS, mockProvider, mockBaseAccountSDK, } from './testHelpers.js';
|
|
16
|
-
const { createBaseAccountSDK } = await import('@base-org/account');
|
|
17
|
-
describe('BaseAppAccount - Main Wallet Mode', () => {
|
|
18
|
-
let storage;
|
|
19
|
-
beforeEach(() => {
|
|
20
|
-
vi.clearAllMocks();
|
|
21
|
-
storage = new MemoryStorage();
|
|
22
|
-
});
|
|
23
|
-
afterEach(() => {
|
|
24
|
-
vi.restoreAllMocks();
|
|
25
|
-
});
|
|
26
|
-
describe('initialize with useEphemeralWallet=false', () => {
|
|
27
|
-
it('should initialize without creating ephemeral wallet', async () => {
|
|
28
|
-
const provider = mockProvider();
|
|
29
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
30
|
-
// @ts-expect-error - mocked function
|
|
31
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
32
|
-
const account = await BaseAppAccount.initialize({
|
|
33
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
34
|
-
apiKey: TEST_API_KEY,
|
|
35
|
-
appName: 'test-app',
|
|
36
|
-
useEphemeralWallet: false,
|
|
37
|
-
storage,
|
|
38
|
-
});
|
|
39
|
-
// Should have main wallet address as account ID
|
|
40
|
-
expect(account.accountId).toBe(TEST_WALLET_ADDRESS);
|
|
41
|
-
// Should have main wallet payment maker
|
|
42
|
-
expect(account.paymentMakers['base']).toBeInstanceOf(MainWalletPaymentMaker);
|
|
43
|
-
// Should still connect wallet
|
|
44
|
-
expect(provider.request).toHaveBeenCalledWith({ method: 'wallet_connect' });
|
|
45
|
-
// Should NOT create ephemeral wallet or request spend permission
|
|
46
|
-
expect(createBaseAccountSDK).toHaveBeenCalledTimes(1);
|
|
47
|
-
// Storage should remain empty (no ephemeral wallet data saved)
|
|
48
|
-
const storageKey = `atxp-base-permission-${TEST_WALLET_ADDRESS}`;
|
|
49
|
-
expect(storage.get(storageKey)).toBeNull();
|
|
50
|
-
});
|
|
51
|
-
it('should make correct blockchain calls in main wallet mode', async () => {
|
|
52
|
-
const provider = mockProvider();
|
|
53
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
54
|
-
// @ts-expect-error - mocked function
|
|
55
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
56
|
-
await BaseAppAccount.initialize({
|
|
57
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
58
|
-
apiKey: TEST_API_KEY,
|
|
59
|
-
appName: 'test-app',
|
|
60
|
-
useEphemeralWallet: false,
|
|
61
|
-
storage,
|
|
62
|
-
});
|
|
63
|
-
// Verify SDK initialization
|
|
64
|
-
expect(createBaseAccountSDK).toHaveBeenCalledWith({
|
|
65
|
-
appName: 'test-app',
|
|
66
|
-
appChainIds: [8453], // base.id
|
|
67
|
-
paymasterUrls: {
|
|
68
|
-
8453: 'https://api.developer.coinbase.com/rpc/v1/base/snPdXqIzOGhRkGNJvEHM5bl9Hm3yRO3m'
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
// Verify provider setup
|
|
72
|
-
expect(sdk.getProvider).toHaveBeenCalled();
|
|
73
|
-
// Verify wallet_connect attempt
|
|
74
|
-
expect(provider.request).toHaveBeenCalledWith({ method: 'wallet_connect' });
|
|
75
|
-
// Verify NO ephemeral wallet operations
|
|
76
|
-
expect(provider.request).toHaveBeenCalledTimes(1); // Only wallet_connect
|
|
77
|
-
});
|
|
78
|
-
it('should handle wallet_connect failure gracefully', async () => {
|
|
79
|
-
const provider = mockProvider();
|
|
80
|
-
provider.request.mockRejectedValueOnce(new Error('wallet_connect not supported'));
|
|
81
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
82
|
-
// @ts-expect-error - mocked function
|
|
83
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
84
|
-
const account = await BaseAppAccount.initialize({
|
|
85
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
86
|
-
apiKey: TEST_API_KEY,
|
|
87
|
-
appName: 'test-app',
|
|
88
|
-
useEphemeralWallet: false,
|
|
89
|
-
storage,
|
|
90
|
-
});
|
|
91
|
-
expect(account.accountId).toBe(TEST_WALLET_ADDRESS);
|
|
92
|
-
expect(account.paymentMakers['base']).toBeInstanceOf(MainWalletPaymentMaker);
|
|
93
|
-
});
|
|
94
|
-
it('should not require apiKey in main wallet mode', async () => {
|
|
95
|
-
const provider = mockProvider();
|
|
96
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
97
|
-
// @ts-expect-error - mocked function
|
|
98
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
99
|
-
// Should not throw without API key when useEphemeralWallet=false
|
|
100
|
-
const account = await BaseAppAccount.initialize({
|
|
101
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
102
|
-
apiKey: '', // Empty API key
|
|
103
|
-
appName: 'test-app',
|
|
104
|
-
useEphemeralWallet: false,
|
|
105
|
-
storage,
|
|
106
|
-
});
|
|
107
|
-
expect(account.accountId).toBe(TEST_WALLET_ADDRESS);
|
|
108
|
-
});
|
|
109
|
-
it('should pass the provider to MainWalletPaymentMaker', async () => {
|
|
110
|
-
const provider = mockProvider();
|
|
111
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
112
|
-
// @ts-expect-error - mocked function
|
|
113
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
114
|
-
const account = await BaseAppAccount.initialize({
|
|
115
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
116
|
-
apiKey: TEST_API_KEY,
|
|
117
|
-
appName: 'test-app',
|
|
118
|
-
useEphemeralWallet: false,
|
|
119
|
-
storage,
|
|
120
|
-
});
|
|
121
|
-
// Get the payment maker and verify it has the right properties
|
|
122
|
-
const paymentMaker = account.paymentMakers['base'];
|
|
123
|
-
expect(paymentMaker).toBeInstanceOf(MainWalletPaymentMaker);
|
|
124
|
-
// Test that the payment maker can use the provider
|
|
125
|
-
await paymentMaker.generateJWT({ paymentRequestId: 'test', codeChallenge: 'test' });
|
|
126
|
-
expect(provider.request).toHaveBeenCalledWith({
|
|
127
|
-
method: 'personal_sign',
|
|
128
|
-
params: expect.any(Array)
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
it('should not interact with storage in main wallet mode', async () => {
|
|
132
|
-
const provider = mockProvider();
|
|
133
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
134
|
-
// @ts-expect-error - mocked function
|
|
135
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
136
|
-
// Spy on storage methods
|
|
137
|
-
const getSpy = vi.spyOn(storage, 'get');
|
|
138
|
-
const setSpy = vi.spyOn(storage, 'set');
|
|
139
|
-
const deleteSpy = vi.spyOn(storage, 'delete');
|
|
140
|
-
await BaseAppAccount.initialize({
|
|
141
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
142
|
-
apiKey: TEST_API_KEY,
|
|
143
|
-
appName: 'test-app',
|
|
144
|
-
useEphemeralWallet: false,
|
|
145
|
-
storage,
|
|
146
|
-
});
|
|
147
|
-
// Storage should not be accessed in main wallet mode
|
|
148
|
-
expect(getSpy).not.toHaveBeenCalled();
|
|
149
|
-
expect(setSpy).not.toHaveBeenCalled();
|
|
150
|
-
expect(deleteSpy).not.toHaveBeenCalled();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
describe('initialize with useEphemeralWallet not specified', () => {
|
|
154
|
-
it('should default to ephemeral wallet mode for backward compatibility', async () => {
|
|
155
|
-
const provider = mockProvider();
|
|
156
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
157
|
-
// @ts-expect-error - mocked function
|
|
158
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
159
|
-
// This should throw because apiKey is required for ephemeral wallet mode
|
|
160
|
-
await expect(BaseAppAccount.initialize({
|
|
161
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
162
|
-
apiKey: '', // Empty API key
|
|
163
|
-
appName: 'test-app',
|
|
164
|
-
storage,
|
|
165
|
-
// useEphemeralWallet not specified - should default to true
|
|
166
|
-
})).rejects.toThrow('Smart wallet API key is required for ephemeral wallet mode');
|
|
167
|
-
});
|
|
168
|
-
});
|
|
169
|
-
describe('clearAllStoredData in main wallet mode', () => {
|
|
170
|
-
it('should handle clearAllStoredData even though main wallet stores no data', () => {
|
|
171
|
-
const setSpy = vi.spyOn(storage, 'set');
|
|
172
|
-
const deleteSpy = vi.spyOn(storage, 'delete');
|
|
173
|
-
// Should not throw
|
|
174
|
-
BaseAppAccount.clearAllStoredData(TEST_WALLET_ADDRESS, storage);
|
|
175
|
-
// Should attempt to delete even if nothing was stored
|
|
176
|
-
expect(deleteSpy).toHaveBeenCalledWith(`atxp-base-permission-${TEST_WALLET_ADDRESS}`);
|
|
177
|
-
expect(setSpy).not.toHaveBeenCalled();
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
describe('payment functionality in main wallet mode', () => {
|
|
181
|
-
it('should make payment using the main wallet', async () => {
|
|
182
|
-
const provider = mockProvider();
|
|
183
|
-
provider.request.mockImplementation(async ({ method }) => {
|
|
184
|
-
if (method === 'wallet_connect')
|
|
185
|
-
return undefined;
|
|
186
|
-
if (method === 'personal_sign')
|
|
187
|
-
return '0xmocksignature';
|
|
188
|
-
if (method === 'eth_sendTransaction')
|
|
189
|
-
return '0xtxhash';
|
|
190
|
-
if (method === 'eth_getTransactionReceipt')
|
|
191
|
-
return { status: '0x1', blockNumber: '0x100' };
|
|
192
|
-
if (method === 'eth_blockNumber')
|
|
193
|
-
return '0x102';
|
|
194
|
-
throw new Error(`Unexpected method: ${method}`);
|
|
195
|
-
});
|
|
196
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
197
|
-
// @ts-expect-error - mocked function
|
|
198
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
199
|
-
const account = await BaseAppAccount.initialize({
|
|
200
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
201
|
-
apiKey: TEST_API_KEY,
|
|
202
|
-
appName: 'test-app',
|
|
203
|
-
useEphemeralWallet: false,
|
|
204
|
-
storage,
|
|
205
|
-
});
|
|
206
|
-
const paymentMaker = account.paymentMakers['base'];
|
|
207
|
-
expect(paymentMaker).toBeDefined();
|
|
208
|
-
// Make a payment
|
|
209
|
-
const txHash = await paymentMaker.makePayment(new BigNumber(1.5), 'USDC', '0x1234567890123456789012345678901234567890', 'Test payment');
|
|
210
|
-
expect(txHash).toBe('0xtxhash');
|
|
211
|
-
// Verify eth_sendTransaction was called (it's the 2nd call after wallet_connect)
|
|
212
|
-
expect(provider.request).toHaveBeenCalledWith({
|
|
213
|
-
method: 'eth_sendTransaction',
|
|
214
|
-
params: [{
|
|
215
|
-
from: TEST_WALLET_ADDRESS,
|
|
216
|
-
to: USDC_CONTRACT_ADDRESS_BASE,
|
|
217
|
-
data: expect.any(String),
|
|
218
|
-
value: '0x0'
|
|
219
|
-
}]
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
it('should generate JWT for authentication', async () => {
|
|
223
|
-
const provider = mockProvider();
|
|
224
|
-
provider.request.mockImplementation(async ({ method }) => {
|
|
225
|
-
if (method === 'wallet_connect')
|
|
226
|
-
return undefined;
|
|
227
|
-
if (method === 'personal_sign')
|
|
228
|
-
return '0xmocksignature';
|
|
229
|
-
throw new Error(`Unexpected method: ${method}`);
|
|
230
|
-
});
|
|
231
|
-
const sdk = mockBaseAccountSDK({ provider });
|
|
232
|
-
// @ts-expect-error - mocked function
|
|
233
|
-
createBaseAccountSDK.mockReturnValue(sdk);
|
|
234
|
-
const account = await BaseAppAccount.initialize({
|
|
235
|
-
walletAddress: TEST_WALLET_ADDRESS,
|
|
236
|
-
apiKey: TEST_API_KEY,
|
|
237
|
-
appName: 'test-app',
|
|
238
|
-
useEphemeralWallet: false,
|
|
239
|
-
storage,
|
|
240
|
-
});
|
|
241
|
-
const paymentMaker = account.paymentMakers['base'];
|
|
242
|
-
const jwt = await paymentMaker.generateJWT({
|
|
243
|
-
paymentRequestId: 'test-payment-id',
|
|
244
|
-
codeChallenge: 'test-challenge'
|
|
245
|
-
});
|
|
246
|
-
// JWT should be base64url encoded
|
|
247
|
-
expect(jwt).toMatch(/^[A-Za-z0-9_-]+$/);
|
|
248
|
-
// Verify personal_sign was called
|
|
249
|
-
expect(provider.request).toHaveBeenCalledWith({
|
|
250
|
-
method: 'personal_sign',
|
|
251
|
-
params: [
|
|
252
|
-
expect.stringContaining('PayMCP Authorization Request'),
|
|
253
|
-
TEST_WALLET_ADDRESS
|
|
254
|
-
]
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
//# sourceMappingURL=baseAppAccount.mainWallet.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"baseAppAccount.mainWallet.test.js","sourceRoot":"","sources":["../src/baseAppAccount.mainWallet.test.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,oBAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QACjC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;YACxB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;SACjB,CAAC,CAAC;KACJ,CAAC,CAAC;CACJ,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAEnE,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,IAAI,OAAsB,CAAC;IAE3B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC;gBAC9C,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,UAAU;gBACnB,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR,CAAC,CAAC;YAEH,gDAAgD;YAChD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAEpD,wCAAwC;YACxC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;YAE7E,8BAA8B;YAC9B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAE5E,iEAAiE;YACjE,MAAM,CAAC,oBAAoB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACtD,+DAA+D;YAC/D,MAAM,UAAU,GAAG,wBAAwB,mBAAmB,EAAE,CAAC;YACjE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,MAAM,cAAc,CAAC,UAAU,CAAC;gBAC9B,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,UAAU;gBACnB,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR,CAAC,CAAC;YAEH,4BAA4B;YAC5B,MAAM,CAAC,oBAAoB,CAAC,CAAC,oBAAoB,CAAC;gBAChD,OAAO,EAAE,UAAU;gBACnB,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU;gBAC/B,aAAa,EAAE;oBACb,IAAI,EAAE,iFAAiF;iBACxF;aACF,CAAC,CAAC;YAEH,wBAAwB;YACxB,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAE3C,gCAAgC;YAChC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAE5E,wCAAwC;YACxC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAElF,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC;gBAC9C,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,UAAU;gBACnB,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,iEAAiE;YACjE,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC;gBAC9C,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,EAAE,EAAE,gBAAgB;gBAC5B,OAAO,EAAE,UAAU;gBACnB,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC;gBAC9C,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,UAAU;gBACnB,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR,CAAC,CAAC;YAEH,+DAA+D;YAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAA2B,CAAC;YAC7E,MAAM,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;YAE5D,mDAAmD;YACnD,MAAM,YAAY,CAAC,WAAW,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;YACpF,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC;gBAC5C,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,yBAAyB;YACzB,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE9C,MAAM,cAAc,CAAC,UAAU,CAAC;gBAC9B,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,UAAU;gBACnB,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR,CAAC,CAAC;YAEH,qDAAqD;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACtC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAChE,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,yEAAyE;YACzE,MAAM,MAAM,CACV,cAAc,CAAC,UAAU,CAAC;gBACxB,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,EAAE,EAAE,gBAAgB;gBAC5B,OAAO,EAAE,UAAU;gBACnB,OAAO;gBACP,4DAA4D;aAC7D,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,4DAA4D,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACtD,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAE9C,mBAAmB;YACnB,cAAc,CAAC,kBAAkB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAEhE,sDAAsD;YACtD,MAAM,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,wBAAwB,mBAAmB,EAAE,CAAC,CAAC;YACtF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACzD,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvD,IAAI,MAAM,KAAK,gBAAgB;oBAAE,OAAO,SAAS,CAAC;gBAClD,IAAI,MAAM,KAAK,eAAe;oBAAE,OAAO,iBAAiB,CAAC;gBACzD,IAAI,MAAM,KAAK,qBAAqB;oBAAE,OAAO,UAAU,CAAC;gBACxD,IAAI,MAAM,KAAK,2BAA2B;oBAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;gBAC3F,IAAI,MAAM,KAAK,iBAAiB;oBAAE,OAAO,OAAO,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC;gBAC9C,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,UAAU;gBACnB,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;YAEnC,iBAAiB;YACjB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,WAAW,CAC3C,IAAI,SAAS,CAAC,GAAG,CAAC,EAClB,MAAM,EACN,4CAA4C,EAC5C,cAAc,CACf,CAAC;YAEF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEhC,iFAAiF;YACjF,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC;gBAC5C,MAAM,EAAE,qBAAqB;gBAC7B,MAAM,EAAE,CAAC;wBACP,IAAI,EAAE,mBAAmB;wBACzB,EAAE,EAAE,0BAA0B;wBAC9B,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;wBACxB,KAAK,EAAE,KAAK;qBACb,CAAC;aACH,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;gBACvD,IAAI,MAAM,KAAK,gBAAgB;oBAAE,OAAO,SAAS,CAAC;gBAClD,IAAI,MAAM,KAAK,eAAe;oBAAE,OAAO,iBAAiB,CAAC;gBACzD,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,EAAE,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,qCAAqC;YACrC,oBAAoB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAE1C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC;gBAC9C,aAAa,EAAE,mBAAmB;gBAClC,MAAM,EAAE,YAAY;gBACpB,OAAO,EAAE,UAAU;gBACnB,kBAAkB,EAAE,KAAK;gBACzB,OAAO;aACR,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC;gBACzC,gBAAgB,EAAE,iBAAiB;gBACnC,aAAa,EAAE,gBAAgB;aAChC,CAAC,CAAC;YAEH,kCAAkC;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAExC,kCAAkC;YAClC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC;gBAC5C,MAAM,EAAE,eAAe;gBACvB,MAAM,EAAE;oBACN,MAAM,CAAC,gBAAgB,CAAC,8BAA8B,CAAC;oBACvD,mBAAmB;iBACpB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { type PaymentMaker } from '@atxp/client';
|
|
2
|
-
import { Logger, Currency } from '@atxp/common';
|
|
3
|
-
import { SpendPermission } from './types.js';
|
|
4
|
-
import { type EphemeralSmartWallet } from './smartWalletHelpers.js';
|
|
5
|
-
export declare class BaseAppPaymentMaker implements PaymentMaker {
|
|
6
|
-
private logger;
|
|
7
|
-
private spendPermission;
|
|
8
|
-
private smartWallet;
|
|
9
|
-
constructor(spendPermission: SpendPermission, smartWallet: EphemeralSmartWallet, logger?: Logger);
|
|
10
|
-
generateJWT({ paymentRequestId, codeChallenge }: {
|
|
11
|
-
paymentRequestId: string;
|
|
12
|
-
codeChallenge: string;
|
|
13
|
-
}): Promise<string>;
|
|
14
|
-
makePayment(amount: BigNumber, currency: Currency, receiver: string, memo: string): Promise<string>;
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=baseAppPaymentMaker.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"baseAppPaymentMaker.d.ts","sourceRoot":"","sources":["../src/baseAppPaymentMaker.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAsDpE,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAuB;gBAGxC,eAAe,EAAE,eAAe,EAChC,WAAW,EAAE,oBAAoB,EACjC,MAAM,CAAC,EAAE,MAAM;IAaX,WAAW,CAAC,EAAC,gBAAgB,EAAE,aAAa,EAAC,EAAE;QAAC,gBAAgB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAsDlH,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA4D1G"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"baseAppPaymentMaker.test.d.ts","sourceRoot":"","sources":["../src/baseAppPaymentMaker.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
-
// Mock all external modules before imports
|
|
3
|
-
vi.mock('@base-org/account/spend-permission', () => ({
|
|
4
|
-
prepareSpendCallData: vi.fn()
|
|
5
|
-
}));
|
|
6
|
-
vi.mock('viem', async () => {
|
|
7
|
-
const actual = await vi.importActual('viem');
|
|
8
|
-
return {
|
|
9
|
-
...actual,
|
|
10
|
-
encodeFunctionData: vi.fn(() => '0xmockencodeddata')
|
|
11
|
-
};
|
|
12
|
-
});
|
|
13
|
-
import { BaseAppPaymentMaker } from './baseAppPaymentMaker.js';
|
|
14
|
-
import { USDC_CONTRACT_ADDRESS_BASE } from '@atxp/client';
|
|
15
|
-
import BigNumber from 'bignumber.js';
|
|
16
|
-
import { setupPaymentMocks, mockSpendPermission, mockEphemeralSmartWallet, mockBundlerClient, mockFailedBundlerClient, mockSpendCalls, TEST_RECEIVER_ADDRESS } from './testHelpers.js';
|
|
17
|
-
describe('basePaymentMaker.generateJWT', () => {
|
|
18
|
-
it('should generate EIP-1271 auth data with default payload', async () => {
|
|
19
|
-
const permission = mockSpendPermission();
|
|
20
|
-
const smartWallet = mockEphemeralSmartWallet();
|
|
21
|
-
const paymentMaker = new BaseAppPaymentMaker(permission, smartWallet);
|
|
22
|
-
const authData = await paymentMaker.generateJWT({ paymentRequestId: '', codeChallenge: 'testCodeChallenge' });
|
|
23
|
-
// Should return base64-encoded EIP-1271 auth data
|
|
24
|
-
expect(authData).toBeDefined();
|
|
25
|
-
expect(typeof authData).toBe('string');
|
|
26
|
-
// Decode and verify the auth data
|
|
27
|
-
const decoded = JSON.parse(Buffer.from(authData, 'base64').toString('utf-8'));
|
|
28
|
-
expect(decoded.type).toBe('EIP1271_AUTH');
|
|
29
|
-
expect(decoded.walletAddress).toBe(smartWallet.address);
|
|
30
|
-
expect(decoded.message).toContain('PayMCP Authorization Request');
|
|
31
|
-
expect(decoded.signature).toBeDefined();
|
|
32
|
-
expect(decoded.timestamp).toBeDefined();
|
|
33
|
-
expect(decoded.nonce).toBeDefined();
|
|
34
|
-
expect(decoded.code_challenge).toBe('testCodeChallenge');
|
|
35
|
-
});
|
|
36
|
-
it('should include payment request id if provided', async () => {
|
|
37
|
-
const permission = mockSpendPermission();
|
|
38
|
-
const smartWallet = mockEphemeralSmartWallet();
|
|
39
|
-
const paymentMaker = new BaseAppPaymentMaker(permission, smartWallet);
|
|
40
|
-
const paymentRequestId = 'id1';
|
|
41
|
-
const authData = await paymentMaker.generateJWT({ paymentRequestId, codeChallenge: '' });
|
|
42
|
-
// Decode and verify the auth data includes payment request ID
|
|
43
|
-
const decoded = JSON.parse(Buffer.from(authData, 'base64').toString('utf-8'));
|
|
44
|
-
expect(decoded.payment_request_id).toEqual(paymentRequestId);
|
|
45
|
-
expect(decoded.message).toContain(`Payment Request ID: ${paymentRequestId}`);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
describe('baseAppPaymentMaker.makePayment', () => {
|
|
49
|
-
it('should successfully make a USDC payment', async () => {
|
|
50
|
-
const permission = mockSpendPermission();
|
|
51
|
-
const bundlerClient = mockBundlerClient();
|
|
52
|
-
const smartWallet = mockEphemeralSmartWallet({ client: bundlerClient });
|
|
53
|
-
const spendCalls = mockSpendCalls();
|
|
54
|
-
const { prepareSpendCallData } = await setupPaymentMocks({ spendCalls });
|
|
55
|
-
const paymentMaker = new BaseAppPaymentMaker(permission, smartWallet);
|
|
56
|
-
const amount = new BigNumber(1.5); // 1.5 USDC
|
|
57
|
-
const txHash = await paymentMaker.makePayment(amount, 'USDC', TEST_RECEIVER_ADDRESS, 'test payment');
|
|
58
|
-
// Verify the transaction hash
|
|
59
|
-
expect(txHash).toBe('0xtxhash');
|
|
60
|
-
// Verify prepareSpendCallData was called with correct amount
|
|
61
|
-
expect(prepareSpendCallData).toHaveBeenCalledWith(permission, 1500000n); // 1.5 USDC = 1,500,000 in smallest units
|
|
62
|
-
// Verify sendUserOperation was called with correct parameters
|
|
63
|
-
expect(bundlerClient.sendUserOperation).toHaveBeenCalledWith({
|
|
64
|
-
account: smartWallet.account,
|
|
65
|
-
calls: [
|
|
66
|
-
// Spend permission calls
|
|
67
|
-
{ to: '0xcontract1', data: '0xdata1', value: 0n },
|
|
68
|
-
{ to: '0xcontract2', data: '0xdata2', value: 0n },
|
|
69
|
-
// Transfer call
|
|
70
|
-
{
|
|
71
|
-
to: USDC_CONTRACT_ADDRESS_BASE,
|
|
72
|
-
data: expect.any(String), // Encoded transfer function
|
|
73
|
-
value: 0n
|
|
74
|
-
}
|
|
75
|
-
],
|
|
76
|
-
maxPriorityFeePerGas: expect.any(BigInt)
|
|
77
|
-
});
|
|
78
|
-
// Verify waitForUserOperationReceipt was called
|
|
79
|
-
expect(bundlerClient.waitForUserOperationReceipt).toHaveBeenCalledWith({ hash: '0xoperationhash' });
|
|
80
|
-
});
|
|
81
|
-
it('should throw error for non-USDC currency', async () => {
|
|
82
|
-
const permission = mockSpendPermission();
|
|
83
|
-
const smartWallet = mockEphemeralSmartWallet();
|
|
84
|
-
const paymentMaker = new BaseAppPaymentMaker(permission, smartWallet);
|
|
85
|
-
const amount = new BigNumber(1.5);
|
|
86
|
-
await expect(paymentMaker.makePayment(amount, 'ETH', TEST_RECEIVER_ADDRESS, 'test payment')).rejects.toThrow('Only usdc currency is supported');
|
|
87
|
-
});
|
|
88
|
-
it('should throw error if user operation fails', async () => {
|
|
89
|
-
const permission = mockSpendPermission();
|
|
90
|
-
const bundlerClient = mockFailedBundlerClient({ failureType: 'receipt' });
|
|
91
|
-
const smartWallet = mockEphemeralSmartWallet({ client: bundlerClient });
|
|
92
|
-
await setupPaymentMocks({ spendCalls: [] });
|
|
93
|
-
const paymentMaker = new BaseAppPaymentMaker(permission, smartWallet);
|
|
94
|
-
const amount = new BigNumber(1.5);
|
|
95
|
-
await expect(paymentMaker.makePayment(amount, 'USDC', TEST_RECEIVER_ADDRESS, 'test payment')).rejects.toThrow('User operation failed');
|
|
96
|
-
});
|
|
97
|
-
it('should throw error if transaction hash is not returned', async () => {
|
|
98
|
-
const permission = mockSpendPermission();
|
|
99
|
-
const bundlerClient = mockFailedBundlerClient({ failureType: 'noTxHash' });
|
|
100
|
-
const smartWallet = mockEphemeralSmartWallet({ client: bundlerClient });
|
|
101
|
-
await setupPaymentMocks({ spendCalls: [] });
|
|
102
|
-
const paymentMaker = new BaseAppPaymentMaker(permission, smartWallet);
|
|
103
|
-
const amount = new BigNumber(1.5);
|
|
104
|
-
await expect(paymentMaker.makePayment(amount, 'USDC', TEST_RECEIVER_ADDRESS, 'test payment')).rejects.toThrow('User operation was executed but no transaction hash was returned');
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
//# sourceMappingURL=baseAppPaymentMaker.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"baseAppPaymentMaker.test.js","sourceRoot":"","sources":["../src/baseAppPaymentMaker.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC9F,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,YAAY,IAAI,oBAAoB,EACzC,mBAAmB,IAAI,iBAAiB,EACxC,cAAc,EACd,aAAa,EACd,MAAM,cAAc,CAAC"}
|
|
@@ -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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mainWalletPaymentMaker.test.d.ts","sourceRoot":"","sources":["../src/mainWalletPaymentMaker.test.ts"],"names":[],"mappings":""}
|