@atomiqlabs/sdk 8.6.6 → 8.6.8
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/SmartChainAssets.d.ts +181 -181
- package/dist/SmartChainAssets.js +181 -181
- package/dist/bitcoin/coinselect2/accumulative.d.ts +6 -6
- package/dist/bitcoin/coinselect2/accumulative.js +52 -51
- package/dist/bitcoin/coinselect2/blackjack.d.ts +6 -6
- package/dist/bitcoin/coinselect2/blackjack.js +38 -37
- package/dist/bitcoin/coinselect2/index.d.ts +19 -17
- package/dist/bitcoin/coinselect2/index.js +69 -69
- package/dist/bitcoin/coinselect2/utils.d.ts +77 -75
- package/dist/bitcoin/coinselect2/utils.js +123 -123
- package/dist/bitcoin/wallet/BitcoinWallet.d.ts +130 -128
- package/dist/bitcoin/wallet/BitcoinWallet.js +322 -322
- package/dist/bitcoin/wallet/IBitcoinWallet.d.ts +78 -78
- package/dist/bitcoin/wallet/IBitcoinWallet.js +21 -20
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.d.ts +101 -99
- package/dist/bitcoin/wallet/SingleAddressBitcoinWallet.js +190 -176
- package/dist/enums/FeeType.d.ts +15 -15
- package/dist/enums/FeeType.js +19 -19
- package/dist/enums/SwapAmountType.d.ts +15 -15
- package/dist/enums/SwapAmountType.js +19 -19
- package/dist/enums/SwapDirection.d.ts +15 -15
- package/dist/enums/SwapDirection.js +19 -19
- package/dist/enums/SwapSide.d.ts +15 -15
- package/dist/enums/SwapSide.js +19 -19
- package/dist/enums/SwapType.d.ts +75 -75
- package/dist/enums/SwapType.js +79 -79
- package/dist/errors/IntermediaryError.d.ts +13 -13
- package/dist/errors/IntermediaryError.js +27 -27
- package/dist/errors/RequestError.d.ts +32 -32
- package/dist/errors/RequestError.js +54 -54
- package/dist/errors/UserError.d.ts +8 -8
- package/dist/errors/UserError.js +16 -16
- package/dist/events/UnifiedSwapEventListener.d.ts +23 -23
- package/dist/events/UnifiedSwapEventListener.js +130 -130
- package/dist/http/HttpUtils.d.ts +27 -27
- package/dist/http/HttpUtils.js +91 -90
- package/dist/http/paramcoders/IParamReader.d.ts +8 -8
- package/dist/http/paramcoders/IParamReader.js +2 -2
- package/dist/http/paramcoders/ParamDecoder.d.ts +44 -42
- package/dist/http/paramcoders/ParamDecoder.js +137 -137
- package/dist/http/paramcoders/ParamEncoder.d.ts +20 -18
- package/dist/http/paramcoders/ParamEncoder.js +36 -36
- package/dist/http/paramcoders/SchemaVerifier.d.ts +26 -26
- package/dist/http/paramcoders/SchemaVerifier.js +145 -145
- package/dist/http/paramcoders/client/ResponseParamDecoder.d.ts +11 -11
- package/dist/http/paramcoders/client/ResponseParamDecoder.js +57 -57
- package/dist/http/paramcoders/client/StreamParamEncoder.d.ts +13 -11
- package/dist/http/paramcoders/client/StreamParamEncoder.js +26 -26
- package/dist/http/paramcoders/client/StreamingFetchPromise.d.ts +16 -16
- package/dist/http/paramcoders/client/StreamingFetchPromise.js +174 -173
- package/dist/index.d.ts +85 -85
- package/dist/index.js +158 -158
- package/dist/intermediaries/Intermediary.d.ts +157 -157
- package/dist/intermediaries/Intermediary.js +142 -142
- package/dist/intermediaries/IntermediaryDiscovery.d.ts +199 -198
- package/dist/intermediaries/IntermediaryDiscovery.js +406 -406
- package/dist/intermediaries/apis/IntermediaryAPI.d.ts +439 -437
- package/dist/intermediaries/apis/IntermediaryAPI.js +603 -603
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.d.ts +155 -155
- package/dist/intermediaries/apis/TrustedIntermediaryAPI.js +137 -137
- package/dist/lnurl/LNURL.d.ts +102 -102
- package/dist/lnurl/LNURL.js +321 -321
- package/dist/prices/RedundantSwapPrice.d.ts +110 -110
- package/dist/prices/RedundantSwapPrice.js +222 -222
- package/dist/prices/SingleSwapPrice.d.ts +34 -34
- package/dist/prices/SingleSwapPrice.js +44 -44
- package/dist/prices/SwapPriceWithChain.d.ts +107 -107
- package/dist/prices/SwapPriceWithChain.js +128 -128
- package/dist/prices/abstract/ICachedSwapPrice.d.ts +28 -28
- package/dist/prices/abstract/ICachedSwapPrice.js +62 -62
- package/dist/prices/abstract/IPriceProvider.d.ts +81 -81
- package/dist/prices/abstract/IPriceProvider.js +74 -74
- package/dist/prices/abstract/ISwapPrice.d.ts +168 -168
- package/dist/prices/abstract/ISwapPrice.js +279 -279
- package/dist/prices/providers/BinancePriceProvider.d.ts +23 -23
- package/dist/prices/providers/BinancePriceProvider.js +30 -30
- package/dist/prices/providers/CoinGeckoPriceProvider.d.ts +23 -23
- package/dist/prices/providers/CoinGeckoPriceProvider.js +29 -29
- package/dist/prices/providers/CoinPaprikaPriceProvider.d.ts +25 -25
- package/dist/prices/providers/CoinPaprikaPriceProvider.js +29 -29
- package/dist/prices/providers/CustomPriceProvider.d.ts +24 -24
- package/dist/prices/providers/CustomPriceProvider.js +35 -35
- package/dist/prices/providers/KrakenPriceProvider.d.ts +38 -38
- package/dist/prices/providers/KrakenPriceProvider.js +45 -45
- package/dist/prices/providers/OKXPriceProvider.d.ts +34 -34
- package/dist/prices/providers/OKXPriceProvider.js +29 -29
- package/dist/prices/providers/abstract/ExchangePriceProvider.d.ts +17 -17
- package/dist/prices/providers/abstract/ExchangePriceProvider.js +21 -21
- package/dist/prices/providers/abstract/HttpPriceProvider.d.ts +7 -7
- package/dist/prices/providers/abstract/HttpPriceProvider.js +12 -12
- package/dist/storage/IUnifiedStorage.d.ts +85 -85
- package/dist/storage/IUnifiedStorage.js +2 -2
- package/dist/storage/UnifiedSwapStorage.d.ts +114 -114
- package/dist/storage/UnifiedSwapStorage.js +116 -116
- package/dist/storage-browser/IndexedDBUnifiedStorage.d.ts +63 -63
- package/dist/storage-browser/IndexedDBUnifiedStorage.js +298 -298
- package/dist/storage-browser/LocalStorageManager.d.ts +49 -49
- package/dist/storage-browser/LocalStorageManager.js +93 -93
- package/dist/swapper/Swapper.d.ts +687 -686
- package/dist/swapper/Swapper.js +1603 -1603
- package/dist/swapper/SwapperFactory.d.ts +135 -135
- package/dist/swapper/SwapperFactory.js +162 -162
- package/dist/swapper/SwapperUtils.d.ts +200 -200
- package/dist/swapper/SwapperUtils.js +467 -467
- package/dist/swapper/SwapperWithChain.d.ts +404 -404
- package/dist/swapper/SwapperWithChain.js +469 -469
- package/dist/swapper/SwapperWithSigner.d.ts +322 -322
- package/dist/swapper/SwapperWithSigner.js +318 -318
- package/dist/swaps/IAddressSwap.d.ts +22 -22
- package/dist/swaps/IAddressSwap.js +14 -13
- package/dist/swaps/IBTCWalletSwap.d.ts +73 -73
- package/dist/swaps/IBTCWalletSwap.js +18 -17
- package/dist/swaps/IClaimableSwap.d.ts +49 -49
- package/dist/swaps/IClaimableSwap.js +15 -14
- package/dist/swaps/IClaimableSwapWrapper.d.ts +15 -15
- package/dist/swaps/IClaimableSwapWrapper.js +2 -2
- package/dist/swaps/IRefundableSwap.d.ts +43 -43
- package/dist/swaps/IRefundableSwap.js +14 -13
- package/dist/swaps/ISwap.d.ts +387 -386
- package/dist/swaps/ISwap.js +346 -346
- package/dist/swaps/ISwapWithGasDrop.d.ts +21 -21
- package/dist/swaps/ISwapWithGasDrop.js +12 -11
- package/dist/swaps/ISwapWrapper.d.ts +285 -283
- package/dist/swaps/ISwapWrapper.js +353 -353
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.d.ts +98 -98
- package/dist/swaps/escrow_swaps/IEscrowSelfInitSwap.js +126 -126
- package/dist/swaps/escrow_swaps/IEscrowSwap.d.ts +135 -133
- package/dist/swaps/escrow_swaps/IEscrowSwap.js +169 -169
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.d.ts +115 -114
- package/dist/swaps/escrow_swaps/IEscrowSwapWrapper.js +134 -134
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.d.ts +101 -98
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCLNWrapper.js +130 -130
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.d.ts +162 -162
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCSelfInitSwap.js +190 -190
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.d.ts +58 -58
- package/dist/swaps/escrow_swaps/frombtc/IFromBTCWrapper.js +78 -78
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.d.ts +531 -529
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNSwap.js +1285 -1285
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.d.ts +184 -181
- package/dist/swaps/escrow_swaps/frombtc/ln/FromBTCLNWrapper.js +418 -418
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.d.ts +583 -581
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoSwap.js +1371 -1371
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.d.ts +228 -225
- package/dist/swaps/escrow_swaps/frombtc/ln_auto/FromBTCLNAutoWrapper.js +506 -506
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.d.ts +458 -458
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCSwap.js +1126 -1126
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.d.ts +191 -190
- package/dist/swaps/escrow_swaps/frombtc/onchain/FromBTCWrapper.js +378 -378
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.d.ts +403 -403
- package/dist/swaps/escrow_swaps/tobtc/IToBTCSwap.js +924 -924
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.d.ts +62 -62
- package/dist/swaps/escrow_swaps/tobtc/IToBTCWrapper.js +112 -112
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.d.ts +127 -125
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNSwap.js +256 -256
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.d.ts +242 -241
- package/dist/swaps/escrow_swaps/tobtc/ln/ToBTCLNWrapper.js +520 -520
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.d.ts +73 -73
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCSwap.js +155 -155
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.d.ts +128 -127
- package/dist/swaps/escrow_swaps/tobtc/onchain/ToBTCWrapper.js +278 -278
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.d.ts +630 -630
- package/dist/swaps/spv_swaps/SpvFromBTCSwap.js +1443 -1443
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.d.ts +214 -213
- package/dist/swaps/spv_swaps/SpvFromBTCWrapper.js +756 -756
- package/dist/swaps/trusted/ln/LnForGasSwap.d.ts +261 -261
- package/dist/swaps/trusted/ln/LnForGasSwap.js +511 -511
- package/dist/swaps/trusted/ln/LnForGasWrapper.d.ts +40 -40
- package/dist/swaps/trusted/ln/LnForGasWrapper.js +82 -82
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.d.ts +342 -342
- package/dist/swaps/trusted/onchain/OnchainForGasSwap.js +715 -715
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.d.ts +69 -68
- package/dist/swaps/trusted/onchain/OnchainForGasWrapper.js +92 -92
- package/dist/types/AmountData.d.ts +10 -10
- package/dist/types/AmountData.js +2 -2
- package/dist/types/CustomPriceFunction.d.ts +11 -11
- package/dist/types/CustomPriceFunction.js +2 -2
- package/dist/types/PriceInfoType.d.ts +28 -28
- package/dist/types/PriceInfoType.js +57 -56
- package/dist/types/SwapExecutionAction.d.ts +88 -88
- package/dist/types/SwapExecutionAction.js +2 -2
- package/dist/types/SwapStateInfo.d.ts +5 -5
- package/dist/types/SwapStateInfo.js +2 -2
- package/dist/types/SwapWithSigner.d.ts +17 -17
- package/dist/types/SwapWithSigner.js +43 -42
- package/dist/types/Token.d.ts +99 -99
- package/dist/types/Token.js +76 -76
- package/dist/types/TokenAmount.d.ts +69 -69
- package/dist/types/TokenAmount.js +60 -59
- package/dist/types/fees/Fee.d.ts +50 -50
- package/dist/types/fees/Fee.js +2 -2
- package/dist/types/fees/FeeBreakdown.d.ts +11 -11
- package/dist/types/fees/FeeBreakdown.js +2 -2
- package/dist/types/fees/PercentagePPM.d.ts +17 -17
- package/dist/types/fees/PercentagePPM.js +18 -17
- package/dist/types/lnurl/LNURLPay.d.ts +61 -61
- package/dist/types/lnurl/LNURLPay.js +31 -30
- package/dist/types/lnurl/LNURLWithdraw.d.ts +48 -48
- package/dist/types/lnurl/LNURLWithdraw.js +27 -26
- package/dist/types/wallets/LightningInvoiceCreateService.d.ts +24 -24
- package/dist/types/wallets/LightningInvoiceCreateService.js +15 -14
- package/dist/types/wallets/MinimalBitcoinWalletInterface.d.ts +23 -23
- package/dist/types/wallets/MinimalBitcoinWalletInterface.js +2 -2
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.d.ts +9 -9
- package/dist/types/wallets/MinimalLightningNetworkWalletInterface.js +2 -2
- package/dist/utils/AutomaticClockDriftCorrection.d.ts +1 -1
- package/dist/utils/AutomaticClockDriftCorrection.js +70 -69
- package/dist/utils/BitcoinUtils.d.ts +14 -12
- package/dist/utils/BitcoinUtils.js +102 -101
- package/dist/utils/BitcoinWalletUtils.d.ts +7 -7
- package/dist/utils/BitcoinWalletUtils.js +14 -13
- package/dist/utils/Logger.d.ts +7 -7
- package/dist/utils/Logger.js +12 -11
- package/dist/utils/RetryUtils.d.ts +22 -22
- package/dist/utils/RetryUtils.js +67 -66
- package/dist/utils/SwapUtils.d.ts +88 -88
- package/dist/utils/SwapUtils.js +72 -72
- package/dist/utils/TimeoutUtils.d.ts +17 -17
- package/dist/utils/TimeoutUtils.js +55 -54
- package/dist/utils/TokenUtils.d.ts +19 -19
- package/dist/utils/TokenUtils.js +37 -36
- package/dist/utils/TypeUtils.d.ts +7 -7
- package/dist/utils/TypeUtils.js +2 -2
- package/dist/utils/Utils.d.ts +58 -56
- package/dist/utils/Utils.js +194 -193
- package/package.json +1 -1
- package/src/bitcoin/wallet/SingleAddressBitcoinWallet.ts +14 -2
|
@@ -1,135 +1,135 @@
|
|
|
1
|
-
import { ChainType, StorageObject, IStorageManager, Messenger, ChainInitializer } from "@atomiqlabs/base";
|
|
2
|
-
import { Swapper, SwapperOptions } from "./Swapper";
|
|
3
|
-
import { BtcToken, SCToken } from "../types/Token";
|
|
4
|
-
import { SwapType } from "../enums/SwapType";
|
|
5
|
-
import { SwapTypeMapping } from "../utils/SwapUtils";
|
|
6
|
-
import { CustomPriceFunction } from "../types/CustomPriceFunction";
|
|
7
|
-
import { MempoolApi, MempoolBitcoinRpc } from "@atomiqlabs/btc-mempool";
|
|
8
|
-
/**
|
|
9
|
-
* Token definitions for a specific chain
|
|
10
|
-
*/
|
|
11
|
-
type TypedChainTokens<T extends ChainInitializer<any, any, any>> = {
|
|
12
|
-
[val in keyof T["tokens"]]: SCToken<T["chainId"]>;
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Token resolver for a specific chain
|
|
16
|
-
*/
|
|
17
|
-
type TypedChainTokenResolver<T extends ChainInitializer<any, any, any>> = {
|
|
18
|
-
getToken: (address: string) => SCToken<T["chainId"]>;
|
|
19
|
-
};
|
|
20
|
-
type ChainTypeDict<T extends ChainInitializer<any, any, any>> = {
|
|
21
|
-
[K in T["chainId"]]: T["chainType"];
|
|
22
|
-
};
|
|
23
|
-
type ToMultichain<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? ChainTypeDict<First> & ToMultichain<Rest> : {});
|
|
24
|
-
type TokensDict<T extends ChainInitializer<any, any, any>> = {
|
|
25
|
-
[K in T["chainId"]]: TypedChainTokens<T>;
|
|
26
|
-
};
|
|
27
|
-
type GetAllTokens<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? TokensDict<First> & GetAllTokens<Rest> : unknown);
|
|
28
|
-
type TokenResolverDict<T extends ChainInitializer<any, any, any>> = {
|
|
29
|
-
[K in T["chainId"]]: TypedChainTokenResolver<T>;
|
|
30
|
-
};
|
|
31
|
-
type OptionsDict<T extends ChainInitializer<any, any, any>> = {
|
|
32
|
-
[K in T["chainId"]]: T["options"];
|
|
33
|
-
};
|
|
34
|
-
type GetAllOptions<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? OptionsDict<First> & GetAllOptions<Rest> : unknown);
|
|
35
|
-
/**
|
|
36
|
-
* Configuration options for creating a Swapper instance
|
|
37
|
-
*
|
|
38
|
-
* @category Core
|
|
39
|
-
*/
|
|
40
|
-
export type TypedSwapperOptions<T extends readonly ChainInitializer<any, any, any>[]> = {
|
|
41
|
-
/**
|
|
42
|
-
* A dictionary with chain-specific settings, like RPC URLs and others
|
|
43
|
-
*/
|
|
44
|
-
chains: GetAllOptions<T>;
|
|
45
|
-
/**
|
|
46
|
-
* A function callback to retrieve a specific named storage container for key-value persistency. If not present, the
|
|
47
|
-
* default browser Local Storage adapter is used. When you use the SDK in non-browser based environments you need
|
|
48
|
-
* to provide this callback such that the SDK is able to use a custom storage adapter.
|
|
49
|
-
*
|
|
50
|
-
* @param storageName Name of the container to retrieve
|
|
51
|
-
*/
|
|
52
|
-
chainStorageCtor?: <T extends StorageObject>(storageName: string) => IStorageManager<T>;
|
|
53
|
-
/**
|
|
54
|
-
* Maximum allowed pricing difference between intermediary (LP) returned rate and current market rate. In
|
|
55
|
-
* parts-per-million, e.g. 2% is written as `20000`.
|
|
56
|
-
*/
|
|
57
|
-
pricingFeeDifferencePPM?: bigint;
|
|
58
|
-
/**
|
|
59
|
-
* Optional pricing function to use instead of default pricing APIs. See {@link CustomPriceFunction} for details.
|
|
60
|
-
*/
|
|
61
|
-
getPriceFn?: CustomPriceFunction;
|
|
62
|
-
/**
|
|
63
|
-
* Mempool API instance or URLs to use, if not provided the defaults will be used for the specified bitcoin network
|
|
64
|
-
*/
|
|
65
|
-
mempoolApi?: MempoolApi | MempoolBitcoinRpc | string | string[];
|
|
66
|
-
/**
|
|
67
|
-
* Data propagation messenger instance to use for broadcasting data to watchtowers. By default, a Nostr-based
|
|
68
|
-
* messenger is used.
|
|
69
|
-
*/
|
|
70
|
-
messenger?: Messenger;
|
|
71
|
-
} & SwapperOptions;
|
|
72
|
-
/**
|
|
73
|
-
* Token resolvers for all chains, resolve tokens based on their address
|
|
74
|
-
*
|
|
75
|
-
* @category Core
|
|
76
|
-
*/
|
|
77
|
-
export type TypedTokenResolvers<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? TokenResolverDict<First> & TypedTokenResolvers<Rest> : unknown);
|
|
78
|
-
/**
|
|
79
|
-
* All tokens including Bitcoin tokens
|
|
80
|
-
*
|
|
81
|
-
* @category Core
|
|
82
|
-
*/
|
|
83
|
-
export type TypedTokens<T extends readonly ChainInitializer<any, ChainType, any>[]> = GetAllTokens<T> & {
|
|
84
|
-
BITCOIN: {
|
|
85
|
-
BTC: BtcToken<false>;
|
|
86
|
-
BTCLN: BtcToken<true>;
|
|
87
|
-
};
|
|
88
|
-
};
|
|
89
|
-
/**
|
|
90
|
-
* Type alias for a Swapper instance with typed chain support
|
|
91
|
-
*
|
|
92
|
-
* @category Core
|
|
93
|
-
*/
|
|
94
|
-
export type TypedSwapper<T extends readonly ChainInitializer<any, ChainType, any>[]> = Swapper<ToMultichain<T>>;
|
|
95
|
-
/**
|
|
96
|
-
* Type alias for a specific swap type
|
|
97
|
-
*
|
|
98
|
-
* @category Core
|
|
99
|
-
*/
|
|
100
|
-
export type TypedSwap<T extends ChainInitializer<any, ChainType, any>, S extends SwapType> = SwapTypeMapping<T["chainType"]>[S];
|
|
101
|
-
/**
|
|
102
|
-
* Factory class for creating and initializing Swapper instances with typed chain support
|
|
103
|
-
*
|
|
104
|
-
* @category Core
|
|
105
|
-
*/
|
|
106
|
-
export declare class SwapperFactory<T extends readonly ChainInitializer<any, ChainType, any>[]> {
|
|
107
|
-
readonly initializers: T;
|
|
108
|
-
/**
|
|
109
|
-
* All available tokens for the atomiq SDK
|
|
110
|
-
*/
|
|
111
|
-
Tokens: TypedTokens<T>;
|
|
112
|
-
/**
|
|
113
|
-
* Token resolvers for various smart chains supported by the SDK, allow fetching tokens based on their addresses
|
|
114
|
-
*/
|
|
115
|
-
TokenResolver: TypedTokenResolvers<T>;
|
|
116
|
-
private smartChainTokens;
|
|
117
|
-
constructor(initializers: T);
|
|
118
|
-
/**
|
|
119
|
-
* Returns a new swapper instance with the passed options.
|
|
120
|
-
*
|
|
121
|
-
* The swapper returned here is not yet initialized, be sure to call {@link Swapper.init}, before
|
|
122
|
-
* calling any other functions in the swapper instance.
|
|
123
|
-
*
|
|
124
|
-
* @param options Options for customizing the swapper instance
|
|
125
|
-
*/
|
|
126
|
-
newSwapper(options: TypedSwapperOptions<T>): TypedSwapper<T>;
|
|
127
|
-
/**
|
|
128
|
-
* Returns a new and already initialized swapper instance with the passed options. There is no need
|
|
129
|
-
* to call {@link Swapper.init} anymore.
|
|
130
|
-
*
|
|
131
|
-
* @param options Options for customizing the swapper instance
|
|
132
|
-
*/
|
|
133
|
-
newSwapperInitialized(options: TypedSwapperOptions<T>): Promise<TypedSwapper<T>>;
|
|
134
|
-
}
|
|
135
|
-
export {};
|
|
1
|
+
import { ChainType, StorageObject, IStorageManager, Messenger, ChainInitializer } from "@atomiqlabs/base";
|
|
2
|
+
import { Swapper, SwapperOptions } from "./Swapper";
|
|
3
|
+
import { BtcToken, SCToken } from "../types/Token";
|
|
4
|
+
import { SwapType } from "../enums/SwapType";
|
|
5
|
+
import { SwapTypeMapping } from "../utils/SwapUtils";
|
|
6
|
+
import { CustomPriceFunction } from "../types/CustomPriceFunction";
|
|
7
|
+
import { MempoolApi, MempoolBitcoinRpc } from "@atomiqlabs/btc-mempool";
|
|
8
|
+
/**
|
|
9
|
+
* Token definitions for a specific chain
|
|
10
|
+
*/
|
|
11
|
+
type TypedChainTokens<T extends ChainInitializer<any, any, any>> = {
|
|
12
|
+
[val in keyof T["tokens"]]: SCToken<T["chainId"]>;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Token resolver for a specific chain
|
|
16
|
+
*/
|
|
17
|
+
type TypedChainTokenResolver<T extends ChainInitializer<any, any, any>> = {
|
|
18
|
+
getToken: (address: string) => SCToken<T["chainId"]>;
|
|
19
|
+
};
|
|
20
|
+
type ChainTypeDict<T extends ChainInitializer<any, any, any>> = {
|
|
21
|
+
[K in T["chainId"]]: T["chainType"];
|
|
22
|
+
};
|
|
23
|
+
type ToMultichain<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? ChainTypeDict<First> & ToMultichain<Rest> : {});
|
|
24
|
+
type TokensDict<T extends ChainInitializer<any, any, any>> = {
|
|
25
|
+
[K in T["chainId"]]: TypedChainTokens<T>;
|
|
26
|
+
};
|
|
27
|
+
type GetAllTokens<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? TokensDict<First> & GetAllTokens<Rest> : unknown);
|
|
28
|
+
type TokenResolverDict<T extends ChainInitializer<any, any, any>> = {
|
|
29
|
+
[K in T["chainId"]]: TypedChainTokenResolver<T>;
|
|
30
|
+
};
|
|
31
|
+
type OptionsDict<T extends ChainInitializer<any, any, any>> = {
|
|
32
|
+
[K in T["chainId"]]: T["options"];
|
|
33
|
+
};
|
|
34
|
+
type GetAllOptions<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? OptionsDict<First> & GetAllOptions<Rest> : unknown);
|
|
35
|
+
/**
|
|
36
|
+
* Configuration options for creating a Swapper instance
|
|
37
|
+
*
|
|
38
|
+
* @category Core
|
|
39
|
+
*/
|
|
40
|
+
export type TypedSwapperOptions<T extends readonly ChainInitializer<any, any, any>[]> = {
|
|
41
|
+
/**
|
|
42
|
+
* A dictionary with chain-specific settings, like RPC URLs and others
|
|
43
|
+
*/
|
|
44
|
+
chains: GetAllOptions<T>;
|
|
45
|
+
/**
|
|
46
|
+
* A function callback to retrieve a specific named storage container for key-value persistency. If not present, the
|
|
47
|
+
* default browser Local Storage adapter is used. When you use the SDK in non-browser based environments you need
|
|
48
|
+
* to provide this callback such that the SDK is able to use a custom storage adapter.
|
|
49
|
+
*
|
|
50
|
+
* @param storageName Name of the container to retrieve
|
|
51
|
+
*/
|
|
52
|
+
chainStorageCtor?: <T extends StorageObject>(storageName: string) => IStorageManager<T>;
|
|
53
|
+
/**
|
|
54
|
+
* Maximum allowed pricing difference between intermediary (LP) returned rate and current market rate. In
|
|
55
|
+
* parts-per-million, e.g. 2% is written as `20000`.
|
|
56
|
+
*/
|
|
57
|
+
pricingFeeDifferencePPM?: bigint;
|
|
58
|
+
/**
|
|
59
|
+
* Optional pricing function to use instead of default pricing APIs. See {@link CustomPriceFunction} for details.
|
|
60
|
+
*/
|
|
61
|
+
getPriceFn?: CustomPriceFunction;
|
|
62
|
+
/**
|
|
63
|
+
* Mempool API instance or URLs to use, if not provided the defaults will be used for the specified bitcoin network
|
|
64
|
+
*/
|
|
65
|
+
mempoolApi?: MempoolApi | MempoolBitcoinRpc | string | string[];
|
|
66
|
+
/**
|
|
67
|
+
* Data propagation messenger instance to use for broadcasting data to watchtowers. By default, a Nostr-based
|
|
68
|
+
* messenger is used.
|
|
69
|
+
*/
|
|
70
|
+
messenger?: Messenger;
|
|
71
|
+
} & SwapperOptions;
|
|
72
|
+
/**
|
|
73
|
+
* Token resolvers for all chains, resolve tokens based on their address
|
|
74
|
+
*
|
|
75
|
+
* @category Core
|
|
76
|
+
*/
|
|
77
|
+
export type TypedTokenResolvers<T extends readonly ChainInitializer<any, any, any>[]> = (T extends readonly [infer First extends ChainInitializer<any, any, any>, ...infer Rest extends ChainInitializer<any, any, any>[]] ? TokenResolverDict<First> & TypedTokenResolvers<Rest> : unknown);
|
|
78
|
+
/**
|
|
79
|
+
* All tokens including Bitcoin tokens
|
|
80
|
+
*
|
|
81
|
+
* @category Core
|
|
82
|
+
*/
|
|
83
|
+
export type TypedTokens<T extends readonly ChainInitializer<any, ChainType, any>[]> = GetAllTokens<T> & {
|
|
84
|
+
BITCOIN: {
|
|
85
|
+
BTC: BtcToken<false>;
|
|
86
|
+
BTCLN: BtcToken<true>;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Type alias for a Swapper instance with typed chain support
|
|
91
|
+
*
|
|
92
|
+
* @category Core
|
|
93
|
+
*/
|
|
94
|
+
export type TypedSwapper<T extends readonly ChainInitializer<any, ChainType, any>[]> = Swapper<ToMultichain<T>>;
|
|
95
|
+
/**
|
|
96
|
+
* Type alias for a specific swap type
|
|
97
|
+
*
|
|
98
|
+
* @category Core
|
|
99
|
+
*/
|
|
100
|
+
export type TypedSwap<T extends ChainInitializer<any, ChainType, any>, S extends SwapType> = SwapTypeMapping<T["chainType"]>[S];
|
|
101
|
+
/**
|
|
102
|
+
* Factory class for creating and initializing Swapper instances with typed chain support
|
|
103
|
+
*
|
|
104
|
+
* @category Core
|
|
105
|
+
*/
|
|
106
|
+
export declare class SwapperFactory<T extends readonly ChainInitializer<any, ChainType, any>[]> {
|
|
107
|
+
readonly initializers: T;
|
|
108
|
+
/**
|
|
109
|
+
* All available tokens for the atomiq SDK
|
|
110
|
+
*/
|
|
111
|
+
Tokens: TypedTokens<T>;
|
|
112
|
+
/**
|
|
113
|
+
* Token resolvers for various smart chains supported by the SDK, allow fetching tokens based on their addresses
|
|
114
|
+
*/
|
|
115
|
+
TokenResolver: TypedTokenResolvers<T>;
|
|
116
|
+
private smartChainTokens;
|
|
117
|
+
constructor(initializers: T);
|
|
118
|
+
/**
|
|
119
|
+
* Returns a new swapper instance with the passed options.
|
|
120
|
+
*
|
|
121
|
+
* The swapper returned here is not yet initialized, be sure to call {@link Swapper.init}, before
|
|
122
|
+
* calling any other functions in the swapper instance.
|
|
123
|
+
*
|
|
124
|
+
* @param options Options for customizing the swapper instance
|
|
125
|
+
*/
|
|
126
|
+
newSwapper(options: TypedSwapperOptions<T>): TypedSwapper<T>;
|
|
127
|
+
/**
|
|
128
|
+
* Returns a new and already initialized swapper instance with the passed options. There is no need
|
|
129
|
+
* to call {@link Swapper.init} anymore.
|
|
130
|
+
*
|
|
131
|
+
* @param options Options for customizing the swapper instance
|
|
132
|
+
*/
|
|
133
|
+
newSwapperInitialized(options: TypedSwapperOptions<T>): Promise<TypedSwapper<T>>;
|
|
134
|
+
}
|
|
135
|
+
export {};
|
|
@@ -1,162 +1,162 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SwapperFactory = void 0;
|
|
4
|
-
const base_1 = require("@atomiqlabs/base");
|
|
5
|
-
const SmartChainAssets_1 = require("../SmartChainAssets");
|
|
6
|
-
const messenger_nostr_1 = require("@atomiqlabs/messenger-nostr");
|
|
7
|
-
const Swapper_1 = require("./Swapper");
|
|
8
|
-
const CustomPriceProvider_1 = require("../prices/providers/CustomPriceProvider");
|
|
9
|
-
const Token_1 = require("../types/Token");
|
|
10
|
-
const RedundantSwapPrice_1 = require("../prices/RedundantSwapPrice");
|
|
11
|
-
const LocalStorageManager_1 = require("../storage-browser/LocalStorageManager");
|
|
12
|
-
const SingleSwapPrice_1 = require("../prices/SingleSwapPrice");
|
|
13
|
-
const btc_mempool_1 = require("@atomiqlabs/btc-mempool");
|
|
14
|
-
const registries = {
|
|
15
|
-
[base_1.BitcoinNetwork.MAINNET]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-mainnet.json?ref=main",
|
|
16
|
-
[base_1.BitcoinNetwork.TESTNET]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main",
|
|
17
|
-
[base_1.BitcoinNetwork.TESTNET4]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-testnet4.json?ref=main"
|
|
18
|
-
};
|
|
19
|
-
const trustedIntermediaries = {
|
|
20
|
-
[base_1.BitcoinNetwork.MAINNET]: "https://node3.gethopa.com:34100",
|
|
21
|
-
[base_1.BitcoinNetwork.TESTNET]: "https://node3.gethopa.com:24100"
|
|
22
|
-
};
|
|
23
|
-
const mempoolUrls = {
|
|
24
|
-
[base_1.BitcoinNetwork.MAINNET]: [
|
|
25
|
-
"https://mempool.space/api/",
|
|
26
|
-
// "https://mempool.holdings/api/",
|
|
27
|
-
"https://mempool.fra.mempool.space/api/",
|
|
28
|
-
"https://mempool.va1.mempool.space/api/",
|
|
29
|
-
"https://mempool.tk7.mempool.space/api/"
|
|
30
|
-
],
|
|
31
|
-
[base_1.BitcoinNetwork.TESTNET]: [
|
|
32
|
-
"https://mempool.space/testnet/api/",
|
|
33
|
-
// "https://mempool.holdings/testnet/api/",
|
|
34
|
-
"https://mempool.fra.mempool.space/testnet/api/",
|
|
35
|
-
"https://mempool.va1.mempool.space/testnet/api/",
|
|
36
|
-
"https://mempool.tk7.mempool.space/testnet/api/"
|
|
37
|
-
],
|
|
38
|
-
[base_1.BitcoinNetwork.TESTNET4]: [
|
|
39
|
-
"https://mempool.space/testnet4/api/",
|
|
40
|
-
// "https://mempool.holdings/testnet4/api/",
|
|
41
|
-
"https://mempool.fra.mempool.space/testnet4/api/",
|
|
42
|
-
"https://mempool.va1.mempool.space/testnet4/api/",
|
|
43
|
-
"https://mempool.tk7.mempool.space/testnet4/api/"
|
|
44
|
-
]
|
|
45
|
-
};
|
|
46
|
-
const nostrUrls = [
|
|
47
|
-
"wss://relay.damus.io", "wss://nostr.einundzwanzig.space", "wss://relay01.lnfi.network/", "wss://relay.puresignal.news/", "wss://relay.fountain.fm/", "wss://sendit.nosflare.com/"
|
|
48
|
-
];
|
|
49
|
-
/**
|
|
50
|
-
* Factory class for creating and initializing Swapper instances with typed chain support
|
|
51
|
-
*
|
|
52
|
-
* @category Core
|
|
53
|
-
*/
|
|
54
|
-
class SwapperFactory {
|
|
55
|
-
constructor(initializers) {
|
|
56
|
-
this.initializers = initializers;
|
|
57
|
-
/**
|
|
58
|
-
* All available tokens for the atomiq SDK
|
|
59
|
-
*/
|
|
60
|
-
this.Tokens = {
|
|
61
|
-
BITCOIN: Token_1.BitcoinTokens
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* Token resolvers for various smart chains supported by the SDK, allow fetching tokens based on their addresses
|
|
65
|
-
*/
|
|
66
|
-
this.TokenResolver = {};
|
|
67
|
-
this.smartChainTokens = [];
|
|
68
|
-
this.initializers = initializers;
|
|
69
|
-
initializers.forEach(initializer => {
|
|
70
|
-
const addressMap = {};
|
|
71
|
-
const tokens = (this.Tokens[initializer.chainId] = {});
|
|
72
|
-
for (let ticker in initializer.tokens) {
|
|
73
|
-
const assetData = initializer.tokens[ticker];
|
|
74
|
-
const token = {
|
|
75
|
-
chain: "SC",
|
|
76
|
-
chainId: initializer.chainId,
|
|
77
|
-
ticker,
|
|
78
|
-
name: SmartChainAssets_1.SmartChainAssets[ticker]?.name ?? ticker,
|
|
79
|
-
decimals: assetData.decimals,
|
|
80
|
-
displayDecimals: assetData.displayDecimals,
|
|
81
|
-
address: assetData.address,
|
|
82
|
-
equals: (other) => other.chainId === initializer.chainId && other.ticker === ticker && other.address === assetData.address,
|
|
83
|
-
toString: () => `${initializer.chainId}-${ticker}`
|
|
84
|
-
};
|
|
85
|
-
this.smartChainTokens.push(token);
|
|
86
|
-
tokens[ticker] = addressMap[assetData.address] = token;
|
|
87
|
-
}
|
|
88
|
-
this.TokenResolver[initializer.chainId] = {
|
|
89
|
-
getToken: (address) => addressMap[address]
|
|
90
|
-
};
|
|
91
|
-
});
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Returns a new swapper instance with the passed options.
|
|
95
|
-
*
|
|
96
|
-
* The swapper returned here is not yet initialized, be sure to call {@link Swapper.init}, before
|
|
97
|
-
* calling any other functions in the swapper instance.
|
|
98
|
-
*
|
|
99
|
-
* @param options Options for customizing the swapper instance
|
|
100
|
-
*/
|
|
101
|
-
newSwapper(options) {
|
|
102
|
-
options.bitcoinNetwork ??= base_1.BitcoinNetwork.MAINNET;
|
|
103
|
-
options.storagePrefix ??= "atomiqsdk-" + options.bitcoinNetwork + "-";
|
|
104
|
-
options.messenger ??= new messenger_nostr_1.NostrMessenger(options.bitcoinNetwork, nostrUrls);
|
|
105
|
-
options.defaultTrustedIntermediaryUrl ??= trustedIntermediaries[options.bitcoinNetwork];
|
|
106
|
-
options.registryUrl ??= registries[options.bitcoinNetwork];
|
|
107
|
-
let bitcoinRpc;
|
|
108
|
-
if (options.mempoolApi != null) {
|
|
109
|
-
bitcoinRpc = options.mempoolApi instanceof btc_mempool_1.MempoolBitcoinRpc ? options.mempoolApi : new btc_mempool_1.MempoolBitcoinRpc(options.mempoolApi, options.bitcoinNetwork);
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
const urls = mempoolUrls[options.bitcoinNetwork];
|
|
113
|
-
if (urls == null)
|
|
114
|
-
throw new Error(`No pre-configured urls for ${base_1.BitcoinNetwork[options.bitcoinNetwork]} network were found, please explicitly pass mempoolApi parameter!`);
|
|
115
|
-
bitcoinRpc = new btc_mempool_1.MempoolBitcoinRpc(urls, options.bitcoinNetwork);
|
|
116
|
-
}
|
|
117
|
-
const pricingAssets = [];
|
|
118
|
-
Object.keys(SmartChainAssets_1.SmartChainAssets).forEach((ticker) => {
|
|
119
|
-
const chains = {};
|
|
120
|
-
for (let { tokens, chainId } of this.initializers) {
|
|
121
|
-
if (tokens[ticker] != null)
|
|
122
|
-
chains[chainId] = tokens[ticker];
|
|
123
|
-
}
|
|
124
|
-
const assetData = SmartChainAssets_1.SmartChainAssets[ticker];
|
|
125
|
-
pricingAssets.push({
|
|
126
|
-
...assetData.pricing,
|
|
127
|
-
chains,
|
|
128
|
-
ticker,
|
|
129
|
-
name: assetData.name
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
options.chainStorageCtor ??= (name) => new LocalStorageManager_1.LocalStorageManager(name);
|
|
133
|
-
const chains = {};
|
|
134
|
-
for (let { initializer, chainId } of this.initializers) {
|
|
135
|
-
const chainOptions = options.chains[chainId];
|
|
136
|
-
if (chainOptions == null)
|
|
137
|
-
continue;
|
|
138
|
-
chains[chainId] = initializer(chainOptions, bitcoinRpc, options.bitcoinNetwork, options.chainStorageCtor);
|
|
139
|
-
}
|
|
140
|
-
const swapPricing = options.getPriceFn != null ?
|
|
141
|
-
new SingleSwapPrice_1.SingleSwapPrice(options.pricingFeeDifferencePPM ?? 10000n, new CustomPriceProvider_1.CustomPriceProvider(pricingAssets.map(val => {
|
|
142
|
-
return {
|
|
143
|
-
coinId: val.ticker,
|
|
144
|
-
chains: val.chains
|
|
145
|
-
};
|
|
146
|
-
}), options.getPriceFn)) :
|
|
147
|
-
RedundantSwapPrice_1.RedundantSwapPrice.createFromTokenMap(options.pricingFeeDifferencePPM ?? 10000n, pricingAssets);
|
|
148
|
-
return new Swapper_1.Swapper(bitcoinRpc, bitcoinRpc, (btcRelay) => new btc_mempool_1.MempoolBtcRelaySynchronizer(btcRelay, bitcoinRpc), chains, swapPricing, this.smartChainTokens, options.messenger, options);
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Returns a new and already initialized swapper instance with the passed options. There is no need
|
|
152
|
-
* to call {@link Swapper.init} anymore.
|
|
153
|
-
*
|
|
154
|
-
* @param options Options for customizing the swapper instance
|
|
155
|
-
*/
|
|
156
|
-
async newSwapperInitialized(options) {
|
|
157
|
-
const swapper = this.newSwapper(options);
|
|
158
|
-
await swapper.init();
|
|
159
|
-
return swapper;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
exports.SwapperFactory = SwapperFactory;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SwapperFactory = void 0;
|
|
4
|
+
const base_1 = require("@atomiqlabs/base");
|
|
5
|
+
const SmartChainAssets_1 = require("../SmartChainAssets");
|
|
6
|
+
const messenger_nostr_1 = require("@atomiqlabs/messenger-nostr");
|
|
7
|
+
const Swapper_1 = require("./Swapper");
|
|
8
|
+
const CustomPriceProvider_1 = require("../prices/providers/CustomPriceProvider");
|
|
9
|
+
const Token_1 = require("../types/Token");
|
|
10
|
+
const RedundantSwapPrice_1 = require("../prices/RedundantSwapPrice");
|
|
11
|
+
const LocalStorageManager_1 = require("../storage-browser/LocalStorageManager");
|
|
12
|
+
const SingleSwapPrice_1 = require("../prices/SingleSwapPrice");
|
|
13
|
+
const btc_mempool_1 = require("@atomiqlabs/btc-mempool");
|
|
14
|
+
const registries = {
|
|
15
|
+
[base_1.BitcoinNetwork.MAINNET]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-mainnet.json?ref=main",
|
|
16
|
+
[base_1.BitcoinNetwork.TESTNET]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main",
|
|
17
|
+
[base_1.BitcoinNetwork.TESTNET4]: "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-testnet4.json?ref=main"
|
|
18
|
+
};
|
|
19
|
+
const trustedIntermediaries = {
|
|
20
|
+
[base_1.BitcoinNetwork.MAINNET]: "https://node3.gethopa.com:34100",
|
|
21
|
+
[base_1.BitcoinNetwork.TESTNET]: "https://node3.gethopa.com:24100"
|
|
22
|
+
};
|
|
23
|
+
const mempoolUrls = {
|
|
24
|
+
[base_1.BitcoinNetwork.MAINNET]: [
|
|
25
|
+
"https://mempool.space/api/",
|
|
26
|
+
// "https://mempool.holdings/api/",
|
|
27
|
+
"https://mempool.fra.mempool.space/api/",
|
|
28
|
+
"https://mempool.va1.mempool.space/api/",
|
|
29
|
+
"https://mempool.tk7.mempool.space/api/"
|
|
30
|
+
],
|
|
31
|
+
[base_1.BitcoinNetwork.TESTNET]: [
|
|
32
|
+
"https://mempool.space/testnet/api/",
|
|
33
|
+
// "https://mempool.holdings/testnet/api/",
|
|
34
|
+
"https://mempool.fra.mempool.space/testnet/api/",
|
|
35
|
+
"https://mempool.va1.mempool.space/testnet/api/",
|
|
36
|
+
"https://mempool.tk7.mempool.space/testnet/api/"
|
|
37
|
+
],
|
|
38
|
+
[base_1.BitcoinNetwork.TESTNET4]: [
|
|
39
|
+
"https://mempool.space/testnet4/api/",
|
|
40
|
+
// "https://mempool.holdings/testnet4/api/",
|
|
41
|
+
"https://mempool.fra.mempool.space/testnet4/api/",
|
|
42
|
+
"https://mempool.va1.mempool.space/testnet4/api/",
|
|
43
|
+
"https://mempool.tk7.mempool.space/testnet4/api/"
|
|
44
|
+
]
|
|
45
|
+
};
|
|
46
|
+
const nostrUrls = [
|
|
47
|
+
"wss://relay.damus.io", "wss://nostr.einundzwanzig.space", "wss://relay01.lnfi.network/", "wss://relay.puresignal.news/", "wss://relay.fountain.fm/", "wss://sendit.nosflare.com/"
|
|
48
|
+
];
|
|
49
|
+
/**
|
|
50
|
+
* Factory class for creating and initializing Swapper instances with typed chain support
|
|
51
|
+
*
|
|
52
|
+
* @category Core
|
|
53
|
+
*/
|
|
54
|
+
class SwapperFactory {
|
|
55
|
+
constructor(initializers) {
|
|
56
|
+
this.initializers = initializers;
|
|
57
|
+
/**
|
|
58
|
+
* All available tokens for the atomiq SDK
|
|
59
|
+
*/
|
|
60
|
+
this.Tokens = {
|
|
61
|
+
BITCOIN: Token_1.BitcoinTokens
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Token resolvers for various smart chains supported by the SDK, allow fetching tokens based on their addresses
|
|
65
|
+
*/
|
|
66
|
+
this.TokenResolver = {};
|
|
67
|
+
this.smartChainTokens = [];
|
|
68
|
+
this.initializers = initializers;
|
|
69
|
+
initializers.forEach(initializer => {
|
|
70
|
+
const addressMap = {};
|
|
71
|
+
const tokens = (this.Tokens[initializer.chainId] = {});
|
|
72
|
+
for (let ticker in initializer.tokens) {
|
|
73
|
+
const assetData = initializer.tokens[ticker];
|
|
74
|
+
const token = {
|
|
75
|
+
chain: "SC",
|
|
76
|
+
chainId: initializer.chainId,
|
|
77
|
+
ticker,
|
|
78
|
+
name: SmartChainAssets_1.SmartChainAssets[ticker]?.name ?? ticker,
|
|
79
|
+
decimals: assetData.decimals,
|
|
80
|
+
displayDecimals: assetData.displayDecimals,
|
|
81
|
+
address: assetData.address,
|
|
82
|
+
equals: (other) => other.chainId === initializer.chainId && other.ticker === ticker && other.address === assetData.address,
|
|
83
|
+
toString: () => `${initializer.chainId}-${ticker}`
|
|
84
|
+
};
|
|
85
|
+
this.smartChainTokens.push(token);
|
|
86
|
+
tokens[ticker] = addressMap[assetData.address] = token;
|
|
87
|
+
}
|
|
88
|
+
this.TokenResolver[initializer.chainId] = {
|
|
89
|
+
getToken: (address) => addressMap[address]
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Returns a new swapper instance with the passed options.
|
|
95
|
+
*
|
|
96
|
+
* The swapper returned here is not yet initialized, be sure to call {@link Swapper.init}, before
|
|
97
|
+
* calling any other functions in the swapper instance.
|
|
98
|
+
*
|
|
99
|
+
* @param options Options for customizing the swapper instance
|
|
100
|
+
*/
|
|
101
|
+
newSwapper(options) {
|
|
102
|
+
options.bitcoinNetwork ??= base_1.BitcoinNetwork.MAINNET;
|
|
103
|
+
options.storagePrefix ??= "atomiqsdk-" + options.bitcoinNetwork + "-";
|
|
104
|
+
options.messenger ??= new messenger_nostr_1.NostrMessenger(options.bitcoinNetwork, nostrUrls);
|
|
105
|
+
options.defaultTrustedIntermediaryUrl ??= trustedIntermediaries[options.bitcoinNetwork];
|
|
106
|
+
options.registryUrl ??= registries[options.bitcoinNetwork];
|
|
107
|
+
let bitcoinRpc;
|
|
108
|
+
if (options.mempoolApi != null) {
|
|
109
|
+
bitcoinRpc = options.mempoolApi instanceof btc_mempool_1.MempoolBitcoinRpc ? options.mempoolApi : new btc_mempool_1.MempoolBitcoinRpc(options.mempoolApi, options.bitcoinNetwork);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
const urls = mempoolUrls[options.bitcoinNetwork];
|
|
113
|
+
if (urls == null)
|
|
114
|
+
throw new Error(`No pre-configured urls for ${base_1.BitcoinNetwork[options.bitcoinNetwork]} network were found, please explicitly pass mempoolApi parameter!`);
|
|
115
|
+
bitcoinRpc = new btc_mempool_1.MempoolBitcoinRpc(urls, options.bitcoinNetwork);
|
|
116
|
+
}
|
|
117
|
+
const pricingAssets = [];
|
|
118
|
+
Object.keys(SmartChainAssets_1.SmartChainAssets).forEach((ticker) => {
|
|
119
|
+
const chains = {};
|
|
120
|
+
for (let { tokens, chainId } of this.initializers) {
|
|
121
|
+
if (tokens[ticker] != null)
|
|
122
|
+
chains[chainId] = tokens[ticker];
|
|
123
|
+
}
|
|
124
|
+
const assetData = SmartChainAssets_1.SmartChainAssets[ticker];
|
|
125
|
+
pricingAssets.push({
|
|
126
|
+
...assetData.pricing,
|
|
127
|
+
chains,
|
|
128
|
+
ticker,
|
|
129
|
+
name: assetData.name
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
options.chainStorageCtor ??= (name) => new LocalStorageManager_1.LocalStorageManager(name);
|
|
133
|
+
const chains = {};
|
|
134
|
+
for (let { initializer, chainId } of this.initializers) {
|
|
135
|
+
const chainOptions = options.chains[chainId];
|
|
136
|
+
if (chainOptions == null)
|
|
137
|
+
continue;
|
|
138
|
+
chains[chainId] = initializer(chainOptions, bitcoinRpc, options.bitcoinNetwork, options.chainStorageCtor);
|
|
139
|
+
}
|
|
140
|
+
const swapPricing = options.getPriceFn != null ?
|
|
141
|
+
new SingleSwapPrice_1.SingleSwapPrice(options.pricingFeeDifferencePPM ?? 10000n, new CustomPriceProvider_1.CustomPriceProvider(pricingAssets.map(val => {
|
|
142
|
+
return {
|
|
143
|
+
coinId: val.ticker,
|
|
144
|
+
chains: val.chains
|
|
145
|
+
};
|
|
146
|
+
}), options.getPriceFn)) :
|
|
147
|
+
RedundantSwapPrice_1.RedundantSwapPrice.createFromTokenMap(options.pricingFeeDifferencePPM ?? 10000n, pricingAssets);
|
|
148
|
+
return new Swapper_1.Swapper(bitcoinRpc, bitcoinRpc, (btcRelay) => new btc_mempool_1.MempoolBtcRelaySynchronizer(btcRelay, bitcoinRpc), chains, swapPricing, this.smartChainTokens, options.messenger, options);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Returns a new and already initialized swapper instance with the passed options. There is no need
|
|
152
|
+
* to call {@link Swapper.init} anymore.
|
|
153
|
+
*
|
|
154
|
+
* @param options Options for customizing the swapper instance
|
|
155
|
+
*/
|
|
156
|
+
async newSwapperInitialized(options) {
|
|
157
|
+
const swapper = this.newSwapper(options);
|
|
158
|
+
await swapper.init();
|
|
159
|
+
return swapper;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.SwapperFactory = SwapperFactory;
|