@atomiqlabs/lp-lib 10.3.11

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.
Files changed (138) hide show
  1. package/LICENSE +201 -0
  2. package/dist/fees/IBtcFeeEstimator.d.ts +3 -0
  3. package/dist/fees/IBtcFeeEstimator.js +2 -0
  4. package/dist/fees/OneDollarFeeEstimator.d.ts +16 -0
  5. package/dist/fees/OneDollarFeeEstimator.js +71 -0
  6. package/dist/index.d.ts +33 -0
  7. package/dist/index.js +52 -0
  8. package/dist/info/InfoHandler.d.ts +17 -0
  9. package/dist/info/InfoHandler.js +70 -0
  10. package/dist/plugins/IPlugin.d.ts +118 -0
  11. package/dist/plugins/IPlugin.js +33 -0
  12. package/dist/plugins/PluginManager.d.ts +89 -0
  13. package/dist/plugins/PluginManager.js +263 -0
  14. package/dist/prices/BinanceSwapPrice.d.ts +27 -0
  15. package/dist/prices/BinanceSwapPrice.js +106 -0
  16. package/dist/prices/CoinGeckoSwapPrice.d.ts +31 -0
  17. package/dist/prices/CoinGeckoSwapPrice.js +76 -0
  18. package/dist/storage/IIntermediaryStorage.d.ts +15 -0
  19. package/dist/storage/IIntermediaryStorage.js +2 -0
  20. package/dist/storagemanager/IntermediaryStorageManager.d.ts +15 -0
  21. package/dist/storagemanager/IntermediaryStorageManager.js +113 -0
  22. package/dist/storagemanager/StorageManager.d.ts +12 -0
  23. package/dist/storagemanager/StorageManager.js +74 -0
  24. package/dist/swaps/FromBtcBaseSwap.d.ts +12 -0
  25. package/dist/swaps/FromBtcBaseSwap.js +16 -0
  26. package/dist/swaps/FromBtcBaseSwapHandler.d.ts +118 -0
  27. package/dist/swaps/FromBtcBaseSwapHandler.js +294 -0
  28. package/dist/swaps/FromBtcLnBaseSwapHandler.d.ts +25 -0
  29. package/dist/swaps/FromBtcLnBaseSwapHandler.js +55 -0
  30. package/dist/swaps/ISwapPrice.d.ts +44 -0
  31. package/dist/swaps/ISwapPrice.js +73 -0
  32. package/dist/swaps/SwapHandler.d.ts +186 -0
  33. package/dist/swaps/SwapHandler.js +292 -0
  34. package/dist/swaps/SwapHandlerSwap.d.ts +75 -0
  35. package/dist/swaps/SwapHandlerSwap.js +72 -0
  36. package/dist/swaps/ToBtcBaseSwap.d.ts +35 -0
  37. package/dist/swaps/ToBtcBaseSwap.js +61 -0
  38. package/dist/swaps/ToBtcBaseSwapHandler.d.ts +94 -0
  39. package/dist/swaps/ToBtcBaseSwapHandler.js +233 -0
  40. package/dist/swaps/frombtc_abstract/FromBtcAbs.d.ts +92 -0
  41. package/dist/swaps/frombtc_abstract/FromBtcAbs.js +386 -0
  42. package/dist/swaps/frombtc_abstract/FromBtcSwapAbs.d.ts +26 -0
  43. package/dist/swaps/frombtc_abstract/FromBtcSwapAbs.js +63 -0
  44. package/dist/swaps/frombtc_trusted/FromBtcTrusted.d.ts +55 -0
  45. package/dist/swaps/frombtc_trusted/FromBtcTrusted.js +586 -0
  46. package/dist/swaps/frombtc_trusted/FromBtcTrustedSwap.d.ts +43 -0
  47. package/dist/swaps/frombtc_trusted/FromBtcTrustedSwap.js +99 -0
  48. package/dist/swaps/frombtcln_abstract/FromBtcLnAbs.d.ts +105 -0
  49. package/dist/swaps/frombtcln_abstract/FromBtcLnAbs.js +731 -0
  50. package/dist/swaps/frombtcln_abstract/FromBtcLnSwapAbs.d.ts +29 -0
  51. package/dist/swaps/frombtcln_abstract/FromBtcLnSwapAbs.js +64 -0
  52. package/dist/swaps/frombtcln_trusted/FromBtcLnTrusted.d.ts +79 -0
  53. package/dist/swaps/frombtcln_trusted/FromBtcLnTrusted.js +514 -0
  54. package/dist/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.d.ts +28 -0
  55. package/dist/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.js +66 -0
  56. package/dist/swaps/tobtc_abstract/ToBtcAbs.d.ts +290 -0
  57. package/dist/swaps/tobtc_abstract/ToBtcAbs.js +1056 -0
  58. package/dist/swaps/tobtc_abstract/ToBtcSwapAbs.d.ts +29 -0
  59. package/dist/swaps/tobtc_abstract/ToBtcSwapAbs.js +70 -0
  60. package/dist/swaps/tobtcln_abstract/ToBtcLnAbs.d.ts +246 -0
  61. package/dist/swaps/tobtcln_abstract/ToBtcLnAbs.js +1169 -0
  62. package/dist/swaps/tobtcln_abstract/ToBtcLnSwapAbs.d.ts +27 -0
  63. package/dist/swaps/tobtcln_abstract/ToBtcLnSwapAbs.js +65 -0
  64. package/dist/utils/Utils.d.ts +32 -0
  65. package/dist/utils/Utils.js +109 -0
  66. package/dist/utils/coinselect2/accumulative.d.ts +6 -0
  67. package/dist/utils/coinselect2/accumulative.js +44 -0
  68. package/dist/utils/coinselect2/blackjack.d.ts +6 -0
  69. package/dist/utils/coinselect2/blackjack.js +41 -0
  70. package/dist/utils/coinselect2/index.d.ts +16 -0
  71. package/dist/utils/coinselect2/index.js +40 -0
  72. package/dist/utils/coinselect2/utils.d.ts +64 -0
  73. package/dist/utils/coinselect2/utils.js +121 -0
  74. package/dist/utils/paramcoders/IParamReader.d.ts +5 -0
  75. package/dist/utils/paramcoders/IParamReader.js +2 -0
  76. package/dist/utils/paramcoders/IParamWriter.d.ts +4 -0
  77. package/dist/utils/paramcoders/IParamWriter.js +2 -0
  78. package/dist/utils/paramcoders/LegacyParamEncoder.d.ts +10 -0
  79. package/dist/utils/paramcoders/LegacyParamEncoder.js +33 -0
  80. package/dist/utils/paramcoders/ParamDecoder.d.ts +25 -0
  81. package/dist/utils/paramcoders/ParamDecoder.js +234 -0
  82. package/dist/utils/paramcoders/ParamEncoder.d.ts +9 -0
  83. package/dist/utils/paramcoders/ParamEncoder.js +22 -0
  84. package/dist/utils/paramcoders/SchemaVerifier.d.ts +22 -0
  85. package/dist/utils/paramcoders/SchemaVerifier.js +85 -0
  86. package/dist/utils/paramcoders/server/ServerParamDecoder.d.ts +8 -0
  87. package/dist/utils/paramcoders/server/ServerParamDecoder.js +105 -0
  88. package/dist/utils/paramcoders/server/ServerParamEncoder.d.ts +11 -0
  89. package/dist/utils/paramcoders/server/ServerParamEncoder.js +76 -0
  90. package/package.json +43 -0
  91. package/src/fees/IBtcFeeEstimator.ts +7 -0
  92. package/src/fees/OneDollarFeeEstimator.ts +95 -0
  93. package/src/index.ts +46 -0
  94. package/src/info/InfoHandler.ts +106 -0
  95. package/src/plugins/IPlugin.ts +155 -0
  96. package/src/plugins/PluginManager.ts +310 -0
  97. package/src/prices/BinanceSwapPrice.ts +114 -0
  98. package/src/prices/CoinGeckoSwapPrice.ts +88 -0
  99. package/src/storage/IIntermediaryStorage.ts +21 -0
  100. package/src/storagemanager/IntermediaryStorageManager.ts +101 -0
  101. package/src/storagemanager/StorageManager.ts +68 -0
  102. package/src/swaps/FromBtcBaseSwap.ts +21 -0
  103. package/src/swaps/FromBtcBaseSwapHandler.ts +375 -0
  104. package/src/swaps/FromBtcLnBaseSwapHandler.ts +48 -0
  105. package/src/swaps/ISwapPrice.ts +94 -0
  106. package/src/swaps/SwapHandler.ts +404 -0
  107. package/src/swaps/SwapHandlerSwap.ts +133 -0
  108. package/src/swaps/ToBtcBaseSwap.ts +76 -0
  109. package/src/swaps/ToBtcBaseSwapHandler.ts +309 -0
  110. package/src/swaps/frombtc_abstract/FromBtcAbs.ts +484 -0
  111. package/src/swaps/frombtc_abstract/FromBtcSwapAbs.ts +77 -0
  112. package/src/swaps/frombtc_trusted/FromBtcTrusted.ts +661 -0
  113. package/src/swaps/frombtc_trusted/FromBtcTrustedSwap.ts +158 -0
  114. package/src/swaps/frombtcln_abstract/FromBtcLnAbs.ts +864 -0
  115. package/src/swaps/frombtcln_abstract/FromBtcLnSwapAbs.ts +82 -0
  116. package/src/swaps/frombtcln_trusted/FromBtcLnTrusted.ts +592 -0
  117. package/src/swaps/frombtcln_trusted/FromBtcLnTrustedSwap.ts +90 -0
  118. package/src/swaps/tobtc_abstract/ToBtcAbs.ts +1249 -0
  119. package/src/swaps/tobtc_abstract/ToBtcSwapAbs.ts +112 -0
  120. package/src/swaps/tobtcln_abstract/ToBtcLnAbs.ts +1422 -0
  121. package/src/swaps/tobtcln_abstract/ToBtcLnSwapAbs.ts +87 -0
  122. package/src/utils/Utils.ts +108 -0
  123. package/src/utils/coinselect2/accumulative.js +32 -0
  124. package/src/utils/coinselect2/accumulative.ts +58 -0
  125. package/src/utils/coinselect2/blackjack.js +29 -0
  126. package/src/utils/coinselect2/blackjack.ts +54 -0
  127. package/src/utils/coinselect2/index.js +16 -0
  128. package/src/utils/coinselect2/index.ts +50 -0
  129. package/src/utils/coinselect2/utils.js +110 -0
  130. package/src/utils/coinselect2/utils.ts +183 -0
  131. package/src/utils/paramcoders/IParamReader.ts +8 -0
  132. package/src/utils/paramcoders/IParamWriter.ts +8 -0
  133. package/src/utils/paramcoders/LegacyParamEncoder.ts +28 -0
  134. package/src/utils/paramcoders/ParamDecoder.ts +219 -0
  135. package/src/utils/paramcoders/ParamEncoder.ts +30 -0
  136. package/src/utils/paramcoders/SchemaVerifier.ts +97 -0
  137. package/src/utils/paramcoders/server/ServerParamDecoder.ts +115 -0
  138. package/src/utils/paramcoders/server/ServerParamEncoder.ts +76 -0
@@ -0,0 +1,309 @@
1
+ import {RequestData, SwapBaseConfig, SwapHandler} from "./SwapHandler";
2
+ import {SwapHandlerSwap} from "./SwapHandlerSwap";
3
+ import {SwapData} from "@atomiqlabs/base";
4
+ import * as BN from "bn.js";
5
+ import {ServerParamEncoder} from "../utils/paramcoders/server/ServerParamEncoder";
6
+ import {IParamReader} from "../utils/paramcoders/IParamReader";
7
+ import {FieldTypeEnum} from "../utils/paramcoders/SchemaVerifier";
8
+ import {PluginManager} from "../plugins/PluginManager";
9
+ import {
10
+ isQuoteSetFees,
11
+ isToBtcPluginQuote
12
+ } from "../plugins/IPlugin";
13
+ import {ToBtcLnRequestType} from "./tobtcln_abstract/ToBtcLnAbs";
14
+ import {ToBtcRequestType} from "./tobtc_abstract/ToBtcAbs";
15
+ import {Request} from "express";
16
+
17
+ export type ToBtcBaseConfig = SwapBaseConfig & {
18
+ gracePeriod: BN
19
+ };
20
+
21
+ export abstract class ToBtcBaseSwapHandler<V extends SwapHandlerSwap<SwapData, S>, S> extends SwapHandler<V, S> {
22
+
23
+ readonly pdaExistsForToken: {
24
+ [chainIdentifier: string]: {
25
+ [token: string]: boolean
26
+ }
27
+ } = {};
28
+
29
+ abstract config: ToBtcBaseConfig;
30
+
31
+ protected async checkVaultInitialized(chainIdentifier: string, token: string): Promise<void> {
32
+ if(!this.pdaExistsForToken[chainIdentifier] || !this.pdaExistsForToken[chainIdentifier][token]) {
33
+ this.logger.debug("checkVaultInitialized(): checking vault exists for chain: "+chainIdentifier+" token: "+token);
34
+ const {swapContract, signer} = this.getChain(chainIdentifier);
35
+ const reputation = await swapContract.getIntermediaryReputation(signer.getAddress(), token);
36
+ this.logger.debug("checkVaultInitialized(): vault state, chain: "+chainIdentifier+" token: "+token+" exists: "+(reputation!=null));
37
+ if(reputation!=null) {
38
+ if(this.pdaExistsForToken[chainIdentifier]==null) this.pdaExistsForToken[chainIdentifier] = {};
39
+ this.pdaExistsForToken[chainIdentifier][token] = true;
40
+ } else {
41
+ throw {
42
+ code: 20201,
43
+ msg: "Token not supported!"
44
+ };
45
+ }
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Checks minimums/maximums, calculates the fee & total amount
51
+ *
52
+ * @param request
53
+ * @param requestedAmount
54
+ * @param useToken
55
+ * @throws {DefinedRuntimeError} will throw an error if the amount is outside minimum/maximum bounds
56
+ */
57
+ protected async preCheckAmounts(
58
+ request: RequestData<ToBtcLnRequestType | ToBtcRequestType>,
59
+ requestedAmount: {input: boolean, amount: BN},
60
+ useToken: string
61
+ ): Promise<{baseFee: BN, feePPM: BN}> {
62
+ const res = await PluginManager.onHandlePreToBtcQuote(
63
+ request,
64
+ requestedAmount,
65
+ request.chainIdentifier,
66
+ useToken,
67
+ {minInBtc: this.config.min, maxInBtc: this.config.max},
68
+ {baseFeeInBtc: this.config.baseFee, feePPM: this.config.feePPM},
69
+ );
70
+ if(res!=null) {
71
+ this.handlePluginErrorResponses(res);
72
+ if(isQuoteSetFees(res)) {
73
+ return {
74
+ baseFee: res.baseFee || this.config.baseFee,
75
+ feePPM: res.feePPM || this.config.feePPM
76
+ }
77
+ }
78
+ }
79
+ if(!requestedAmount.input) {
80
+ this.checkBtcAmountInBounds(requestedAmount.amount);
81
+ }
82
+ return {
83
+ baseFee: this.config.baseFee,
84
+ feePPM: this.config.feePPM
85
+ };
86
+ }
87
+
88
+ /**
89
+ * Checks minimums/maximums, calculates network fee (based on the callback passed), swap fee & total amount
90
+ *
91
+ * @param request
92
+ * @param requestedAmount
93
+ * @param fees
94
+ * @param useToken
95
+ * @param getNetworkFee
96
+ * @param signal
97
+ * @param pricePrefetchPromise
98
+ * @throws {DefinedRuntimeError} will throw an error if the amount is outside minimum/maximum bounds,
99
+ * or if we don't have enough funds (getNetworkFee callback throws)
100
+ */
101
+ protected async checkToBtcAmount<T extends {networkFee: BN}>(
102
+ request: RequestData<ToBtcLnRequestType | ToBtcRequestType>,
103
+ requestedAmount: {input: boolean, amount: BN},
104
+ fees: {baseFee: BN, feePPM: BN},
105
+ useToken: string,
106
+ getNetworkFee: (amount: BN) => Promise<T>,
107
+ signal: AbortSignal,
108
+ pricePrefetchPromise?: Promise<BN>
109
+ ): Promise<{
110
+ amountBD: BN,
111
+ networkFeeData: T,
112
+ swapFee: BN,
113
+ swapFeeInToken: BN,
114
+ networkFee: BN,
115
+ networkFeeInToken: BN,
116
+ totalInToken: BN
117
+ }> {
118
+ const chainIdentifier = request.chainIdentifier;
119
+
120
+ const res = await PluginManager.onHandlePostToBtcQuote<T>(
121
+ request,
122
+ requestedAmount,
123
+ request.chainIdentifier,
124
+ useToken,
125
+ {minInBtc: this.config.min, maxInBtc: this.config.max},
126
+ {baseFeeInBtc: fees.baseFee, feePPM: fees.feePPM, networkFeeGetter: getNetworkFee},
127
+ pricePrefetchPromise
128
+ );
129
+ signal.throwIfAborted();
130
+ if(res!=null) {
131
+ this.handlePluginErrorResponses(res);
132
+ if(isQuoteSetFees(res)) {
133
+ if(res.baseFee!=null) fees.baseFee = res.baseFee;
134
+ if(res.feePPM!=null) fees.feePPM = res.feePPM;
135
+ }
136
+ if(isToBtcPluginQuote(res)) {
137
+ if(requestedAmount.input) {
138
+ return {
139
+ amountBD: res.amount.amount,
140
+ swapFee: res.swapFee.inOutputTokens,
141
+ swapFeeInToken: res.swapFee.inInputTokens,
142
+ networkFee: res.networkFee.inOutputTokens,
143
+ networkFeeInToken: res.networkFee.inInputTokens,
144
+ networkFeeData: res.networkFeeData,
145
+ totalInToken: requestedAmount.amount
146
+ }
147
+ } else {
148
+ return {
149
+ amountBD: requestedAmount.amount,
150
+ swapFee: res.swapFee.inOutputTokens,
151
+ swapFeeInToken: res.swapFee.inInputTokens,
152
+ networkFee: res.networkFee.inOutputTokens,
153
+ networkFeeInToken: res.networkFee.inInputTokens,
154
+ networkFeeData: res.networkFeeData,
155
+ totalInToken: res.amount.amount.add(res.swapFee.inInputTokens).add(res.networkFee.inInputTokens)
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ let amountBD: BN;
162
+ let tooLow = false;
163
+ if(requestedAmount.input) {
164
+ amountBD = await this.swapPricing.getToBtcSwapAmount(requestedAmount.amount, useToken, chainIdentifier, null, pricePrefetchPromise);
165
+ signal.throwIfAborted();
166
+
167
+ //Decrease by base fee
168
+ amountBD = amountBD.sub(fees.baseFee);
169
+
170
+ //If it's already smaller than minimum, set it to minimum so we can calculate the network fee
171
+ if(amountBD.lt(this.config.min)) {
172
+ amountBD = this.config.min;
173
+ tooLow = true;
174
+ }
175
+ } else {
176
+ amountBD = requestedAmount.amount;
177
+ this.checkBtcAmountInBounds(amountBD);
178
+ }
179
+
180
+ const resp = await getNetworkFee(amountBD);
181
+ this.logger.debug("checkToBtcAmount(): network fee calculated, amount: "+amountBD.toString(10)+" fee: "+resp.networkFee.toString(10));
182
+ signal.throwIfAborted();
183
+
184
+ if(requestedAmount.input) {
185
+ //Decrease by network fee
186
+ amountBD = amountBD.sub(resp.networkFee);
187
+
188
+ //Decrease by percentage fee
189
+ amountBD = amountBD.mul(new BN(1000000)).div(fees.feePPM.add(new BN(1000000)));
190
+
191
+ const tooHigh = amountBD.gt(this.config.max.mul(new BN(105)).div(new BN(100)));
192
+ tooLow ||= amountBD.lt(this.config.min.mul(new BN(95)).div(new BN(100)));
193
+ if(tooLow || tooHigh) {
194
+ //Compute min/max
195
+ let adjustedMin = this.config.min.mul(fees.feePPM.add(new BN(1000000))).div(new BN(1000000));
196
+ let adjustedMax = this.config.max.mul(fees.feePPM.add(new BN(1000000))).div(new BN(1000000));
197
+ adjustedMin = adjustedMin.add(fees.baseFee).add(resp.networkFee);
198
+ adjustedMax = adjustedMax.add(fees.baseFee).add(resp.networkFee);
199
+ const minIn = await this.swapPricing.getFromBtcSwapAmount(
200
+ adjustedMin, useToken, chainIdentifier, null, pricePrefetchPromise
201
+ );
202
+ const maxIn = await this.swapPricing.getFromBtcSwapAmount(
203
+ adjustedMax, useToken, chainIdentifier, null, pricePrefetchPromise
204
+ );
205
+ throw {
206
+ code: tooLow ? 20003 : 2004,
207
+ msg: tooLow ? "Amount too low!" : "Amount too high!",
208
+ data: {
209
+ min: minIn.toString(10),
210
+ max: maxIn.toString(10)
211
+ }
212
+ };
213
+ }
214
+ }
215
+
216
+ const swapFee = fees.baseFee.add(amountBD.mul(fees.feePPM).div(new BN(1000000)));
217
+
218
+ const networkFeeInToken = await this.swapPricing.getFromBtcSwapAmount(
219
+ resp.networkFee, useToken, chainIdentifier, true, pricePrefetchPromise
220
+ );
221
+ const swapFeeInToken = await this.swapPricing.getFromBtcSwapAmount(
222
+ swapFee, useToken, chainIdentifier, true, pricePrefetchPromise
223
+ );
224
+ signal.throwIfAborted();
225
+
226
+ let total: BN;
227
+ if(requestedAmount.input) {
228
+ total = requestedAmount.amount;
229
+ } else {
230
+ const amountInToken = await this.swapPricing.getFromBtcSwapAmount(
231
+ requestedAmount.amount, useToken, chainIdentifier, true, pricePrefetchPromise
232
+ );
233
+ signal.throwIfAborted();
234
+ total = amountInToken.add(swapFeeInToken).add(networkFeeInToken);
235
+ }
236
+
237
+ return {amountBD, networkFeeData: resp, swapFee, swapFeeInToken, networkFee: resp.networkFee, networkFeeInToken, totalInToken: total};
238
+ }
239
+
240
+ /**
241
+ * Starts pre-fetches for swap pricing & signature data
242
+ *
243
+ * @param chainIdentifier
244
+ * @param token
245
+ * @param responseStream
246
+ * @param abortController
247
+ */
248
+ protected getToBtcPrefetches(chainIdentifier: string, token: string, responseStream: ServerParamEncoder, abortController: AbortController): {
249
+ pricePrefetchPromise?: Promise<BN>,
250
+ signDataPrefetchPromise?: Promise<any>
251
+ } {
252
+ //Fetch pricing & signature data in parallel
253
+ const pricePrefetchPromise: Promise<BN> = this.swapPricing.preFetchPrice(token, chainIdentifier).catch(e => {
254
+ this.logger.error("getToBtcPrefetches(): pricePrefetch error", e);
255
+ abortController.abort(e);
256
+ return null;
257
+ });
258
+
259
+ return {
260
+ pricePrefetchPromise,
261
+ signDataPrefetchPromise: this.getSignDataPrefetch(chainIdentifier, abortController, responseStream)
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Signs the created swap
267
+ *
268
+ * @param chainIdentifier
269
+ * @param swapObject
270
+ * @param req
271
+ * @param abortSignal
272
+ * @param signDataPrefetchPromise
273
+ */
274
+ protected async getToBtcSignatureData(
275
+ chainIdentifier: string,
276
+ swapObject: SwapData,
277
+ req: Request & {paramReader: IParamReader},
278
+ abortSignal: AbortSignal,
279
+ signDataPrefetchPromise?: Promise<any>
280
+ ): Promise<{
281
+ prefix: string,
282
+ timeout: string,
283
+ signature: string
284
+ }> {
285
+ const prefetchedSignData = signDataPrefetchPromise!=null ? await signDataPrefetchPromise : null;
286
+ if(prefetchedSignData!=null) this.logger.debug("getToBtcSignatureData(): pre-fetched signature data: ", prefetchedSignData);
287
+ abortSignal.throwIfAborted();
288
+
289
+ const feeRateObj = await req.paramReader.getParams({
290
+ feeRate: FieldTypeEnum.String
291
+ }).catch(() => null);
292
+ abortSignal.throwIfAborted();
293
+
294
+ const feeRate = feeRateObj?.feeRate!=null && typeof(feeRateObj.feeRate)==="string" ? feeRateObj.feeRate : null;
295
+ this.logger.debug("getToBtcSignatureData(): using fee rate from client: ", feeRate);
296
+ const {swapContract, signer} = this.getChain(chainIdentifier);
297
+ const sigData = await swapContract.getInitSignature(
298
+ signer,
299
+ swapObject,
300
+ this.config.authorizationTimeout,
301
+ prefetchedSignData,
302
+ feeRate
303
+ );
304
+ abortSignal.throwIfAborted();
305
+
306
+ return sigData;
307
+ }
308
+
309
+ }