@avalabs/bridge-unified 0.0.0-hello-world-20230824162438 → 0.0.0-license-20240801163452
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/LICENSE +9 -0
- package/README.md +139 -4
- package/dist/index.cjs +13 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +189 -34
- package/dist/index.d.ts +189 -34
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/package.json +20 -10
- package/.turbo/turbo-build.log +0 -22
- package/.turbo/turbo-lint.log +0 -4
- package/CHANGELOG.md +0 -13
- package/src/errors/index.ts +0 -20
- package/src/handlers/check-for-pending-bridge-journey.ts +0 -20
- package/src/handlers/execute-bridge-journey-step.ts +0 -20
- package/src/handlers/plan-bridge-journey.ts +0 -25
- package/src/index.ts +0 -2
- package/src/unified-bridge-service.ts +0 -19
- package/tsconfig.json +0 -8
- package/tsup.config.ts +0 -4
package/dist/index.d.cts
CHANGED
|
@@ -1,36 +1,191 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Environment, MaybePromise, NativeToken } from '@internal/bridge-shared';
|
|
1
|
+
import { Address } from 'viem';
|
|
3
2
|
|
|
3
|
+
type Chain = {
|
|
4
|
+
chainName: string;
|
|
5
|
+
chainId: string;
|
|
6
|
+
rpcUrl: string;
|
|
7
|
+
utilityAddresses?: {
|
|
8
|
+
multicall: Address;
|
|
9
|
+
};
|
|
10
|
+
networkToken: Asset;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
declare enum Environment {
|
|
14
|
+
PROD = "production",
|
|
15
|
+
TEST = "test"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type RequestArguments = {
|
|
19
|
+
method: string;
|
|
20
|
+
params?: unknown[] | Record<string | number, unknown>;
|
|
21
|
+
};
|
|
22
|
+
type Provider = {
|
|
23
|
+
/**
|
|
24
|
+
* EIP-1193 compatible request method
|
|
25
|
+
* https://eips.ethereum.org/EIPS/eip-1193#request-1
|
|
26
|
+
*/
|
|
27
|
+
request: (args: RequestArguments) => Promise<unknown>;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type Hex = `0x${string}`;
|
|
31
|
+
type TransactionRequest = {
|
|
32
|
+
type?: number | null;
|
|
33
|
+
data?: Hex | null;
|
|
34
|
+
from: Hex;
|
|
35
|
+
gas?: bigint;
|
|
36
|
+
nonce?: number;
|
|
37
|
+
to?: Hex | null;
|
|
38
|
+
value?: bigint;
|
|
39
|
+
gasPrice?: bigint | null;
|
|
40
|
+
gasLimit?: bigint | null;
|
|
41
|
+
maxPriorityFeePerGas?: bigint | null;
|
|
42
|
+
maxFeePerGas?: bigint | null;
|
|
43
|
+
};
|
|
44
|
+
type Dispatch = (signedTxHash: Hex) => Promise<Hex>;
|
|
45
|
+
type Signer = (data: TransactionRequest, dispatch: Dispatch) => Promise<Hex>;
|
|
46
|
+
|
|
47
|
+
declare enum ErrorCode {
|
|
48
|
+
BRIDGE_NOT_AVAILABLE = 5001,
|
|
49
|
+
INITIALIZATION_FAILED = 5002,
|
|
50
|
+
INVALID_PARAMS = 5003,
|
|
51
|
+
TIMEOUT = 5004,
|
|
52
|
+
TRANSACTION_REVERTED = 5005
|
|
53
|
+
}
|
|
54
|
+
declare enum ErrorReason {
|
|
55
|
+
UNKNOWN = "UNKNOWN",
|
|
56
|
+
CONFIG_NOT_AVAILABLE = "CONFIG_NOT_AVAILABLE",
|
|
57
|
+
INVALID_PARAMS = "INVALID_PARAMS",
|
|
58
|
+
IDENTICAL_CHAINS_PROVIDED = "IDENTICAL_CHAINS_PROVIDED",
|
|
59
|
+
INCORRECT_AMOUNT_PROVIDED = "INCORRECT_AMOUNT_PROVIDED",
|
|
60
|
+
INCORRECT_ADDRESS_PROVIDED = "INCORRECT_ADDRESS_PROVIDED",
|
|
61
|
+
CHAIN_NOT_SUPPORTED = "CHAIN_NOT_SUPPORTED",
|
|
62
|
+
ASSET_NOT_SUPPORTED = "ASSET_NOT_SUPPORTED",
|
|
63
|
+
CONFIRMATION_COUNT_UNKNOWN = "CONFIRMATION_COUNT_UNKNOWN"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
type BridgeTransfer = {
|
|
67
|
+
type: BridgeType;
|
|
68
|
+
environment: Environment;
|
|
69
|
+
fromAddress: string;
|
|
70
|
+
toAddress: string;
|
|
71
|
+
amount: bigint;
|
|
72
|
+
amountDecimals: number;
|
|
73
|
+
symbol: string;
|
|
74
|
+
completedAt?: number;
|
|
75
|
+
errorCode?: ErrorCode;
|
|
76
|
+
bridgeFee: bigint;
|
|
77
|
+
sourceChain: Chain;
|
|
78
|
+
sourceStartedAt: number;
|
|
79
|
+
sourceTxHash: string;
|
|
80
|
+
sourceNetworkFee?: bigint;
|
|
81
|
+
sourceConfirmationCount: number;
|
|
82
|
+
requiredSourceConfirmationCount: number;
|
|
83
|
+
targetChain: Chain;
|
|
84
|
+
targetStartedAt?: number;
|
|
85
|
+
targetTxHash?: string;
|
|
86
|
+
targetNetworkFee?: bigint;
|
|
87
|
+
targetConfirmationCount: number;
|
|
88
|
+
requiredTargetConfirmationCount: number;
|
|
89
|
+
startBlockNumber?: bigint;
|
|
90
|
+
metadata?: Record<string, unknown>;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
declare enum BridgeType {
|
|
94
|
+
CCTP = "cctp"
|
|
95
|
+
}
|
|
96
|
+
type FeeParams = {
|
|
97
|
+
asset: BridgeAsset;
|
|
98
|
+
amount: bigint;
|
|
99
|
+
sourceChain: Chain;
|
|
100
|
+
targetChain: Chain;
|
|
101
|
+
provider?: Provider;
|
|
102
|
+
};
|
|
103
|
+
declare enum BridgeSignatureReason {
|
|
104
|
+
AllowanceApproval = "allowance-approval",
|
|
105
|
+
TokensTransfer = "tokens-transfer"
|
|
106
|
+
}
|
|
107
|
+
type BridgeStepDetails = {
|
|
108
|
+
currentSignature: number;
|
|
109
|
+
requiredSignatures: number;
|
|
110
|
+
currentSignatureReason: BridgeSignatureReason;
|
|
111
|
+
};
|
|
112
|
+
type TransferParams = {
|
|
113
|
+
asset: BridgeAsset;
|
|
114
|
+
amount: bigint;
|
|
115
|
+
fromAddress: string;
|
|
116
|
+
toAddress?: string;
|
|
117
|
+
sourceChain: Chain;
|
|
118
|
+
targetChain: Chain;
|
|
119
|
+
sourceProvider?: Provider;
|
|
120
|
+
targetProvider?: Provider;
|
|
121
|
+
onStepChange?: (stepDetails: BridgeStepDetails) => void;
|
|
122
|
+
sign?: Signer;
|
|
123
|
+
};
|
|
124
|
+
type TrackingParams = {
|
|
125
|
+
bridgeTransfer: BridgeTransfer;
|
|
126
|
+
sourceProvider?: Provider;
|
|
127
|
+
targetProvider?: Provider;
|
|
128
|
+
updateListener: (transfer: BridgeTransfer) => void;
|
|
129
|
+
};
|
|
130
|
+
type BridgeService = {
|
|
131
|
+
type: BridgeType;
|
|
132
|
+
estimateGas: (params: TransferParams) => Promise<bigint>;
|
|
133
|
+
getAssets: () => Promise<ChainAssetMap>;
|
|
134
|
+
getFees: (params: FeeParams) => Promise<AssetFeeMap>;
|
|
135
|
+
transferAsset: (params: TransferParams) => Promise<BridgeTransfer>;
|
|
136
|
+
trackTransfer: (transfer: TrackingParams) => {
|
|
137
|
+
cancel: () => void;
|
|
138
|
+
result: Promise<BridgeTransfer>;
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
type BridgeServiceFactory = (environment: Environment) => Promise<BridgeService>;
|
|
142
|
+
|
|
143
|
+
declare enum TokenType {
|
|
144
|
+
NATIVE = "native",
|
|
145
|
+
ERC20 = "erc20"
|
|
146
|
+
}
|
|
147
|
+
type Asset = {
|
|
148
|
+
type: TokenType;
|
|
149
|
+
address?: Address;
|
|
150
|
+
name: string;
|
|
151
|
+
symbol: string;
|
|
152
|
+
decimals: number;
|
|
153
|
+
};
|
|
154
|
+
type DestinationInfo = Record<string, BridgeType[]>;
|
|
155
|
+
type BridgeAsset = Asset & {
|
|
156
|
+
destinations: DestinationInfo;
|
|
157
|
+
};
|
|
158
|
+
type ChainAssetMap = Record<string, BridgeAsset[]>;
|
|
159
|
+
type AssetFeeMap = Record<Address, bigint>;
|
|
160
|
+
|
|
161
|
+
type BridgeServicesMap = Map<BridgeType, BridgeService>;
|
|
4
162
|
type BridgeServiceConfig = {
|
|
5
|
-
environment:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export { BridgeServiceConfig, createUnifiedBridgeService };
|
|
163
|
+
environment: Environment;
|
|
164
|
+
enabledBridgeServices: BridgeServicesMap;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
declare const createUnifiedBridgeService: ({ environment, enabledBridgeServices }: BridgeServiceConfig) => {
|
|
168
|
+
environment: Environment;
|
|
169
|
+
getAssets: () => Promise<ChainAssetMap>;
|
|
170
|
+
getFees: (params: FeeParams) => Promise<AssetFeeMap>;
|
|
171
|
+
estimateGas: (params: TransferParams) => Promise<bigint>;
|
|
172
|
+
canTransferAsset: (asset: BridgeAsset, targetChainId: string) => boolean;
|
|
173
|
+
transferAsset: (params: TransferParams) => Promise<BridgeTransfer>;
|
|
174
|
+
trackTransfer: (params: TrackingParams) => {
|
|
175
|
+
cancel: () => void;
|
|
176
|
+
result: Promise<BridgeTransfer>;
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
type Caip2ChainId = {
|
|
181
|
+
namespace: string;
|
|
182
|
+
reference: string;
|
|
183
|
+
};
|
|
184
|
+
declare const _default: {
|
|
185
|
+
toJSON: (identifier: string) => Caip2ChainId;
|
|
186
|
+
toString: ({ namespace, reference }: Caip2ChainId) => string;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
declare const getEnabledBridgeServices: (environment: Environment, disabledBridgeTypes: BridgeType[]) => Promise<BridgeServicesMap>;
|
|
190
|
+
|
|
191
|
+
export { Asset, AssetFeeMap, BridgeAsset, BridgeService, BridgeServiceConfig, BridgeServiceFactory, BridgeServicesMap, BridgeSignatureReason, BridgeStepDetails, BridgeTransfer, BridgeType, Chain, ChainAssetMap, DestinationInfo, Dispatch, Environment, ErrorCode, ErrorReason, FeeParams, Hex, Provider, Signer, TokenType, TrackingParams, TransactionRequest, TransferParams, _default as caip2, createUnifiedBridgeService, getEnabledBridgeServices };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,36 +1,191 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Environment, MaybePromise, NativeToken } from '@internal/bridge-shared';
|
|
1
|
+
import { Address } from 'viem';
|
|
3
2
|
|
|
3
|
+
type Chain = {
|
|
4
|
+
chainName: string;
|
|
5
|
+
chainId: string;
|
|
6
|
+
rpcUrl: string;
|
|
7
|
+
utilityAddresses?: {
|
|
8
|
+
multicall: Address;
|
|
9
|
+
};
|
|
10
|
+
networkToken: Asset;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
declare enum Environment {
|
|
14
|
+
PROD = "production",
|
|
15
|
+
TEST = "test"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
type RequestArguments = {
|
|
19
|
+
method: string;
|
|
20
|
+
params?: unknown[] | Record<string | number, unknown>;
|
|
21
|
+
};
|
|
22
|
+
type Provider = {
|
|
23
|
+
/**
|
|
24
|
+
* EIP-1193 compatible request method
|
|
25
|
+
* https://eips.ethereum.org/EIPS/eip-1193#request-1
|
|
26
|
+
*/
|
|
27
|
+
request: (args: RequestArguments) => Promise<unknown>;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type Hex = `0x${string}`;
|
|
31
|
+
type TransactionRequest = {
|
|
32
|
+
type?: number | null;
|
|
33
|
+
data?: Hex | null;
|
|
34
|
+
from: Hex;
|
|
35
|
+
gas?: bigint;
|
|
36
|
+
nonce?: number;
|
|
37
|
+
to?: Hex | null;
|
|
38
|
+
value?: bigint;
|
|
39
|
+
gasPrice?: bigint | null;
|
|
40
|
+
gasLimit?: bigint | null;
|
|
41
|
+
maxPriorityFeePerGas?: bigint | null;
|
|
42
|
+
maxFeePerGas?: bigint | null;
|
|
43
|
+
};
|
|
44
|
+
type Dispatch = (signedTxHash: Hex) => Promise<Hex>;
|
|
45
|
+
type Signer = (data: TransactionRequest, dispatch: Dispatch) => Promise<Hex>;
|
|
46
|
+
|
|
47
|
+
declare enum ErrorCode {
|
|
48
|
+
BRIDGE_NOT_AVAILABLE = 5001,
|
|
49
|
+
INITIALIZATION_FAILED = 5002,
|
|
50
|
+
INVALID_PARAMS = 5003,
|
|
51
|
+
TIMEOUT = 5004,
|
|
52
|
+
TRANSACTION_REVERTED = 5005
|
|
53
|
+
}
|
|
54
|
+
declare enum ErrorReason {
|
|
55
|
+
UNKNOWN = "UNKNOWN",
|
|
56
|
+
CONFIG_NOT_AVAILABLE = "CONFIG_NOT_AVAILABLE",
|
|
57
|
+
INVALID_PARAMS = "INVALID_PARAMS",
|
|
58
|
+
IDENTICAL_CHAINS_PROVIDED = "IDENTICAL_CHAINS_PROVIDED",
|
|
59
|
+
INCORRECT_AMOUNT_PROVIDED = "INCORRECT_AMOUNT_PROVIDED",
|
|
60
|
+
INCORRECT_ADDRESS_PROVIDED = "INCORRECT_ADDRESS_PROVIDED",
|
|
61
|
+
CHAIN_NOT_SUPPORTED = "CHAIN_NOT_SUPPORTED",
|
|
62
|
+
ASSET_NOT_SUPPORTED = "ASSET_NOT_SUPPORTED",
|
|
63
|
+
CONFIRMATION_COUNT_UNKNOWN = "CONFIRMATION_COUNT_UNKNOWN"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
type BridgeTransfer = {
|
|
67
|
+
type: BridgeType;
|
|
68
|
+
environment: Environment;
|
|
69
|
+
fromAddress: string;
|
|
70
|
+
toAddress: string;
|
|
71
|
+
amount: bigint;
|
|
72
|
+
amountDecimals: number;
|
|
73
|
+
symbol: string;
|
|
74
|
+
completedAt?: number;
|
|
75
|
+
errorCode?: ErrorCode;
|
|
76
|
+
bridgeFee: bigint;
|
|
77
|
+
sourceChain: Chain;
|
|
78
|
+
sourceStartedAt: number;
|
|
79
|
+
sourceTxHash: string;
|
|
80
|
+
sourceNetworkFee?: bigint;
|
|
81
|
+
sourceConfirmationCount: number;
|
|
82
|
+
requiredSourceConfirmationCount: number;
|
|
83
|
+
targetChain: Chain;
|
|
84
|
+
targetStartedAt?: number;
|
|
85
|
+
targetTxHash?: string;
|
|
86
|
+
targetNetworkFee?: bigint;
|
|
87
|
+
targetConfirmationCount: number;
|
|
88
|
+
requiredTargetConfirmationCount: number;
|
|
89
|
+
startBlockNumber?: bigint;
|
|
90
|
+
metadata?: Record<string, unknown>;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
declare enum BridgeType {
|
|
94
|
+
CCTP = "cctp"
|
|
95
|
+
}
|
|
96
|
+
type FeeParams = {
|
|
97
|
+
asset: BridgeAsset;
|
|
98
|
+
amount: bigint;
|
|
99
|
+
sourceChain: Chain;
|
|
100
|
+
targetChain: Chain;
|
|
101
|
+
provider?: Provider;
|
|
102
|
+
};
|
|
103
|
+
declare enum BridgeSignatureReason {
|
|
104
|
+
AllowanceApproval = "allowance-approval",
|
|
105
|
+
TokensTransfer = "tokens-transfer"
|
|
106
|
+
}
|
|
107
|
+
type BridgeStepDetails = {
|
|
108
|
+
currentSignature: number;
|
|
109
|
+
requiredSignatures: number;
|
|
110
|
+
currentSignatureReason: BridgeSignatureReason;
|
|
111
|
+
};
|
|
112
|
+
type TransferParams = {
|
|
113
|
+
asset: BridgeAsset;
|
|
114
|
+
amount: bigint;
|
|
115
|
+
fromAddress: string;
|
|
116
|
+
toAddress?: string;
|
|
117
|
+
sourceChain: Chain;
|
|
118
|
+
targetChain: Chain;
|
|
119
|
+
sourceProvider?: Provider;
|
|
120
|
+
targetProvider?: Provider;
|
|
121
|
+
onStepChange?: (stepDetails: BridgeStepDetails) => void;
|
|
122
|
+
sign?: Signer;
|
|
123
|
+
};
|
|
124
|
+
type TrackingParams = {
|
|
125
|
+
bridgeTransfer: BridgeTransfer;
|
|
126
|
+
sourceProvider?: Provider;
|
|
127
|
+
targetProvider?: Provider;
|
|
128
|
+
updateListener: (transfer: BridgeTransfer) => void;
|
|
129
|
+
};
|
|
130
|
+
type BridgeService = {
|
|
131
|
+
type: BridgeType;
|
|
132
|
+
estimateGas: (params: TransferParams) => Promise<bigint>;
|
|
133
|
+
getAssets: () => Promise<ChainAssetMap>;
|
|
134
|
+
getFees: (params: FeeParams) => Promise<AssetFeeMap>;
|
|
135
|
+
transferAsset: (params: TransferParams) => Promise<BridgeTransfer>;
|
|
136
|
+
trackTransfer: (transfer: TrackingParams) => {
|
|
137
|
+
cancel: () => void;
|
|
138
|
+
result: Promise<BridgeTransfer>;
|
|
139
|
+
};
|
|
140
|
+
};
|
|
141
|
+
type BridgeServiceFactory = (environment: Environment) => Promise<BridgeService>;
|
|
142
|
+
|
|
143
|
+
declare enum TokenType {
|
|
144
|
+
NATIVE = "native",
|
|
145
|
+
ERC20 = "erc20"
|
|
146
|
+
}
|
|
147
|
+
type Asset = {
|
|
148
|
+
type: TokenType;
|
|
149
|
+
address?: Address;
|
|
150
|
+
name: string;
|
|
151
|
+
symbol: string;
|
|
152
|
+
decimals: number;
|
|
153
|
+
};
|
|
154
|
+
type DestinationInfo = Record<string, BridgeType[]>;
|
|
155
|
+
type BridgeAsset = Asset & {
|
|
156
|
+
destinations: DestinationInfo;
|
|
157
|
+
};
|
|
158
|
+
type ChainAssetMap = Record<string, BridgeAsset[]>;
|
|
159
|
+
type AssetFeeMap = Record<Address, bigint>;
|
|
160
|
+
|
|
161
|
+
type BridgeServicesMap = Map<BridgeType, BridgeService>;
|
|
4
162
|
type BridgeServiceConfig = {
|
|
5
|
-
environment:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export { BridgeServiceConfig, createUnifiedBridgeService };
|
|
163
|
+
environment: Environment;
|
|
164
|
+
enabledBridgeServices: BridgeServicesMap;
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
declare const createUnifiedBridgeService: ({ environment, enabledBridgeServices }: BridgeServiceConfig) => {
|
|
168
|
+
environment: Environment;
|
|
169
|
+
getAssets: () => Promise<ChainAssetMap>;
|
|
170
|
+
getFees: (params: FeeParams) => Promise<AssetFeeMap>;
|
|
171
|
+
estimateGas: (params: TransferParams) => Promise<bigint>;
|
|
172
|
+
canTransferAsset: (asset: BridgeAsset, targetChainId: string) => boolean;
|
|
173
|
+
transferAsset: (params: TransferParams) => Promise<BridgeTransfer>;
|
|
174
|
+
trackTransfer: (params: TrackingParams) => {
|
|
175
|
+
cancel: () => void;
|
|
176
|
+
result: Promise<BridgeTransfer>;
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
type Caip2ChainId = {
|
|
181
|
+
namespace: string;
|
|
182
|
+
reference: string;
|
|
183
|
+
};
|
|
184
|
+
declare const _default: {
|
|
185
|
+
toJSON: (identifier: string) => Caip2ChainId;
|
|
186
|
+
toString: ({ namespace, reference }: Caip2ChainId) => string;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
declare const getEnabledBridgeServices: (environment: Environment, disabledBridgeTypes: BridgeType[]) => Promise<BridgeServicesMap>;
|
|
190
|
+
|
|
191
|
+
export { Asset, AssetFeeMap, BridgeAsset, BridgeService, BridgeServiceConfig, BridgeServiceFactory, BridgeServicesMap, BridgeSignatureReason, BridgeStepDetails, BridgeTransfer, BridgeType, Chain, ChainAssetMap, DestinationInfo, Dispatch, Environment, ErrorCode, ErrorReason, FeeParams, Hex, Provider, Signer, TokenType, TrackingParams, TransactionRequest, TransferParams, _default as caip2, createUnifiedBridgeService, getEnabledBridgeServices };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { isAddress, custom, http, createWalletClient, publicActions, decodeEventLog, encodeFunctionData } from 'viem';
|
|
2
|
+
import { compact, mergeWith, isArray } from 'lodash';
|
|
2
3
|
|
|
3
|
-
export { O as createUnifiedBridgeService };
|
|
4
|
+
var H=(r=>(r.NATIVE="native",r.ERC20="erc20",r))(H||{});var E=(e=>(e.CCTP="cctp",e))(E||{}),G=(r=>(r.AllowanceApproval="allowance-approval",r.TokensTransfer="tokens-transfer",r))(G||{});var K=(r=>(r.PROD="production",r.TEST="test",r))(K||{});var B=(t=>(t[t.BRIDGE_NOT_AVAILABLE=5001]="BRIDGE_NOT_AVAILABLE",t[t.INITIALIZATION_FAILED=5002]="INITIALIZATION_FAILED",t[t.INVALID_PARAMS=5003]="INVALID_PARAMS",t[t.TIMEOUT=5004]="TIMEOUT",t[t.TRANSACTION_REVERTED=5005]="TRANSACTION_REVERTED",t))(B||{}),w=(a=>(a.UNKNOWN="UNKNOWN",a.CONFIG_NOT_AVAILABLE="CONFIG_NOT_AVAILABLE",a.INVALID_PARAMS="INVALID_PARAMS",a.IDENTICAL_CHAINS_PROVIDED="IDENTICAL_CHAINS_PROVIDED",a.INCORRECT_AMOUNT_PROVIDED="INCORRECT_AMOUNT_PROVIDED",a.INCORRECT_ADDRESS_PROVIDED="INCORRECT_ADDRESS_PROVIDED",a.CHAIN_NOT_SUPPORTED="CHAIN_NOT_SUPPORTED",a.ASSET_NOT_SUPPORTED="ASSET_NOT_SUPPORTED",a.CONFIRMATION_COUNT_UNKNOWN="CONFIRMATION_COUNT_UNKNOWN",a))(w||{});async function $(n){let e=n.map(r=>r.chainId);return n.reduce((r,s)=>(r[s.chainId]=s.tokens.map(i=>({...i,type:"erc20",destinations:e.reduce((t,o)=>(s.chainId!==o&&(t[o]||(t[o]=[]),t[o]?.push("cctp")),t),{})})),r),{})}var ue="^[-a-z0-9]{3,8}$",de="^[-_a-zA-Z0-9]{1,50}$",q=":",me=n=>{let[e,r]=n.split(q);if(!e||!r)throw new Error("Invalid identifier provided.");if(!new RegExp(ue).test(e))throw new Error("Invalid namespace provided.");if(!new RegExp(de).test(r))throw new Error("Invalid reference provided.");return {namespace:e,reference:r}},ce=({namespace:n,reference:e})=>`${n}${q}${e}`,M={toJSON:me,toString:ce};var ge=n=>{let{reference:e}=M.toJSON(n.chainId);return {id:Number(e),name:n.chainName,nativeCurrency:{decimals:n.networkToken.decimals,symbol:n.networkToken.symbol,name:n.networkToken.name},network:n.chainName,rpcUrls:{default:{http:[n.rpcUrl]},public:{http:[n.rpcUrl]}},...n.utilityAddresses?.multicall&&{contracts:{multicall3:{address:n.utilityAddresses.multicall}}}}},b=({chain:n,provider:e})=>{let r=ge(n),s=e?custom(e):http(n.rpcUrl,{batch:!0,retryCount:0});return createWalletClient({chain:r,transport:s}).extend(publicActions)};var v=[{inputs:[{internalType:"address",name:"circleTokenMessenger_",type:"address"},{internalType:"address",name:"burnToken_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AlreadyAdmin",type:"error"},{inputs:[],name:"AlreadyFeeCollector",type:"error"},{inputs:[],name:"AlreadySupportedBurnToken",type:"error"},{inputs:[],name:"AmountLessThanFee",type:"error"},{inputs:[],name:"BalanceNotIncreased",type:"error"},{inputs:[],name:"CannotRemoveLastAdmin",type:"error"},{inputs:[],name:"FeePercentageGreaterThanMax",type:"error"},{inputs:[],name:"InvalidAdminAddress",type:"error"},{inputs:[],name:"InvalidFeeCollector",type:"error"},{inputs:[],name:"InvalidMintRecipientAddress",type:"error"},{inputs:[],name:"InvalidTokenAddress",type:"error"},{inputs:[],name:"InvalidTokenMessengerAddress",type:"error"},{inputs:[],name:"MaxFeeLessThanMinFee",type:"error"},{inputs:[],name:"NotAdmin",type:"error"},{inputs:[],name:"NotFeeCollector",type:"error"},{inputs:[],name:"UnSupportedBurnToken",type:"error"},{inputs:[],name:"UnsupportedDomain",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"admin",type:"address"}],name:"AdminRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"BurnTokenRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorAdded",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"feeCollector",type:"address"}],name:"FeeCollectorRemoved",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],indexed:!1,internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"FeeConfigurationUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Paused",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"address",name:"burnToken",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"depositor",type:"address"},{indexed:!1,internalType:"address",name:"mintRecipient",type:"address"},{indexed:!1,internalType:"uint32",name:"destinationDomain",type:"uint32"},{indexed:!1,internalType:"uint256",name:"totalFee",type:"uint256"}],name:"TransferTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"account",type:"address"}],name:"Unpaused",type:"event"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"addAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"addFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"addSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"}],name:"calculateFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessenger",outputs:[{internalType:"contract ICircleTokenMessenger",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"circleTokenMessengerAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"collectFees",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"getFeeAmounts",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeeConfiguration",outputs:[{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getFeePercentage",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMaxFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getMinFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"getTxnFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isAdmin",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"isFeeCollector",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"isSupportedBurnToken",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"}],name:"isSupportedDomain",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"pause",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"paused",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"removeAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"feeCollector",type:"address"}],name:"removeFeeCollector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"token",type:"address"}],name:"removeSupportedBurnToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint32",name:"domain",type:"uint32"},{components:[{internalType:"uint256",name:"maxFee",type:"uint256"},{internalType:"uint256",name:"minFee",type:"uint256"},{internalType:"uint32",name:"feePercentage",type:"uint32"},{internalType:"uint256",name:"txnFee",type:"uint256"},{internalType:"bool",name:"supported",type:"bool"}],internalType:"struct FeeCalculator.FeeConfiguration",name:"feeConfiguration",type:"tuple"}],name:"setFeeConfiguration",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"",type:"address"}],name:"supportedBurnTokens",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint32",name:"destinationDomain",type:"uint32"},{internalType:"address",name:"mintRecipient",type:"address"},{internalType:"address",name:"burnToken",type:"address"}],name:"transferTokens",outputs:[{internalType:"uint64",name:"nonce",type:"uint64"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"unpause",outputs:[],stateMutability:"nonpayable",type:"function"}];var x=class extends Error{constructor(r,s,i){super(r);this.code=s;this.details=i;}};var k=class extends x{constructor(e="UNKNOWN",r){super(e,5001,r),this.name="BridgeUnavailableError";}};var S=class extends x{constructor(e="UNKNOWN",r){super(e,5002,r),this.name="BridgeInitializationError";}};var T=class extends x{constructor(e="INVALID_PARAMS",r){super(e,5003,r),this.name="InvalidParamsError";}};var R=({sourceChain:n,targetChain:e,amount:r,asset:s},i)=>{if(n.chainId===e.chainId)throw new T("IDENTICAL_CHAINS_PROVIDED");if(r<=0n)throw new T("INCORRECT_AMOUNT_PROVIDED","Amount must be greater than zero");let t=i.find(a=>a.chainId===n.chainId);if(!t)throw new T("CHAIN_NOT_SUPPORTED",`Not supported on source chain "${n.chainId}"`);let o=i.find(a=>a.chainId===e.chainId);if(!o)throw new T("CHAIN_NOT_SUPPORTED",`Not supported on target chain "${e.chainId}"`);let d=t.tokens.find(a=>a.symbol===s.symbol),u=o.tokens.find(a=>a.symbol===s.symbol);if(!d||!u)throw new T("ASSET_NOT_SUPPORTED");return {sourceChainData:t,targetChainData:o,burnToken:d,mintToken:u}};async function F(n,e){let{sourceChain:r,targetChain:s,asset:i,amount:t,provider:o}=e,{sourceChainData:d,targetChainData:u,burnToken:a}=R({sourceChain:r,targetChain:s,asset:i,amount:t},n),m=await b({chain:r,provider:o}).readContract({address:d.tokenRouterAddress,abi:v,functionName:"calculateFee",args:[t,u.domain]});return {[a.address]:m}}var N=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];function j({amount:n,burnToken:e,targetChainData:r,toAddress:s}){return encodeFunctionData({abi:v,functionName:"transferTokens",args:[n,r.domain,s,e.address]})}function X({amount:n,sourceChainData:e}){return encodeFunctionData({abi:N,functionName:"approve",args:[e.tokenRouterAddress,n]})}var Ae=async(n,e)=>{let{sourceChain:r,targetChain:s,asset:i,amount:t,fromAddress:o,toAddress:d,sourceProvider:u,onStepChange:a,sign:p}=e,m=d??o;if(!isAddress(o)||!isAddress(m))throw new T("INCORRECT_ADDRESS_PROVIDED");let{sourceChainData:c,targetChainData:y,burnToken:l}=R({sourceChain:r,targetChain:s,asset:i,amount:t},n),f=b({chain:r,provider:u}),C=await f.readContract({address:l.address,abi:N,functionName:"allowance",args:[o,c.tokenRouterAddress]})<t,_=C?2:1;if(C)if(a?.({currentSignature:1,currentSignatureReason:"allowance-approval",requiredSignatures:_}),p){let g=X({amount:t,sourceChainData:c}),I=await p({from:o,to:l.address,data:g},pe=>f.sendRawTransaction({serializedTransaction:pe}));await f.waitForTransactionReceipt({hash:I,pollingInterval:1e3});}else {let{request:g}=await f.simulateContract({account:o,address:l.address,abi:N,functionName:"approve",args:[c.tokenRouterAddress,t]}),I=await f.writeContract(g);await f.waitForTransactionReceipt({hash:I,pollingInterval:1e3});}if(a?.({currentSignature:C?2:1,currentSignatureReason:"tokens-transfer",requiredSignatures:_}),p){let g=j({amount:t,burnToken:l,targetChainData:y,toAddress:m});return p({from:o,to:c.tokenRouterAddress,data:g},I=>f.sendRawTransaction({serializedTransaction:I}))}let{request:P}=await f.simulateContract({account:o,address:c.tokenRouterAddress,abi:v,functionName:"transferTokens",args:[t,y.domain,m,l.address]});return f.writeContract(P)},Ce=async n=>{try{return await n.getBlockNumber()}catch{return}};async function J(n,e,r){let{minimumConfirmations:s}=n.find(m=>m.chainId===e.sourceChain.chainId)??{},{minimumConfirmations:i}=n.find(m=>m.chainId===e.targetChain.chainId)??{};if(!s||!i)throw new T("CONFIRMATION_COUNT_UNKNOWN");let t=await F(n,{...e,provider:e.sourceProvider}),o=(e.asset.address&&t[e.asset.address])??0n,d=await Ae(n,e),u=Date.now(),a=b({chain:e.targetChain,provider:e.targetProvider}),p=await Ce(a);return {type:"cctp",environment:r,fromAddress:e.fromAddress,toAddress:e.toAddress??e.fromAddress,amount:e.amount,amountDecimals:e.asset.decimals,symbol:e.asset.symbol,bridgeFee:o,sourceChain:e.sourceChain,sourceStartedAt:u,sourceTxHash:d,sourceConfirmationCount:0,requiredSourceConfirmationCount:s,targetChain:e.targetChain,targetConfirmationCount:0,requiredTargetConfirmationCount:i,startBlockNumber:p}}var O=(n,e)=>n.gasPrice&&BigInt(n.gasPrice*e.gasUsed);var L=async n=>new Promise(e=>{setTimeout(e,n);});var U=({promise:n,delay:e,startAfter:r})=>{let s=!1,i=!1,t=0,o,d,u=m=>{o&&s&&(s=!1,o(m));},a=()=>{i=!0,d&&s&&(s=!1,d("cancelled"));};return {result:new Promise((m,c)=>{s=!0,o=m,d=c;let y=async()=>{if(!(!s||i)){try{if(await n(u),!s||i)return;await L(e);}catch(l){console.error(l.message),t+=1,await L(2**t*e);}await y();}};r?setTimeout(y,r):y();}),cancel:a}};var be={test:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.test.json",production:"https://raw.githubusercontent.com/ava-labs/avalanche-bridge-resources/main/cctp/cctp_config.json"},Z=async n=>{try{return (await(await fetch(be[n])).json()).map(s=>({...s,chainId:`eip155:${s.chainId}`}))}catch(e){throw new S("CONFIG_NOT_AVAILABLE",`Error while fetching CCTP config: ${e.message}`)}},V=n=>{switch(n){case"eip155:43114":case"eip155:43113":return 1e3;default:return 2e4}};var ee=1e3*60*60*3,Q=1024n,te=5e3,A=(n,e,r)=>{Object.assign(n,Object.fromEntries(Object.entries(e).filter(([,s])=>s!==void 0))),r({...n});},he=async(n,e)=>{let{sourceProvider:r,targetProvider:s,updateListener:i,bridgeTransfer:t}=e,o=b({chain:t.sourceChain,provider:r}),d=n.find(c=>c.chainId===t.sourceChain.chainId),u=b({chain:t.targetChain,provider:s}),a=n.find(c=>c.chainId===t.targetChain.chainId),p={...t};if(!d||!a)throw new T("CHAIN_NOT_SUPPORTED");return U({promise:async c=>{if(p.completedAt||p.metadata?.nonce)return c(p);if(p.sourceStartedAt+ee<=Date.now())return A(p,{completedAt:Date.now(),errorCode:5004},i),c(p);let y=await o.getTransactionReceipt({hash:p.sourceTxHash});if(!p.sourceNetworkFee){let g=await o.getTransaction({hash:p.sourceTxHash}),I=O(g,y);I&&A(p,{sourceNetworkFee:I},i);}if(y.status==="reverted")return A(p,{completedAt:Date.now(),errorCode:5005},i),c(p);let l=await o.getTransactionConfirmations({hash:p.sourceTxHash}),f=l>p.sourceConfirmationCount,h=l>=p.requiredSourceConfirmationCount;if(f){let g={};g.sourceConfirmationCount=Number(l),h||(g.startBlockNumber=await u.getBlockNumber()),A(p,g,i);}if(!h)return;p.startBlockNumber||A(p,{startBlockNumber:await u.getBlockNumber()},i);let C=y.logs.find(g=>g.address.toLowerCase()===d.tokenRouterAddress.toLowerCase()?decodeEventLog({abi:v,...g}).eventName==="TransferTokens":!1);if(!C)throw new T("INVALID_PARAMS",`unable to find a TransferTokens event in source transaction "${p.sourceTxHash}"`);let P=decodeEventLog({abi:v,eventName:"TransferTokens",...C}).args.nonce;return A(p,{targetStartedAt:Date.now(),metadata:{nonce:P}},i),c(p)},delay:V(d.chainId),startAfter:te})},Ie=async(n,e)=>{let{targetProvider:r,updateListener:s,bridgeTransfer:i}=e,t={...i};if(!i.completedAt&&!i.metadata?.nonce)throw new T("INVALID_PARAMS","nonce is missing");if(!i.startBlockNumber)throw new T("INVALID_PARAMS","startBlockNumber is missing");let o=b({chain:i.targetChain,provider:r}),d=n.find(a=>a.chainId===i.targetChain.chainId);if(!d)throw new T("INVALID_PARAMS",`unknown target chain "${i.targetChain.chainId}"`);return U({promise:async a=>{if(t.completedAt)return a(t);if(!t.startBlockNumber)return A(t,{completedAt:Date.now(),errorCode:5003},s),a(t);if(t.sourceStartedAt+ee<=Date.now())return A(t,{completedAt:Date.now(),errorCode:5004},s),a(t);if(!t.targetTxHash){let l=await o.getBlockNumber(),f=t.startBlockNumber-Q,h=f>=0n?f:"earliest",C=t.startBlockNumber+Q,_=C<l?C:"latest",P=await o.getLogs({address:d.messageTransmitterAddress,event:{name:"MessageReceived",type:"event",inputs:[{indexed:!0,internalType:"address",name:"caller",type:"address"},{indexed:!1,internalType:"uint32",name:"sourceDomain",type:"uint32"},{indexed:!0,internalType:"uint64",name:"nonce",type:"uint64"},{indexed:!1,internalType:"bytes32",name:"sender",type:"bytes32"},{indexed:!1,internalType:"bytes",name:"messageBody",type:"bytes"}]},args:{nonce:t.metadata?.nonce},fromBlock:h,toBlock:_});if(P[0]?.transactionHash)A(t,{targetTxHash:P[0].transactionHash},s);else {A(t,{startBlockNumber:l},s);return}}let p=await o.getTransactionReceipt({hash:t.targetTxHash});if(!t.targetNetworkFee){let l=await o.getTransaction({hash:t.targetTxHash}),f=O(l,p);f&&A(t,{targetNetworkFee:f},s);}if(p.status==="reverted")return A(t,{completedAt:Date.now(),errorCode:5005},s),a(t);let m=await o.getTransactionConfirmations({hash:t.targetTxHash}),c=m>t.targetConfirmationCount,y=m>=t.requiredTargetConfirmationCount;if(c&&A(t,{targetConfirmationCount:Number(m)},s),!!y)return A(t,{completedAt:Date.now()},s),a(t)},delay:V(d.chainId),startAfter:te})};function ne(n,e){let r,s=()=>{r?.();};return {result:(async()=>{let{sourceProvider:t,targetProvider:o,updateListener:d,bridgeTransfer:u}=e,{result:a,cancel:p}=await he(n,{sourceProvider:t,targetProvider:o,updateListener:d,bridgeTransfer:u});r=p;let m=await a,{result:c,cancel:y}=await Ie(n,{sourceProvider:t,targetProvider:o,updateListener:d,bridgeTransfer:m});return r=y,c})(),cancel:s}}var we=60000n,ae=175000n,ve=60000n,se=215000n;async function ie(n,e){let{sourceChain:r,targetChain:s,asset:i,amount:t,fromAddress:o,toAddress:d,sourceProvider:u}=e,a=d??o;if(!isAddress(o)||!isAddress(a))throw new T("INCORRECT_ADDRESS_PROVIDED");let{sourceChainData:p,burnToken:m}=R({sourceChain:r,targetChain:s,asset:i,amount:t},n),y=await b({chain:r,provider:u}).readContract({address:m.address,abi:N,functionName:"allowance",args:[o,p.tokenRouterAddress]}),l=p.domain===1;return y>=t?l?se:ae:l?ve+se:we+ae}var oe=async n=>{let e=await Z(n);return {type:"cctp",estimateGas:r=>ie(e,r),getAssets:()=>$(e),getFees:r=>F(e,r),transferAsset:r=>J(e,r,n),trackTransfer:r=>ne(e,r)}};var Ne=new Map([["cctp",oe]]),Pe=async(n,e)=>{let r=[...Ne].filter(([i])=>!e.includes(i)),s=await Promise.allSettled(r.map(async([i,t])=>[i,await t(n)]));return new Map(compact(s.map(i=>i.status==="fulfilled"?i.value:void 0)))},D=(n,e,r)=>{let s=e.destinations[r];for(let i of s??[]){let t=n.get(i);if(t)return {bridge:t,type:i}}throw new k};var _n=({environment:n,enabledBridgeServices:e})=>({environment:n,getAssets:async()=>(await Promise.all(Array.from(e).map(([,a])=>a.getAssets()))).reduce((a,p)=>{for(let[m,c]of Object.entries(p)){let y=a[m];if(y)for(let l of c){let f=y.findIndex(({symbol:h})=>h===l.symbol);f===-1?y.push(l):mergeWith(y[f],l,(h,C)=>{if(isArray(h))return [...new Set(h.concat(C))]});}else a[m]=c;}return a},{}),getFees:async u=>{let{bridge:a}=D(e,u.asset,u.targetChain.chainId);return a.getFees(u)},estimateGas:async u=>{let{bridge:a}=D(e,u.asset,u.targetChain.chainId);return a.estimateGas(u)},canTransferAsset:(u,a)=>{try{return D(e,u,a),!0}catch{return !1}},transferAsset:async u=>{let{bridge:a}=D(e,u.asset,u.targetChain.chainId);return a.transferAsset(u)},trackTransfer:u=>{let a=e.get(u.bridgeTransfer.type);if(!a)throw new k;return a.trackTransfer(u)}});
|
|
5
|
+
|
|
6
|
+
export { G as BridgeSignatureReason, E as BridgeType, K as Environment, B as ErrorCode, w as ErrorReason, H as TokenType, M as caip2, _n as createUnifiedBridgeService, Pe as getEnabledBridgeServices };
|
|
4
7
|
//# sourceMappingURL=out.js.map
|
|
5
8
|
//# sourceMappingURL=index.js.map
|