@atxp/base 0.2.16 → 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 +53 -25
  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
package/README.md CHANGED
@@ -21,6 +21,7 @@ const account = await BaseAppAccount.initialize({
21
21
  walletAddress: address,
22
22
  apiKey,
23
23
  appName: 'Mini App ATXP',
24
+ useEphemeralWallet: false, // Temporary - see Non ephemeral wallet mode below
24
25
  // Parameters for the spend permission (see How it works below)
25
26
  allowance: BigInt('10000000'), // 10 USDC
26
27
  periodInDays: 30,
@@ -38,6 +39,11 @@ const res = await client.callTool({
38
39
  );
39
40
  ```
40
41
 
42
+ ## Non ephemeral wallet mode
43
+ You can disabled ephemeral wallets and use the user's main wallet for all actions by passing the parameter `useEphemeralWallet: false` to the `BaseAppAccount.initialize` call. If not provided, it defaults to `true`.
44
+
45
+ Note that the UX is degraded in this mode - users are prompted to verify every transaction, and every signature. So that's 1 verification on accessing the MCP server at all, and 2 more (transaction plus sign JWT) for each transaction. This mode is intended as an short-term unblock for dev shops building mini-apps while we sort out a longer-term strategy.
46
+
41
47
 
42
48
  ## Clearing state
43
49
  You can reset the BaseAppAccount state for a user by:
@@ -1,4 +1,5 @@
1
1
  import type { Account, PaymentMaker } from '@atxp/client';
2
+ import { type MainWalletProvider } from './mainWalletPaymentMaker.js';
2
3
  import { SpendPermission } from './types.js';
3
4
  import { IStorage } from './storage.js';
4
5
  import { type EphemeralSmartWallet } from './smartWalletHelpers.js';
@@ -13,6 +14,7 @@ export declare class BaseAppAccount implements Account {
13
14
  walletAddress: string;
14
15
  apiKey: string;
15
16
  appName: string;
17
+ useEphemeralWallet?: boolean;
16
18
  allowance?: bigint;
17
19
  periodInDays?: number;
18
20
  storage?: IStorage<string>;
@@ -20,7 +22,7 @@ export declare class BaseAppAccount implements Account {
20
22
  }): Promise<BaseAppAccount>;
21
23
  private static loadSavedWalletAndPermission;
22
24
  private static deploySmartWallet;
23
- constructor(spendPermission: SpendPermission, ephemeralSmartWallet: EphemeralSmartWallet, logger?: Logger);
25
+ constructor(spendPermission: SpendPermission | null, ephemeralSmartWallet: EphemeralSmartWallet | null, logger?: Logger, mainWalletAddress?: string, provider?: MainWalletProvider);
24
26
  static clearAllStoredData(userWalletAddress: string, storage?: IStorage<string>): void;
25
27
  }
26
28
  //# sourceMappingURL=baseAppAccount.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"baseAppAccount.d.ts","sourceRoot":"","sources":["../src/baseAppAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAM1D,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAA0D,MAAM,cAAc,CAAC;AAChG,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAiB,MAAM,EAAE,MAAM,cAAc,CAAC;AAQrD,qBAAa,cAAe,YAAW,OAAO;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAC;IAE/C,OAAO,CAAC,MAAM,CAAC,YAAY;WAId,UAAU,CAAC,MAAM,EAAE;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GACA,OAAO,CAAC,cAAc,CAAC;IA6D1B,OAAO,CAAC,MAAM,CAAC,4BAA4B;mBAkBtB,iBAAiB;gBAsBpC,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,CAAC,EAAE,MAAM;IAajB,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;CAQvF"}
1
+ {"version":3,"file":"baseAppAccount.d.ts","sourceRoot":"","sources":["../src/baseAppAccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAI9F,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAA0D,MAAM,cAAc,CAAC;AAChG,OAAO,EAA0B,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAiB,MAAM,EAAE,MAAM,cAAc,CAAC;AAQrD,qBAAa,cAAe,YAAW,OAAO;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,CAAC;IAE/C,OAAO,CAAC,MAAM,CAAC,YAAY;WAId,UAAU,CAAC,MAAM,EAAE;QAC5B,aAAa,EAAE,MAAM,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,GACA,OAAO,CAAC,cAAc,CAAC;IA6E1B,OAAO,CAAC,MAAM,CAAC,4BAA4B;mBAkBtB,iBAAiB;gBAsBpC,eAAe,EAAE,eAAe,GAAG,IAAI,EACvC,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,EACjD,MAAM,CAAC,EAAE,MAAM,EACf,iBAAiB,CAAC,EAAE,MAAM,EAC1B,QAAQ,CAAC,EAAE,kBAAkB;IAuB/B,MAAM,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;CAavF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=baseAppAccount.ephemeral.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseAppAccount.ephemeral.test.d.ts","sourceRoot":"","sources":["../src/baseAppAccount.ephemeral.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,420 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ // Mock all external modules before imports
3
+ vi.mock('@base-org/account', () => ({
4
+ createBaseAccountSDK: vi.fn(() => ({
5
+ getProvider: vi.fn(() => ({
6
+ request: vi.fn()
7
+ }))
8
+ }))
9
+ }));
10
+ vi.mock('@base-org/account/spend-permission', () => ({
11
+ requestSpendPermission: vi.fn(),
12
+ prepareSpendCallData: vi.fn()
13
+ }));
14
+ vi.mock('viem/account-abstraction', () => ({
15
+ toCoinbaseSmartAccount: vi.fn(),
16
+ createBundlerClient: vi.fn()
17
+ }));
18
+ vi.mock('viem', async () => {
19
+ const actual = await vi.importActual('viem');
20
+ return {
21
+ ...actual,
22
+ http: vi.fn(() => 'mock-transport'),
23
+ createPublicClient: vi.fn(() => ({})),
24
+ encodeFunctionData: vi.fn(() => '0xmockencodeddata')
25
+ };
26
+ });
27
+ import { BaseAppAccount } from './baseAppAccount.js';
28
+ import { MemoryStorage } from './storage.js';
29
+ import { base } from 'viem/chains';
30
+ import { USDC_CONTRACT_ADDRESS_BASE } from '@atxp/client';
31
+ import BigNumber from 'bignumber.js';
32
+ import { TEST_API_KEY, TEST_WALLET_ADDRESS, TEST_SMART_WALLET_ADDRESS, TEST_RECEIVER_ADDRESS, TEST_PRIVATE_KEY, TEST_PAYMASTER_URL, TEST_BUNDLER_URL, setupInitializationMocks, setupPaymentMocks, mockSpendPermission, mockExpiredSpendPermission, mockSmartAccount, mockBundlerClient, mockFailedBundlerClient, mockProvider, mockSpendCalls, getStorageKey, removeTimestamps, expectTimestampAround } from './testHelpers.js';
33
+ describe('BaseAppAccount', () => {
34
+ let mockStorage;
35
+ beforeEach(() => {
36
+ mockStorage = new MemoryStorage();
37
+ vi.clearAllMocks();
38
+ });
39
+ afterEach(() => {
40
+ vi.restoreAllMocks();
41
+ });
42
+ describe('initialize', () => {
43
+ it('should create a new account when no stored data exists', async () => {
44
+ const bundlerClient = mockBundlerClient();
45
+ const mocks = await setupInitializationMocks({ bundlerClient });
46
+ // Initialize account
47
+ const account = await BaseAppAccount.initialize({
48
+ walletAddress: TEST_WALLET_ADDRESS,
49
+ apiKey: TEST_API_KEY,
50
+ appName: 'Test App',
51
+ storage: mockStorage
52
+ });
53
+ // Verify account creation
54
+ expect(account).toBeDefined();
55
+ expect(account.accountId).toBe(TEST_SMART_WALLET_ADDRESS);
56
+ expect(account.paymentMakers).toBeDefined();
57
+ expect(account.paymentMakers.base).toBeDefined();
58
+ // Verify smart wallet was deployed
59
+ expect(bundlerClient.sendUserOperation).toHaveBeenCalledWith({
60
+ calls: [{
61
+ to: TEST_SMART_WALLET_ADDRESS,
62
+ value: 0n,
63
+ data: '0x'
64
+ }],
65
+ paymaster: true
66
+ });
67
+ // Verify spend permission was requested
68
+ expect(mocks.requestSpendPermission).toHaveBeenCalledWith({
69
+ account: TEST_WALLET_ADDRESS,
70
+ spender: TEST_SMART_WALLET_ADDRESS,
71
+ token: USDC_CONTRACT_ADDRESS_BASE,
72
+ chainId: base.id,
73
+ allowance: 10n,
74
+ periodInDays: 7,
75
+ provider: expect.any(Object)
76
+ });
77
+ // Verify data was stored
78
+ const storageKey = getStorageKey(TEST_WALLET_ADDRESS);
79
+ const storedData = mockStorage.get(storageKey);
80
+ expect(storedData).toBeTruthy();
81
+ const parsedData = JSON.parse(storedData);
82
+ expect(parsedData.privateKey).toBeDefined();
83
+ // Compare permission structure (toMatchObject ignores extra properties in received)
84
+ expect(parsedData.permission).toMatchObject(removeTimestamps(mockSpendPermission()));
85
+ // Verify timestamps are reasonable
86
+ expectTimestampAround(parsedData.permission.permission.start, 0); // Should be around now
87
+ expectTimestampAround(parsedData.permission.permission.end, 604800); // Should be ~7 days from now
88
+ });
89
+ it('should reuse existing account when valid stored data exists', async () => {
90
+ // Pre-store valid permission
91
+ const permission = mockSpendPermission();
92
+ const storageKey = getStorageKey(TEST_WALLET_ADDRESS);
93
+ mockStorage.set(storageKey, JSON.stringify({
94
+ privateKey: TEST_PRIVATE_KEY,
95
+ permission
96
+ }));
97
+ const bundlerClient = mockBundlerClient();
98
+ const mocks = await setupInitializationMocks({ bundlerClient });
99
+ // Initialize account
100
+ const account = await BaseAppAccount.initialize({
101
+ walletAddress: TEST_WALLET_ADDRESS,
102
+ apiKey: TEST_API_KEY,
103
+ appName: 'Test App',
104
+ storage: mockStorage
105
+ });
106
+ // Verify account was loaded from storage
107
+ expect(account).toBeDefined();
108
+ expect(account.accountId).toBe(TEST_SMART_WALLET_ADDRESS);
109
+ // Verify smart wallet was NOT deployed (reusing existing)
110
+ expect(bundlerClient.sendUserOperation).not.toHaveBeenCalled();
111
+ expect(mocks.requestSpendPermission).not.toHaveBeenCalled();
112
+ });
113
+ it('should create new account when stored permission is expired', async () => {
114
+ // Pre-store expired permission
115
+ const expiredPermission = mockExpiredSpendPermission();
116
+ const storageKey = getStorageKey(TEST_WALLET_ADDRESS);
117
+ mockStorage.set(storageKey, JSON.stringify({
118
+ privateKey: TEST_PRIVATE_KEY,
119
+ permission: expiredPermission
120
+ }));
121
+ const newPermission = mockSpendPermission({ salt: '2', signature: '0xnewsignature' });
122
+ const bundlerClient = mockBundlerClient();
123
+ const mocks = await setupInitializationMocks({
124
+ bundlerClient,
125
+ spendPermission: newPermission
126
+ });
127
+ // Initialize account
128
+ const account = await BaseAppAccount.initialize({
129
+ walletAddress: TEST_WALLET_ADDRESS,
130
+ apiKey: TEST_API_KEY,
131
+ appName: 'Test App',
132
+ storage: mockStorage
133
+ });
134
+ // Verify new account was created
135
+ expect(account).toBeDefined();
136
+ expect(bundlerClient.sendUserOperation).toHaveBeenCalled();
137
+ expect(mocks.requestSpendPermission).toHaveBeenCalled();
138
+ // Verify old data was removed and new data stored
139
+ const storedData = mockStorage.get(storageKey);
140
+ expect(storedData).toBeTruthy();
141
+ const parsedData = JSON.parse(storedData);
142
+ expect(parsedData.permission).toMatchObject(removeTimestamps(newPermission));
143
+ // Verify timestamps are reasonable
144
+ expectTimestampAround(parsedData.permission.permission.start, 0);
145
+ expectTimestampAround(parsedData.permission.permission.end, 604800);
146
+ });
147
+ it('should use custom allowance and period when provided', async () => {
148
+ const mocks = await setupInitializationMocks();
149
+ // Initialize with custom values
150
+ const customAllowance = 100n;
151
+ const customPeriod = 30;
152
+ await BaseAppAccount.initialize({
153
+ walletAddress: TEST_WALLET_ADDRESS,
154
+ apiKey: TEST_API_KEY,
155
+ appName: 'Test App',
156
+ allowance: customAllowance,
157
+ periodInDays: customPeriod,
158
+ storage: mockStorage
159
+ });
160
+ // Verify custom values were used
161
+ expect(mocks.requestSpendPermission).toHaveBeenCalledWith(expect.objectContaining({
162
+ allowance: customAllowance,
163
+ periodInDays: customPeriod
164
+ }));
165
+ });
166
+ it('should throw error when API key is not provided', async () => {
167
+ await expect(BaseAppAccount.initialize({
168
+ walletAddress: TEST_WALLET_ADDRESS,
169
+ apiKey: '',
170
+ appName: 'Test App',
171
+ storage: mockStorage
172
+ })).rejects.toThrow('Smart wallet API key is required');
173
+ });
174
+ it('should make all required blockchain calls when creating new account', async () => {
175
+ const provider = mockProvider();
176
+ const bundlerClient = mockBundlerClient();
177
+ const smartAccount = mockSmartAccount();
178
+ const permission = mockSpendPermission();
179
+ const mocks = await setupInitializationMocks({
180
+ provider,
181
+ bundlerClient,
182
+ smartAccount,
183
+ spendPermission: permission
184
+ });
185
+ const { http } = await import('viem');
186
+ // Initialize account
187
+ await BaseAppAccount.initialize({
188
+ walletAddress: TEST_WALLET_ADDRESS,
189
+ apiKey: TEST_API_KEY,
190
+ appName: 'Test App',
191
+ storage: mockStorage
192
+ });
193
+ // Verify SDK initialization
194
+ expect(mocks.createBaseAccountSDK).toHaveBeenCalledTimes(1);
195
+ expect(mocks.createBaseAccountSDK).toHaveBeenCalledWith({
196
+ appName: 'Test App',
197
+ appChainIds: [base.id],
198
+ paymasterUrls: {
199
+ [base.id]: TEST_PAYMASTER_URL
200
+ }
201
+ });
202
+ // Verify wallet_connect attempt
203
+ expect(provider.request).toHaveBeenCalledWith({ method: 'wallet_connect' });
204
+ // Verify public client creation
205
+ expect(mocks.createPublicClient).toHaveBeenCalledWith({
206
+ chain: base,
207
+ transport: expect.anything()
208
+ });
209
+ expect(http).toHaveBeenCalledWith(`${TEST_BUNDLER_URL}/${TEST_API_KEY}`);
210
+ // Verify smart account creation
211
+ expect(mocks.toCoinbaseSmartAccount).toHaveBeenCalledWith({
212
+ client: expect.anything(),
213
+ owners: [expect.objectContaining({
214
+ address: expect.any(String)
215
+ })],
216
+ version: '1'
217
+ });
218
+ // Verify bundler client creation
219
+ expect(mocks.createBundlerClient).toHaveBeenCalledWith({
220
+ account: smartAccount,
221
+ client: expect.anything(),
222
+ transport: expect.anything(),
223
+ chain: base,
224
+ paymaster: true,
225
+ paymasterContext: {
226
+ transport: expect.anything()
227
+ }
228
+ });
229
+ // Verify smart wallet deployment
230
+ expect(bundlerClient.sendUserOperation).toHaveBeenCalledTimes(1);
231
+ expect(bundlerClient.sendUserOperation).toHaveBeenCalledWith({
232
+ calls: [{
233
+ to: TEST_SMART_WALLET_ADDRESS,
234
+ value: 0n,
235
+ data: '0x'
236
+ }],
237
+ paymaster: true
238
+ });
239
+ expect(bundlerClient.waitForUserOperationReceipt).toHaveBeenCalledWith({
240
+ hash: '0xoperationhash'
241
+ });
242
+ // Verify spend permission request
243
+ expect(mocks.requestSpendPermission).toHaveBeenCalledTimes(1);
244
+ expect(mocks.requestSpendPermission).toHaveBeenCalledWith({
245
+ account: TEST_WALLET_ADDRESS,
246
+ spender: TEST_SMART_WALLET_ADDRESS,
247
+ token: USDC_CONTRACT_ADDRESS_BASE,
248
+ chainId: base.id,
249
+ allowance: 10n,
250
+ periodInDays: 7,
251
+ provider: provider
252
+ });
253
+ });
254
+ it('should skip deployment and permission when reusing stored account', async () => {
255
+ // Pre-store valid permission
256
+ const permission = mockSpendPermission();
257
+ const storageKey = getStorageKey(TEST_WALLET_ADDRESS);
258
+ mockStorage.set(storageKey, JSON.stringify({
259
+ privateKey: TEST_PRIVATE_KEY,
260
+ permission
261
+ }));
262
+ const provider = mockProvider();
263
+ const bundlerClient = mockBundlerClient();
264
+ const smartAccount = mockSmartAccount();
265
+ const mocks = await setupInitializationMocks({
266
+ provider,
267
+ bundlerClient,
268
+ smartAccount
269
+ });
270
+ const { http } = await import('viem');
271
+ // Initialize account
272
+ await BaseAppAccount.initialize({
273
+ walletAddress: TEST_WALLET_ADDRESS,
274
+ apiKey: TEST_API_KEY,
275
+ appName: 'Test App',
276
+ storage: mockStorage
277
+ });
278
+ // Verify SDK initialization still happens
279
+ expect(mocks.createBaseAccountSDK).toHaveBeenCalledTimes(1);
280
+ expect(mocks.createBaseAccountSDK).toHaveBeenCalledWith({
281
+ appName: 'Test App',
282
+ appChainIds: [base.id],
283
+ paymasterUrls: {
284
+ [base.id]: TEST_PAYMASTER_URL
285
+ }
286
+ });
287
+ // Verify wallet_connect attempt still happens
288
+ expect(provider.request).toHaveBeenCalledWith({ method: 'wallet_connect' });
289
+ // Verify public client creation
290
+ expect(mocks.createPublicClient).toHaveBeenCalledWith({
291
+ chain: base,
292
+ transport: expect.anything()
293
+ });
294
+ expect(http).toHaveBeenCalledWith(`${TEST_BUNDLER_URL}/${TEST_API_KEY}`);
295
+ // Verify smart account creation with stored private key
296
+ expect(mocks.toCoinbaseSmartAccount).toHaveBeenCalledWith({
297
+ client: expect.anything(),
298
+ owners: [expect.objectContaining({
299
+ address: expect.any(String)
300
+ })],
301
+ version: '1'
302
+ });
303
+ // Verify bundler client creation
304
+ expect(mocks.createBundlerClient).toHaveBeenCalledWith({
305
+ account: smartAccount,
306
+ client: expect.anything(),
307
+ transport: expect.anything(),
308
+ chain: base,
309
+ paymaster: true,
310
+ paymasterContext: {
311
+ transport: expect.anything()
312
+ }
313
+ });
314
+ // Verify NO smart wallet deployment
315
+ expect(bundlerClient.sendUserOperation).not.toHaveBeenCalled();
316
+ expect(bundlerClient.waitForUserOperationReceipt).not.toHaveBeenCalled();
317
+ // Verify NO new spend permission request
318
+ expect(mocks.requestSpendPermission).not.toHaveBeenCalled();
319
+ });
320
+ it('should handle wallet_connect failure gracefully', async () => {
321
+ // Mock provider that fails wallet_connect
322
+ const provider = mockProvider({
323
+ request: vi.fn().mockRejectedValue(new Error('Wallet does not support wallet_connect'))
324
+ });
325
+ const bundlerClient = mockBundlerClient();
326
+ const mocks = await setupInitializationMocks({ provider, bundlerClient });
327
+ // Initialize account - should not throw despite wallet_connect failure
328
+ const account = await BaseAppAccount.initialize({
329
+ walletAddress: TEST_WALLET_ADDRESS,
330
+ apiKey: TEST_API_KEY,
331
+ appName: 'Test App',
332
+ storage: mockStorage
333
+ });
334
+ // Verify initialization continued despite wallet_connect failure
335
+ expect(account).toBeDefined();
336
+ expect(provider.request).toHaveBeenCalledWith({ method: 'wallet_connect' });
337
+ expect(bundlerClient.sendUserOperation).toHaveBeenCalled();
338
+ expect(mocks.requestSpendPermission).toHaveBeenCalled();
339
+ });
340
+ it('should throw when smart wallet deployment fails', async () => {
341
+ const bundlerClient = mockFailedBundlerClient({ failureType: 'deployment' });
342
+ await setupInitializationMocks({ bundlerClient });
343
+ // Initialize should throw
344
+ await expect(BaseAppAccount.initialize({
345
+ walletAddress: TEST_WALLET_ADDRESS,
346
+ apiKey: TEST_API_KEY,
347
+ appName: 'Test App',
348
+ storage: mockStorage
349
+ })).rejects.toThrow('Smart wallet deployment failed');
350
+ });
351
+ });
352
+ describe('clearAllStoredData', () => {
353
+ it('should remove stored data for the given wallet address', () => {
354
+ const storageKey = getStorageKey(TEST_WALLET_ADDRESS);
355
+ // Store some data
356
+ mockStorage.set(storageKey, 'test-data');
357
+ expect(mockStorage.get(storageKey)).toBe('test-data');
358
+ // Clear the data
359
+ BaseAppAccount.clearAllStoredData(TEST_WALLET_ADDRESS, mockStorage);
360
+ // Verify data was removed
361
+ expect(mockStorage.get(storageKey)).toBeNull();
362
+ });
363
+ it('should throw error when called outside browser without storage', () => {
364
+ // Mock window as undefined (non-browser environment)
365
+ const originalWindow = global.window;
366
+ global.window = undefined;
367
+ expect(() => {
368
+ BaseAppAccount.clearAllStoredData(TEST_WALLET_ADDRESS);
369
+ }).toThrow('clearAllStoredData requires a storage to be provided outside of browser environments');
370
+ // Restore window
371
+ global.window = originalWindow;
372
+ });
373
+ });
374
+ describe('payment functionality', () => {
375
+ it('should make payment using the ephemeral wallet', async () => {
376
+ // Pre-store valid data
377
+ const permission = mockSpendPermission();
378
+ const storageKey = getStorageKey(TEST_WALLET_ADDRESS);
379
+ mockStorage.set(storageKey, JSON.stringify({
380
+ privateKey: TEST_PRIVATE_KEY,
381
+ permission
382
+ }));
383
+ const bundlerClient = mockBundlerClient();
384
+ const smartAccount = mockSmartAccount();
385
+ const spendCalls = mockSpendCalls();
386
+ await setupInitializationMocks({ bundlerClient, smartAccount });
387
+ const { prepareSpendCallData } = await setupPaymentMocks({ spendCalls });
388
+ // Initialize account
389
+ const account = await BaseAppAccount.initialize({
390
+ walletAddress: TEST_WALLET_ADDRESS,
391
+ apiKey: TEST_API_KEY,
392
+ appName: 'Test App',
393
+ storage: mockStorage
394
+ });
395
+ // Make a payment
396
+ const paymentMaker = account.paymentMakers.base;
397
+ const amount = new BigNumber(1.5); // 1.5 USDC
398
+ const txHash = await paymentMaker.makePayment(amount, 'USDC', TEST_RECEIVER_ADDRESS, 'test payment');
399
+ // Verify payment was made
400
+ expect(txHash).toBe('0xtxhash');
401
+ expect(prepareSpendCallData).toHaveBeenCalledWith(permission, 1500000n); // 1.5 USDC in smallest units
402
+ expect(bundlerClient.sendUserOperation).toHaveBeenCalledWith({
403
+ account: smartAccount,
404
+ calls: [
405
+ // Spend permission calls
406
+ { to: '0xcontract1', data: '0xdata1', value: 0n },
407
+ { to: '0xcontract2', data: '0xdata2', value: 0n },
408
+ // Transfer call
409
+ {
410
+ to: USDC_CONTRACT_ADDRESS_BASE,
411
+ data: expect.any(String), // Encoded transfer function
412
+ value: 0n
413
+ }
414
+ ],
415
+ maxPriorityFeePerGas: expect.any(BigInt)
416
+ });
417
+ });
418
+ });
419
+ });
420
+ //# sourceMappingURL=baseAppAccount.ephemeral.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseAppAccount.ephemeral.test.js","sourceRoot":"","sources":["../src/baseAppAccount.ephemeral.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { USDC_CONTRACT_ADDRESS_BASE } from '@atxp/client';
2
2
  import { BaseAppPaymentMaker } from './baseAppPaymentMaker.js';
3
+ import { MainWalletPaymentMaker } from './mainWalletPaymentMaker.js';
3
4
  import { generatePrivateKey } from 'viem/accounts';
4
5
  import { base } from 'viem/chains';
5
6
  import { BrowserStorage, IntermediaryStorage } from './storage.js';
@@ -16,21 +17,8 @@ export class BaseAppAccount {
16
17
  }
17
18
  static async initialize(config) {
18
19
  const logger = config.logger || new ConsoleLogger();
19
- // Validate smart wallet configuration
20
- if (!config.apiKey) {
21
- throw new Error('Smart wallet API key is required. ' +
22
- 'Get your API key from https://portal.cdp.coinbase.com/');
23
- }
24
- // Initialize storage
25
- const baseStorage = config?.storage || new BrowserStorage();
26
- const storage = new IntermediaryStorage(baseStorage);
27
- const storageKey = this.toStorageKey(config.walletAddress);
28
- // Try to load existing permission
29
- const existingData = this.loadSavedWalletAndPermission(storage, storageKey);
30
- if (existingData) {
31
- const ephemeralSmartWallet = await toEphemeralSmartWallet(existingData.privateKey, config.apiKey);
32
- return new BaseAppAccount(existingData.permission, ephemeralSmartWallet, logger);
33
- }
20
+ const useEphemeralWallet = config.useEphemeralWallet ?? true; // Default to true for backward compatibility
21
+ // Initialize Base SDK
34
22
  const sdk = createBaseAccountSDK({
35
23
  appName: config?.appName,
36
24
  appChainIds: [base.id],
@@ -48,6 +36,28 @@ export class BaseAppAccount {
48
36
  // Continue if wallet_connect is not supported
49
37
  logger.warn(`wallet_connect not supported, continuing with initialization. ${error}`);
50
38
  }
39
+ // If using main wallet mode, return early with main wallet payment maker
40
+ if (!useEphemeralWallet) {
41
+ logger.info(`Using main wallet mode for address: ${config.walletAddress}`);
42
+ return new BaseAppAccount(null, // No spend permission in main wallet mode
43
+ null, // No ephemeral wallet in main wallet mode
44
+ logger, config.walletAddress, provider);
45
+ }
46
+ // Validate smart wallet configuration for ephemeral mode
47
+ if (!config.apiKey) {
48
+ throw new Error('Smart wallet API key is required for ephemeral wallet mode. ' +
49
+ 'Get your API key from https://portal.cdp.coinbase.com/');
50
+ }
51
+ // Initialize storage
52
+ const baseStorage = config?.storage || new BrowserStorage();
53
+ const storage = new IntermediaryStorage(baseStorage);
54
+ const storageKey = this.toStorageKey(config.walletAddress);
55
+ // Try to load existing permission
56
+ const existingData = this.loadSavedWalletAndPermission(storage, storageKey);
57
+ if (existingData) {
58
+ const ephemeralSmartWallet = await toEphemeralSmartWallet(existingData.privateKey, config.apiKey);
59
+ return new BaseAppAccount(existingData.permission, ephemeralSmartWallet, logger);
60
+ }
51
61
  const privateKey = generatePrivateKey();
52
62
  const smartWallet = await toEphemeralSmartWallet(privateKey, config.apiKey);
53
63
  logger.info(`Generated ephemeral wallet: ${smartWallet.address}`);
@@ -95,20 +105,38 @@ export class BaseAppAccount {
95
105
  throw new Error(`Smart wallet deployment failed. Receipt: ${JSON.stringify(receipt)}`);
96
106
  }
97
107
  }
98
- constructor(spendPermission, ephemeralSmartWallet, logger) {
99
- if (!ephemeralSmartWallet) {
100
- throw new Error('Wallet client is required');
108
+ constructor(spendPermission, ephemeralSmartWallet, logger, mainWalletAddress, provider) {
109
+ if (ephemeralSmartWallet) {
110
+ // Ephemeral wallet mode
111
+ if (!spendPermission) {
112
+ throw new Error('Spend permission is required for ephemeral wallet mode');
113
+ }
114
+ this.accountId = ephemeralSmartWallet.address;
115
+ this.paymentMakers = {
116
+ 'base': new BaseAppPaymentMaker(spendPermission, ephemeralSmartWallet, logger),
117
+ };
118
+ }
119
+ else {
120
+ // Main wallet mode
121
+ if (!mainWalletAddress || !provider) {
122
+ throw new Error('Main wallet address and provider are required for main wallet mode');
123
+ }
124
+ this.accountId = mainWalletAddress;
125
+ this.paymentMakers = {
126
+ 'base': new MainWalletPaymentMaker(mainWalletAddress, provider, logger),
127
+ };
101
128
  }
102
- this.accountId = ephemeralSmartWallet.address;
103
- this.paymentMakers = {
104
- 'base': new BaseAppPaymentMaker(spendPermission, ephemeralSmartWallet, logger),
105
- };
106
129
  }
107
130
  static clearAllStoredData(userWalletAddress, storage) {
108
- if (typeof window === 'undefined' && !storage) {
109
- throw new Error('clearAllStoredData requires a storage to be provided outside of browser environments');
131
+ // In non-browser environments, require an explicit storage parameter
132
+ if (!storage) {
133
+ const browserStorage = new BrowserStorage();
134
+ // Check if BrowserStorage would work (i.e., we're in a browser)
135
+ if (typeof window === 'undefined') {
136
+ throw new Error('clearAllStoredData requires a storage to be provided outside of browser environments');
137
+ }
138
+ storage = browserStorage;
110
139
  }
111
- storage = storage || new BrowserStorage();
112
140
  storage.delete(this.toStorageKey(userWalletAddress));
113
141
  }
114
142
  }
@@ -1 +1 @@
1
- {"version":3,"file":"baseAppAccount.js","sourceRoot":"","sources":["../src/baseAppAccount.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"baseAppAccount.js","sourceRoot":"","sources":["../src/baseAppAccount.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=baseAppAccount.mainWallet.test.d.ts.map