viem 2.26.4 → 2.27.0-canary-20250414080022

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 (72) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/_cjs/actions/ens/getEnsAddress.js +7 -7
  3. package/_cjs/actions/ens/getEnsAddress.js.map +1 -1
  4. package/_cjs/actions/ens/getEnsText.js +3 -6
  5. package/_cjs/actions/ens/getEnsText.js.map +1 -1
  6. package/_cjs/constants/abis.js +52 -1
  7. package/_cjs/constants/abis.js.map +1 -1
  8. package/_cjs/errors/rpc.js +113 -1
  9. package/_cjs/errors/rpc.js.map +1 -1
  10. package/_cjs/errors/version.js +1 -1
  11. package/_cjs/errors/version.js.map +1 -1
  12. package/_cjs/index.js +13 -6
  13. package/_cjs/index.js.map +1 -1
  14. package/_cjs/utils/buildRequest.js +14 -0
  15. package/_cjs/utils/buildRequest.js.map +1 -1
  16. package/_cjs/utils/ccip.js +7 -1
  17. package/_cjs/utils/ccip.js.map +1 -1
  18. package/_cjs/utils/ens/localBatchGatewayRequest.js +45 -0
  19. package/_cjs/utils/ens/localBatchGatewayRequest.js.map +1 -0
  20. package/_esm/account-abstraction/index.js +0 -1
  21. package/_esm/account-abstraction/index.js.map +1 -1
  22. package/_esm/actions/ens/getEnsAddress.js +7 -7
  23. package/_esm/actions/ens/getEnsAddress.js.map +1 -1
  24. package/_esm/actions/ens/getEnsText.js +3 -6
  25. package/_esm/actions/ens/getEnsText.js.map +1 -1
  26. package/_esm/constants/abis.js +51 -0
  27. package/_esm/constants/abis.js.map +1 -1
  28. package/_esm/errors/rpc.js +105 -0
  29. package/_esm/errors/rpc.js.map +1 -1
  30. package/_esm/errors/version.js +1 -1
  31. package/_esm/errors/version.js.map +1 -1
  32. package/_esm/experimental/index.js +0 -2
  33. package/_esm/experimental/index.js.map +1 -1
  34. package/_esm/index.js +1 -5
  35. package/_esm/index.js.map +1 -1
  36. package/_esm/utils/buildRequest.js +22 -1
  37. package/_esm/utils/buildRequest.js.map +1 -1
  38. package/_esm/utils/ccip.js +7 -1
  39. package/_esm/utils/ccip.js.map +1 -1
  40. package/_esm/utils/ens/localBatchGatewayRequest.js +41 -0
  41. package/_esm/utils/ens/localBatchGatewayRequest.js.map +1 -0
  42. package/_types/account-abstraction/index.d.ts +1 -1
  43. package/_types/account-abstraction/index.d.ts.map +1 -1
  44. package/_types/actions/ens/getEnsAddress.d.ts.map +1 -1
  45. package/_types/actions/ens/getEnsText.d.ts.map +1 -1
  46. package/_types/constants/abis.d.ts +36 -0
  47. package/_types/constants/abis.d.ts.map +1 -1
  48. package/_types/errors/rpc.d.ts +92 -1
  49. package/_types/errors/rpc.d.ts.map +1 -1
  50. package/_types/errors/version.d.ts +1 -1
  51. package/_types/errors/version.d.ts.map +1 -1
  52. package/_types/experimental/index.d.ts +10 -10
  53. package/_types/experimental/index.d.ts.map +1 -1
  54. package/_types/index.d.ts +5 -5
  55. package/_types/index.d.ts.map +1 -1
  56. package/_types/utils/buildRequest.d.ts +2 -2
  57. package/_types/utils/buildRequest.d.ts.map +1 -1
  58. package/_types/utils/ccip.d.ts.map +1 -1
  59. package/_types/utils/ens/localBatchGatewayRequest.d.ts +8 -0
  60. package/_types/utils/ens/localBatchGatewayRequest.d.ts.map +1 -0
  61. package/account-abstraction/index.ts +4 -4
  62. package/actions/ens/getEnsAddress.ts +7 -7
  63. package/actions/ens/getEnsText.ts +3 -6
  64. package/constants/abis.ts +52 -0
  65. package/errors/rpc.ts +159 -0
  66. package/errors/version.ts +1 -1
  67. package/experimental/index.ts +10 -10
  68. package/index.ts +29 -15
  69. package/package.json +1 -1
  70. package/utils/buildRequest.ts +46 -0
  71. package/utils/ccip.ts +10 -1
  72. package/utils/ens/localBatchGatewayRequest.ts +60 -0
@@ -7,8 +7,16 @@ import {
7
7
  type WebSocketRequestErrorType,
8
8
  } from '../errors/request.js'
9
9
  import {
10
+ AtomicReadyWalletRejectedUpgradeError,
11
+ type AtomicReadyWalletRejectedUpgradeErrorType,
12
+ AtomicityNotSupportedError,
13
+ type AtomicityNotSupportedErrorType,
14
+ BundleTooLargeError,
15
+ type BundleTooLargeErrorType,
10
16
  ChainDisconnectedError,
11
17
  type ChainDisconnectedErrorType,
18
+ DuplicateIdError,
19
+ type DuplicateIdErrorType,
12
20
  InternalRpcError,
13
21
  type InternalRpcErrorType,
14
22
  InvalidInputRpcError,
@@ -43,8 +51,14 @@ import {
43
51
  type TransactionRejectedRpcErrorType,
44
52
  UnauthorizedProviderError,
45
53
  type UnauthorizedProviderErrorType,
54
+ UnknownBundleIdError,
55
+ type UnknownBundleIdErrorType,
46
56
  UnknownRpcError,
47
57
  type UnknownRpcErrorType,
58
+ UnsupportedChainIdError,
59
+ type UnsupportedChainIdErrorType,
60
+ UnsupportedNonOptionalCapabilityError,
61
+ type UnsupportedNonOptionalCapabilityErrorType,
48
62
  UnsupportedProviderMethodError,
49
63
  type UnsupportedProviderMethodErrorType,
50
64
  UserRejectedRequestError,
@@ -63,8 +77,12 @@ import type { GetSocketRpcClientErrorType } from './rpc/socket.js'
63
77
  import { stringify } from './stringify.js'
64
78
 
65
79
  export type RequestErrorType =
80
+ | AtomicityNotSupportedErrorType
81
+ | AtomicReadyWalletRejectedUpgradeErrorType
82
+ | BundleTooLargeErrorType
66
83
  | ChainDisconnectedErrorType
67
84
  | CreateBatchSchedulerErrorType
85
+ | DuplicateIdErrorType
68
86
  | HttpRequestErrorType
69
87
  | InternalRpcErrorType
70
88
  | InvalidInputRpcErrorType
@@ -85,7 +103,10 @@ export type RequestErrorType =
85
103
  | TimeoutErrorType
86
104
  | TransactionRejectedRpcErrorType
87
105
  | UnauthorizedProviderErrorType
106
+ | UnknownBundleIdErrorType
88
107
  | UnknownRpcErrorType
108
+ | UnsupportedChainIdErrorType
109
+ | UnsupportedNonOptionalCapabilityErrorType
89
110
  | UnsupportedProviderMethodErrorType
90
111
  | UserRejectedRequestErrorType
91
112
  | WebSocketRequestErrorType
@@ -170,6 +191,7 @@ export function buildRequest<request extends (args: any) => Promise<any>>(
170
191
  // -32006
171
192
  case JsonRpcVersionUnsupportedError.code:
172
193
  throw new JsonRpcVersionUnsupportedError(err)
194
+
173
195
  // 4001
174
196
  case UserRejectedRequestError.code:
175
197
  throw new UserRejectedRequestError(err)
@@ -188,10 +210,34 @@ export function buildRequest<request extends (args: any) => Promise<any>>(
188
210
  // 4902
189
211
  case SwitchChainError.code:
190
212
  throw new SwitchChainError(err)
213
+
214
+ // 5700
215
+ case UnsupportedNonOptionalCapabilityError.code:
216
+ throw new UnsupportedNonOptionalCapabilityError(err)
217
+ // 5710
218
+ case UnsupportedChainIdError.code:
219
+ throw new UnsupportedChainIdError(err)
220
+ // 5720
221
+ case DuplicateIdError.code:
222
+ throw new DuplicateIdError(err)
223
+ // 5730
224
+ case UnknownBundleIdError.code:
225
+ throw new UnknownBundleIdError(err)
226
+ // 5740
227
+ case BundleTooLargeError.code:
228
+ throw new BundleTooLargeError(err)
229
+ // 5750
230
+ case AtomicReadyWalletRejectedUpgradeError.code:
231
+ throw new AtomicReadyWalletRejectedUpgradeError(err)
232
+ // 5760
233
+ case AtomicityNotSupportedError.code:
234
+ throw new AtomicityNotSupportedError(err)
235
+
191
236
  // CAIP-25: User Rejected Error
192
237
  // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes#rejected-caip-25
193
238
  case 5000:
194
239
  throw new UserRejectedRequestError(err)
240
+
195
241
  default:
196
242
  if (err_ instanceof BaseError) throw err_
197
243
  throw new UnknownRpcError(err as Error)
package/utils/ccip.ts CHANGED
@@ -24,6 +24,10 @@ import { encodeAbiParameters } from './abi/encodeAbiParameters.js'
24
24
  import { isAddressEqual } from './address/isAddressEqual.js'
25
25
  import { concat } from './data/concat.js'
26
26
  import { isHex } from './data/isHex.js'
27
+ import {
28
+ localBatchGatewayRequest,
29
+ localBatchGatewayUrl,
30
+ } from './ens/localBatchGatewayRequest.js'
27
31
  import { stringify } from './stringify.js'
28
32
 
29
33
  export const offchainLookupSignature = '0x556f1830'
@@ -84,7 +88,12 @@ export async function offchainLookup<chain extends Chain | undefined>(
84
88
  if (!isAddressEqual(to, sender))
85
89
  throw new OffchainLookupSenderMismatchError({ sender, to })
86
90
 
87
- const result = await ccipRequest_({ data: callData, sender, urls })
91
+ const result = urls.includes(localBatchGatewayUrl)
92
+ ? await localBatchGatewayRequest({
93
+ data: callData,
94
+ ccipRequest: ccipRequest_,
95
+ })
96
+ : await ccipRequest_({ data: callData, sender, urls })
88
97
 
89
98
  const { data: data_ } = await call(client, {
90
99
  blockNumber,
@@ -0,0 +1,60 @@
1
+ import { batchGatewayAbi } from '../../constants/abis.js'
2
+ import { solidityError } from '../../constants/solidity.js'
3
+ import type { Hex } from '../../types/misc.js'
4
+ import { decodeFunctionData } from '../abi/decodeFunctionData.js'
5
+ import { encodeErrorResult } from '../abi/encodeErrorResult.js'
6
+ import { encodeFunctionResult } from '../abi/encodeFunctionResult.js'
7
+ import type {
8
+ CcipRequestErrorType,
9
+ CcipRequestParameters,
10
+ CcipRequestReturnType,
11
+ } from '../ccip.js'
12
+
13
+ export const localBatchGatewayUrl = 'x-batch-gateway:true'
14
+
15
+ export async function localBatchGatewayRequest(parameters: {
16
+ data: Hex
17
+ ccipRequest: (
18
+ parameters: CcipRequestParameters,
19
+ ) => Promise<CcipRequestReturnType>
20
+ }): Promise<Hex> {
21
+ const { data, ccipRequest } = parameters
22
+
23
+ const {
24
+ args: [queries],
25
+ } = decodeFunctionData({ abi: batchGatewayAbi, data })
26
+
27
+ const failures: boolean[] = []
28
+ const responses: Hex[] = []
29
+ await Promise.all(
30
+ queries.map(async (query, i) => {
31
+ try {
32
+ responses[i] = await ccipRequest(query)
33
+ failures[i] = false
34
+ } catch (err) {
35
+ failures[i] = true
36
+ responses[i] = encodeError(err as CcipRequestErrorType)
37
+ }
38
+ }),
39
+ )
40
+
41
+ return encodeFunctionResult({
42
+ abi: batchGatewayAbi,
43
+ functionName: 'query',
44
+ result: [failures, responses],
45
+ })
46
+ }
47
+
48
+ function encodeError(error: CcipRequestErrorType): Hex {
49
+ if (error.name === 'HttpRequestError' && error.status)
50
+ return encodeErrorResult({
51
+ abi: batchGatewayAbi,
52
+ errorName: 'HttpError',
53
+ args: [error.status, error.shortMessage],
54
+ })
55
+ return encodeErrorResult({
56
+ abi: [solidityError],
57
+ errorName: 'Error',
58
+ args: ['shortMessage' in error ? error.shortMessage : error.message],
59
+ })
60
+ }