@eth-optimism/actions-sdk 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/actions/lend/core/LendProvider.js +2 -2
  2. package/dist/actions/lend/core/LendProvider.js.map +1 -1
  3. package/dist/actions/shared/morpho/contracts.d.ts +1 -1
  4. package/dist/actions/shared/morpho/contracts.js +1 -1
  5. package/dist/actions/swap/core/SwapProvider.d.ts.map +1 -1
  6. package/dist/actions/swap/core/SwapProvider.js +4 -4
  7. package/dist/actions/swap/core/SwapProvider.js.map +1 -1
  8. package/dist/actions/swap/namespaces/WalletSwapNamespace.d.ts.map +1 -1
  9. package/dist/actions/swap/namespaces/WalletSwapNamespace.js +5 -2
  10. package/dist/actions/swap/namespaces/WalletSwapNamespace.js.map +1 -1
  11. package/dist/constants/supportedChains.d.ts +5790 -2
  12. package/dist/constants/supportedChains.d.ts.map +1 -1
  13. package/dist/constants/supportedChains.js +66 -20
  14. package/dist/constants/supportedChains.js.map +1 -1
  15. package/dist/core/error/errors.d.ts +24 -0
  16. package/dist/core/error/errors.d.ts.map +1 -1
  17. package/dist/core/error/errors.js +28 -0
  18. package/dist/core/error/errors.js.map +1 -1
  19. package/dist/index.d.ts +4 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +3 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/services/ChainManager.d.ts.map +1 -1
  24. package/dist/services/ChainManager.js +16 -0
  25. package/dist/services/ChainManager.js.map +1 -1
  26. package/dist/types/actions.d.ts +12 -7
  27. package/dist/types/actions.d.ts.map +1 -1
  28. package/dist/types/actions.js +22 -1
  29. package/dist/types/actions.js.map +1 -1
  30. package/dist/types/providers.d.ts +20 -6
  31. package/dist/types/providers.d.ts.map +1 -1
  32. package/dist/types/providers.js +12 -1
  33. package/dist/types/providers.js.map +1 -1
  34. package/dist/utils/__tests__/lendConfig.test.d.ts +2 -0
  35. package/dist/utils/__tests__/lendConfig.test.d.ts.map +1 -0
  36. package/dist/utils/__tests__/lendConfig.test.js +44 -0
  37. package/dist/utils/__tests__/lendConfig.test.js.map +1 -0
  38. package/dist/utils/lendConfig.d.ts +9 -0
  39. package/dist/utils/lendConfig.d.ts.map +1 -0
  40. package/dist/utils/lendConfig.js +12 -0
  41. package/dist/utils/lendConfig.js.map +1 -0
  42. package/dist/wallet/core/wallets/abstract/Wallet.d.ts +9 -0
  43. package/dist/wallet/core/wallets/abstract/Wallet.d.ts.map +1 -1
  44. package/dist/wallet/core/wallets/abstract/Wallet.js +11 -0
  45. package/dist/wallet/core/wallets/abstract/Wallet.js.map +1 -1
  46. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js +13 -0
  47. package/dist/wallet/core/wallets/abstract/__tests__/Wallet.spec.js.map +1 -1
  48. package/dist/wallet/core/wallets/eoa/EOAWallet.d.ts +12 -4
  49. package/dist/wallet/core/wallets/eoa/EOAWallet.d.ts.map +1 -1
  50. package/dist/wallet/core/wallets/eoa/EOAWallet.js +17 -12
  51. package/dist/wallet/core/wallets/eoa/EOAWallet.js.map +1 -1
  52. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js +37 -20
  53. package/dist/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.js.map +1 -1
  54. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +4 -1
  55. package/dist/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  56. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -1
  57. package/dist/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  58. package/dist/wallet/node/wallets/local/__tests__/LocalWallet.spec.js +2 -1
  59. package/dist/wallet/node/wallets/local/__tests__/LocalWallet.spec.js.map +1 -1
  60. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js +2 -1
  61. package/dist/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.js.map +1 -1
  62. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js +2 -1
  63. package/dist/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.js.map +1 -1
  64. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js +2 -1
  65. package/dist/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.js.map +1 -1
  66. package/package.json +1 -1
  67. package/src/actions/lend/core/LendProvider.ts +2 -2
  68. package/src/actions/shared/morpho/contracts.ts +1 -1
  69. package/src/actions/swap/core/SwapProvider.ts +4 -5
  70. package/src/actions/swap/namespaces/WalletSwapNamespace.ts +5 -4
  71. package/src/constants/supportedChains.ts +81 -21
  72. package/src/core/error/errors.ts +37 -0
  73. package/src/index.ts +13 -1
  74. package/src/services/ChainManager.ts +19 -0
  75. package/src/types/actions.ts +25 -10
  76. package/src/types/providers.ts +24 -6
  77. package/src/utils/__tests__/lendConfig.test.ts +52 -0
  78. package/src/utils/lendConfig.ts +17 -0
  79. package/src/wallet/core/wallets/abstract/Wallet.ts +12 -0
  80. package/src/wallet/core/wallets/abstract/__tests__/Wallet.spec.ts +15 -0
  81. package/src/wallet/core/wallets/eoa/EOAWallet.ts +17 -12
  82. package/src/wallet/core/wallets/eoa/__tests__/EOAWallet.spec.ts +43 -24
  83. package/src/wallet/node/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +4 -1
  84. package/src/wallet/node/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -1
  85. package/src/wallet/node/wallets/local/__tests__/LocalWallet.spec.ts +2 -1
  86. package/src/wallet/react/wallets/hosted/dynamic/__tests__/DynamicWallet.spec.ts +2 -1
  87. package/src/wallet/react/wallets/hosted/privy/__tests__/PrivyWallet.spec.ts +2 -1
  88. package/src/wallet/react/wallets/hosted/turnkey/__tests__/TurnkeyWallet.spec.ts +2 -1
@@ -120,10 +120,44 @@ describe('EOAWallet', () => {
120
120
 
121
121
  expect(createWalletClient).toHaveBeenCalledOnce()
122
122
  const callArgs = vi.mocked(createWalletClient).mock.calls[0][0]
123
- expect(callArgs.account).toBe(mockLocalAccount)
123
+ expect(callArgs.account).toMatchObject({
124
+ address: mockLocalAccount.address,
125
+ })
124
126
  expect(callArgs.chain).toBe(unichain)
125
127
  expect(walletClient).toBe(mockWalletClient)
126
128
  })
129
+
130
+ it('attaches a nonce manager so back-to-back sends get sequential nonces', async () => {
131
+ await wallet.walletClient(unichain.id)
132
+
133
+ const callArgs = vi.mocked(createWalletClient).mock.calls[0][0]
134
+ const account = callArgs.account as { nonceManager?: unknown }
135
+ expect(account.nonceManager).toMatchObject({
136
+ consume: expect.any(Function),
137
+ increment: expect.any(Function),
138
+ get: expect.any(Function),
139
+ reset: expect.any(Function),
140
+ })
141
+ })
142
+
143
+ it('respects a nonce manager already set on the signer', async () => {
144
+ const customNonceManager = {
145
+ consume: vi.fn(),
146
+ increment: vi.fn(),
147
+ get: vi.fn(),
148
+ reset: vi.fn(),
149
+ }
150
+ ;(mockLocalAccount as LocalAccount).nonceManager =
151
+ customNonceManager as unknown as LocalAccount['nonceManager']
152
+
153
+ await wallet.walletClient(unichain.id)
154
+
155
+ const callArgs = vi.mocked(createWalletClient).mock.calls[0][0]
156
+ const account = callArgs.account as { nonceManager?: unknown }
157
+ expect(account.nonceManager).toBe(customNonceManager)
158
+
159
+ delete (mockLocalAccount as LocalAccount).nonceManager
160
+ })
127
161
  })
128
162
 
129
163
  describe('send', () => {
@@ -191,13 +225,12 @@ describe('EOAWallet', () => {
191
225
  .mockResolvedValueOnce(mockReceipt2.transactionHash)
192
226
  .mockResolvedValueOnce(mockReceipt3.transactionHash)
193
227
 
228
+ // sendBatch performs exactly one inclusion wait per transaction (the
229
+ // wait inside `send()`). One mock per tx.
194
230
  vi.mocked(mockPublicClient.waitForTransactionReceipt)
195
231
  .mockResolvedValueOnce(mockReceipt)
196
- .mockResolvedValueOnce(mockReceipt)
197
- .mockResolvedValueOnce(mockReceipt2)
198
232
  .mockResolvedValueOnce(mockReceipt2)
199
233
  .mockResolvedValueOnce(mockReceipt3)
200
- .mockResolvedValueOnce(mockReceipt3)
201
234
  })
202
235
 
203
236
  it('should send multiple transactions sequentially', async () => {
@@ -226,33 +259,19 @@ describe('EOAWallet', () => {
226
259
  )
227
260
  })
228
261
 
229
- it('should wait for extra confirmations after each transaction', async () => {
262
+ it('waits for exactly one confirmation per transaction', async () => {
230
263
  await wallet.sendBatch(
231
264
  [mockTransactionData1, mockTransactionData2],
232
265
  unichain.id,
233
266
  )
234
267
 
235
- // Should be called twice per transaction:
236
- // 1. Initial wait in send()
237
- // 2. Extra confirmation wait (confirmations: 2) in sendBatch()
268
+ // One inclusion wait per tx, via `send()`.
238
269
  expect(mockPublicClient.waitForTransactionReceipt).toHaveBeenCalledTimes(
239
- 4,
270
+ 2,
240
271
  )
241
-
242
- // Check that extra confirmation wait was called with confirmations: 2
243
272
  expect(
244
273
  mockPublicClient.waitForTransactionReceipt,
245
- ).toHaveBeenNthCalledWith(2, {
246
- hash: mockReceipt.transactionHash,
247
- confirmations: 2,
248
- })
249
-
250
- expect(
251
- mockPublicClient.waitForTransactionReceipt,
252
- ).toHaveBeenNthCalledWith(4, {
253
- hash: mockReceipt2.transactionHash,
254
- confirmations: 2,
255
- })
274
+ ).not.toHaveBeenCalledWith(expect.objectContaining({ confirmations: 2 }))
256
275
  })
257
276
 
258
277
  it('should get public client for each transaction', async () => {
@@ -261,8 +280,8 @@ describe('EOAWallet', () => {
261
280
  unichain.id,
262
281
  )
263
282
 
264
- // Called twice per transaction (once in send, once for extra confirmation)
265
- expect(mockChainManager.getPublicClient).toHaveBeenCalledTimes(4)
283
+ // One getPublicClient call per transaction (via send()).
284
+ expect(mockChainManager.getPublicClient).toHaveBeenCalledTimes(2)
266
285
  expect(mockChainManager.getPublicClient).toHaveBeenCalledWith(unichain.id)
267
286
  })
268
287
 
@@ -115,7 +115,10 @@ describe('PrivyWallet', () => {
115
115
 
116
116
  expect(createWalletClient).toHaveBeenCalledOnce()
117
117
  const callArgs = vi.mocked(createWalletClient).mock.calls[0][0]
118
- expect(callArgs.account).toBe(mockLocalAccount)
118
+ expect(callArgs.account).toMatchObject({
119
+ address: mockLocalAccount.address,
120
+ })
121
+ expect(callArgs.account).toHaveProperty('nonceManager')
119
122
  expect(callArgs.chain).toBe(mockChainManager.getChain(unichain.id))
120
123
  expect(walletClient).toBe(mockWalletClient)
121
124
  })
@@ -97,7 +97,8 @@ describe('TurnkeyWallet', () => {
97
97
 
98
98
  expect(createWalletClient).toHaveBeenCalledOnce()
99
99
  const args = vi.mocked(createWalletClient).mock.calls[0][0]
100
- expect(args.account).toBe(mockLocalAccount)
100
+ expect(args.account).toMatchObject({ address: mockLocalAccount.address })
101
+ expect(args.account).toHaveProperty('nonceManager')
101
102
  expect(args.chain).toBe(mockChainManager.getChain(unichain.id))
102
103
  expect(walletClient).toBe(mockWalletClient)
103
104
  })
@@ -57,7 +57,8 @@ describe('LocalWallet', () => {
57
57
 
58
58
  expect(createWalletClient).toHaveBeenCalledOnce()
59
59
  const args = vi.mocked(createWalletClient).mock.calls[0][0]
60
- expect(args.account).toBe(mockAccount)
60
+ expect(args.account).toMatchObject({ address: mockAccount.address })
61
+ expect(args.account).toHaveProperty('nonceManager')
61
62
  expect(args.chain).toBe(mockChainManager.getChain(unichain.id))
62
63
  expect(walletClient).toBe(mockWalletClient)
63
64
  })
@@ -123,7 +123,8 @@ describe('DynamicWallet', () => {
123
123
 
124
124
  expect(createWalletClient).toHaveBeenCalledOnce()
125
125
  const args = vi.mocked(createWalletClient).mock.calls[0][0]
126
- expect(args.account).toBe(mockLocalAccount)
126
+ expect(args.account).toMatchObject({ address: mockLocalAccount.address })
127
+ expect(args.account).toHaveProperty('nonceManager')
127
128
  expect(args.chain).toBe(mockChainManager.getChain(unichain.id))
128
129
  expect(walletClient).toBe(mockWalletClient)
129
130
  })
@@ -102,7 +102,8 @@ describe('PrivyWallet (React)', () => {
102
102
 
103
103
  expect(createWalletClient).toHaveBeenCalledOnce()
104
104
  const args = vi.mocked(createWalletClient).mock.calls[0][0]
105
- expect(args.account).toBe(mockLocalAccount)
105
+ expect(args.account).toMatchObject({ address: mockLocalAccount.address })
106
+ expect(args.account).toHaveProperty('nonceManager')
106
107
  expect(args.chain).toBe(mockChainManager.getChain(unichain.id))
107
108
  expect(walletClient).toBe(mockWalletClient)
108
109
  })
@@ -92,7 +92,8 @@ describe('TurnkeyWallet', () => {
92
92
 
93
93
  expect(createWalletClient).toHaveBeenCalledOnce()
94
94
  const args = vi.mocked(createWalletClient).mock.calls[0][0]
95
- expect(args.account).toBe(mockLocalAccount)
95
+ expect(args.account).toMatchObject({ address: mockLocalAccount.address })
96
+ expect(args.account).toHaveProperty('nonceManager')
96
97
  expect(args.chain).toBe(mockChainManager.getChain(unichain.id))
97
98
  expect(walletClient).toBe(mockWalletClient)
98
99
  })