@swapkit/helpers 1.0.0-rc.9 → 1.0.0-rc.90

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 (38) hide show
  1. package/dist/index.js +2065 -0
  2. package/dist/index.js.map +28 -0
  3. package/package.json +24 -37
  4. package/src/helpers/__tests__/asset.test.ts +126 -108
  5. package/src/helpers/__tests__/memo.test.ts +52 -40
  6. package/src/helpers/__tests__/others.test.ts +42 -37
  7. package/src/helpers/__tests__/validators.test.ts +24 -0
  8. package/src/helpers/asset.ts +119 -87
  9. package/src/helpers/liquidity.ts +50 -43
  10. package/src/helpers/memo.ts +31 -28
  11. package/src/helpers/others.ts +29 -12
  12. package/src/helpers/validators.ts +15 -6
  13. package/src/helpers/web3wallets.ts +178 -0
  14. package/src/index.ts +13 -9
  15. package/src/modules/__tests__/assetValue.test.ts +325 -116
  16. package/src/modules/__tests__/bigIntArithmetics.test.ts +30 -0
  17. package/src/modules/__tests__/swapKitNumber.test.ts +306 -183
  18. package/src/modules/assetValue.ts +216 -152
  19. package/src/modules/bigIntArithmetics.ts +214 -147
  20. package/src/modules/requestClient.ts +29 -0
  21. package/src/modules/swapKitError.ts +32 -5
  22. package/src/modules/swapKitNumber.ts +8 -1
  23. package/src/types/abis/erc20.ts +99 -0
  24. package/src/types/abis/tcEthVault.ts +496 -0
  25. package/src/types/chains.ts +220 -0
  26. package/src/types/commonTypes.ts +119 -0
  27. package/src/types/derivationPath.ts +56 -0
  28. package/src/types/index.ts +10 -0
  29. package/src/types/network.ts +43 -0
  30. package/src/types/sdk.ts +11 -0
  31. package/src/types/tokens.ts +30 -0
  32. package/src/types/transactions.ts +45 -0
  33. package/src/types/wallet.ts +39 -0
  34. package/LICENSE +0 -201
  35. package/dist/index.cjs +0 -1
  36. package/dist/index.d.ts +0 -354
  37. package/dist/index.es.js +0 -1054
  38. package/src/helpers/request.ts +0 -16
package/dist/index.es.js DELETED
@@ -1,1054 +0,0 @@
1
- var _t = Object.defineProperty;
2
- var gt = (s, t, e) => t in s ? _t(s, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[t] = e;
3
- var p = (s, t, e) => (gt(s, typeof t != "symbol" ? t + "" : t, e), e), bt = (s, t, e) => {
4
- if (!t.has(s))
5
- throw TypeError("Cannot " + e);
6
- };
7
- var y = (s, t, e) => {
8
- if (t.has(s))
9
- throw TypeError("Cannot add the same private member more than once");
10
- t instanceof WeakSet ? t.add(s) : t.set(s, e);
11
- };
12
- var f = (s, t, e) => (bt(s, t, "access private method"), e);
13
- import { FeeOption as H, BaseDecimal as m, Chain as o, ChainToRPC as yt, MemoType as g } from "@swapkit/types";
14
- const wt = "0x313ce567", rt = async ({ chain: s, to: t }) => {
15
- try {
16
- const { result: e } = await zt.post(yt[s], {
17
- headers: { accept: "*/*", "cache-control": "no-cache" },
18
- body: JSON.stringify({
19
- id: 44,
20
- jsonrpc: "2.0",
21
- method: "eth_call",
22
- params: [{ to: t.toLowerCase(), data: wt }, "latest"]
23
- })
24
- });
25
- return parseInt(BigInt(e).toString());
26
- } catch (e) {
27
- return console.error(e), m[s];
28
- }
29
- }, At = async (s) => {
30
- if (s === o.Ethereum)
31
- return m.ETH;
32
- const [, t] = s.split("-");
33
- return t != null && t.startsWith("0x") ? rt({ chain: o.Ethereum, to: t }) : m.ETH;
34
- }, Tt = async (s) => {
35
- const [, t] = s.split("-");
36
- return t != null && t.startsWith("0x") ? rt({ chain: o.Avalanche, to: t.toLowerCase() }) : m.AVAX;
37
- }, Rt = async (s) => s === o.BinanceSmartChain ? m.BSC : m.BSC, st = async ({ chain: s, symbol: t }) => {
38
- switch (s) {
39
- case o.Ethereum:
40
- return At(t);
41
- case o.Avalanche:
42
- return Tt(t);
43
- case o.BinanceSmartChain:
44
- return Rt(t);
45
- default:
46
- return m[s];
47
- }
48
- }, te = {
49
- [H.Average]: 1.2,
50
- [H.Fast]: 1.5,
51
- [H.Fastest]: 2
52
- }, St = ({ chain: s, symbol: t }) => {
53
- switch (s) {
54
- case o.Bitcoin:
55
- case o.BitcoinCash:
56
- case o.Litecoin:
57
- case o.Dogecoin:
58
- case o.Binance:
59
- case o.Ethereum:
60
- case o.Avalanche:
61
- return t === s;
62
- case o.Arbitrum:
63
- case o.Optimism:
64
- return t === "ETH";
65
- case o.Maya:
66
- return t === "CACAO";
67
- case o.Kujira:
68
- return t === "KUJI";
69
- case o.Cosmos:
70
- return t === "ATOM";
71
- case o.Polygon:
72
- return t === "MATIC";
73
- case o.BinanceSmartChain:
74
- return t === "BNB";
75
- case o.THORChain:
76
- return t === "RUNE";
77
- }
78
- }, vt = (s) => {
79
- switch (s) {
80
- case "ETH.THOR":
81
- return { identifier: "ETH.THOR-0xa5f2211b9b8170f694421f2046281775e8468044", decimal: 18 };
82
- case "ETH.vTHOR":
83
- return { identifier: "ETH.vTHOR-0x815c23eca83261b6ec689b60cc4a58b54bc24d8d", decimal: 18 };
84
- case o.Cosmos:
85
- return { identifier: "GAIA.ATOM", decimal: m[s] };
86
- case o.THORChain:
87
- return { identifier: "THOR.RUNE", decimal: m[s] };
88
- case o.BinanceSmartChain:
89
- return { identifier: "BSC.BNB", decimal: m[s] };
90
- case o.Maya:
91
- return { identifier: "MAYA.CACAO", decimal: m.MAYA };
92
- case "MAYA.MAYA":
93
- return { identifier: "MAYA.MAYA", decimal: 4 };
94
- case o.Kujira:
95
- case o.Arbitrum:
96
- case o.Optimism:
97
- case o.BitcoinCash:
98
- case o.Litecoin:
99
- case o.Dogecoin:
100
- case o.Binance:
101
- case o.Avalanche:
102
- case o.Polygon:
103
- case o.Bitcoin:
104
- case o.Ethereum:
105
- return { identifier: `${s}.${s}`, decimal: m[s] };
106
- }
107
- }, Ct = ({ chain: s, symbol: t }) => {
108
- if (t.includes("/"))
109
- return "Synth";
110
- switch (s) {
111
- case o.Bitcoin:
112
- case o.BitcoinCash:
113
- case o.Dogecoin:
114
- case o.Litecoin:
115
- case o.Maya:
116
- case o.THORChain:
117
- return "Native";
118
- case o.Cosmos:
119
- return t === "ATOM" ? "Native" : o.Cosmos;
120
- case o.Kujira:
121
- return t === o.Kujira ? "Native" : o.Kujira;
122
- case o.Binance:
123
- return t === o.Binance ? "Native" : "BEP2";
124
- case o.BinanceSmartChain:
125
- return t === o.Binance ? "Native" : "BEP20";
126
- case o.Ethereum:
127
- return t === o.Ethereum ? "Native" : "ERC20";
128
- case o.Avalanche:
129
- return t === o.Avalanche ? "Native" : o.Avalanche;
130
- case o.Polygon:
131
- return t === o.Polygon ? "Native" : "POLYGON";
132
- case o.Arbitrum:
133
- return [o.Ethereum, o.Arbitrum].includes(t) ? "Native" : "ARBITRUM";
134
- case o.Optimism:
135
- return [o.Ethereum, o.Optimism].includes(t) ? "Native" : "OPTIMISM";
136
- }
137
- }, ee = (s) => {
138
- var a;
139
- const [t, ...e] = s.split("."), r = s.includes("/"), n = e.join("."), i = (a = n == null ? void 0 : n.split("-")) == null ? void 0 : a[0];
140
- return { chain: t, symbol: n, ticker: i, synth: r };
141
- }, $t = new RegExp(
142
- /(.)\1{6}|\.ORG|\.NET|\.FINANCE|\.COM|WWW|HTTP|\\\\|\/\/|[\s$%:[\]]/,
143
- "gmi"
144
- ), re = (s) => s.filter(
145
- (t) => !$t.test(t.toString()) && !t.toString().includes("undefined")
146
- ), It = ({
147
- liquidityUnits: s,
148
- poolUnits: t,
149
- runeDepth: e
150
- }) => {
151
- const r = d(s), n = d(t), i = d(e), a = r.mul(i), c = n.mul(n).mul(2), u = n.mul(r).mul(2), l = r.mul(r), h = n.mul(n).mul(n);
152
- return a.mul(c.sub(u).add(l)).div(h);
153
- }, Et = ({
154
- liquidityUnits: s,
155
- poolUnits: t,
156
- assetDepth: e
157
- }) => {
158
- const r = d(s), n = d(t), i = d(e), a = r.mul(i), c = n.mul(n).mul(2), u = n.mul(r).mul(2), l = r.mul(r), h = a.mul(c.sub(u).add(l)), _ = n.mul(n).mul(n);
159
- return h.div(_);
160
- }, se = ({
161
- percent: s,
162
- runeDepth: t,
163
- liquidityUnits: e,
164
- poolUnits: r
165
- }) => It({ runeDepth: t, liquidityUnits: e, poolUnits: r }).mul(s), ne = ({
166
- percent: s,
167
- assetDepth: t,
168
- liquidityUnits: e,
169
- poolUnits: r
170
- }) => Et({ assetDepth: t, liquidityUnits: e, poolUnits: r }).mul(s), d = (s) => new Qt({ value: s, decimal: m.THOR }), Ot = ({
171
- liquidityUnits: s,
172
- poolUnits: t,
173
- runeDepth: e,
174
- assetDepth: r
175
- }) => ({
176
- assetAmount: d(r).mul(s).div(t),
177
- runeAmount: d(e).mul(s).div(t)
178
- }), ie = ({
179
- liquidityUnits: s,
180
- poolUnits: t,
181
- runeDepth: e,
182
- assetDepth: r,
183
- percent: n
184
- }) => Object.fromEntries(
185
- Object.entries(Ot({ liquidityUnits: s, poolUnits: t, runeDepth: e, assetDepth: r })).map(
186
- ([i, a]) => [i, a.mul(n)]
187
- )
188
- ), oe = ({
189
- runeDepth: s,
190
- poolUnits: t,
191
- assetDepth: e,
192
- liquidityUnits: r,
193
- runeAmount: n,
194
- assetAmount: i
195
- }) => {
196
- const a = d(s), c = d(e), u = d(t), l = d(n), h = d(i), _ = l.mul(c), T = h.mul(a), P = l.mul(h), dt = a.mul(c), mt = u.mul(_.add(T.add(P.mul(2)))), ft = _.add(T.add(dt.mul(2))), J = mt.div(ft), N = d(r).add(J);
197
- if (J.baseValueNumber === 0)
198
- return N.div(u).baseValueNumber;
199
- const pt = u.add(N);
200
- return N.div(pt).baseValueNumber;
201
- }, ae = ({
202
- runeAmount: s,
203
- assetAmount: t,
204
- runeDepth: e,
205
- assetDepth: r
206
- }) => {
207
- const n = d(e), i = d(r), a = d(t), c = d(s), u = a.mul(n).sub(i.mul(c)), l = i.mul(c).add(n.mul(i));
208
- return Math.abs(u.div(l).baseValueNumber);
209
- }, kt = ({
210
- symbol: s,
211
- ticker: t,
212
- chain: e
213
- }) => e === "ETH" && t !== "ETH" ? `${t}-${s.slice(-3)}` : s, ce = (s, t) => {
214
- switch (s) {
215
- case g.LEAVE:
216
- case g.BOND: {
217
- const { address: e } = t;
218
- return `${s}:${e}`;
219
- }
220
- case g.UNBOND: {
221
- const { address: e, unbondAmount: r } = t;
222
- return `${s}:${e}:${r * 10 ** 8}`;
223
- }
224
- case g.THORNAME_REGISTER: {
225
- const { name: e, chain: r, address: n, owner: i } = t;
226
- return `${s}:${e}:${r}:${n}${i ? `:${i}` : ""}`;
227
- }
228
- case g.DEPOSIT: {
229
- const { chain: e, symbol: r, address: n, singleSide: i } = t;
230
- return i ? `${s}:${e}/${r}::t:0` : `${s}:${e}.${r}:${n || ""}:t:0`;
231
- }
232
- case g.WITHDRAW: {
233
- const { chain: e, ticker: r, symbol: n, basisPoints: i, targetAssetString: a, singleSide: c } = t, u = !c && a ? `:${a}` : "", l = kt({ chain: e, symbol: n, ticker: r });
234
- return `${s}:${e}${c ? "/" : "."}${l}:${i}${u}`;
235
- }
236
- case g.OPEN_LOAN:
237
- case g.CLOSE_LOAN: {
238
- const { asset: e, address: r } = t;
239
- return `${s}:${e}:${r}`;
240
- }
241
- default:
242
- return "";
243
- }
244
- }, ue = (s) => {
245
- if (s < 0)
246
- throw new Error("Invalid number of year");
247
- return 10 + s;
248
- }, le = (s) => {
249
- if (s.length > 30)
250
- return !1;
251
- const t = /^[a-zA-Z0-9+_-]+$/g;
252
- return !!s.match(t);
253
- }, he = ([s, t, e, r, n]) => `${s}'/${t}'/${e}'/${r}${typeof n != "number" ? "" : `/${n}`}`;
254
- class K extends Error {
255
- constructor(t, e, r) {
256
- const n = t.status || t.status === 0 ? t.status : "", i = t.statusText || "", a = `${n} ${i}`.trim(), c = a ? `status code ${a}` : "an unknown error";
257
- super(`Request failed with ${c}`), Object.defineProperty(this, "response", {
258
- enumerable: !0,
259
- configurable: !0,
260
- writable: !0,
261
- value: void 0
262
- }), Object.defineProperty(this, "request", {
263
- enumerable: !0,
264
- configurable: !0,
265
- writable: !0,
266
- value: void 0
267
- }), Object.defineProperty(this, "options", {
268
- enumerable: !0,
269
- configurable: !0,
270
- writable: !0,
271
- value: void 0
272
- }), this.name = "HTTPError", this.response = t, this.request = e, this.options = r;
273
- }
274
- }
275
- class nt extends Error {
276
- constructor(t) {
277
- super("Request timed out"), Object.defineProperty(this, "request", {
278
- enumerable: !0,
279
- configurable: !0,
280
- writable: !0,
281
- value: void 0
282
- }), this.name = "TimeoutError", this.request = t;
283
- }
284
- }
285
- const V = (s) => s !== null && typeof s == "object", B = (...s) => {
286
- for (const t of s)
287
- if ((!V(t) || Array.isArray(t)) && t !== void 0)
288
- throw new TypeError("The `options` argument must be an object");
289
- return z({}, ...s);
290
- }, it = (s = {}, t = {}) => {
291
- const e = new globalThis.Headers(s), r = t instanceof globalThis.Headers, n = new globalThis.Headers(t);
292
- for (const [i, a] of n.entries())
293
- r && a === "undefined" || a === void 0 ? e.delete(i) : e.set(i, a);
294
- return e;
295
- }, z = (...s) => {
296
- let t = {}, e = {};
297
- for (const r of s)
298
- if (Array.isArray(r))
299
- Array.isArray(t) || (t = []), t = [...t, ...r];
300
- else if (V(r)) {
301
- for (let [n, i] of Object.entries(r))
302
- V(i) && n in t && (i = z(t[n], i)), t = { ...t, [n]: i };
303
- V(r.headers) && (e = it(e, r.headers), t.headers = e);
304
- }
305
- return t;
306
- }, Bt = (() => {
307
- let s = !1, t = !1;
308
- const e = typeof globalThis.ReadableStream == "function", r = typeof globalThis.Request == "function";
309
- return e && r && (t = new globalThis.Request("https://empty.invalid", {
310
- body: new globalThis.ReadableStream(),
311
- method: "POST",
312
- // @ts-expect-error - Types are outdated.
313
- get duplex() {
314
- return s = !0, "half";
315
- }
316
- }).headers.has("Content-Type")), s && !t;
317
- })(), Vt = typeof globalThis.AbortController == "function", qt = typeof globalThis.ReadableStream == "function", Mt = typeof globalThis.FormData == "function", ot = ["get", "post", "put", "patch", "head", "delete"], xt = {
318
- json: "application/json",
319
- text: "text/*",
320
- formData: "multipart/form-data",
321
- arrayBuffer: "*/*",
322
- blob: "*/*"
323
- }, j = 2147483647, at = Symbol("stop"), Pt = {
324
- json: !0,
325
- parseJson: !0,
326
- searchParams: !0,
327
- prefixUrl: !0,
328
- retry: !0,
329
- timeout: !0,
330
- hooks: !0,
331
- throwHttpErrors: !0,
332
- onDownloadProgress: !0,
333
- fetch: !0
334
- }, Nt = {
335
- method: !0,
336
- headers: !0,
337
- body: !0,
338
- mode: !0,
339
- credentials: !0,
340
- cache: !0,
341
- redirect: !0,
342
- referrer: !0,
343
- referrerPolicy: !0,
344
- integrity: !0,
345
- keepalive: !0,
346
- signal: !0,
347
- window: !0,
348
- dispatcher: !0,
349
- duplex: !0
350
- }, Ht = (s) => ot.includes(s) ? s.toUpperCase() : s, jt = ["get", "put", "head", "delete", "options", "trace"], Lt = [408, 413, 429, 500, 502, 503, 504], ct = [413, 429, 503], Q = {
351
- limit: 2,
352
- methods: jt,
353
- statusCodes: Lt,
354
- afterStatusCodes: ct,
355
- maxRetryAfter: Number.POSITIVE_INFINITY,
356
- backoffLimit: Number.POSITIVE_INFINITY,
357
- delay: (s) => 0.3 * 2 ** (s - 1) * 1e3
358
- }, Dt = (s = {}) => {
359
- if (typeof s == "number")
360
- return {
361
- ...Q,
362
- limit: s
363
- };
364
- if (s.methods && !Array.isArray(s.methods))
365
- throw new Error("retry.methods must be an array");
366
- if (s.statusCodes && !Array.isArray(s.statusCodes))
367
- throw new Error("retry.statusCodes must be an array");
368
- return {
369
- ...Q,
370
- ...s,
371
- afterStatusCodes: ct
372
- };
373
- };
374
- async function Ut(s, t, e, r) {
375
- return new Promise((n, i) => {
376
- const a = setTimeout(() => {
377
- e && e.abort(), i(new nt(s));
378
- }, r.timeout);
379
- r.fetch(s, t).then(n).catch(i).then(() => {
380
- clearTimeout(a);
381
- });
382
- });
383
- }
384
- async function Ft(s, { signal: t }) {
385
- return new Promise((e, r) => {
386
- t && (t.throwIfAborted(), t.addEventListener("abort", n, { once: !0 }));
387
- function n() {
388
- clearTimeout(i), r(t.reason);
389
- }
390
- const i = setTimeout(() => {
391
- t == null || t.removeEventListener("abort", n), e();
392
- }, s);
393
- });
394
- }
395
- const Wt = (s, t) => {
396
- const e = {};
397
- for (const r in t)
398
- !(r in Nt) && !(r in Pt) && !(r in s) && (e[r] = t[r]);
399
- return e;
400
- };
401
- class q {
402
- static create(t, e) {
403
- const r = new q(t, e), n = async () => {
404
- if (typeof r._options.timeout == "number" && r._options.timeout > j)
405
- throw new RangeError(`The \`timeout\` option cannot be greater than ${j}`);
406
- await Promise.resolve();
407
- let c = await r._fetch();
408
- for (const u of r._options.hooks.afterResponse) {
409
- const l = await u(r.request, r._options, r._decorateResponse(c.clone()));
410
- l instanceof globalThis.Response && (c = l);
411
- }
412
- if (r._decorateResponse(c), !c.ok && r._options.throwHttpErrors) {
413
- let u = new K(c, r.request, r._options);
414
- for (const l of r._options.hooks.beforeError)
415
- u = await l(u);
416
- throw u;
417
- }
418
- if (r._options.onDownloadProgress) {
419
- if (typeof r._options.onDownloadProgress != "function")
420
- throw new TypeError("The `onDownloadProgress` option must be a function");
421
- if (!qt)
422
- throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");
423
- return r._stream(c.clone(), r._options.onDownloadProgress);
424
- }
425
- return c;
426
- }, a = r._options.retry.methods.includes(r.request.method.toLowerCase()) ? r._retry(n) : n();
427
- for (const [c, u] of Object.entries(xt))
428
- a[c] = async () => {
429
- r.request.headers.set("accept", r.request.headers.get("accept") || u);
430
- const h = (await a).clone();
431
- if (c === "json") {
432
- if (h.status === 204 || (await h.clone().arrayBuffer()).byteLength === 0)
433
- return "";
434
- if (e.parseJson)
435
- return e.parseJson(await h.text());
436
- }
437
- return h[c]();
438
- };
439
- return a;
440
- }
441
- // eslint-disable-next-line complexity
442
- constructor(t, e = {}) {
443
- if (Object.defineProperty(this, "request", {
444
- enumerable: !0,
445
- configurable: !0,
446
- writable: !0,
447
- value: void 0
448
- }), Object.defineProperty(this, "abortController", {
449
- enumerable: !0,
450
- configurable: !0,
451
- writable: !0,
452
- value: void 0
453
- }), Object.defineProperty(this, "_retryCount", {
454
- enumerable: !0,
455
- configurable: !0,
456
- writable: !0,
457
- value: 0
458
- }), Object.defineProperty(this, "_input", {
459
- enumerable: !0,
460
- configurable: !0,
461
- writable: !0,
462
- value: void 0
463
- }), Object.defineProperty(this, "_options", {
464
- enumerable: !0,
465
- configurable: !0,
466
- writable: !0,
467
- value: void 0
468
- }), this._input = t, this._options = {
469
- // TODO: credentials can be removed when the spec change is implemented in all browsers. Context: https://www.chromestatus.com/feature/4539473312350208
470
- credentials: this._input.credentials || "same-origin",
471
- ...e,
472
- headers: it(this._input.headers, e.headers),
473
- hooks: z({
474
- beforeRequest: [],
475
- beforeRetry: [],
476
- beforeError: [],
477
- afterResponse: []
478
- }, e.hooks),
479
- method: Ht(e.method ?? this._input.method),
480
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
481
- prefixUrl: String(e.prefixUrl || ""),
482
- retry: Dt(e.retry),
483
- throwHttpErrors: e.throwHttpErrors !== !1,
484
- timeout: e.timeout ?? 1e4,
485
- fetch: e.fetch ?? globalThis.fetch.bind(globalThis)
486
- }, typeof this._input != "string" && !(this._input instanceof URL || this._input instanceof globalThis.Request))
487
- throw new TypeError("`input` must be a string, URL, or Request");
488
- if (this._options.prefixUrl && typeof this._input == "string") {
489
- if (this._input.startsWith("/"))
490
- throw new Error("`input` must not begin with a slash when using `prefixUrl`");
491
- this._options.prefixUrl.endsWith("/") || (this._options.prefixUrl += "/"), this._input = this._options.prefixUrl + this._input;
492
- }
493
- if (Vt) {
494
- if (this.abortController = new globalThis.AbortController(), this._options.signal) {
495
- const r = this._options.signal;
496
- this._options.signal.addEventListener("abort", () => {
497
- this.abortController.abort(r.reason);
498
- });
499
- }
500
- this._options.signal = this.abortController.signal;
501
- }
502
- if (Bt && (this._options.duplex = "half"), this.request = new globalThis.Request(this._input, this._options), this._options.searchParams) {
503
- const n = "?" + (typeof this._options.searchParams == "string" ? this._options.searchParams.replace(/^\?/, "") : new URLSearchParams(this._options.searchParams).toString()), i = this.request.url.replace(/(?:\?.*?)?(?=#|$)/, n);
504
- (Mt && this._options.body instanceof globalThis.FormData || this._options.body instanceof URLSearchParams) && !(this._options.headers && this._options.headers["content-type"]) && this.request.headers.delete("content-type"), this.request = new globalThis.Request(new globalThis.Request(i, { ...this.request }), this._options);
505
- }
506
- this._options.json !== void 0 && (this._options.body = JSON.stringify(this._options.json), this.request.headers.set("content-type", this._options.headers.get("content-type") ?? "application/json"), this.request = new globalThis.Request(this.request, { body: this._options.body }));
507
- }
508
- _calculateRetryDelay(t) {
509
- if (this._retryCount++, this._retryCount < this._options.retry.limit && !(t instanceof nt)) {
510
- if (t instanceof K) {
511
- if (!this._options.retry.statusCodes.includes(t.response.status))
512
- return 0;
513
- const r = t.response.headers.get("Retry-After");
514
- if (r && this._options.retry.afterStatusCodes.includes(t.response.status)) {
515
- let n = Number(r);
516
- return Number.isNaN(n) ? n = Date.parse(r) - Date.now() : n *= 1e3, this._options.retry.maxRetryAfter !== void 0 && n > this._options.retry.maxRetryAfter ? 0 : n;
517
- }
518
- if (t.response.status === 413)
519
- return 0;
520
- }
521
- const e = this._options.retry.delay(this._retryCount);
522
- return Math.min(this._options.retry.backoffLimit, e);
523
- }
524
- return 0;
525
- }
526
- _decorateResponse(t) {
527
- return this._options.parseJson && (t.json = async () => this._options.parseJson(await t.text())), t;
528
- }
529
- async _retry(t) {
530
- try {
531
- return await t();
532
- } catch (e) {
533
- const r = Math.min(this._calculateRetryDelay(e), j);
534
- if (r !== 0 && this._retryCount > 0) {
535
- await Ft(r, { signal: this._options.signal });
536
- for (const n of this._options.hooks.beforeRetry)
537
- if (await n({
538
- request: this.request,
539
- options: this._options,
540
- error: e,
541
- retryCount: this._retryCount
542
- }) === at)
543
- return;
544
- return this._retry(t);
545
- }
546
- throw e;
547
- }
548
- }
549
- async _fetch() {
550
- for (const e of this._options.hooks.beforeRequest) {
551
- const r = await e(this.request, this._options);
552
- if (r instanceof Request) {
553
- this.request = r;
554
- break;
555
- }
556
- if (r instanceof Response)
557
- return r;
558
- }
559
- const t = Wt(this.request, this._options);
560
- return this._options.timeout === !1 ? this._options.fetch(this.request.clone(), t) : Ut(this.request.clone(), t, this.abortController, this._options);
561
- }
562
- /* istanbul ignore next */
563
- _stream(t, e) {
564
- const r = Number(t.headers.get("content-length")) || 0;
565
- let n = 0;
566
- return t.status === 204 ? (e && e({ percent: 1, totalBytes: r, transferredBytes: n }, new Uint8Array()), new globalThis.Response(null, {
567
- status: t.status,
568
- statusText: t.statusText,
569
- headers: t.headers
570
- })) : new globalThis.Response(new globalThis.ReadableStream({
571
- async start(i) {
572
- const a = t.body.getReader();
573
- e && e({ percent: 0, transferredBytes: 0, totalBytes: r }, new Uint8Array());
574
- async function c() {
575
- const { done: u, value: l } = await a.read();
576
- if (u) {
577
- i.close();
578
- return;
579
- }
580
- if (e) {
581
- n += l.byteLength;
582
- const h = r === 0 ? 0 : n / r;
583
- e({ percent: h, transferredBytes: n, totalBytes: r }, l);
584
- }
585
- i.enqueue(l), await c();
586
- }
587
- await c();
588
- }
589
- }), {
590
- status: t.status,
591
- statusText: t.statusText,
592
- headers: t.headers
593
- });
594
- }
595
- }
596
- /*! MIT License © Sindre Sorhus */
597
- const U = (s) => {
598
- const t = (e, r) => q.create(e, B(s, r));
599
- for (const e of ot)
600
- t[e] = (r, n) => q.create(r, B(s, n, { method: e }));
601
- return t.create = (e) => U(B(e)), t.extend = (e) => U(B(s, e)), t.stop = at, t;
602
- }, Gt = U(), Yt = Gt, X = Yt.create({
603
- headers: {
604
- referrer: "https://sk.thorswap.net",
605
- referer: "https://sk.thorswap.net",
606
- "Content-Type": "application/json"
607
- }
608
- }), zt = {
609
- get: (s, t) => X.get(s, t).json(),
610
- post: (s, t) => X.post(s, t).json()
611
- }, Z = Object.values(o), Jt = (s = "") => {
612
- const t = s.toUpperCase(), [e] = t.split(".");
613
- if (Z.includes(e))
614
- return !0;
615
- const [r] = t.split("/");
616
- if (Z.includes(r))
617
- return !0;
618
- throw new Error(
619
- `Invalid identifier: ${s}. Expected format: <Chain>.<Ticker> or <Chain>.<Ticker>-<ContractAddress>`
620
- );
621
- }, $ = 8, R = (s) => 10n ** BigInt(s), S = (s) => Math.log10(parseFloat(s.toString()));
622
- function tt({
623
- value: s,
624
- bigIntDecimal: t = $,
625
- decimal: e = $
626
- }) {
627
- const r = s < 0n;
628
- let n = s.toString().substring(r ? 1 : 0);
629
- const i = e - (n.length - 1);
630
- i > 0 && (n = "0".repeat(i) + n);
631
- const a = n.length - e;
632
- let c = n.slice(-e);
633
- return parseInt(c[t]) >= 5 ? c = `${c.substring(0, t - 1)}${(parseInt(c[t - 1]) + 1).toString()}` : c = c.substring(0, t), `${r ? "-" : ""}${n.slice(0, a)}.${c}`.replace(
634
- /\.?0*$/,
635
- ""
636
- );
637
- }
638
- var w, v, M, ut, x, lt, O, F, A, C, k, W;
639
- const I = class I {
640
- constructor(t) {
641
- y(this, w);
642
- y(this, M);
643
- y(this, x);
644
- y(this, O);
645
- y(this, A);
646
- y(this, k);
647
- p(this, "decimalMultiplier", 10n ** 8n);
648
- p(this, "bigIntValue", 0n);
649
- p(this, "decimal");
650
- const e = L(t);
651
- this.decimal = typeof t == "object" ? t.decimal : void 0, this.decimalMultiplier = R(
652
- Math.max(f(this, k, W).call(this, f(this, A, C).call(this, e)), this.decimal || 0)
653
- ), f(this, M, ut).call(this, e);
654
- }
655
- static fromBigInt(t, e) {
656
- return new I({
657
- decimal: e,
658
- value: tt({ value: t, bigIntDecimal: e, decimal: e })
659
- });
660
- }
661
- static shiftDecimals({
662
- value: t,
663
- from: e,
664
- to: r
665
- }) {
666
- return I.fromBigInt(
667
- new I(t).bigIntValue * R(r) / R(e),
668
- r
669
- );
670
- }
671
- /**
672
- * @deprecated Use `getBaseValue('string')` instead
673
- */
674
- get baseValue() {
675
- return this.getBaseValue("string");
676
- }
677
- /**
678
- * @deprecated Use `getBaseValue('number')` instead
679
- */
680
- get baseValueNumber() {
681
- return this.getBaseValue("number");
682
- }
683
- /**
684
- * @deprecated Use `getBaseValue('bigint')` instead
685
- */
686
- get baseValueBigInt() {
687
- return this.getBaseValue("bigint");
688
- }
689
- set(t) {
690
- return new this.constructor({ decimal: this.decimal, value: t, identifier: this.toString() });
691
- }
692
- add(...t) {
693
- return f(this, w, v).call(this, "add", ...t);
694
- }
695
- sub(...t) {
696
- return f(this, w, v).call(this, "sub", ...t);
697
- }
698
- mul(...t) {
699
- return f(this, w, v).call(this, "mul", ...t);
700
- }
701
- div(...t) {
702
- return f(this, w, v).call(this, "div", ...t);
703
- }
704
- gt(t) {
705
- return this.bigIntValue > this.getBigIntValue(t);
706
- }
707
- gte(t) {
708
- return this.bigIntValue >= this.getBigIntValue(t);
709
- }
710
- lt(t) {
711
- return this.bigIntValue < this.getBigIntValue(t);
712
- }
713
- lte(t) {
714
- return this.bigIntValue <= this.getBigIntValue(t);
715
- }
716
- eqValue(t) {
717
- return this.bigIntValue === this.getBigIntValue(t);
718
- }
719
- getValue(t) {
720
- const e = this.formatBigIntToSafeValue(
721
- this.bigIntValue,
722
- this.decimal || S(this.decimalMultiplier)
723
- );
724
- switch (t) {
725
- case "number":
726
- return Number(e);
727
- case "string":
728
- return e;
729
- default:
730
- return this.bigIntValue * BigInt(this.decimal || 8n) / this.decimalMultiplier;
731
- }
732
- }
733
- getBaseValue(t) {
734
- const e = this.decimalMultiplier / R(this.decimal || m.THOR), r = this.bigIntValue / e;
735
- switch (t) {
736
- case "number":
737
- return Number(r);
738
- case "string":
739
- return r.toString();
740
- default:
741
- return r;
742
- }
743
- }
744
- getBigIntValue(t, e) {
745
- if (!e && typeof t == "object")
746
- return t.bigIntValue;
747
- const r = L(t), n = f(this, A, C).call(this, r);
748
- return n === "0" || n === "undefined" ? 0n : f(this, O, F).call(this, n, e);
749
- }
750
- formatBigIntToSafeValue(t, e) {
751
- const r = e || this.decimal || $, n = Math.max(
752
- r,
753
- S(this.decimalMultiplier)
754
- ), i = t < 0n, a = t.toString().substring(i ? 1 : 0), c = n - (a.length - 1), u = c > 0 ? "0".repeat(c) + a : a, l = u.length - n;
755
- let h = u.slice(-n);
756
- return parseInt(h[r]) >= 5 ? h = `${h.substring(0, r - 1)}${(parseInt(h[r - 1]) + 1).toString()}` : h = h.substring(0, r), `${i ? "-" : ""}${u.slice(
757
- 0,
758
- l
759
- )}.${h}`.replace(/\.?0*$/, "");
760
- }
761
- toSignificant(t = 6) {
762
- const [e, r] = this.getValue("string").split("."), n = e || "", i = r || "", a = parseInt(n) ? n.length + i.length : i.length;
763
- if (a <= t)
764
- return this.getValue("string");
765
- if (n.length >= t)
766
- return n.slice(0, t).padEnd(n.length, "0");
767
- if (parseInt(n))
768
- return `${n}.${i.slice(0, t - n.length)}`.padEnd(
769
- a - t,
770
- "0"
771
- );
772
- const c = parseInt(i), u = `${c}`.slice(0, t);
773
- return `0.${u.padStart(
774
- i.length - `${c}`.length + u.length,
775
- "0"
776
- )}`;
777
- }
778
- };
779
- w = new WeakSet(), v = function(t, ...e) {
780
- const r = f(this, x, lt).call(this, this, ...e), n = R(r), i = e.reduce(
781
- (c, u) => {
782
- const l = this.getBigIntValue(u, r);
783
- switch (t) {
784
- case "add":
785
- return c + l;
786
- case "sub":
787
- return c - l;
788
- case "mul":
789
- return c * l / n;
790
- case "div": {
791
- if (l === 0n)
792
- throw new RangeError("Division by zero");
793
- return c * n / l;
794
- }
795
- default:
796
- return c;
797
- }
798
- },
799
- //normalize is to precision multiplier base
800
- this.bigIntValue * n / this.decimalMultiplier
801
- ), a = tt({
802
- bigIntDecimal: r,
803
- decimal: Math.max(r, S(this.decimalMultiplier)),
804
- value: i
805
- });
806
- return new this.constructor({ decimal: this.decimal, value: a, identifier: this.toString() });
807
- }, M = new WeakSet(), ut = function(t) {
808
- const e = f(this, A, C).call(this, t) || "0";
809
- this.bigIntValue = f(this, O, F).call(this, e);
810
- }, x = new WeakSet(), lt = function(...t) {
811
- const e = t.map(
812
- (r) => typeof r == "object" ? r.decimal || S(r.decimalMultiplier) : f(this, k, W).call(this, f(this, A, C).call(this, r))
813
- ).filter(Boolean);
814
- return Math.max(...e, $);
815
- }, O = new WeakSet(), F = function(t, e) {
816
- const r = e ? R(e) : this.decimalMultiplier, n = S(r), [i = "", a = ""] = t.split(".");
817
- return BigInt(`${i}${a.padEnd(n, "0")}`);
818
- }, A = new WeakSet(), C = function(t) {
819
- const r = `${typeof t == "number" ? Number(t).toLocaleString("fullwide", {
820
- useGrouping: !1,
821
- maximumFractionDigits: 20
822
- }) : L(t)}`.replaceAll(",", ".").split(".");
823
- return r.length > 1 ? `${r.slice(0, -1).join("")}.${r.at(-1)}` : r[0];
824
- }, k = new WeakSet(), W = function(t) {
825
- var r;
826
- const e = ((r = t.split(".")[1]) == null ? void 0 : r.length) || 0;
827
- return Math.max(e, $);
828
- };
829
- let E = I;
830
- function L(s) {
831
- return typeof s == "object" ? "getValue" in s ? s.getValue("string") : s.value : s;
832
- }
833
- let G;
834
- const D = (s) => {
835
- if (!G)
836
- throw new Error("Static assets not loaded, call await AssetValue.loadStaticAssets() first");
837
- return G.get(s.toUpperCase()) || { decimal: m.THOR, identifier: "" };
838
- }, et = async (s, t = 0) => {
839
- Jt(s);
840
- const e = await st(Y(s));
841
- return new b({ decimal: e, value: t, identifier: s });
842
- };
843
- class b extends E {
844
- constructor(e) {
845
- super(
846
- e.value instanceof E ? e.value : { decimal: e.decimal, value: e.value }
847
- );
848
- p(this, "address");
849
- p(this, "chain");
850
- p(this, "isSynthetic", !1);
851
- p(this, "isGasAsset", !1);
852
- p(this, "symbol");
853
- p(this, "ticker");
854
- p(this, "type");
855
- const r = "identifier" in e ? e.identifier : `${e.chain}.${e.symbol}`, n = Y(r);
856
- this.type = Ct(n), this.chain = n.chain, this.ticker = n.ticker, this.symbol = n.symbol, this.address = n.address, this.isSynthetic = n.isSynthetic, this.isGasAsset = n.isGasAsset;
857
- }
858
- get assetValue() {
859
- return `${this.getValue("string")} ${this.ticker}`;
860
- }
861
- toString(e = !1) {
862
- const r = this.isSynthetic ? this.ticker : `${this.chain}.${this.ticker}`;
863
- return e ? r : (
864
- // THOR.ETH/ETH | ETH.USDT-0x1234567890
865
- `${this.chain}.${this.symbol}`
866
- );
867
- }
868
- eq({ chain: e, symbol: r }) {
869
- return this.chain === e && this.symbol === r;
870
- }
871
- static async fromString(e, r = 0) {
872
- return et(e, r);
873
- }
874
- static fromStringSync(e, r = 0) {
875
- const { decimal: n, identifier: i } = D(
876
- e
877
- );
878
- return i ? new b({ decimal: n, identifier: i, value: r }) : void 0;
879
- }
880
- static async fromIdentifier(e, r = 0) {
881
- return et(e, r);
882
- }
883
- static fromIdentifierSync(e, r = 0) {
884
- const { decimal: n, identifier: i } = D(e);
885
- return new b({ decimal: n, identifier: i, value: r });
886
- }
887
- static fromChainOrSignature(e, r = 0) {
888
- const { decimal: n, identifier: i } = vt(e);
889
- return new b({ value: r, decimal: n, identifier: i });
890
- }
891
- static async fromTCQuote(e, r = 0) {
892
- const n = await st(Y(e)), i = this.shiftDecimals({ value: r, from: m.THOR, to: n });
893
- return new b({ value: i, identifier: e, decimal: n });
894
- }
895
- static fromTCQuoteStatic(e, r = 0) {
896
- const n = D(e), i = this.shiftDecimals({
897
- value: r,
898
- from: m.THOR,
899
- to: n.decimal
900
- });
901
- return new b({ ...n, value: i });
902
- }
903
- static async loadStaticAssets() {
904
- return new Promise(
905
- async (e, r) => {
906
- try {
907
- const {
908
- // Omit ThorchainList from import to avoid decimals conflict (TC uses 8 for all)
909
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
910
- ThorchainList: n,
911
- NativeList: i,
912
- ...a
913
- } = await import("@swapkit/tokens");
914
- G = [i, ...Object.values(a)].reduce(
915
- (u, { tokens: l }) => (l.forEach(({ identifier: h, chain: _, ...T }) => {
916
- const P = "decimals" in T ? T.decimals : m[_];
917
- u.set(h, { identifier: h, decimal: P });
918
- }), u),
919
- /* @__PURE__ */ new Map()
920
- ), e({ ok: !0 });
921
- } catch (n) {
922
- console.error(n), r({
923
- ok: !1,
924
- error: n,
925
- message: "Couldn't load static assets. Ensure you have installed @swapkit/tokens package"
926
- });
927
- }
928
- }
929
- );
930
- }
931
- }
932
- const de = (s) => {
933
- const t = b.fromChainOrSignature(s);
934
- switch (s) {
935
- case o.Bitcoin:
936
- case o.Litecoin:
937
- case o.BitcoinCash:
938
- return t.add(10001);
939
- case o.Dogecoin:
940
- return t.add(100000001);
941
- case o.Avalanche:
942
- case o.Ethereum:
943
- return t.add(10 * 10 ** 9);
944
- case o.THORChain:
945
- case o.Maya:
946
- return t.add(0);
947
- default:
948
- return t.add(1);
949
- }
950
- }, Y = (s) => {
951
- const t = s.slice(0, 14).includes("/"), e = s.includes(".") ? s : `${o.THORChain}.${s}`, [r, n] = e.split("."), [i, a] = n.split("-");
952
- return {
953
- address: a == null ? void 0 : a.toLowerCase(),
954
- chain: r,
955
- isGasAsset: St({ chain: r, symbol: n }),
956
- isSynthetic: t,
957
- symbol: a ? `${i}-${(a == null ? void 0 : a.toLowerCase()) ?? ""}` : n,
958
- ticker: t ? n : i
959
- };
960
- }, Kt = {
961
- /**
962
- * Core
963
- */
964
- core_wallet_connection_not_found: 10001,
965
- core_estimated_max_spendable_chain_not_supported: 10002,
966
- core_extend_error: 10003,
967
- core_inbound_data_not_found: 10004,
968
- core_approve_asset_address_or_from_not_found: 10005,
969
- core_chain_halted: 10099,
970
- /**
971
- * Core - Wallet Connection
972
- */
973
- core_wallet_xdefi_not_installed: 10101,
974
- core_wallet_evmwallet_not_installed: 10102,
975
- core_wallet_walletconnect_not_installed: 10103,
976
- core_wallet_keystore_not_installed: 10104,
977
- core_wallet_ledger_not_installed: 10105,
978
- core_wallet_trezor_not_installed: 10106,
979
- core_wallet_keplr_not_installed: 10107,
980
- core_wallet_okx_not_installed: 10108,
981
- /**
982
- * Core - Swap
983
- */
984
- core_swap_invalid_params: 10200,
985
- core_swap_route_not_complete: 10201,
986
- core_swap_asset_not_recognized: 10202,
987
- core_swap_contract_not_found: 10203,
988
- core_swap_route_transaction_not_found: 10204,
989
- core_swap_contract_not_supported: 10205,
990
- core_swap_transaction_error: 10206,
991
- core_swap_quote_mode_not_supported: 10207,
992
- /**
993
- * Core - Transaction
994
- */
995
- core_transaction_deposit_error: 10301,
996
- core_transaction_create_liquidity_rune_error: 10302,
997
- core_transaction_create_liquidity_asset_error: 10303,
998
- core_transaction_create_liquidity_invalid_params: 10304,
999
- core_transaction_add_liquidity_invalid_params: 10305,
1000
- core_transaction_add_liquidity_no_rune_address: 10306,
1001
- core_transaction_add_liquidity_rune_error: 10307,
1002
- core_transaction_add_liquidity_asset_error: 10308,
1003
- core_transaction_withdraw_error: 10309,
1004
- core_transaction_deposit_to_pool_error: 10310,
1005
- core_transaction_deposit_insufficient_funds_error: 10311,
1006
- core_transaction_deposit_gas_error: 10312,
1007
- core_transaction_deposit_server_error: 10313,
1008
- /**
1009
- * Wallets
1010
- */
1011
- wallet_ledger_connection_error: 20001,
1012
- /**
1013
- * Helpers
1014
- */
1015
- helpers_number_different_decimals: 99101
1016
- };
1017
- class ht extends Error {
1018
- constructor(t, e) {
1019
- console.error(e), super(t, { cause: { code: Kt[t], message: t } }), Object.setPrototypeOf(this, ht.prototype);
1020
- }
1021
- }
1022
- class Qt extends E {
1023
- eq(t) {
1024
- return this.eqValue(t);
1025
- }
1026
- }
1027
- export {
1028
- b as AssetValue,
1029
- E as BigIntArithmetics,
1030
- zt as RequestClient,
1031
- ht as SwapKitError,
1032
- Qt as SwapKitNumber,
1033
- ee as assetFromString,
1034
- he as derivationPathToString,
1035
- re as filterAssets,
1036
- tt as formatBigIntToSafeValue,
1037
- te as gasFeeMultiplier,
1038
- Ct as getAssetType,
1039
- Et as getAsymmetricAssetShare,
1040
- ne as getAsymmetricAssetWithdrawAmount,
1041
- It as getAsymmetricRuneShare,
1042
- se as getAsymmetricRuneWithdrawAmount,
1043
- vt as getCommonAssetInfo,
1044
- st as getDecimal,
1045
- oe as getEstimatedPoolShare,
1046
- ae as getLiquiditySlippage,
1047
- ce as getMemoFor,
1048
- de as getMinAmountByChain,
1049
- Ot as getSymmetricPoolShare,
1050
- ie as getSymmetricWithdraw,
1051
- ue as getTHORNameCost,
1052
- St as isGasAsset,
1053
- le as validateTHORName
1054
- };