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.
- package/CHANGELOG.md +12 -0
- package/_cjs/actions/ens/getEnsAddress.js +7 -7
- package/_cjs/actions/ens/getEnsAddress.js.map +1 -1
- package/_cjs/actions/ens/getEnsText.js +3 -6
- package/_cjs/actions/ens/getEnsText.js.map +1 -1
- package/_cjs/constants/abis.js +52 -1
- package/_cjs/constants/abis.js.map +1 -1
- package/_cjs/errors/rpc.js +113 -1
- package/_cjs/errors/rpc.js.map +1 -1
- package/_cjs/errors/version.js +1 -1
- package/_cjs/errors/version.js.map +1 -1
- package/_cjs/index.js +13 -6
- package/_cjs/index.js.map +1 -1
- package/_cjs/utils/buildRequest.js +14 -0
- package/_cjs/utils/buildRequest.js.map +1 -1
- package/_cjs/utils/ccip.js +7 -1
- package/_cjs/utils/ccip.js.map +1 -1
- package/_cjs/utils/ens/localBatchGatewayRequest.js +45 -0
- package/_cjs/utils/ens/localBatchGatewayRequest.js.map +1 -0
- package/_esm/account-abstraction/index.js +0 -1
- package/_esm/account-abstraction/index.js.map +1 -1
- package/_esm/actions/ens/getEnsAddress.js +7 -7
- package/_esm/actions/ens/getEnsAddress.js.map +1 -1
- package/_esm/actions/ens/getEnsText.js +3 -6
- package/_esm/actions/ens/getEnsText.js.map +1 -1
- package/_esm/constants/abis.js +51 -0
- package/_esm/constants/abis.js.map +1 -1
- package/_esm/errors/rpc.js +105 -0
- package/_esm/errors/rpc.js.map +1 -1
- package/_esm/errors/version.js +1 -1
- package/_esm/errors/version.js.map +1 -1
- package/_esm/experimental/index.js +0 -2
- package/_esm/experimental/index.js.map +1 -1
- package/_esm/index.js +1 -5
- package/_esm/index.js.map +1 -1
- package/_esm/utils/buildRequest.js +22 -1
- package/_esm/utils/buildRequest.js.map +1 -1
- package/_esm/utils/ccip.js +7 -1
- package/_esm/utils/ccip.js.map +1 -1
- package/_esm/utils/ens/localBatchGatewayRequest.js +41 -0
- package/_esm/utils/ens/localBatchGatewayRequest.js.map +1 -0
- package/_types/account-abstraction/index.d.ts +1 -1
- package/_types/account-abstraction/index.d.ts.map +1 -1
- package/_types/actions/ens/getEnsAddress.d.ts.map +1 -1
- package/_types/actions/ens/getEnsText.d.ts.map +1 -1
- package/_types/constants/abis.d.ts +36 -0
- package/_types/constants/abis.d.ts.map +1 -1
- package/_types/errors/rpc.d.ts +92 -1
- package/_types/errors/rpc.d.ts.map +1 -1
- package/_types/errors/version.d.ts +1 -1
- package/_types/errors/version.d.ts.map +1 -1
- package/_types/experimental/index.d.ts +10 -10
- package/_types/experimental/index.d.ts.map +1 -1
- package/_types/index.d.ts +5 -5
- package/_types/index.d.ts.map +1 -1
- package/_types/utils/buildRequest.d.ts +2 -2
- package/_types/utils/buildRequest.d.ts.map +1 -1
- package/_types/utils/ccip.d.ts.map +1 -1
- package/_types/utils/ens/localBatchGatewayRequest.d.ts +8 -0
- package/_types/utils/ens/localBatchGatewayRequest.d.ts.map +1 -0
- package/account-abstraction/index.ts +4 -4
- package/actions/ens/getEnsAddress.ts +7 -7
- package/actions/ens/getEnsText.ts +3 -6
- package/constants/abis.ts +52 -0
- package/errors/rpc.ts +159 -0
- package/errors/version.ts +1 -1
- package/experimental/index.ts +10 -10
- package/index.ts +29 -15
- package/package.json +1 -1
- package/utils/buildRequest.ts +46 -0
- package/utils/ccip.ts +10 -1
- package/utils/ens/localBatchGatewayRequest.ts +60 -0
package/utils/buildRequest.ts
CHANGED
@@ -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 =
|
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
|
+
}
|