@vultisig/core-chain 2.35.1 → 2.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/chains/sui/listAllCoins.d.ts.map +1 -1
  3. package/dist/chains/sui/listAllCoins.js +8 -0
  4. package/dist/chains/sui/listAllCoins.js.map +1 -1
  5. package/dist/swap/general/knownAggregatorRouters.d.ts +40 -22
  6. package/dist/swap/general/knownAggregatorRouters.d.ts.map +1 -1
  7. package/dist/swap/general/knownAggregatorRouters.js +147 -54
  8. package/dist/swap/general/knownAggregatorRouters.js.map +1 -1
  9. package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts.map +1 -1
  10. package/dist/swap/general/lifi/api/getLifiSwapQuote.js +15 -48
  11. package/dist/swap/general/lifi/api/getLifiSwapQuote.js.map +1 -1
  12. package/dist/swap/general/lifi/api/lifiSwapFeeChain.d.ts +4 -0
  13. package/dist/swap/general/lifi/api/lifiSwapFeeChain.d.ts.map +1 -0
  14. package/dist/swap/general/lifi/api/lifiSwapFeeChain.js +19 -0
  15. package/dist/swap/general/lifi/api/lifiSwapFeeChain.js.map +1 -0
  16. package/dist/swap/general/swapkit/api/getSwapKitQuote.d.ts.map +1 -1
  17. package/dist/swap/general/swapkit/api/getSwapKitQuote.js +24 -44
  18. package/dist/swap/general/swapkit/api/getSwapKitQuote.js.map +1 -1
  19. package/dist/swap/quote/SwapQuote.d.ts +12 -0
  20. package/dist/swap/quote/SwapQuote.d.ts.map +1 -1
  21. package/dist/swap/quote/findSwapQuote.d.ts +9 -2
  22. package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
  23. package/dist/swap/quote/findSwapQuote.js +32 -2
  24. package/dist/swap/quote/findSwapQuote.js.map +1 -1
  25. package/dist/swap/quote/getSwapQuoteSafetyFingerprint.d.ts +20 -0
  26. package/dist/swap/quote/getSwapQuoteSafetyFingerprint.d.ts.map +1 -0
  27. package/dist/swap/quote/getSwapQuoteSafetyFingerprint.js +67 -0
  28. package/dist/swap/quote/getSwapQuoteSafetyFingerprint.js.map +1 -0
  29. package/package.json +11 -1
@@ -0,0 +1,20 @@
1
+ import type { AccountCoin } from '@vultisig/core-chain/coin/AccountCoin';
2
+ import type { SwapQuoteResult } from './SwapQuote.js';
3
+ type Input = {
4
+ from: AccountCoin;
5
+ to: AccountCoin;
6
+ requestedAmount: bigint;
7
+ expiresAt: number;
8
+ quote: SwapQuoteResult;
9
+ };
10
+ export declare const cloneSwapSafetyValue: <T>(value: T) => T;
11
+ /**
12
+ * Detects accidental mutation and stale or mismatched reuse by binding a
13
+ * canonical quote to the exact request identity and signable transaction it
14
+ * was returned with. This unkeyed digest is not an authenticity boundary.
15
+ * Pure and platform-neutral so preparation can recompute the same value before
16
+ * any wallet/key/payload work.
17
+ */
18
+ export declare const getSwapQuoteSafetyFingerprint: ({ from, to, requestedAmount, expiresAt, quote }: Input) => string;
19
+ export {};
20
+ //# sourceMappingURL=getSwapQuoteSafetyFingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSwapQuoteSafetyFingerprint.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/getSwapQuoteSafetyFingerprint.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AAExE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,WAAW,CAAA;IACjB,EAAE,EAAE,WAAW,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,eAAe,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,CAWlD,CAAA;AA0CD;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B,GAAI,iDAAiD,KAAK,KAAG,MAcpG,CAAA"}
@@ -0,0 +1,67 @@
1
+ import { sha256 } from '@noble/hashes/sha256';
2
+ import { bytesToHex } from '@noble/hashes/utils';
3
+ export const cloneSwapSafetyValue = (value) => {
4
+ if (value === null || typeof value !== 'object')
5
+ return value;
6
+ if (value instanceof Uint8Array)
7
+ return new Uint8Array(value);
8
+ if (Array.isArray(value))
9
+ return value.map(cloneSwapSafetyValue);
10
+ return Object.fromEntries(Object.entries(value).map(([key, nestedValue]) => [
11
+ key,
12
+ cloneSwapSafetyValue(nestedValue),
13
+ ]));
14
+ };
15
+ const canonicalize = (value) => {
16
+ if (value === null)
17
+ return 'null';
18
+ if (value instanceof Uint8Array)
19
+ return `{"$bytes":${JSON.stringify(bytesToHex(value))}}`;
20
+ if (Array.isArray(value)) {
21
+ return `[${Array.from({ length: value.length }, (_, index) => index in value && value[index] !== undefined ? canonicalize(value[index]) : '{"$undefined":true}').join(',')}]`;
22
+ }
23
+ switch (typeof value) {
24
+ case 'bigint':
25
+ return `{"$bigint":${JSON.stringify(value.toString())}}`;
26
+ case 'boolean':
27
+ case 'number':
28
+ case 'string':
29
+ return JSON.stringify(value);
30
+ case 'object': {
31
+ const record = value;
32
+ return `{${Object.keys(record)
33
+ .filter(key => record[key] !== undefined)
34
+ .sort()
35
+ // `$...` is reserved for canonical type tags above. Escape real object
36
+ // keys in that namespace so, for example, `5n` cannot collide with a
37
+ // provider object shaped like `{ $bigint: '5' }`.
38
+ .map(key => `${JSON.stringify(key.startsWith('$') ? `$${key}` : key)}:${canonicalize(record[key])}`)
39
+ .join(',')}}`;
40
+ }
41
+ default:
42
+ throw new Error(`Unsupported swap quote safety value: ${typeof value}`);
43
+ }
44
+ };
45
+ const coinIdentity = ({ chain, address, id, ticker, decimals }) => ({
46
+ chain,
47
+ address,
48
+ id,
49
+ ticker,
50
+ decimals,
51
+ });
52
+ /**
53
+ * Detects accidental mutation and stale or mismatched reuse by binding a
54
+ * canonical quote to the exact request identity and signable transaction it
55
+ * was returned with. This unkeyed digest is not an authenticity boundary.
56
+ * Pure and platform-neutral so preparation can recompute the same value before
57
+ * any wallet/key/payload work.
58
+ */
59
+ export const getSwapQuoteSafetyFingerprint = ({ from, to, requestedAmount, expiresAt, quote }) => bytesToHex(sha256(new TextEncoder().encode(canonicalize({
60
+ version: 1,
61
+ from: coinIdentity(from),
62
+ to: coinIdentity(to),
63
+ requestedAmount,
64
+ expiresAt,
65
+ quote,
66
+ }))));
67
+ //# sourceMappingURL=getSwapQuoteSafetyFingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSwapQuoteSafetyFingerprint.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/swap/quote/getSwapQuoteSafetyFingerprint.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vultisig/core-chain",
3
- "version": "2.35.1",
3
+ "version": "2.36.0",
4
4
  "description": "Blockchain chain logic shared across Vultisig clients",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1708,6 +1708,11 @@
1708
1708
  "import": "./dist/swap/general/lifi/api/lifiSlippage.js",
1709
1709
  "default": "./dist/swap/general/lifi/api/lifiSlippage.js"
1710
1710
  },
1711
+ "./swap/general/lifi/api/lifiSwapFeeChain": {
1712
+ "types": "./dist/swap/general/lifi/api/lifiSwapFeeChain.d.ts",
1713
+ "import": "./dist/swap/general/lifi/api/lifiSwapFeeChain.js",
1714
+ "default": "./dist/swap/general/lifi/api/lifiSwapFeeChain.js"
1715
+ },
1711
1716
  "./swap/general/lifi/config": {
1712
1717
  "types": "./dist/swap/general/lifi/config.d.ts",
1713
1718
  "import": "./dist/swap/general/lifi/config.js",
@@ -1908,6 +1913,11 @@
1908
1913
  "import": "./dist/swap/quote/getSwapQuoteProviderName.js",
1909
1914
  "default": "./dist/swap/quote/getSwapQuoteProviderName.js"
1910
1915
  },
1916
+ "./swap/quote/getSwapQuoteSafetyFingerprint": {
1917
+ "types": "./dist/swap/quote/getSwapQuoteSafetyFingerprint.d.ts",
1918
+ "import": "./dist/swap/quote/getSwapQuoteSafetyFingerprint.js",
1919
+ "default": "./dist/swap/quote/getSwapQuoteSafetyFingerprint.js"
1920
+ },
1911
1921
  "./swap/quote/SwapQuote": {
1912
1922
  "types": "./dist/swap/quote/SwapQuote.d.ts",
1913
1923
  "import": "./dist/swap/quote/SwapQuote.js",