@eth-optimism/actions-sdk 0.0.3 → 0.0.4

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 (76) hide show
  1. package/dist/actions.test.js +22 -2
  2. package/dist/actions.test.js.map +1 -1
  3. package/dist/constants/assets.d.ts.map +1 -1
  4. package/dist/constants/assets.js +2 -1
  5. package/dist/constants/assets.js.map +1 -1
  6. package/dist/constants/supportedChains.d.ts +1 -1
  7. package/dist/constants/supportedChains.d.ts.map +1 -1
  8. package/dist/constants/supportedChains.js +2 -1
  9. package/dist/constants/supportedChains.js.map +1 -1
  10. package/dist/lend/namespaces/WalletLendNamespace.d.ts +8 -2
  11. package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
  12. package/dist/lend/namespaces/WalletLendNamespace.js +8 -2
  13. package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
  14. package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
  15. package/dist/lend/providers/morpho/sdk.js +0 -1
  16. package/dist/lend/providers/morpho/sdk.js.map +1 -1
  17. package/dist/services/ChainManager.d.ts +1 -1
  18. package/dist/test/MockPrivyClient.d.ts +10 -49
  19. package/dist/test/MockPrivyClient.d.ts.map +1 -1
  20. package/dist/test/MockPrivyClient.js +13 -72
  21. package/dist/test/MockPrivyClient.js.map +1 -1
  22. package/dist/wallet/core/namespace/WalletNamespace.d.ts +13 -13
  23. package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
  24. package/dist/wallet/core/namespace/WalletNamespace.js +13 -13
  25. package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
  26. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +55 -33
  27. package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
  28. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +43 -15
  29. package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
  30. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +14 -4
  31. package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
  32. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +16 -3
  33. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
  34. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +18 -5
  35. package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
  36. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +31 -12
  37. package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
  38. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
  39. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +6 -1
  40. package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
  41. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +9 -1
  42. package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
  43. package/dist/wallet/node/providers/hosted/types/index.d.ts +6 -1
  44. package/dist/wallet/node/providers/hosted/types/index.d.ts.map +1 -1
  45. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +10 -5
  46. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
  47. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +11 -6
  48. package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
  49. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +26 -28
  50. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  51. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +12 -12
  52. package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
  53. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts +6 -2
  54. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts.map +1 -1
  55. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js +10 -7
  56. package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js.map +1 -1
  57. package/package.json +2 -2
  58. package/src/actions.test.ts +24 -4
  59. package/src/constants/assets.ts +8 -1
  60. package/src/constants/supportedChains.ts +8 -1
  61. package/src/lend/namespaces/WalletLendNamespace.ts +8 -2
  62. package/src/lend/providers/morpho/sdk.ts +0 -1
  63. package/src/test/MockPrivyClient.ts +24 -91
  64. package/src/wallet/core/namespace/WalletNamespace.ts +13 -13
  65. package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +60 -61
  66. package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +47 -39
  67. package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +20 -7
  68. package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +27 -9
  69. package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +40 -21
  70. package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +4 -3
  71. package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +17 -2
  72. package/src/wallet/node/providers/hosted/types/index.ts +9 -2
  73. package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +14 -6
  74. package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +35 -40
  75. package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +18 -14
  76. package/src/wallet/node/wallets/hosted/privy/utils/createSigner.ts +11 -9
@@ -1,4 +1,4 @@
1
- import type { PrivyClient } from '@privy-io/server-auth'
1
+ import type { PrivyClient } from '@privy-io/node'
2
2
  import { getAddress } from 'viem'
3
3
  import { unichain } from 'viem/chains'
4
4
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
@@ -7,7 +7,11 @@ import type { SupportedChainId } from '@/constants/supportedChains.js'
7
7
  import type { ChainManager } from '@/services/ChainManager.js'
8
8
  import { MockChainManager } from '@/test/MockChainManager.js'
9
9
  import { createMockLendProvider } from '@/test/MockLendProvider.js'
10
- import { createMockPrivyClient } from '@/test/MockPrivyClient.js'
10
+ import {
11
+ createMockPrivyClient,
12
+ createMockPrivyWallet,
13
+ getMockAuthorizationContext,
14
+ } from '@/test/MockPrivyClient.js'
11
15
  import { getRandomAddress } from '@/test/utils.js'
12
16
  import { WalletNamespace } from '@/wallet/core/namespace/WalletNamespace.js'
13
17
  import { DefaultSmartWalletProvider } from '@/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js'
@@ -35,10 +39,11 @@ describe('WalletNamespace', () => {
35
39
 
36
40
  describe('hostedWalletProvider', () => {
37
41
  it('should provide access to hosted wallet provider', () => {
38
- const hostedWalletProvider = new PrivyHostedWalletProvider(
39
- mockPrivyClient,
40
- mockChainManager,
41
- )
42
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
43
+ privyClient: mockPrivyClient,
44
+ chainManager: mockChainManager,
45
+ authorizationContext: getMockAuthorizationContext(),
46
+ })
42
47
  const smartWalletProvider = new DefaultSmartWalletProvider(
43
48
  mockChainManager,
44
49
  mockLendProvider,
@@ -59,10 +64,11 @@ describe('WalletNamespace', () => {
59
64
  'test-app-id',
60
65
  'test-app-secret',
61
66
  )
62
- const hostedWalletProvider = new PrivyHostedWalletProvider(
63
- mockPrivyClient,
64
- mockChainManager,
65
- )
67
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
68
+ privyClient: mockPrivyClient,
69
+ authorizationContext: getMockAuthorizationContext(),
70
+ chainManager: mockChainManager,
71
+ })
66
72
  const smartWalletProvider = new DefaultSmartWalletProvider(
67
73
  mockChainManager,
68
74
  mockLendProvider,
@@ -79,10 +85,11 @@ describe('WalletNamespace', () => {
79
85
 
80
86
  describe('createSmartWallet', () => {
81
87
  it('should create a smart wallet and return deployment result', async () => {
82
- const hostedWalletProvider = new PrivyHostedWalletProvider(
83
- mockPrivyClient,
84
- mockChainManager,
85
- )
88
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
89
+ privyClient: mockPrivyClient,
90
+ authorizationContext: getMockAuthorizationContext(),
91
+ chainManager: mockChainManager,
92
+ })
86
93
  const smartWalletProvider = new DefaultSmartWalletProvider(
87
94
  mockChainManager,
88
95
  mockLendProvider,
@@ -95,9 +102,7 @@ describe('WalletNamespace', () => {
95
102
  const walletNamespace = new WalletNamespace(walletProvider)
96
103
 
97
104
  // Create a hosted wallet to use as signer
98
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
99
- chainType: 'ethereum',
100
- })
105
+ const privyWallet = createMockPrivyWallet()
101
106
  const hostedWallet =
102
107
  await walletProvider.hostedWalletProvider.toActionsWallet({
103
108
  walletId: privyWallet.id,
@@ -121,10 +126,11 @@ describe('WalletNamespace', () => {
121
126
  })
122
127
 
123
128
  it('should report deployment successes and failures', async () => {
124
- const hostedWalletProvider = new PrivyHostedWalletProvider(
125
- mockPrivyClient,
126
- mockChainManager,
127
- )
129
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
130
+ privyClient: mockPrivyClient,
131
+ authorizationContext: getMockAuthorizationContext(),
132
+ chainManager: mockChainManager,
133
+ })
128
134
  const smartWalletProvider = new DefaultSmartWalletProvider(
129
135
  mockChainManager,
130
136
  mockLendProvider,
@@ -136,9 +142,7 @@ describe('WalletNamespace', () => {
136
142
  const walletNamespace = new WalletNamespace(walletProvider)
137
143
 
138
144
  // Create a hosted wallet to use as signer
139
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
140
- chainType: 'ethereum',
141
- })
145
+ const privyWallet = createMockPrivyWallet()
142
146
  const hostedWallet =
143
147
  await walletProvider.hostedWalletProvider.toActionsWallet({
144
148
  walletId: privyWallet.id,
@@ -206,10 +210,11 @@ describe('WalletNamespace', () => {
206
210
  'test-app-id',
207
211
  'test-app-secret',
208
212
  )
209
- const hostedWalletProvider = new PrivyHostedWalletProvider(
210
- mockPrivyClient,
211
- mockChainManager,
212
- )
213
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
214
+ privyClient: mockPrivyClient,
215
+ authorizationContext: getMockAuthorizationContext(),
216
+ chainManager: mockChainManager,
217
+ })
213
218
  const smartWalletProvider = new DefaultSmartWalletProvider(
214
219
  mockChainManager,
215
220
  mockLendProvider,
@@ -221,9 +226,7 @@ describe('WalletNamespace', () => {
221
226
  const getSmartWalletSpy = vi.spyOn(walletProvider, 'getSmartWallet')
222
227
  const walletNamespace = new WalletNamespace(walletProvider)
223
228
 
224
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
225
- chainType: 'ethereum',
226
- })
229
+ const privyWallet = createMockPrivyWallet()
227
230
  const hostedWallet =
228
231
  await walletProvider.hostedWalletProvider.toActionsWallet({
229
232
  walletId: privyWallet.id,
@@ -249,10 +252,11 @@ describe('WalletNamespace', () => {
249
252
  'test-app-id',
250
253
  'test-app-secret',
251
254
  )
252
- const hostedWalletProvider = new PrivyHostedWalletProvider(
253
- mockPrivyClient,
254
- mockChainManager,
255
- )
255
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
256
+ privyClient: mockPrivyClient,
257
+ authorizationContext: getMockAuthorizationContext(),
258
+ chainManager: mockChainManager,
259
+ })
256
260
  const smartWalletProvider = new DefaultSmartWalletProvider(
257
261
  mockChainManager,
258
262
  mockLendProvider,
@@ -263,9 +267,7 @@ describe('WalletNamespace', () => {
263
267
  )
264
268
  const walletNamespace = new WalletNamespace(walletProvider)
265
269
 
266
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
267
- chainType: 'ethereum',
268
- })
270
+ const privyWallet = createMockPrivyWallet()
269
271
  const hostedWallet =
270
272
  await walletProvider.hostedWalletProvider.toActionsWallet({
271
273
  walletId: privyWallet.id,
@@ -284,12 +286,13 @@ describe('WalletNamespace', () => {
284
286
  })
285
287
  })
286
288
 
287
- describe('hostedWalletToActionsWallet', () => {
289
+ describe('toActionsWallet', () => {
288
290
  it('should convert a hosted wallet to an Actions wallet', async () => {
289
- const hostedWalletProvider = new PrivyHostedWalletProvider(
290
- mockPrivyClient,
291
- mockChainManager,
292
- )
291
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
292
+ privyClient: mockPrivyClient,
293
+ authorizationContext: getMockAuthorizationContext(),
294
+ chainManager: mockChainManager,
295
+ })
293
296
  const smartWalletProvider = new DefaultSmartWalletProvider(
294
297
  mockChainManager,
295
298
  mockLendProvider,
@@ -300,9 +303,7 @@ describe('WalletNamespace', () => {
300
303
  )
301
304
  const walletNamespace = new WalletNamespace(walletProvider)
302
305
 
303
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
304
- chainType: 'ethereum',
305
- })
306
+ const privyWallet = createMockPrivyWallet()
306
307
  const hostedWallet =
307
308
  await walletProvider.hostedWalletProvider.toActionsWallet({
308
309
  walletId: privyWallet.id,
@@ -313,7 +314,7 @@ describe('WalletNamespace', () => {
313
314
  'toActionsWallet',
314
315
  )
315
316
 
316
- const actionsWallet = await walletNamespace.hostedWalletToActionsWallet({
317
+ const actionsWallet = await walletNamespace.toActionsWallet({
317
318
  walletId: privyWallet.id,
318
319
  address: privyWallet.address,
319
320
  })
@@ -330,10 +331,11 @@ describe('WalletNamespace', () => {
330
331
 
331
332
  describe('createSigner', () => {
332
333
  it('should delegate to hosted wallet provider createSigner', async () => {
333
- const hostedWalletProvider = new PrivyHostedWalletProvider(
334
- mockPrivyClient,
335
- mockChainManager,
336
- )
334
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
335
+ privyClient: mockPrivyClient,
336
+ authorizationContext: getMockAuthorizationContext(),
337
+ chainManager: mockChainManager,
338
+ })
337
339
  const smartWalletProvider = new DefaultSmartWalletProvider(
338
340
  mockChainManager,
339
341
  mockLendProvider,
@@ -345,9 +347,7 @@ describe('WalletNamespace', () => {
345
347
  const createSignerSpy = vi.spyOn(walletProvider, 'createSigner')
346
348
  const walletNamespace = new WalletNamespace(walletProvider)
347
349
 
348
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
349
- chainType: 'ethereum',
350
- })
350
+ const privyWallet = createMockPrivyWallet()
351
351
  const params = {
352
352
  walletId: privyWallet.id,
353
353
  address: getAddress(privyWallet.address),
@@ -361,10 +361,11 @@ describe('WalletNamespace', () => {
361
361
  })
362
362
 
363
363
  it('should return a LocalAccount that can be used as a smart wallet signer', async () => {
364
- const hostedWalletProvider = new PrivyHostedWalletProvider(
365
- mockPrivyClient,
366
- mockChainManager,
367
- )
364
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
365
+ privyClient: mockPrivyClient,
366
+ authorizationContext: getMockAuthorizationContext(),
367
+ chainManager: mockChainManager,
368
+ })
368
369
  const smartWalletProvider = new DefaultSmartWalletProvider(
369
370
  mockChainManager,
370
371
  mockLendProvider,
@@ -375,9 +376,7 @@ describe('WalletNamespace', () => {
375
376
  )
376
377
  const walletNamespace = new WalletNamespace(walletProvider)
377
378
 
378
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
379
- chainType: 'ethereum',
380
- })
379
+ const privyWallet = createMockPrivyWallet()
381
380
  const signer = await walletNamespace.createSigner({
382
381
  walletId: privyWallet.id,
383
382
  address: getAddress(privyWallet.address),
@@ -6,7 +6,11 @@ import type { SupportedChainId } from '@/constants/supportedChains.js'
6
6
  import type { ChainManager } from '@/services/ChainManager.js'
7
7
  import { MockChainManager } from '@/test/MockChainManager.js'
8
8
  import { createMockLendProvider } from '@/test/MockLendProvider.js'
9
- import { createMockPrivyClient } from '@/test/MockPrivyClient.js'
9
+ import {
10
+ createMockPrivyClient,
11
+ createMockPrivyWallet,
12
+ getMockAuthorizationContext,
13
+ } from '@/test/MockPrivyClient.js'
10
14
  import { getRandomAddress } from '@/test/utils.js'
11
15
  import { DefaultSmartWalletProvider } from '@/wallet/core/providers/smart/default/DefaultSmartWalletProvider.js'
12
16
  import { WalletProvider } from '@/wallet/core/providers/WalletProvider.js'
@@ -31,10 +35,11 @@ describe('WalletProvider', () => {
31
35
 
32
36
  describe('createSmartWallet', () => {
33
37
  it('should create a smart wallet and return deployment result', async () => {
34
- const hostedWalletProvider = new PrivyHostedWalletProvider(
35
- mockPrivyClient,
36
- mockChainManager,
37
- )
38
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
39
+ privyClient: mockPrivyClient,
40
+ authorizationContext: getMockAuthorizationContext(),
41
+ chainManager: mockChainManager,
42
+ })
38
43
  const smartWalletProvider = new DefaultSmartWalletProvider(
39
44
  mockChainManager,
40
45
  mockLendProvider,
@@ -84,10 +89,11 @@ describe('WalletProvider', () => {
84
89
  })
85
90
 
86
91
  it('should pass through deployment successes and failures', async () => {
87
- const hostedWalletProvider = new PrivyHostedWalletProvider(
88
- mockPrivyClient,
89
- mockChainManager,
90
- )
92
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
93
+ privyClient: mockPrivyClient,
94
+ authorizationContext: getMockAuthorizationContext(),
95
+ chainManager: mockChainManager,
96
+ })
91
97
  const smartWalletProvider = new DefaultSmartWalletProvider(
92
98
  mockChainManager,
93
99
  mockLendProvider,
@@ -138,10 +144,11 @@ describe('WalletProvider', () => {
138
144
  })
139
145
 
140
146
  it('should forward deploymentChainIds parameter', async () => {
141
- const hostedWalletProvider = new PrivyHostedWalletProvider(
142
- mockPrivyClient,
143
- mockChainManager,
144
- )
147
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
148
+ privyClient: mockPrivyClient,
149
+ authorizationContext: getMockAuthorizationContext(),
150
+ chainManager: mockChainManager,
151
+ })
145
152
  const smartWalletProvider = new DefaultSmartWalletProvider(
146
153
  mockChainManager,
147
154
  mockLendProvider,
@@ -190,10 +197,11 @@ describe('WalletProvider', () => {
190
197
  })
191
198
 
192
199
  it('should throw error if signer is not in signers array', async () => {
193
- const hostedWalletProvider = new PrivyHostedWalletProvider(
194
- mockPrivyClient,
195
- mockChainManager,
196
- )
200
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
201
+ privyClient: mockPrivyClient,
202
+ authorizationContext: getMockAuthorizationContext(),
203
+ chainManager: mockChainManager,
204
+ })
197
205
  const smartWalletProvider = new DefaultSmartWalletProvider(
198
206
  mockChainManager,
199
207
  mockLendProvider,
@@ -222,10 +230,11 @@ describe('WalletProvider', () => {
222
230
 
223
231
  describe('getSmartWallet', () => {
224
232
  it('should get a smart wallet with provided signer', async () => {
225
- const hostedWalletProvider = new PrivyHostedWalletProvider(
226
- mockPrivyClient,
227
- mockChainManager,
228
- )
233
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
234
+ privyClient: mockPrivyClient,
235
+ authorizationContext: getMockAuthorizationContext(),
236
+ chainManager: mockChainManager,
237
+ })
229
238
  const smartWalletProvider = new DefaultSmartWalletProvider(
230
239
  mockChainManager,
231
240
  mockLendProvider,
@@ -268,10 +277,11 @@ describe('WalletProvider', () => {
268
277
  })
269
278
 
270
279
  it('should throw error when getting smart wallet without required parameters', async () => {
271
- const hostedWalletProvider = new PrivyHostedWalletProvider(
272
- mockPrivyClient,
273
- mockChainManager,
274
- )
280
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
281
+ privyClient: mockPrivyClient,
282
+ authorizationContext: getMockAuthorizationContext(),
283
+ chainManager: mockChainManager,
284
+ })
275
285
  const smartWalletProvider = new DefaultSmartWalletProvider(
276
286
  mockChainManager,
277
287
  mockLendProvider,
@@ -301,10 +311,11 @@ describe('WalletProvider', () => {
301
311
 
302
312
  describe('hostedWalletToActionsWallet', () => {
303
313
  it('should convert a hosted wallet to an Actions wallet', async () => {
304
- const hostedWalletProvider = new PrivyHostedWalletProvider(
305
- mockPrivyClient,
306
- mockChainManager,
307
- )
314
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
315
+ privyClient: mockPrivyClient,
316
+ authorizationContext: getMockAuthorizationContext(),
317
+ chainManager: mockChainManager,
318
+ })
308
319
  const smartWalletProvider = new DefaultSmartWalletProvider(
309
320
  mockChainManager,
310
321
  mockLendProvider,
@@ -318,9 +329,7 @@ describe('WalletProvider', () => {
318
329
  'toActionsWallet',
319
330
  )
320
331
 
321
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
322
- chainType: 'ethereum',
323
- })
332
+ const privyWallet = createMockPrivyWallet()
324
333
  const hostedWallet = await walletProvider.hostedWalletToActionsWallet({
325
334
  walletId: privyWallet.id,
326
335
  address: privyWallet.address,
@@ -342,10 +351,11 @@ describe('WalletProvider', () => {
342
351
  'test-app-id',
343
352
  'test-app-secret',
344
353
  )
345
- const hostedWalletProvider = new PrivyHostedWalletProvider(
346
- mockPrivyClient,
347
- mockChainManager,
348
- )
354
+ const hostedWalletProvider = new PrivyHostedWalletProvider({
355
+ privyClient: mockPrivyClient,
356
+ authorizationContext: getMockAuthorizationContext(),
357
+ chainManager: mockChainManager,
358
+ })
349
359
  const smartWalletProvider = new DefaultSmartWalletProvider(
350
360
  mockChainManager,
351
361
  mockLendProvider,
@@ -356,9 +366,7 @@ describe('WalletProvider', () => {
356
366
  )
357
367
  const createSignerSpy = vi.spyOn(hostedWalletProvider, 'createSigner')
358
368
 
359
- const privyWallet = await mockPrivyClient.walletApi.createWallet({
360
- chainType: 'ethereum',
361
- })
369
+ const privyWallet = createMockPrivyWallet()
362
370
  const params = {
363
371
  walletId: privyWallet.id,
364
372
  address: privyWallet.address,
@@ -1,10 +1,13 @@
1
- import type { PrivyClient } from '@privy-io/server-auth'
1
+ import type { PrivyClient } from '@privy-io/node'
2
2
  import { unichain } from 'viem/chains'
3
3
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
4
4
 
5
5
  import type { ChainManager } from '@/services/ChainManager.js'
6
6
  import { MockChainManager } from '@/test/MockChainManager.js'
7
- import { createMockPrivyClient } from '@/test/MockPrivyClient.js'
7
+ import {
8
+ createMockPrivyClient,
9
+ getMockAuthorizationContext,
10
+ } from '@/test/MockPrivyClient.js'
8
11
  import { HostedWalletProviderRegistry } from '@/wallet/core/providers/hosted/registry/HostedWalletProviderRegistry.js'
9
12
  import { PrivyHostedWalletProvider } from '@/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js'
10
13
  import type { NodeOptionsMap } from '@/wallet/node/providers/hosted/types/index.js'
@@ -23,7 +26,11 @@ class TestHostedWalletProviderRegistry extends HostedWalletProviderRegistry<
23
26
  return Boolean((options as NodeOptionsMap['privy'])?.privyClient)
24
27
  },
25
28
  create({ chainManager }, options) {
26
- return new PrivyHostedWalletProvider(options.privyClient, chainManager)
29
+ return new PrivyHostedWalletProvider({
30
+ privyClient: options.privyClient,
31
+ chainManager,
32
+ authorizationContext: options.authorizationContext,
33
+ })
27
34
  },
28
35
  })
29
36
  }
@@ -48,9 +55,12 @@ describe('HostedWalletProviderRegistry', () => {
48
55
  const factory = registry.getFactory('privy')
49
56
 
50
57
  expect(factory.type).toBe('privy')
51
- expect(factory.validateOptions?.({ privyClient: mockPrivyClient })).toBe(
52
- true,
53
- )
58
+ expect(
59
+ factory.validateOptions?.({
60
+ privyClient: mockPrivyClient,
61
+ authorizationContext: getMockAuthorizationContext(),
62
+ }),
63
+ ).toBe(true)
54
64
  // Invalid shape should not pass validation
55
65
  expect(factory.validateOptions?.({})).toBe(false)
56
66
  })
@@ -61,7 +71,10 @@ describe('HostedWalletProviderRegistry', () => {
61
71
 
62
72
  const provider = factory.create(
63
73
  { chainManager: mockChainManager },
64
- { privyClient: mockPrivyClient },
74
+ {
75
+ privyClient: mockPrivyClient,
76
+ authorizationContext: getMockAuthorizationContext(),
77
+ },
65
78
  )
66
79
 
67
80
  expect(provider).toBeInstanceOf(PrivyHostedWalletProvider)
@@ -1,4 +1,4 @@
1
- import type { PrivyClient } from '@privy-io/server-auth'
1
+ import type { AuthorizationContext, PrivyClient } from '@privy-io/node'
2
2
  import type { LocalAccount } from 'viem'
3
3
  import { getAddress } from 'viem'
4
4
 
@@ -21,16 +21,29 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
21
21
  'privy',
22
22
  NodeToActionsOptionsMap
23
23
  > {
24
+ private readonly privyClient: PrivyClient
25
+ private readonly authorizationContext?: AuthorizationContext
26
+
24
27
  /**
25
28
  * Create a new Privy wallet provider
26
- * @param privyClient - Privy client instance
29
+ * @param params - Configuration parameters
30
+ * @param params.privyClient - Privy client instance
31
+ * @param params.chainManager - Chain manager for multi-chain operations
32
+ * @param params.lendProvider - Optional lend provider for DeFi operations
33
+ * @param params.authorizationContext - Optional authorization context for the Privy client.
34
+ * Used when Privy needs to sign requests.
35
+ * See https://docs.privy.io/controls/authorization-keys/using-owners/sign/automatic#using-the-authorization-context
36
+ * for more information on building and using the authorization context.
27
37
  */
28
- constructor(
29
- private readonly privyClient: PrivyClient,
30
- chainManager: ChainManager,
31
- lendProvider?: LendProvider<LendConfig>,
32
- ) {
33
- super(chainManager, lendProvider)
38
+ constructor(params: {
39
+ privyClient: PrivyClient
40
+ chainManager: ChainManager
41
+ lendProvider?: LendProvider<LendConfig>
42
+ authorizationContext?: AuthorizationContext
43
+ }) {
44
+ super(params.chainManager, params.lendProvider)
45
+ this.privyClient = params.privyClient
46
+ this.authorizationContext = params.authorizationContext
34
47
  }
35
48
 
36
49
  async toActionsWallet(
@@ -38,6 +51,7 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
38
51
  ): Promise<Wallet> {
39
52
  return PrivyWallet.create({
40
53
  privyClient: this.privyClient,
54
+ authorizationContext: this.authorizationContext,
41
55
  walletId: params.walletId,
42
56
  address: getAddress(params.address),
43
57
  chainManager: this.chainManager,
@@ -60,6 +74,10 @@ export class PrivyHostedWalletProvider extends HostedWalletProvider<
60
74
  async createSigner(
61
75
  params: NodeToActionsOptionsMap['privy'],
62
76
  ): Promise<LocalAccount> {
63
- return createSigner({ ...params, privyClient: this.privyClient })
77
+ return createSigner({
78
+ ...params,
79
+ privyClient: this.privyClient,
80
+ authorizationContext: this.authorizationContext,
81
+ })
64
82
  }
65
83
  }
@@ -5,7 +5,11 @@ import { describe, expect, it, vi } from 'vitest'
5
5
 
6
6
  import type { ChainManager } from '@/services/ChainManager.js'
7
7
  import { MockChainManager } from '@/test/MockChainManager.js'
8
- import { createMockPrivyClient } from '@/test/MockPrivyClient.js'
8
+ import {
9
+ createMockPrivyClient,
10
+ createMockPrivyWallet,
11
+ getMockAuthorizationContext,
12
+ } from '@/test/MockPrivyClient.js'
9
13
  import { getRandomAddress } from '@/test/utils.js'
10
14
  import type { LendConfig, LendProvider } from '@/types/lend/index.js'
11
15
  import { Wallet } from '@/wallet/core/wallets/abstract/Wallet.js'
@@ -20,12 +24,14 @@ describe('PrivyHostedWalletProvider', () => {
20
24
  describe('toActionsWallet', () => {
21
25
  it('toActionsWallet creates an ActionsWallet with correct address and signer', async () => {
22
26
  const privy = createMockPrivyClient('app', 'secret')
23
- const provider = new PrivyHostedWalletProvider(privy, mockChainManager)
24
-
25
- const hostedWallet = await privy.walletApi.createWallet({
26
- chainType: 'ethereum',
27
+ const provider = new PrivyHostedWalletProvider({
28
+ privyClient: privy,
29
+ authorizationContext: getMockAuthorizationContext(),
30
+ chainManager: mockChainManager,
27
31
  })
28
32
 
33
+ const hostedWallet = createMockPrivyWallet()
34
+
29
35
  const actionsWallet = await provider.toActionsWallet({
30
36
  walletId: hostedWallet.id,
31
37
  address: hostedWallet.address as Address,
@@ -38,17 +44,23 @@ describe('PrivyHostedWalletProvider', () => {
38
44
 
39
45
  it('forwards params to PrivyWallet.create', async () => {
40
46
  const privy = createMockPrivyClient('app', 'secret')
41
- const provider = new PrivyHostedWalletProvider(privy, mockChainManager)
47
+ const authorizationContext = getMockAuthorizationContext()
48
+ const provider = new PrivyHostedWalletProvider({
49
+ privyClient: privy,
50
+ authorizationContext,
51
+ chainManager: mockChainManager,
52
+ })
42
53
  const spy = vi.spyOn(PrivyWallet, 'create')
43
54
 
44
55
  const id = 'mock-wallet-123'
45
- const addr = getRandomAddress().toLowerCase()
56
+ const addr = getRandomAddress()
46
57
 
47
- await provider.toActionsWallet({ walletId: id, address: addr as Address })
58
+ await provider.toActionsWallet({ walletId: id, address: addr })
48
59
 
49
60
  expect(spy).toHaveBeenCalledWith(
50
61
  expect.objectContaining({
51
62
  privyClient: privy,
63
+ authorizationContext,
52
64
  walletId: id,
53
65
  address: getAddress(addr),
54
66
  chainManager: mockChainManager,
@@ -58,7 +70,11 @@ describe('PrivyHostedWalletProvider', () => {
58
70
 
59
71
  it('throws on invalid address', async () => {
60
72
  const privy = createMockPrivyClient('app', 'secret')
61
- const provider = new PrivyHostedWalletProvider(privy, mockChainManager)
73
+ const provider = new PrivyHostedWalletProvider({
74
+ privyClient: privy,
75
+ authorizationContext: getMockAuthorizationContext(),
76
+ chainManager: mockChainManager,
77
+ })
62
78
 
63
79
  await expect(
64
80
  provider.toActionsWallet({ walletId: 'id', address: '0x123' }),
@@ -68,19 +84,20 @@ describe('PrivyHostedWalletProvider', () => {
68
84
  it('forwards lendProvider when provided to constructor', async () => {
69
85
  const privy = createMockPrivyClient('app', 'secret')
70
86
  const mockLendProvider = {} as LendProvider<LendConfig>
71
- const provider = new PrivyHostedWalletProvider(
72
- privy,
73
- mockChainManager,
74
- mockLendProvider,
75
- )
87
+ const provider = new PrivyHostedWalletProvider({
88
+ privyClient: privy,
89
+ authorizationContext: getMockAuthorizationContext(),
90
+ chainManager: mockChainManager,
91
+ lendProvider: mockLendProvider,
92
+ })
76
93
  const spy = vi.spyOn(PrivyWallet, 'create')
77
94
 
78
95
  const id = 'mock-wallet-123'
79
- const addr = getRandomAddress().toLowerCase()
96
+ const addr = getRandomAddress()
80
97
 
81
98
  await provider.toActionsWallet({
82
99
  walletId: id,
83
- address: addr as Address,
100
+ address: addr,
84
101
  })
85
102
 
86
103
  expect(spy).toHaveBeenCalledWith(
@@ -94,15 +111,17 @@ describe('PrivyHostedWalletProvider', () => {
94
111
  describe('createSigner', () => {
95
112
  it('should create a LocalAccount with correct address', async () => {
96
113
  const privy = createMockPrivyClient('app', 'secret')
97
- const provider = new PrivyHostedWalletProvider(privy, mockChainManager)
98
-
99
- const hostedWallet = await privy.walletApi.createWallet({
100
- chainType: 'ethereum',
114
+ const provider = new PrivyHostedWalletProvider({
115
+ privyClient: privy,
116
+ authorizationContext: getMockAuthorizationContext(),
117
+ chainManager: mockChainManager,
101
118
  })
102
119
 
120
+ const hostedWallet = createMockPrivyWallet()
121
+
103
122
  const signer = await provider.createSigner({
104
123
  walletId: hostedWallet.id,
105
- address: hostedWallet.address as Address,
124
+ address: hostedWallet.address,
106
125
  })
107
126
 
108
127
  expect(signer.address).toBe(hostedWallet.address)
@@ -29,11 +29,12 @@ export class NodeHostedWalletProviderRegistry extends HostedWalletProviderRegist
29
29
  return Boolean((options as NodeOptionsMap['privy'])?.privyClient)
30
30
  },
31
31
  create({ chainManager, lendProvider }, options) {
32
- return new PrivyHostedWalletProvider(
33
- options.privyClient,
32
+ return new PrivyHostedWalletProvider({
33
+ privyClient: options.privyClient,
34
34
  chainManager,
35
35
  lendProvider,
36
- )
36
+ authorizationContext: options.authorizationContext,
37
+ })
37
38
  },
38
39
  })
39
40