@chainlink/ccip-sdk 0.96.0 → 1.0.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.
- package/README.md +12 -9
- package/dist/api/index.d.ts +21 -8
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +42 -13
- package/dist/api/index.js.map +1 -1
- package/dist/api/types.d.ts +0 -2
- package/dist/api/types.d.ts.map +1 -1
- package/dist/aptos/exec.d.ts +2 -2
- package/dist/aptos/exec.d.ts.map +1 -1
- package/dist/aptos/exec.js.map +1 -1
- package/dist/aptos/hasher.d.ts.map +1 -1
- package/dist/aptos/hasher.js +1 -1
- package/dist/aptos/hasher.js.map +1 -1
- package/dist/aptos/index.d.ts +17 -16
- package/dist/aptos/index.d.ts.map +1 -1
- package/dist/aptos/index.js +42 -73
- package/dist/aptos/index.js.map +1 -1
- package/dist/aptos/logs.d.ts +2 -2
- package/dist/aptos/logs.d.ts.map +1 -1
- package/dist/aptos/types.d.ts +2 -19
- package/dist/aptos/types.d.ts.map +1 -1
- package/dist/aptos/types.js +0 -11
- package/dist/aptos/types.js.map +1 -1
- package/dist/chain.d.ts +538 -158
- package/dist/chain.d.ts.map +1 -1
- package/dist/chain.js +132 -19
- package/dist/chain.js.map +1 -1
- package/dist/commits.d.ts +4 -6
- package/dist/commits.d.ts.map +1 -1
- package/dist/commits.js +4 -4
- package/dist/commits.js.map +1 -1
- package/dist/errors/CCIPError.d.ts +33 -4
- package/dist/errors/CCIPError.d.ts.map +1 -1
- package/dist/errors/CCIPError.js +33 -4
- package/dist/errors/CCIPError.js.map +1 -1
- package/dist/errors/codes.d.ts +3 -0
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/errors/codes.js +3 -1
- package/dist/errors/codes.js.map +1 -1
- package/dist/errors/index.d.ts +4 -4
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +4 -4
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/recovery.d.ts.map +1 -1
- package/dist/errors/recovery.js +4 -1
- package/dist/errors/recovery.js.map +1 -1
- package/dist/errors/specialized.d.ts +1695 -120
- package/dist/errors/specialized.d.ts.map +1 -1
- package/dist/errors/specialized.js +1715 -123
- package/dist/errors/specialized.js.map +1 -1
- package/dist/errors/utils.d.ts.map +1 -1
- package/dist/errors/utils.js +0 -1
- package/dist/errors/utils.js.map +1 -1
- package/dist/evm/abi/OffRamp_2_0.d.ts +764 -0
- package/dist/evm/abi/OffRamp_2_0.d.ts.map +1 -0
- package/dist/evm/abi/OffRamp_2_0.js +744 -0
- package/dist/evm/abi/OffRamp_2_0.js.map +1 -0
- package/dist/evm/abi/OnRamp_2_0.d.ts +925 -0
- package/dist/evm/abi/OnRamp_2_0.d.ts.map +1 -0
- package/dist/evm/abi/OnRamp_2_0.js +992 -0
- package/dist/evm/abi/OnRamp_2_0.js.map +1 -0
- package/dist/evm/const.d.ts +12 -2
- package/dist/evm/const.d.ts.map +1 -1
- package/dist/evm/const.js +8 -2
- package/dist/evm/const.js.map +1 -1
- package/dist/evm/errors.d.ts.map +1 -1
- package/dist/evm/errors.js +7 -2
- package/dist/evm/errors.js.map +1 -1
- package/dist/evm/extra-args.d.ts.map +1 -1
- package/dist/evm/extra-args.js +5 -24
- package/dist/evm/extra-args.js.map +1 -1
- package/dist/evm/hasher.d.ts.map +1 -1
- package/dist/evm/hasher.js +23 -13
- package/dist/evm/hasher.js.map +1 -1
- package/dist/evm/index.d.ts +73 -16
- package/dist/evm/index.d.ts.map +1 -1
- package/dist/evm/index.js +241 -146
- package/dist/evm/index.js.map +1 -1
- package/dist/evm/logs.d.ts +1 -1
- package/dist/evm/logs.js +1 -1
- package/dist/evm/messages.d.ts +59 -5
- package/dist/evm/messages.d.ts.map +1 -1
- package/dist/evm/messages.js +210 -0
- package/dist/evm/messages.js.map +1 -1
- package/dist/evm/offchain.d.ts +1 -14
- package/dist/evm/offchain.d.ts.map +1 -1
- package/dist/evm/offchain.js +1 -133
- package/dist/evm/offchain.js.map +1 -1
- package/dist/evm/types.d.ts +7 -2
- package/dist/evm/types.d.ts.map +1 -1
- package/dist/evm/types.js +22 -1
- package/dist/evm/types.js.map +1 -1
- package/dist/execution.d.ts +62 -22
- package/dist/execution.d.ts.map +1 -1
- package/dist/execution.js +98 -61
- package/dist/execution.js.map +1 -1
- package/dist/extra-args.d.ts +13 -3
- package/dist/extra-args.d.ts.map +1 -1
- package/dist/extra-args.js +13 -3
- package/dist/extra-args.js.map +1 -1
- package/dist/gas.d.ts +25 -2
- package/dist/gas.d.ts.map +1 -1
- package/dist/gas.js +30 -4
- package/dist/gas.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/offchain.d.ts +23 -6
- package/dist/offchain.d.ts.map +1 -1
- package/dist/offchain.js +92 -17
- package/dist/offchain.js.map +1 -1
- package/dist/requests.d.ts +85 -14
- package/dist/requests.d.ts.map +1 -1
- package/dist/requests.js +99 -17
- package/dist/requests.js.map +1 -1
- package/dist/selectors.d.ts.map +1 -1
- package/dist/selectors.js +12 -0
- package/dist/selectors.js.map +1 -1
- package/dist/shared/bcs-codecs.d.ts +61 -0
- package/dist/shared/bcs-codecs.d.ts.map +1 -0
- package/dist/shared/bcs-codecs.js +102 -0
- package/dist/shared/bcs-codecs.js.map +1 -0
- package/dist/shared/constants.d.ts +3 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +3 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/solana/exec.d.ts +2 -2
- package/dist/solana/exec.d.ts.map +1 -1
- package/dist/solana/exec.js.map +1 -1
- package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.d.ts +1 -1
- package/dist/solana/idl/1.6.0/BASE_TOKEN_POOL.js +1 -1
- package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.d.ts +1 -1
- package/dist/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.js +1 -1
- package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.d.ts +1 -1
- package/dist/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.js +1 -1
- package/dist/solana/idl/1.6.0/CCIP_COMMON.d.ts +16 -1
- package/dist/solana/idl/1.6.0/CCIP_COMMON.d.ts.map +1 -1
- package/dist/solana/idl/1.6.0/CCIP_COMMON.js +16 -1
- package/dist/solana/idl/1.6.0/CCIP_COMMON.js.map +1 -1
- package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.d.ts +1 -1
- package/dist/solana/idl/1.6.0/CCIP_OFFRAMP.js +1 -1
- package/dist/solana/idl/1.6.0/CCIP_ROUTER.d.ts +1 -1
- package/dist/solana/idl/1.6.0/CCIP_ROUTER.js +1 -1
- package/dist/solana/index.d.ts +85 -24
- package/dist/solana/index.d.ts.map +1 -1
- package/dist/solana/index.js +69 -37
- package/dist/solana/index.js.map +1 -1
- package/dist/solana/offchain.d.ts +1 -13
- package/dist/solana/offchain.d.ts.map +1 -1
- package/dist/solana/offchain.js +1 -66
- package/dist/solana/offchain.js.map +1 -1
- package/dist/solana/utils.d.ts +4 -4
- package/dist/solana/utils.d.ts.map +1 -1
- package/dist/solana/utils.js +1 -1
- package/dist/solana/utils.js.map +1 -1
- package/dist/sui/hasher.d.ts.map +1 -1
- package/dist/sui/hasher.js +1 -1
- package/dist/sui/hasher.js.map +1 -1
- package/dist/sui/index.d.ts +18 -18
- package/dist/sui/index.d.ts.map +1 -1
- package/dist/sui/index.js +38 -39
- package/dist/sui/index.js.map +1 -1
- package/dist/sui/manuallyExec/encoder.d.ts +2 -2
- package/dist/sui/manuallyExec/encoder.d.ts.map +1 -1
- package/dist/sui/manuallyExec/encoder.js.map +1 -1
- package/dist/sui/manuallyExec/index.d.ts +2 -2
- package/dist/sui/manuallyExec/index.d.ts.map +1 -1
- package/dist/ton/exec.d.ts +3 -3
- package/dist/ton/exec.d.ts.map +1 -1
- package/dist/ton/exec.js +1 -1
- package/dist/ton/exec.js.map +1 -1
- package/dist/ton/index.d.ts +14 -22
- package/dist/ton/index.d.ts.map +1 -1
- package/dist/ton/index.js +26 -35
- package/dist/ton/index.js.map +1 -1
- package/dist/ton/types.d.ts +3 -5
- package/dist/ton/types.d.ts.map +1 -1
- package/dist/ton/types.js.map +1 -1
- package/dist/types.d.ts +55 -20
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -1
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +65 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +74 -2
- package/dist/utils.js.map +1 -1
- package/package.json +14 -10
- package/src/api/index.ts +53 -17
- package/src/api/types.ts +0 -2
- package/src/aptos/exec.ts +2 -2
- package/src/aptos/hasher.ts +1 -1
- package/src/aptos/index.ts +55 -100
- package/src/aptos/logs.ts +2 -2
- package/src/aptos/types.ts +2 -15
- package/src/chain.ts +594 -171
- package/src/commits.ts +9 -9
- package/src/errors/CCIPError.ts +33 -4
- package/src/errors/codes.ts +3 -1
- package/src/errors/index.ts +4 -0
- package/src/errors/recovery.ts +7 -1
- package/src/errors/specialized.ts +1726 -130
- package/src/errors/utils.ts +0 -1
- package/src/evm/abi/OffRamp_2_0.ts +743 -0
- package/src/evm/abi/OnRamp_2_0.ts +991 -0
- package/src/evm/const.ts +10 -3
- package/src/evm/errors.ts +6 -2
- package/src/evm/extra-args.ts +4 -21
- package/src/evm/hasher.ts +30 -18
- package/src/evm/index.ts +314 -176
- package/src/evm/logs.ts +1 -1
- package/src/evm/messages.ts +323 -11
- package/src/evm/offchain.ts +2 -191
- package/src/evm/types.ts +20 -2
- package/src/execution.ts +125 -86
- package/src/extra-args.ts +13 -3
- package/src/gas.ts +29 -3
- package/src/index.ts +10 -3
- package/src/offchain.ts +125 -28
- package/src/requests.ts +114 -19
- package/src/selectors.ts +12 -0
- package/src/shared/bcs-codecs.ts +132 -0
- package/src/shared/constants.ts +2 -0
- package/src/solana/exec.ts +4 -4
- package/src/solana/idl/1.6.0/BASE_TOKEN_POOL.ts +2 -2
- package/src/solana/idl/1.6.0/BURN_MINT_TOKEN_POOL.ts +2 -2
- package/src/solana/idl/1.6.0/CCIP_CCTP_TOKEN_POOL.ts +2 -2
- package/src/solana/idl/1.6.0/CCIP_COMMON.ts +32 -2
- package/src/solana/idl/1.6.0/CCIP_OFFRAMP.ts +2 -2
- package/src/solana/idl/1.6.0/CCIP_ROUTER.ts +2 -2
- package/src/solana/index.ts +110 -85
- package/src/solana/offchain.ts +3 -100
- package/src/solana/utils.ts +8 -5
- package/src/sui/hasher.ts +1 -1
- package/src/sui/index.ts +55 -59
- package/src/sui/manuallyExec/encoder.ts +2 -2
- package/src/sui/manuallyExec/index.ts +2 -2
- package/src/ton/exec.ts +4 -7
- package/src/ton/index.ts +45 -53
- package/src/ton/types.ts +4 -7
- package/src/types.ts +81 -37
- package/src/utils.ts +73 -2
- package/dist/aptos/utils.d.ts +0 -12
- package/dist/aptos/utils.d.ts.map +0 -1
- package/dist/aptos/utils.js +0 -15
- package/dist/aptos/utils.js.map +0 -1
- package/src/aptos/utils.ts +0 -24
package/dist/extra-args.js
CHANGED
|
@@ -7,7 +7,7 @@ export const EVMExtraArgsV1Tag = id('CCIP EVMExtraArgsV1').substring(0, 10);
|
|
|
7
7
|
/** Tag identifier for EVMExtraArgsV2 encoding. */
|
|
8
8
|
export const EVMExtraArgsV2Tag = id('CCIP EVMExtraArgsV2').substring(0, 10);
|
|
9
9
|
/** Tag identifier for GenericExtraArgsV3 encoding (tightly packed binary format). */
|
|
10
|
-
export const GenericExtraArgsV3Tag = '
|
|
10
|
+
export const GenericExtraArgsV3Tag = id('CCIP GenericExtraArgsV3').substring(0, 10);
|
|
11
11
|
/** Tag identifier for SVMExtraArgsV1 encoding. */
|
|
12
12
|
export const SVMExtraArgsV1Tag = id('CCIP SVMExtraArgsV1').substring(0, 10);
|
|
13
13
|
/** Tag identifier for SuiExtraArgsV1 encoding. */
|
|
@@ -16,6 +16,7 @@ export const SuiExtraArgsV1Tag = id('CCIP SuiExtraArgsV1').substring(0, 10);
|
|
|
16
16
|
* Encodes extra arguments for CCIP messages.
|
|
17
17
|
* The args are *to* a dest network, but are encoded as a message *from* this source chain.
|
|
18
18
|
* E.g. Solana uses Borsh to encode extraArgs in its produced requests, even those targeting EVM.
|
|
19
|
+
*
|
|
19
20
|
* @param args - Extra arguments to encode
|
|
20
21
|
* @param from - Source chain family for encoding format (defaults to EVM)
|
|
21
22
|
* @returns Encoded extra arguments as hex string
|
|
@@ -23,12 +24,16 @@ export const SuiExtraArgsV1Tag = id('CCIP SuiExtraArgsV1').substring(0, 10);
|
|
|
23
24
|
*
|
|
24
25
|
* @example
|
|
25
26
|
* ```typescript
|
|
27
|
+
* import { encodeExtraArgs } from '@chainlink/ccip-sdk'
|
|
28
|
+
*
|
|
26
29
|
* const encoded = encodeExtraArgs({
|
|
27
30
|
* gasLimit: 200_000n,
|
|
28
31
|
* allowOutOfOrderExecution: true,
|
|
29
32
|
* })
|
|
30
|
-
* //
|
|
33
|
+
* console.log('Encoded:', encoded) // '0x181dcf10...'
|
|
31
34
|
* ```
|
|
35
|
+
*
|
|
36
|
+
* @see {@link decodeExtraArgs} - Decode extra arguments from bytes
|
|
32
37
|
*/
|
|
33
38
|
export function encodeExtraArgs(args, from = ChainFamily.EVM) {
|
|
34
39
|
const chain = supportedChains[from];
|
|
@@ -46,11 +51,16 @@ export function encodeExtraArgs(args, from = ChainFamily.EVM) {
|
|
|
46
51
|
*
|
|
47
52
|
* @example
|
|
48
53
|
* ```typescript
|
|
54
|
+
* import { decodeExtraArgs } from '@chainlink/ccip-sdk'
|
|
55
|
+
*
|
|
49
56
|
* const decoded = decodeExtraArgs('0x181dcf10...')
|
|
50
57
|
* if (decoded?._tag === 'EVMExtraArgsV2') {
|
|
51
|
-
* console.log(
|
|
58
|
+
* console.log('Gas limit:', decoded.gasLimit)
|
|
59
|
+
* console.log('Out of order:', decoded.allowOutOfOrderExecution)
|
|
52
60
|
* }
|
|
53
61
|
* ```
|
|
62
|
+
*
|
|
63
|
+
* @see {@link encodeExtraArgs} - Encode extra arguments to bytes
|
|
54
64
|
*/
|
|
55
65
|
export function decodeExtraArgs(data, from) {
|
|
56
66
|
if (!data || data === '')
|
package/dist/extra-args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extra-args.js","sourceRoot":"","sources":["../src/extra-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE3C,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAiB,CAAA;AAC3F,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAiB,CAAA;AAC3F,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAAG,
|
|
1
|
+
{"version":3,"file":"extra-args.js","sourceRoot":"","sources":["../src/extra-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE3C,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAiB,CAAA;AAC3F,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAiB,CAAA;AAC3F,qFAAqF;AACrF,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC,yBAAyB,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAiB,CAAA;AACnG,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAiB,CAAA;AAC3F,kDAAkD;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAiB,CAAA;AAgI3F;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe,CAAC,IAAe,EAAE,OAAoB,WAAW,CAAC,GAAG;IAClF,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,+BAA+B,CAAC,IAAI,CAAC,CAAA;IAC3D,OAAO,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AACpC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAe,EACf,IAAkB;IAQlB,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,EAAE;QAAE,OAAM;IAChC,IAAI,MAAM,CAAA;IACV,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,+BAA+B,CAAC,IAAI,CAAC,CAAA;QAC3D,MAAM,GAAG,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IACzC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QAC3C,IAAI,OAAO;YAAE,OAAO,OAAO,CAAA;IAC7B,CAAC;IACD,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAA;AACzD,CAAC"}
|
package/dist/gas.d.ts
CHANGED
|
@@ -42,11 +42,34 @@ export type EstimateReceiveExecutionOpts = {
|
|
|
42
42
|
};
|
|
43
43
|
/**
|
|
44
44
|
* Estimate CCIP gasLimit needed to execute a request on a contract receiver.
|
|
45
|
-
*
|
|
46
|
-
* @
|
|
45
|
+
*
|
|
46
|
+
* @param opts - {@link EstimateReceiveExecutionOpts} for estimation
|
|
47
|
+
* @returns Estimated gasLimit
|
|
48
|
+
*
|
|
47
49
|
* @throws {@link CCIPMethodUnsupportedError} if dest chain doesn't support estimation
|
|
48
50
|
* @throws {@link CCIPContractTypeInvalidError} if routerOrRamp is not a valid contract type
|
|
49
51
|
* @throws {@link CCIPTokenDecimalsInsufficientError} if dest token has insufficient decimals
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* import { estimateReceiveExecution, EVMChain } from '@chainlink/ccip-sdk'
|
|
56
|
+
*
|
|
57
|
+
* const source = await EVMChain.fromUrl('https://rpc.sepolia.org')
|
|
58
|
+
* const dest = await EVMChain.fromUrl('https://rpc.fuji.avax.network')
|
|
59
|
+
*
|
|
60
|
+
* const gasLimit = await estimateReceiveExecution({
|
|
61
|
+
* source,
|
|
62
|
+
* dest,
|
|
63
|
+
* routerOrRamp: '0xRouter...',
|
|
64
|
+
* message: {
|
|
65
|
+
* sender: '0x...',
|
|
66
|
+
* receiver: '0x...',
|
|
67
|
+
* data: '0x...',
|
|
68
|
+
* tokenAmounts: [],
|
|
69
|
+
* },
|
|
70
|
+
* })
|
|
71
|
+
* console.log('Estimated gas:', gasLimit)
|
|
72
|
+
* ```
|
|
50
73
|
*/
|
|
51
74
|
export declare function estimateReceiveExecution({ source, dest, routerOrRamp, message, }: EstimateReceiveExecutionOpts): Promise<number>;
|
|
52
75
|
//# sourceMappingURL=gas.d.ts.map
|
package/dist/gas.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../src/gas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqC,MAAM,QAAQ,CAAA;AAE1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"gas.d.ts","sourceRoot":"","sources":["../src/gas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAqC,MAAM,QAAQ,CAAA;AAE1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAUvC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAA;IAChB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,wDAAwD;IACxD,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;QACvB,MAAM,EAAE,MAAM,CAAA;KACf,GAAG,CACA;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GACjB;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CACvF,CAAC,EAAE,CAAA;CACL,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,uDAAuD;IACvD,MAAM,EAAE,KAAK,CAAA;IACb,+DAA+D;IAC/D,IAAI,EAAE,KAAK,CAAA;IACX,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAA;IACpB,8BAA8B;IAC9B,OAAO,EAAE,oBAAoB,CAAA;CAC9B,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,wBAAwB,CAAC,EAC7C,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,OAAO,GACR,EAAE,4BAA4B,mBAgE9B"}
|
package/dist/gas.js
CHANGED
|
@@ -1,14 +1,37 @@
|
|
|
1
1
|
import { formatUnits, hexlify, randomBytes } from 'ethers';
|
|
2
|
-
import { CCIPContractTypeInvalidError, CCIPMethodUnsupportedError, CCIPTokenDecimalsInsufficientError, } from "./errors/index.js";
|
|
2
|
+
import { CCIPContractTypeInvalidError, CCIPMethodUnsupportedError, CCIPOnRampRequiredError, CCIPTokenDecimalsInsufficientError, } from "./errors/index.js";
|
|
3
3
|
import { discoverOffRamp } from "./execution.js";
|
|
4
4
|
import { sourceToDestTokenAddresses } from "./requests.js";
|
|
5
5
|
/**
|
|
6
6
|
* Estimate CCIP gasLimit needed to execute a request on a contract receiver.
|
|
7
|
-
*
|
|
8
|
-
* @
|
|
7
|
+
*
|
|
8
|
+
* @param opts - {@link EstimateReceiveExecutionOpts} for estimation
|
|
9
|
+
* @returns Estimated gasLimit
|
|
10
|
+
*
|
|
9
11
|
* @throws {@link CCIPMethodUnsupportedError} if dest chain doesn't support estimation
|
|
10
12
|
* @throws {@link CCIPContractTypeInvalidError} if routerOrRamp is not a valid contract type
|
|
11
13
|
* @throws {@link CCIPTokenDecimalsInsufficientError} if dest token has insufficient decimals
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { estimateReceiveExecution, EVMChain } from '@chainlink/ccip-sdk'
|
|
18
|
+
*
|
|
19
|
+
* const source = await EVMChain.fromUrl('https://rpc.sepolia.org')
|
|
20
|
+
* const dest = await EVMChain.fromUrl('https://rpc.fuji.avax.network')
|
|
21
|
+
*
|
|
22
|
+
* const gasLimit = await estimateReceiveExecution({
|
|
23
|
+
* source,
|
|
24
|
+
* dest,
|
|
25
|
+
* routerOrRamp: '0xRouter...',
|
|
26
|
+
* message: {
|
|
27
|
+
* sender: '0x...',
|
|
28
|
+
* receiver: '0x...',
|
|
29
|
+
* data: '0x...',
|
|
30
|
+
* tokenAmounts: [],
|
|
31
|
+
* },
|
|
32
|
+
* })
|
|
33
|
+
* console.log('Estimated gas:', gasLimit)
|
|
34
|
+
* ```
|
|
12
35
|
*/
|
|
13
36
|
export async function estimateReceiveExecution({ source, dest, routerOrRamp, message, }) {
|
|
14
37
|
if (!dest.estimateReceiveExecution)
|
|
@@ -28,7 +51,10 @@ export async function estimateReceiveExecution({ source, dest, routerOrRamp, mes
|
|
|
28
51
|
if (!tnv[0].includes('OffRamp'))
|
|
29
52
|
throw new CCIPContractTypeInvalidError(routerOrRamp, tnv[2], ['OffRamp']);
|
|
30
53
|
offRamp = routerOrRamp;
|
|
31
|
-
|
|
54
|
+
const onRamps = await dest.getOnRampsForOffRamp(offRamp, source.network.chainSelector);
|
|
55
|
+
if (!onRamps.length)
|
|
56
|
+
throw new CCIPOnRampRequiredError();
|
|
57
|
+
onRamp = onRamps[onRamps.length - 1];
|
|
32
58
|
}
|
|
33
59
|
catch {
|
|
34
60
|
throw sourceErr; // re-throw original error
|
package/dist/gas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas.js","sourceRoot":"","sources":["../src/gas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAG1E,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,kCAAkC,GACnC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAyC1D
|
|
1
|
+
{"version":3,"file":"gas.js","sourceRoot":"","sources":["../src/gas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAG1E,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,EACvB,kCAAkC,GACnC,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAyC1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAC7C,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,OAAO,GACsB;IAC7B,IAAI,CAAC,IAAI,CAAC,wBAAwB;QAChC,MAAM,IAAI,0BAA0B,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAA;IAEzF,IAAI,MAAM,EAAE,OAAe,CAAA;IAC3B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;QACrD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5B,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;;YAC/E,MAAM,GAAG,YAAY,CAAA;QAC1B,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/D,CAAC;IAAC,OAAO,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;YACnD,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC7B,MAAM,IAAI,4BAA4B,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;YAC3E,OAAO,GAAG,YAAY,CAAA;YACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;YACtF,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,MAAM,IAAI,uBAAuB,EAAE,CAAA;YACxD,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,SAAS,CAAA,CAAC,0BAA0B;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CACxC,CAAC,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC5C,MAAM,WAAW,GACf,kBAAkB,IAAI,EAAE;YACtB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,MAAM,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;QACtF,MAAM,kBAAkB,GACtB,OAAO,IAAI,EAAE;YACX,CAAC,CAAC,EAAE,CAAC,KAAK;YACV,CAAC,CAAC,EAAE,CAAC,kBAAkB;gBACrB,CAAC,CAAC,EAAE,CAAC,kBAAkB;gBACvB,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;QACxE,MAAM,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnF,MAAM,CAAC,YAAY,CAAC,kBAAkB,CAAC;YACvC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC;SAChD,CAAC,CAAA;QACF,MAAM,UAAU,GACd,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,CAAA;QACpF,IAAI,UAAU,KAAK,EAAE;YACnB,MAAM,IAAI,kCAAkC,CAC1C,WAAW,CAAC,gBAAgB,EAC5B,YAAY,EACZ,IAAI,CAAC,OAAO,CAAC,IAAI,EACjB,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAChD,CAAA;QACH,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;IACpE,CAAC,CAAC,CACH,CAAA;IACD,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO;QACP,OAAO,EAAE;YACP,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACxD,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa;YACjD,gBAAgB;SACjB;KACF,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,14 +7,15 @@
|
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
9
|
export type { APICCIPRequestMetadata, APIErrorResponse, CCIPAPIClientContext, LaneLatencyResponse, } from './api/index.ts';
|
|
10
|
-
export { CCIPAPIClient, DEFAULT_API_BASE_URL } from './api/index.ts';
|
|
10
|
+
export { CCIPAPIClient, DEFAULT_API_BASE_URL, SDK_VERSION, SDK_VERSION_HEADER, } from './api/index.ts';
|
|
11
11
|
export type { ApiRetryConfig, Chain, ChainContext, ChainGetter, ChainStatic, GetBalanceOpts, LogFilter, RateLimiterState, RegistryTokenConfig, TokenInfo, TokenPoolConfig, TokenPoolRemote, } from './chain.ts';
|
|
12
12
|
export { DEFAULT_API_RETRY_CONFIG } from './chain.ts';
|
|
13
13
|
export { calculateManualExecProof, discoverOffRamp } from './execution.ts';
|
|
14
14
|
export { type EVMExtraArgsV1, type EVMExtraArgsV2, type ExtraArgs, type SVMExtraArgsV1, type SuiExtraArgsV1, decodeExtraArgs, encodeExtraArgs, } from './extra-args.ts';
|
|
15
15
|
export { estimateReceiveExecution } from './gas.ts';
|
|
16
|
+
export { getOffchainTokenData } from './offchain.ts';
|
|
16
17
|
export { decodeMessage, getMessagesForSender, sourceToDestTokenAddresses } from './requests.ts';
|
|
17
|
-
export { type
|
|
18
|
+
export { type CCIPExecution, type CCIPMessage, type CCIPRequest, type CCIPVerifications, type ChainLog, type ChainTransaction, type CommitReport, type ExecutionInput, type ExecutionReceipt, type Lane, type Logger, type MessageInput, type NetworkInfo, type OffchainTokenData, type WithLogger, CCIPVersion, ExecutionState, IntentStatus, MessageStatus, } from './types.ts';
|
|
18
19
|
export type { WithRetryConfig } from './utils.ts';
|
|
19
20
|
export { bigIntReplacer, bigIntReviver, bytesToBuffer, decodeAddress, getDataBytes, isSupportedTxHash, networkInfo, withRetry, } from './utils.ts';
|
|
20
21
|
export { type CCIPExplorerLinks, type ExplorerLinkType, CCIP_EXPLORER_BASE_URL, getCCIPExplorerLinks, getCCIPExplorerUrl, } from './explorer.ts';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AACvB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,YAAY,EACV,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAEvB,YAAY,EACV,cAAc,EACd,KAAK,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/F,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,WAAW,EACX,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAA;AAGtB,cAAc,mBAAmB,CAAA;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AAE1F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
|
-
export { CCIPAPIClient, DEFAULT_API_BASE_URL } from "./api/index.js";
|
|
9
|
+
export { CCIPAPIClient, DEFAULT_API_BASE_URL, SDK_VERSION, SDK_VERSION_HEADER, } from "./api/index.js";
|
|
10
10
|
export { DEFAULT_API_RETRY_CONFIG } from "./chain.js";
|
|
11
11
|
export { calculateManualExecProof, discoverOffRamp } from "./execution.js";
|
|
12
12
|
export { decodeExtraArgs, encodeExtraArgs, } from "./extra-args.js";
|
|
13
13
|
export { estimateReceiveExecution } from "./gas.js";
|
|
14
|
+
export { getOffchainTokenData } from "./offchain.js";
|
|
14
15
|
export { decodeMessage, getMessagesForSender, sourceToDestTokenAddresses } from "./requests.js";
|
|
15
16
|
export { CCIPVersion, ExecutionState, IntentStatus, MessageStatus, } from "./types.js";
|
|
16
17
|
export { bigIntReplacer, bigIntReviver, bytesToBuffer, decodeAddress, getDataBytes, isSupportedTxHash, networkInfo, withRetry, } from "./utils.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAgBvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAML,eAAe,EACf,eAAe,GAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAA;AAC/F,OAAO,EAgBL,WAAW,EACX,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAGL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,eAAe,CAAA;AAEtB,SAAS;AACT,cAAc,mBAAmB,CAAA;AAEjC,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AAC1F,wEAAwE;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA"}
|
package/dist/offchain.d.ts
CHANGED
|
@@ -1,13 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { PickDeep } from 'type-fest';
|
|
2
|
+
import { type CCIPRequest, type OffchainTokenData, type WithLogger, NetworkType } from './types.ts';
|
|
2
3
|
/**
|
|
3
|
-
* Returns the USDC attestation for a given
|
|
4
|
-
* https://developers.circle.com/
|
|
4
|
+
* Returns the USDC attestation for a given tokenAmount.extraData and txHash
|
|
5
|
+
* https://developers.circle.com/cctp/quickstarts/transfer-usdc-ethereum-to-arc#3-3-retrieve-attestation
|
|
5
6
|
*
|
|
6
|
-
* @param
|
|
7
|
+
* @param opts - CCTPv2 options
|
|
7
8
|
* @param networkType - network type (mainnet or testnet)
|
|
8
|
-
* @returns USDC/CCTP attestation
|
|
9
|
+
* @returns USDC/CCTP attestation and message
|
|
9
10
|
*/
|
|
10
|
-
export declare function getUsdcAttestation(
|
|
11
|
+
export declare function getUsdcAttestation(opts: {
|
|
12
|
+
/** CCTP sourceDomain */
|
|
13
|
+
sourceDomain: number;
|
|
14
|
+
/** CCTP burn eventNonce */
|
|
15
|
+
nonce: number;
|
|
16
|
+
/** burn txHash, same as CCIP request */
|
|
17
|
+
txHash: string;
|
|
18
|
+
}, networkType: NetworkType): Promise<{
|
|
19
|
+
attestation: string;
|
|
20
|
+
message: string;
|
|
21
|
+
}>;
|
|
11
22
|
/**
|
|
12
23
|
* Returns the LBTC attestation for a given payload hash
|
|
13
24
|
*
|
|
@@ -18,4 +29,10 @@ export declare function getUsdcAttestation(message: string, networkType: Network
|
|
|
18
29
|
export declare function getLbtcAttestation(payloadHash: string, networkType: NetworkType): Promise<{
|
|
19
30
|
attestation: string;
|
|
20
31
|
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Fetch CCIPv1 offchain token data for USDC and LBTC tokenAmounts
|
|
34
|
+
* @param request - CCIPRequest containing tx.hash and message
|
|
35
|
+
* @returns Promise resolving to an OffchainTokenData for each tokenAmount
|
|
36
|
+
*/
|
|
37
|
+
export declare function getOffchainTokenData(request: PickDeep<CCIPRequest, 'tx.hash' | `message`>, { logger }?: WithLogger): Promise<OffchainTokenData[]>;
|
|
21
38
|
//# sourceMappingURL=offchain.d.ts.map
|
package/dist/offchain.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offchain.d.ts","sourceRoot":"","sources":["../src/offchain.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"offchain.d.ts","sourceRoot":"","sources":["../src/offchain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAQzC,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAmBnG;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IACJ,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAA;CACf,EACD,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAcnD;AAgBD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;IACT,WAAW,EAAE,MAAM,CAAA;CACpB,CAAC,CAsBD;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,SAAS,GAAG,SAAS,CAAC,EACrD,EAAE,MAAgB,EAAE,GAAE,UAAe,GACpC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAgE9B"}
|
package/dist/offchain.js
CHANGED
|
@@ -1,32 +1,37 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { dataLength, dataSlice, getBytes, toNumber } from 'ethers';
|
|
2
2
|
import { CCIPLbtcAttestationNotApprovedError, CCIPLbtcAttestationNotFoundError, CCIPUsdcAttestationError, } from "./errors/index.js";
|
|
3
|
+
import { parseSourceTokenData } from "./evm/messages.js";
|
|
3
4
|
import { NetworkType } from "./types.js";
|
|
5
|
+
import { networkInfo } from "./utils.js";
|
|
4
6
|
const CIRCLE_API_URL = {
|
|
5
|
-
mainnet: 'https://iris-api.circle.com
|
|
6
|
-
testnet: 'https://iris-api-sandbox.circle.com
|
|
7
|
-
};
|
|
8
|
-
const LOMBARD_API_URL = {
|
|
9
|
-
mainnet: 'https://mainnet.prod.lombard.finance',
|
|
10
|
-
testnet: 'https://gastald-testnet.prod.lombard.finance',
|
|
7
|
+
mainnet: 'https://iris-api.circle.com',
|
|
8
|
+
testnet: 'https://iris-api-sandbox.circle.com',
|
|
11
9
|
};
|
|
12
10
|
/**
|
|
13
|
-
* Returns the USDC attestation for a given
|
|
14
|
-
* https://developers.circle.com/
|
|
11
|
+
* Returns the USDC attestation for a given tokenAmount.extraData and txHash
|
|
12
|
+
* https://developers.circle.com/cctp/quickstarts/transfer-usdc-ethereum-to-arc#3-3-retrieve-attestation
|
|
15
13
|
*
|
|
16
|
-
* @param
|
|
14
|
+
* @param opts - CCTPv2 options
|
|
17
15
|
* @param networkType - network type (mainnet or testnet)
|
|
18
|
-
* @returns USDC/CCTP attestation
|
|
16
|
+
* @returns USDC/CCTP attestation and message
|
|
19
17
|
*/
|
|
20
|
-
export async function getUsdcAttestation(
|
|
21
|
-
const
|
|
18
|
+
export async function getUsdcAttestation(opts, networkType) {
|
|
19
|
+
const { sourceDomain, nonce, txHash } = opts;
|
|
22
20
|
const circleApiBaseUrl = networkType === NetworkType.Mainnet ? CIRCLE_API_URL.mainnet : CIRCLE_API_URL.testnet;
|
|
23
|
-
const res = await fetch(`${circleApiBaseUrl}/
|
|
21
|
+
const res = await fetch(`${circleApiBaseUrl}/v2/messages/${sourceDomain}?transactionHash=${txHash}`);
|
|
24
22
|
const json = (await res.json());
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
let att;
|
|
24
|
+
if ('messages' in json) {
|
|
25
|
+
att = json.messages.find((m) => m.status === 'complete' && m.eventNonce === nonce.toString());
|
|
27
26
|
}
|
|
28
|
-
|
|
27
|
+
if (!att?.message)
|
|
28
|
+
throw new CCIPUsdcAttestationError(txHash, json, { context: opts });
|
|
29
|
+
return att;
|
|
29
30
|
}
|
|
31
|
+
const LOMBARD_API_URL = {
|
|
32
|
+
mainnet: 'https://mainnet.prod.lombard.finance',
|
|
33
|
+
testnet: 'https://gastald-testnet.prod.lombard.finance',
|
|
34
|
+
};
|
|
30
35
|
/**
|
|
31
36
|
* Returns the LBTC attestation for a given payload hash
|
|
32
37
|
*
|
|
@@ -54,4 +59,74 @@ export async function getLbtcAttestation(payloadHash, networkType) {
|
|
|
54
59
|
}
|
|
55
60
|
return attestation;
|
|
56
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Fetch CCIPv1 offchain token data for USDC and LBTC tokenAmounts
|
|
64
|
+
* @param request - CCIPRequest containing tx.hash and message
|
|
65
|
+
* @returns Promise resolving to an OffchainTokenData for each tokenAmount
|
|
66
|
+
*/
|
|
67
|
+
export async function getOffchainTokenData(request, { logger = console } = {}) {
|
|
68
|
+
const { networkType } = networkInfo(request.message.sourceChainSelector);
|
|
69
|
+
function looksUsdcData(extraData) {
|
|
70
|
+
if (dataLength(extraData) !== 64)
|
|
71
|
+
return;
|
|
72
|
+
// USDCTokenPool's extraData is a packed `SourceTokenDataPayloadV1{uint64 nonce, uint32 sourceDomain}`,
|
|
73
|
+
// which we need to query CCTPv2 (by sourceDomain and txHash) and to filter by nonce among messages,
|
|
74
|
+
// if more than one in tx
|
|
75
|
+
let nonce, sourceDomain;
|
|
76
|
+
try {
|
|
77
|
+
// those toNumber conversions throw early in case the bytearray don't look like small numbers
|
|
78
|
+
nonce = toNumber(dataSlice(extraData, 0, 32));
|
|
79
|
+
sourceDomain = toNumber(dataSlice(extraData, 32, 32 + 32));
|
|
80
|
+
return { nonce, sourceDomain }; // maybe USDC
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// not USDC
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function looksLbtcData(extraData) {
|
|
87
|
+
// LBTC returns `message_hash`/`payloadHash` directly as `bytes32 extraData`
|
|
88
|
+
if (dataLength(extraData) === 32 &&
|
|
89
|
+
getBytes(extraData, 'extraData').filter(Boolean).length > 20 // looks like a hash
|
|
90
|
+
)
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
return Promise.all(request.message.tokenAmounts.map(async (tokenAmount, i) => {
|
|
94
|
+
let extraData;
|
|
95
|
+
if ('extraData' in tokenAmount) {
|
|
96
|
+
extraData = tokenAmount.extraData;
|
|
97
|
+
}
|
|
98
|
+
else if ('sourceTokenData' in request.message) {
|
|
99
|
+
// v1.2..v1.5
|
|
100
|
+
if (dataLength(request.message.sourceTokenData[i]) === 64) {
|
|
101
|
+
extraData = request.message.sourceTokenData[i];
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
;
|
|
105
|
+
({ extraData } = parseSourceTokenData(request.message.sourceTokenData[i]));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (!extraData)
|
|
109
|
+
return;
|
|
110
|
+
const usdcOpts = looksUsdcData(extraData);
|
|
111
|
+
if (usdcOpts) {
|
|
112
|
+
try {
|
|
113
|
+
const usdcAttestation = await getUsdcAttestation({ ...usdcOpts, txHash: request.tx.hash }, networkType);
|
|
114
|
+
return { _tag: 'usdc', extraData, ...usdcAttestation };
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
// maybe not a USDC transfer, or not ready
|
|
118
|
+
logger.warn(`❌ CCTP: Failed to fetch attestation for message:`, request.message, err);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
else if (looksLbtcData(extraData)) {
|
|
122
|
+
try {
|
|
123
|
+
const lbtcAttestation = await getLbtcAttestation(extraData, networkType);
|
|
124
|
+
return { _tag: 'lbtc', extraData, ...lbtcAttestation };
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
logger.warn(`❌ LBTC: Failed to fetch attestation for message:`, extraData, err);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}));
|
|
131
|
+
}
|
|
57
132
|
//# sourceMappingURL=offchain.js.map
|
package/dist/offchain.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"offchain.js","sourceRoot":"","sources":["../src/offchain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"offchain.js","sourceRoot":"","sources":["../src/offchain.ts"],"names":[],"mappings":"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"}
|
package/dist/requests.d.ts
CHANGED
|
@@ -4,9 +4,24 @@ import { type AnyMessage, type CCIPMessage, type CCIPRequest, type ChainTransact
|
|
|
4
4
|
/**
|
|
5
5
|
* Decodes hex strings, bytearrays, JSON strings and raw objects as CCIPMessages.
|
|
6
6
|
* Does minimal validation, but converts objects in the format expected by ccip-tools-ts.
|
|
7
|
+
*
|
|
7
8
|
* @param data - Data to decode (hex string, Uint8Array, JSON string, or object)
|
|
8
9
|
* @returns Decoded CCIPMessage
|
|
9
10
|
* @throws {@link CCIPMessageDecodeError} if data cannot be decoded as a valid message
|
|
11
|
+
* @throws {@link CCIPMessageInvalidError} if message structure is invalid or missing required fields
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { decodeMessage } from '@chainlink/ccip-sdk'
|
|
16
|
+
*
|
|
17
|
+
* // Decode from JSON string
|
|
18
|
+
* const message = decodeMessage('{"header":{"sourceChainSelector":"123",...}')
|
|
19
|
+
*
|
|
20
|
+
* // Decode from hex-encoded bytes
|
|
21
|
+
* const message = decodeMessage('0x...')
|
|
22
|
+
*
|
|
23
|
+
* console.log('Message ID:', message.messageId)
|
|
24
|
+
* ```
|
|
10
25
|
*/
|
|
11
26
|
export declare function decodeMessage(data: string | Uint8Array | Record<string, unknown>): CCIPMessage;
|
|
12
27
|
/**
|
|
@@ -23,15 +38,35 @@ export declare function buildMessageForDest(message: MessageInput, dest: ChainFa
|
|
|
23
38
|
* @returns CCIP requests (messages) in the transaction (at least one)
|
|
24
39
|
* @throws {@link CCIPChainFamilyUnsupportedError} if chain family not supported for legacy messages
|
|
25
40
|
* @throws {@link CCIPMessageNotFoundInTxError} if no CCIP messages found in transaction
|
|
41
|
+
*
|
|
42
|
+
* @see {@link getMessageById} - Search by messageId when tx hash unknown
|
|
26
43
|
*/
|
|
27
44
|
export declare function getMessagesInTx(source: Chain, tx: ChainTransaction): Promise<CCIPRequest[]>;
|
|
28
45
|
/**
|
|
29
|
-
* Fetch a CCIP message by
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* @
|
|
46
|
+
* Fetch a CCIP message by messageId from RPC logs (slow scan).
|
|
47
|
+
*
|
|
48
|
+
* This is the fallback implementation called by {@link Chain.getMessageById}
|
|
49
|
+
* when the API client is unavailable or fails.
|
|
50
|
+
*
|
|
51
|
+
* @param source - Source chain to scan logs from
|
|
52
|
+
* @param messageId - Message ID to search for
|
|
53
|
+
* @param opts - Optional hints (onRamp address narrows search, page controls batch size)
|
|
54
|
+
* @returns CCIPRequest matching the messageId
|
|
55
|
+
*
|
|
56
|
+
* @throws {@link CCIPMessageIdNotFoundError} if message not found after scanning all logs
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
*
|
|
60
|
+
* ```typescript
|
|
61
|
+
* import { getMessageById, EVMChain } from '@chainlink/ccip-sdk'
|
|
62
|
+
*
|
|
63
|
+
* const source = await EVMChain.fromUrl('https://rpc.sepolia.org')
|
|
64
|
+
* const request = await getMessageById(source, '0xabc123...', {
|
|
65
|
+
* onRamp: '0xOnRampAddress...',
|
|
66
|
+
* })
|
|
67
|
+
* console.log(`Found: seqNr=${request.message.sequenceNumber}`)
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
35
70
|
* @internal
|
|
36
71
|
*/
|
|
37
72
|
export declare function getMessageById(source: Chain, messageId: string, opts?: {
|
|
@@ -42,9 +77,10 @@ export declare function getMessageById(source: Chain, messageId: string, opts?:
|
|
|
42
77
|
* Fetches all CCIP messages contained in a given commit batch.
|
|
43
78
|
* @param source - The source chain.
|
|
44
79
|
* @param request - The CCIP request containing lane and message info.
|
|
45
|
-
* @param
|
|
80
|
+
* @param range - Object containing minSeqNr and maxSeqNr for the batch range.
|
|
46
81
|
* @param opts - Optional log filtering parameters.
|
|
47
82
|
* @returns Array of messages in the batch.
|
|
83
|
+
* @see {@link getVerifications} - Get commit report to determine batch range
|
|
48
84
|
*/
|
|
49
85
|
export declare function getMessagesInBatch<C extends Chain, R extends PickDeep<CCIPRequest, 'lane' | `log.${'topics' | 'address' | 'blockNumber'}` | 'message.sequenceNumber'>>(source: C, request: R, { minSeqNr, maxSeqNr }: {
|
|
50
86
|
minSeqNr: bigint;
|
|
@@ -57,16 +93,51 @@ export declare function getMessagesInBatch<C extends Chain, R extends PickDeep<C
|
|
|
57
93
|
* @param filter - Log filter options.
|
|
58
94
|
* @returns Async generator of CCIP requests.
|
|
59
95
|
* @throws {@link CCIPChainFamilyUnsupportedError} if chain family not supported for legacy messages
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* import { getMessagesForSender, EVMChain } from '@chainlink/ccip-sdk'
|
|
100
|
+
*
|
|
101
|
+
* const chain = await EVMChain.fromUrl('https://rpc.sepolia.org')
|
|
102
|
+
*
|
|
103
|
+
* for await (const request of getMessagesForSender(chain, '0xSenderAddress', {})) {
|
|
104
|
+
* console.log('Message ID:', request.message.messageId)
|
|
105
|
+
* console.log('Destination:', request.lane.destChainSelector)
|
|
106
|
+
* }
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* @see {@link getMessagesInTx} - Fetch from specific transaction
|
|
110
|
+
* @see {@link getMessageById} - Search by messageId
|
|
60
111
|
*/
|
|
61
112
|
export declare function getMessagesForSender(source: Chain, sender: string, filter: Pick<LogFilter, 'address' | 'startBlock' | 'startTime' | 'endBlock'>): AsyncGenerator<Omit<CCIPRequest, 'tx' | 'timestamp'>, void, unknown>;
|
|
62
113
|
/**
|
|
63
|
-
* Map source
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* @
|
|
69
|
-
* @
|
|
114
|
+
* Map source token to its pool address and destination token address.
|
|
115
|
+
*
|
|
116
|
+
* Resolves token routing by querying the TokenAdminRegistry and TokenPool
|
|
117
|
+
* to find the corresponding destination chain token.
|
|
118
|
+
*
|
|
119
|
+
* @param source - Source chain instance
|
|
120
|
+
* @param destChainSelector - Destination chain selector
|
|
121
|
+
* @param onRamp - OnRamp contract address
|
|
122
|
+
* @param sourceTokenAmount - Token amount object containing `token` and `amount`
|
|
123
|
+
* @returns Extended token amount with `sourcePoolAddress`, `sourceTokenAddress`, and `destTokenAddress`
|
|
124
|
+
*
|
|
125
|
+
* @throws {@link CCIPTokenNotInRegistryError} if token is not registered in TokenAdminRegistry
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* import { sourceToDestTokenAddresses, EVMChain } from '@chainlink/ccip-sdk'
|
|
130
|
+
*
|
|
131
|
+
* const source = await EVMChain.fromUrl('https://rpc.sepolia.org')
|
|
132
|
+
* const tokenAmount = await sourceToDestTokenAddresses(
|
|
133
|
+
* source,
|
|
134
|
+
* destChainSelector,
|
|
135
|
+
* '0xOnRamp...',
|
|
136
|
+
* { token: '0xLINK...', amount: 1000000000000000000n }
|
|
137
|
+
* )
|
|
138
|
+
* console.log(`Pool: ${tokenAmount.sourcePoolAddress}`)
|
|
139
|
+
* console.log(`Dest token: ${tokenAmount.destTokenAddress}`)
|
|
140
|
+
* ```
|
|
70
141
|
*/
|
|
71
142
|
export declare function sourceToDestTokenAddresses<S extends {
|
|
72
143
|
token: string;
|
package/dist/requests.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAapE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,
|
|
1
|
+
{"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAoB,KAAK,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAapE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAGhB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,WAAW,EACZ,MAAM,YAAY,CAAA;AA2HnB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAmB9F;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAGxF;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAyBjG;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,KAAK,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC,OAAO,CAAC,WAAW,CAAC,CA6BtB;AAKD;;;;;;;;GAQG;AACH,wBAAsB,kBAAkB,CACtC,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,QAAQ,CAChB,WAAW,EACX,MAAM,GAAG,OAAO,QAAQ,GAAG,SAAS,GAAG,aAAa,EAAE,GAAG,wBAAwB,CAClF,EAED,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,EACV,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC9D,IAAI,GAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAmC,GAClE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAoEzB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAuB,oBAAoB,CACzC,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC,GAC3E,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CA6BtE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAsB,0BAA0B,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAC1E,MAAM,EAAE,KAAK,EACb,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,CAAC,GACnB,OAAO,CACR,CAAC,GAAG;IACF,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gBAAgB,EAAE,MAAM,CAAA;CACzB,CACF,CAgBA"}
|