@avalabs/bridge-unified 2.1.2 → 3.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/dist/index.d.cts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { Address } from 'viem';
2
+ import { z } from 'zod';
2
3
 
3
4
  type Chain = {
4
5
  chainName: string;
@@ -7,28 +8,135 @@ type Chain = {
7
8
  utilityAddresses?: {
8
9
  multicall: Address;
9
10
  };
10
- networkToken: Asset;
11
+ networkToken: NativeAsset;
11
12
  };
13
+ declare enum AvalancheChainIds {
14
+ FUJI = "eip155:43113",
15
+ MAINNET = "eip155:43114"
16
+ }
17
+ declare enum EthereumChainIds {
18
+ MAINNET = "eip155:1",
19
+ SEPOLIA = "eip155:11155111"
20
+ }
21
+ declare enum BitcoinChainIds {
22
+ MAINNET = "bip122:000000000019d6689c085ae165831e93",
23
+ TESTNET = "bip122:000000000933ea01ad0ee984209779ba"
24
+ }
25
+ declare const AVALANCHE_FUJI_CHAIN: Chain;
26
+ declare const AVALANCHE_MAINNET_CHAIN: Chain;
27
+ declare const ETHEREUM_SEPOLIA_CHAIN: Chain;
28
+ declare const ETHEREUM_MAINNET_CHAIN: Chain;
29
+ declare const BITCOIN_TESTNET_CHAIN: Chain;
30
+ declare const BITCOIN_MAINNET_CHAIN: Chain;
12
31
 
13
32
  declare enum Environment {
33
+ DEV = "dev",
14
34
  PROD = "production",
35
+ STAGING = "staging",
15
36
  TEST = "test"
16
37
  }
17
38
 
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
- };
39
+ /**
40
+ * Custom Bitcoin UTXO interface.
41
+ */
42
+
43
+ declare const BitcoinInputUTXO: z.ZodObject<{
44
+ txHash: z.ZodString;
45
+ txHex: z.ZodOptional<z.ZodString>;
46
+ index: z.ZodNumber;
47
+ value: z.ZodNumber;
48
+ script: z.ZodString;
49
+ blockHeight: z.ZodNumber;
50
+ confirmations: z.ZodNumber;
51
+ }, "strip", z.ZodTypeAny, {
52
+ txHash: string;
53
+ value: number;
54
+ index: number;
55
+ script: string;
56
+ blockHeight: number;
57
+ confirmations: number;
58
+ txHex?: string | undefined;
59
+ }, {
60
+ txHash: string;
61
+ value: number;
62
+ index: number;
63
+ script: string;
64
+ blockHeight: number;
65
+ confirmations: number;
66
+ txHex?: string | undefined;
67
+ }>;
68
+ type BitcoinInputUTXO = typeof BitcoinInputUTXO._output;
69
+ declare const BitcoinInputUTXOWithOptionalScript: z.ZodObject<z.objectUtil.extendShape<{
70
+ txHash: z.ZodString;
71
+ txHex: z.ZodOptional<z.ZodString>;
72
+ index: z.ZodNumber;
73
+ value: z.ZodNumber;
74
+ script: z.ZodString;
75
+ blockHeight: z.ZodNumber;
76
+ confirmations: z.ZodNumber;
77
+ }, {
78
+ script: z.ZodOptional<z.ZodString>;
79
+ }>, "strip", z.ZodTypeAny, {
80
+ txHash: string;
81
+ value: number;
82
+ index: number;
83
+ blockHeight: number;
84
+ confirmations: number;
85
+ txHex?: string | undefined;
86
+ script?: string | undefined;
87
+ }, {
88
+ txHash: string;
89
+ value: number;
90
+ index: number;
91
+ blockHeight: number;
92
+ confirmations: number;
93
+ txHex?: string | undefined;
94
+ script?: string | undefined;
95
+ }>;
96
+ type BitcoinInputUTXOWithOptionalScript = typeof BitcoinInputUTXOWithOptionalScript._output;
97
+ /**
98
+ * Used for defining outputs when creating a transaction.
99
+ */
100
+ declare const BitcoinOutputUTXO: z.ZodObject<{
101
+ address: z.ZodString;
102
+ value: z.ZodNumber;
103
+ }, "strip", z.ZodTypeAny, {
104
+ value: number;
105
+ address: string;
106
+ }, {
107
+ value: number;
108
+ address: string;
109
+ }>;
110
+ type BitcoinOutputUTXO = typeof BitcoinOutputUTXO._output;
111
+ interface BitcoinTx {
112
+ hash: string;
113
+ fees: number;
114
+ block: number;
115
+ amount: number;
116
+ confirmations: number;
117
+ blockTime: number;
118
+ addresses: string[];
119
+ inputs: {
120
+ txid: string;
121
+ vout: number;
122
+ sequence: number;
123
+ n: number;
124
+ addresses: string[];
125
+ isAddress: boolean;
126
+ value: number;
127
+ }[];
128
+ outputs: {
129
+ addresses: string[];
130
+ value: number;
131
+ n: number;
132
+ spent: boolean;
133
+ hex: string;
134
+ isAddress: boolean;
135
+ }[];
136
+ }
29
137
 
30
138
  type Hex = `0x${string}`;
31
- type TransactionRequest = {
139
+ type EvmTransactionRequest = {
32
140
  type?: number | null;
33
141
  data?: Hex | null;
34
142
  from: Hex;
@@ -41,8 +149,20 @@ type TransactionRequest = {
41
149
  maxPriorityFeePerGas?: bigint | null;
42
150
  maxFeePerGas?: bigint | null;
43
151
  };
44
- type Dispatch = (signedTxHash: Hex) => Promise<Hex>;
45
- type Signer = (data: TransactionRequest, dispatch: Dispatch) => Promise<Hex>;
152
+ type EvmDispatch = (signedTxHash: Hex) => Promise<Hex>;
153
+ type EvmSign = (data: EvmTransactionRequest, dispatch: EvmDispatch) => Promise<Hex>;
154
+ type EvmSigner = {
155
+ sign: EvmSign;
156
+ };
157
+ type BtcTransactionRequest = {
158
+ inputs: BitcoinInputUTXO[];
159
+ outputs: BitcoinOutputUTXO[];
160
+ };
161
+ type BtcDispatch = (signedTxHash: string) => Promise<string>;
162
+ type BtcSign = (data: BtcTransactionRequest, dispatch: BtcDispatch) => Promise<string>;
163
+ type BtcSigner = {
164
+ sign: BtcSign;
165
+ };
46
166
 
47
167
  declare enum ErrorCode {
48
168
  BRIDGE_NOT_AVAILABLE = 5001,
@@ -52,15 +172,23 @@ declare enum ErrorCode {
52
172
  TRANSACTION_REVERTED = 5005
53
173
  }
54
174
  declare enum ErrorReason {
55
- UNKNOWN = "UNKNOWN",
175
+ ASSET_NOT_SUPPORTED = "ASSET_NOT_SUPPORTED",
176
+ CHAIN_NOT_SUPPORTED = "CHAIN_NOT_SUPPORTED",
56
177
  CONFIG_NOT_AVAILABLE = "CONFIG_NOT_AVAILABLE",
57
- INVALID_PARAMS = "INVALID_PARAMS",
178
+ CONFIRMATION_COUNT_UNKNOWN = "CONFIRMATION_COUNT_UNKNOWN",
179
+ ENVIRONMENT_NOT_SUPPORTED = "ENVIRONMENT_NOT_SUPPORTED",
58
180
  IDENTICAL_CHAINS_PROVIDED = "IDENTICAL_CHAINS_PROVIDED",
59
- INCORRECT_AMOUNT_PROVIDED = "INCORRECT_AMOUNT_PROVIDED",
60
181
  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"
182
+ INCORRECT_AMOUNT_PROVIDED = "INCORRECT_AMOUNT_PROVIDED",
183
+ INCORRECT_HASH_PROVIDED = "INCORRECT_HASH_PROVIDED",
184
+ INCORRECT_PROVIDER_PROVIDED = "INCORRECT_PROVIDER_PROVIDED",
185
+ INCORRECT_SIGNER_PROVIDED = "INCORRECT_SIGNER_PROVIDED",
186
+ INCORRECT_TXHASH_PROVIDED = "INCORRECT_TXHASH_PROVIDED",
187
+ INVALID_PARAMS = "INVALID_PARAMS",
188
+ UNKNOWN = "UNKNOWN",
189
+ VULNERABLE_TOKEN_APPROVAL_ADDRESS = "VULNERABLE_TOKEN_APPROVAL_ADDRESS",
190
+ WARDEN_CONFIG_MISMATCH = "WARDEN_CONFIG_MISMATCH",
191
+ WARDEN_CONFIG_MISSING_NETWORK = "WARDEN_CONFIG_MISSING_NETWORK"
64
192
  }
65
193
 
66
194
  type BridgeTransfer = {
@@ -69,8 +197,7 @@ type BridgeTransfer = {
69
197
  fromAddress: string;
70
198
  toAddress: string;
71
199
  amount: bigint;
72
- amountDecimals: number;
73
- symbol: string;
200
+ asset: BridgeAsset;
74
201
  completedAt?: number;
75
202
  errorCode?: ErrorCode;
76
203
  bridgeFee: bigint;
@@ -79,30 +206,75 @@ type BridgeTransfer = {
79
206
  sourceTxHash: string;
80
207
  sourceNetworkFee?: bigint;
81
208
  sourceConfirmationCount: number;
82
- requiredSourceConfirmationCount: number;
209
+ sourceRequiredConfirmationCount: number;
83
210
  targetChain: Chain;
84
211
  targetStartedAt?: number;
85
212
  targetTxHash?: string;
86
213
  targetNetworkFee?: bigint;
87
214
  targetConfirmationCount: number;
88
- requiredTargetConfirmationCount: number;
89
- startBlockNumber?: bigint;
215
+ targetRequiredConfirmationCount: number;
216
+ targetStartBlockNumber?: bigint;
90
217
  metadata?: Record<string, unknown>;
91
218
  };
92
219
 
220
+ interface BitcoinFunctions {
221
+ getChainHeight: () => Promise<number>;
222
+ getUTXOs: (address: string, withScripts?: boolean) => Promise<{
223
+ confirmed: BitcoinInputUTXOWithOptionalScript[];
224
+ unconfirmed: BitcoinInputUTXOWithOptionalScript[];
225
+ }>;
226
+ getTransaction: (hash: string) => Promise<BitcoinTx>;
227
+ getFeeRates: () => Promise<{
228
+ low: number;
229
+ medium: number;
230
+ high: number;
231
+ }>;
232
+ getUtxoBalance: (address: string, withScripts?: boolean) => Promise<{
233
+ utxos: BitcoinInputUTXOWithOptionalScript[];
234
+ utxosUnconfirmed: BitcoinInputUTXOWithOptionalScript[];
235
+ }>;
236
+ getScriptsForUtxos: (utxos: BitcoinInputUTXOWithOptionalScript[]) => Promise<BitcoinInputUTXO[]>;
237
+ issueRawTx: (tx: string) => Promise<string>;
238
+ }
239
+
93
240
  declare enum BridgeType {
94
- CCTP = "cctp"
241
+ AVALANCHE_EVM = "avalanche-evm",
242
+ AVALANCHE_BTC_AVA = "avalanche-btc-ava",
243
+ AVALANCHE_AVA_BTC = "avalanche-ava-btc",
244
+ CCTP = "cctp",
245
+ ICTT_ERC20_ERC20 = "ictt-erc20-erc20"
95
246
  }
247
+ declare const BTC_BRIDGE_TYPES: readonly [BridgeType.AVALANCHE_AVA_BTC, BridgeType.AVALANCHE_BTC_AVA];
248
+ declare const EVM_BRIDGE_TYPES: readonly [BridgeType.AVALANCHE_EVM, BridgeType.CCTP, BridgeType.ICTT_ERC20_ERC20];
249
+ type ArrayElement<A> = A extends readonly (infer T)[] ? T : never;
250
+ type EvmBridgeInitializer = {
251
+ type: ArrayElement<typeof EVM_BRIDGE_TYPES>;
252
+ signer: EvmSigner;
253
+ };
254
+ type AvaToBtcBridgeInitializer = {
255
+ type: BridgeType.AVALANCHE_AVA_BTC;
256
+ signer: EvmSigner;
257
+ bitcoinFunctions: BitcoinFunctions;
258
+ };
259
+ type BtcToAvaBridgeInitializer = {
260
+ type: BridgeType.AVALANCHE_BTC_AVA;
261
+ signer: BtcSigner;
262
+ bitcoinFunctions: BitcoinFunctions;
263
+ };
264
+ type BridgeInitializer = EvmBridgeInitializer | AvaToBtcBridgeInitializer | BtcToAvaBridgeInitializer;
265
+ declare const isEvmBridgeInitializer: (initializer: BridgeInitializer) => initializer is EvmBridgeInitializer;
266
+ declare const isAvaToBtcBridgeInitializer: (initializer: BridgeInitializer) => initializer is AvaToBtcBridgeInitializer;
267
+ declare const isBtcToAvaBridgeInitializer: (initializer: BridgeInitializer) => initializer is BtcToAvaBridgeInitializer;
96
268
  type FeeParams = {
97
269
  asset: BridgeAsset;
98
270
  amount: bigint;
99
271
  sourceChain: Chain;
100
272
  targetChain: Chain;
101
- provider?: Provider;
102
273
  };
103
274
  declare enum BridgeSignatureReason {
104
275
  AllowanceApproval = "allowance-approval",
105
- TokensTransfer = "tokens-transfer"
276
+ TokensTransfer = "tokens-transfer",
277
+ WrapToken = "wrap-token"
106
278
  }
107
279
  type BridgeStepDetails = {
108
280
  currentSignature: number;
@@ -113,30 +285,50 @@ type TransferParams = {
113
285
  asset: BridgeAsset;
114
286
  amount: bigint;
115
287
  fromAddress: string;
116
- toAddress?: string;
288
+ toAddress: string;
117
289
  sourceChain: Chain;
118
290
  targetChain: Chain;
119
- sourceProvider?: Provider;
120
- targetProvider?: Provider;
121
291
  onStepChange?: (stepDetails: BridgeStepDetails) => void;
122
- sign?: Signer;
123
292
  };
293
+ type GasEstimationParams = Omit<TransferParams, 'onStepChange' | 'toAddress'>;
124
294
  type TrackingParams = {
125
295
  bridgeTransfer: BridgeTransfer;
126
- sourceProvider?: Provider;
127
- targetProvider?: Provider;
128
296
  updateListener: (transfer: BridgeTransfer) => void;
129
297
  };
298
+ type AnalyzeTxParams = {
299
+ chainId: string;
300
+ from: string;
301
+ to: string;
302
+ tokenTransfers: {
303
+ from?: string;
304
+ to?: string;
305
+ symbol: string;
306
+ }[];
307
+ };
308
+ type AnalyzeTxResult = {
309
+ isBridgeTx: true;
310
+ bridgeType: BridgeType;
311
+ sourceChainId?: string;
312
+ targetChainId?: string;
313
+ } | {
314
+ isBridgeTx: false;
315
+ };
130
316
  type BridgeService = {
131
317
  type: BridgeType;
132
- estimateGas: (params: TransferParams) => Promise<bigint>;
133
- getAssets: () => Promise<ChainAssetMap>;
134
- getFees: (params: FeeParams) => Promise<AssetFeeMap>;
318
+ analyzeTx: (params: AnalyzeTxParams) => AnalyzeTxResult;
319
+ estimateGas: (params: GasEstimationParams) => Promise<bigint>;
320
+ estimateReceiveAmount: (params: GasEstimationParams) => Promise<{
321
+ asset: Asset;
322
+ amount: bigint;
323
+ }>;
135
324
  transferAsset: (params: TransferParams) => Promise<BridgeTransfer>;
136
325
  trackTransfer: (transfer: TrackingParams) => {
137
326
  cancel: () => void;
138
327
  result: Promise<BridgeTransfer>;
139
328
  };
329
+ getAssets: () => ChainAssetMap;
330
+ getFees: (params: FeeParams) => Promise<AssetFeeMap>;
331
+ getMinimumTransferAmount: (params: FeeParams) => Promise<bigint>;
140
332
  };
141
333
  type BridgeServiceFactory = (environment: Environment) => Promise<BridgeService>;
142
334
 
@@ -144,39 +336,40 @@ declare enum TokenType {
144
336
  NATIVE = "native",
145
337
  ERC20 = "erc20"
146
338
  }
147
- type Asset = {
148
- type: TokenType;
149
- address?: Address;
339
+ type BaseAsset = {
150
340
  name: string;
151
341
  symbol: string;
152
342
  decimals: number;
153
343
  };
344
+ type Erc20Asset = BaseAsset & {
345
+ type: TokenType.ERC20;
346
+ address: Address;
347
+ };
348
+ type NativeAsset = BaseAsset & {
349
+ type: TokenType.NATIVE;
350
+ };
351
+ declare const isErc20Asset: (asset: Asset) => asset is Erc20Asset;
352
+ declare const isNativeAsset: (asset: Asset) => asset is NativeAsset;
353
+ type Asset = Erc20Asset | NativeAsset;
154
354
  type DestinationInfo = Record<string, BridgeType[]>;
155
355
  type BridgeAsset = Asset & {
156
356
  destinations: DestinationInfo;
157
357
  };
158
358
  type ChainAssetMap = Record<string, BridgeAsset[]>;
159
- type AssetFeeMap = Record<Address, bigint>;
359
+ type AssetFeeMap = Partial<Record<Address | 'NATIVE', bigint>>;
160
360
 
161
361
  type BridgeServicesMap = Map<BridgeType, BridgeService>;
162
362
  type BridgeServiceConfig = {
163
363
  environment: Environment;
164
364
  enabledBridgeServices: BridgeServicesMap;
165
365
  };
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>;
366
+ type UnifiedBridgeService = Omit<BridgeService, 'type'> & {
172
367
  canTransferAsset: (asset: BridgeAsset, targetChainId: string) => boolean;
173
- transferAsset: (params: TransferParams) => Promise<BridgeTransfer>;
174
- trackTransfer: (params: TrackingParams) => {
175
- cancel: () => void;
176
- result: Promise<BridgeTransfer>;
177
- };
368
+ environment: Environment;
178
369
  };
179
370
 
371
+ declare const createUnifiedBridgeService: ({ environment, enabledBridgeServices }: BridgeServiceConfig) => UnifiedBridgeService;
372
+
180
373
  type Caip2ChainId = {
181
374
  namespace: string;
182
375
  reference: string;
@@ -186,6 +379,6 @@ declare const _default: {
186
379
  toString: ({ namespace, reference }: Caip2ChainId) => string;
187
380
  };
188
381
 
189
- declare const getEnabledBridgeServices: (environment: Environment, disabledBridgeTypes: BridgeType[]) => Promise<BridgeServicesMap>;
382
+ declare const getEnabledBridgeServices: (environment: Environment, enabledBridgeInitializers: BridgeInitializer[]) => Promise<BridgeServicesMap>;
190
383
 
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 };
384
+ export { AVALANCHE_FUJI_CHAIN, AVALANCHE_MAINNET_CHAIN, AnalyzeTxParams, AnalyzeTxResult, ArrayElement, Asset, AssetFeeMap, AvaToBtcBridgeInitializer, AvalancheChainIds, BITCOIN_MAINNET_CHAIN, BITCOIN_TESTNET_CHAIN, BTC_BRIDGE_TYPES, BitcoinChainIds, BitcoinFunctions, BitcoinInputUTXO, BitcoinInputUTXOWithOptionalScript, BitcoinTx, BridgeAsset, BridgeInitializer, BridgeService, BridgeServiceConfig, BridgeServiceFactory, BridgeServicesMap, BridgeSignatureReason, BridgeStepDetails, BridgeTransfer, BridgeType, BtcDispatch, BtcSign, BtcSigner, BtcToAvaBridgeInitializer, BtcTransactionRequest, Chain, ChainAssetMap, DestinationInfo, ETHEREUM_MAINNET_CHAIN, ETHEREUM_SEPOLIA_CHAIN, EVM_BRIDGE_TYPES, Environment, Erc20Asset, ErrorCode, ErrorReason, EthereumChainIds, EvmBridgeInitializer, EvmDispatch, EvmSign, EvmSigner, EvmTransactionRequest, FeeParams, GasEstimationParams, Hex, NativeAsset, TokenType, TrackingParams, TransferParams, UnifiedBridgeService, _default as caip2, createUnifiedBridgeService, getEnabledBridgeServices, isAvaToBtcBridgeInitializer, isBtcToAvaBridgeInitializer, isErc20Asset, isEvmBridgeInitializer, isNativeAsset };