@eth-optimism/actions-sdk 0.0.2 → 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.
- package/dist/actions.test.js +22 -2
- package/dist/actions.test.js.map +1 -1
- package/dist/constants/assets.d.ts.map +1 -1
- package/dist/constants/assets.js +2 -1
- package/dist/constants/assets.js.map +1 -1
- package/dist/constants/supportedChains.d.ts +1 -1
- package/dist/constants/supportedChains.d.ts.map +1 -1
- package/dist/constants/supportedChains.js +2 -1
- package/dist/constants/supportedChains.js.map +1 -1
- package/dist/lend/namespaces/WalletLendNamespace.d.ts +8 -2
- package/dist/lend/namespaces/WalletLendNamespace.d.ts.map +1 -1
- package/dist/lend/namespaces/WalletLendNamespace.js +8 -2
- package/dist/lend/namespaces/WalletLendNamespace.js.map +1 -1
- package/dist/lend/providers/morpho/sdk.d.ts.map +1 -1
- package/dist/lend/providers/morpho/sdk.js +0 -1
- package/dist/lend/providers/morpho/sdk.js.map +1 -1
- package/dist/services/ChainManager.d.ts +1 -1
- package/dist/test/MockPrivyClient.d.ts +10 -49
- package/dist/test/MockPrivyClient.d.ts.map +1 -1
- package/dist/test/MockPrivyClient.js +13 -72
- package/dist/test/MockPrivyClient.js.map +1 -1
- package/dist/wallet/core/namespace/WalletNamespace.d.ts +13 -13
- package/dist/wallet/core/namespace/WalletNamespace.d.ts.map +1 -1
- package/dist/wallet/core/namespace/WalletNamespace.js +13 -13
- package/dist/wallet/core/namespace/WalletNamespace.js.map +1 -1
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js +55 -33
- package/dist/wallet/core/namespace/__tests__/WalletNamespace.spec.js.map +1 -1
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js +43 -15
- package/dist/wallet/core/providers/__tests__/WalletProvider.spec.js.map +1 -1
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js +14 -4
- package/dist/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts +16 -3
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js +18 -5
- package/dist/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.js.map +1 -1
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js +31 -12
- package/dist/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.d.ts.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js +6 -1
- package/dist/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.js.map +1 -1
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js +9 -1
- package/dist/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.js.map +1 -1
- package/dist/wallet/node/providers/hosted/types/index.d.ts +6 -1
- package/dist/wallet/node/providers/hosted/types/index.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts +10 -5
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js +11 -6
- package/dist/wallet/node/wallets/hosted/privy/PrivyWallet.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +26 -28
- package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js +12 -12
- package/dist/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.js.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts +6 -2
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.d.ts.map +1 -1
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js +10 -7
- package/dist/wallet/node/wallets/hosted/privy/utils/createSigner.js.map +1 -1
- package/package.json +2 -2
- package/src/actions.test.ts +24 -4
- package/src/constants/assets.ts +8 -1
- package/src/constants/supportedChains.ts +8 -1
- package/src/lend/namespaces/WalletLendNamespace.ts +8 -2
- package/src/lend/providers/morpho/sdk.ts +0 -1
- package/src/test/MockPrivyClient.ts +24 -91
- package/src/wallet/core/namespace/WalletNamespace.ts +13 -13
- package/src/wallet/core/namespace/__tests__/WalletNamespace.spec.ts +60 -61
- package/src/wallet/core/providers/__tests__/WalletProvider.spec.ts +47 -39
- package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts +20 -7
- package/src/wallet/node/providers/hosted/privy/PrivyHostedWalletProvider.ts +27 -9
- package/src/wallet/node/providers/hosted/privy/__tests__/PrivyHostedWalletProvider.spec.ts +40 -21
- package/src/wallet/node/providers/hosted/registry/NodeHostedWalletProviderRegistry.ts +4 -3
- package/src/wallet/node/providers/hosted/registry/__tests__/NodeHostedWalletProviderRegistry.spec.ts +17 -2
- package/src/wallet/node/providers/hosted/types/index.ts +9 -2
- package/src/wallet/node/wallets/hosted/privy/PrivyWallet.ts +14 -6
- package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +35 -40
- package/src/wallet/node/wallets/hosted/privy/utils/__tests__/createSigner.spec.ts +18 -14
- package/src/wallet/node/wallets/hosted/privy/utils/createSigner.ts +11 -9
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PrivyClient } from '@privy-io/
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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('
|
|
289
|
+
describe('toActionsWallet', () => {
|
|
288
290
|
it('should convert a hosted wallet to an Actions wallet', async () => {
|
|
289
|
-
const hostedWalletProvider = new PrivyHostedWalletProvider(
|
|
290
|
-
mockPrivyClient,
|
|
291
|
-
|
|
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 =
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
360
|
-
chainType: 'ethereum',
|
|
361
|
-
})
|
|
369
|
+
const privyWallet = createMockPrivyWallet()
|
|
362
370
|
const params = {
|
|
363
371
|
walletId: privyWallet.id,
|
|
364
372
|
address: privyWallet.address,
|
package/src/wallet/core/providers/hosted/registry/__tests__/HostedWalletProviderRegistry.spec.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import type { PrivyClient } from '@privy-io/
|
|
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 {
|
|
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(
|
|
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(
|
|
52
|
-
|
|
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
|
-
{
|
|
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/
|
|
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
|
|
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
|
-
|
|
30
|
-
chainManager: ChainManager
|
|
31
|
-
lendProvider?: LendProvider<LendConfig
|
|
32
|
-
|
|
33
|
-
|
|
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({
|
|
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 {
|
|
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(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
|
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()
|
|
56
|
+
const addr = getRandomAddress()
|
|
46
57
|
|
|
47
|
-
await provider.toActionsWallet({ walletId: id, address: addr
|
|
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(
|
|
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
|
-
|
|
74
|
-
|
|
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()
|
|
96
|
+
const addr = getRandomAddress()
|
|
80
97
|
|
|
81
98
|
await provider.toActionsWallet({
|
|
82
99
|
walletId: id,
|
|
83
|
-
address: addr
|
|
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(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
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
|
|