@vultisig/core-chain 2.8.0 → 2.10.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 (45) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/chains/ton/api.d.ts +11 -0
  3. package/dist/chains/ton/api.d.ts.map +1 -1
  4. package/dist/chains/ton/api.js +44 -3
  5. package/dist/chains/ton/api.js.map +1 -1
  6. package/dist/coin/token/metadata/chains.d.ts +1 -1
  7. package/dist/coin/token/metadata/chains.d.ts.map +1 -1
  8. package/dist/coin/token/metadata/chains.js +1 -0
  9. package/dist/coin/token/metadata/chains.js.map +1 -1
  10. package/dist/coin/token/metadata/index.d.ts.map +1 -1
  11. package/dist/coin/token/metadata/index.js +2 -0
  12. package/dist/coin/token/metadata/index.js.map +1 -1
  13. package/dist/coin/token/metadata/resolvers/ton.d.ts +8 -0
  14. package/dist/coin/token/metadata/resolvers/ton.d.ts.map +1 -0
  15. package/dist/coin/token/metadata/resolvers/ton.js +10 -0
  16. package/dist/coin/token/metadata/resolvers/ton.js.map +1 -0
  17. package/dist/swap/SwapError.d.ts +2 -0
  18. package/dist/swap/SwapError.d.ts.map +1 -1
  19. package/dist/swap/SwapError.js +2 -0
  20. package/dist/swap/SwapError.js.map +1 -1
  21. package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts +5 -1
  22. package/dist/swap/general/lifi/api/getLifiSwapQuote.d.ts.map +1 -1
  23. package/dist/swap/general/lifi/api/getLifiSwapQuote.js +25 -9
  24. package/dist/swap/general/lifi/api/getLifiSwapQuote.js.map +1 -1
  25. package/dist/swap/general/lifi/config.d.ts +71 -0
  26. package/dist/swap/general/lifi/config.d.ts.map +1 -1
  27. package/dist/swap/general/lifi/config.js +66 -0
  28. package/dist/swap/general/lifi/config.js.map +1 -1
  29. package/dist/swap/native/minimum/getNativeSwapMinAmountIn.d.ts +69 -0
  30. package/dist/swap/native/minimum/getNativeSwapMinAmountIn.d.ts.map +1 -0
  31. package/dist/swap/native/minimum/getNativeSwapMinAmountIn.js +167 -0
  32. package/dist/swap/native/minimum/getNativeSwapMinAmountIn.js.map +1 -0
  33. package/dist/swap/quote/findSwapQuote.d.ts +2 -0
  34. package/dist/swap/quote/findSwapQuote.d.ts.map +1 -1
  35. package/dist/swap/quote/findSwapQuote.js +74 -2
  36. package/dist/swap/quote/findSwapQuote.js.map +1 -1
  37. package/dist/tx/broadcast/resolvers/polkadot.d.ts.map +1 -1
  38. package/dist/tx/broadcast/resolvers/polkadot.js +42 -1
  39. package/dist/tx/broadcast/resolvers/polkadot.js.map +1 -1
  40. package/dist/tx/status/resolvers/polkadot.d.ts.map +1 -1
  41. package/dist/tx/status/resolvers/polkadot.js +11 -2
  42. package/dist/tx/status/resolvers/polkadot.js.map +1 -1
  43. package/dist/utils/getBlockExplorerUrl/index.js +2 -2
  44. package/dist/utils/getBlockExplorerUrl/index.js.map +1 -1
  45. package/package.json +11 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # @vultisig/core-chain
2
2
 
3
+ ## 2.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#618](https://github.com/vultisig/vultisig-sdk/pull/618) [`ddf0bf4`](https://github.com/vultisig/vultisig-sdk/commit/ddf0bf44cc38905370f60246b88503954b3e3418) Thanks [@gomesalexandre](https://github.com/gomesalexandre)! - feat(swap/lifi): consumer-supplied LI.FI integrator + apiUrl override
8
+
9
+ Adds `SwapAffiliateConfig.lifi: LifiAffiliateConfig` so consumers (e.g. Station via `vultisig/mcp-ts`) can redirect LI.FI affiliate fees to their own portal integrator instead of the SDK-default `vultisig-0`.
10
+
11
+ New surface:
12
+ - `LifiAffiliateConfig` type — `{ integratorName: string; apiUrl?: string }`
13
+ - `setupLifi(config?)` — global LI.FI SDK bootstrap; idempotent first-caller-wins. Consumers call this once at module boot to set both the global `integrator` and (optional) `apiUrl` proxy.
14
+ - `getLifiSwapQuote` now accepts an optional `lifiAffiliateConfig` and uses its `integratorName` as the per-call `integrator` in `getQuote(...)`, overriding the global default for THIS quote without mutating the module-level `lifiConfig`.
15
+ - `findSwapQuote` threads `affiliateConfig?.lifi` into `getLifiSwapQuote`.
16
+
17
+ No behaviour change for callers that don't supply a `lifi` config — `getLifiSwapQuote` still routes through the existing `vultisig-0` default.
18
+
19
+ - [#619](https://github.com/vultisig/vultisig-sdk/pull/619) [`c63c713`](https://github.com/vultisig/vultisig-sdk/commit/c63c713de30c847a98d3b73c8ba5b5a882c0699b) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - feat(ton): add jetton master token metadata discovery
20
+
21
+ Adds a TON token metadata resolver so pasting a jetton master address (`EQ.../UQ...`) auto-fills ticker, decimals, and logo — same UX as EVM/Solana/Tron custom token discovery.
22
+ - New `getJettonMasterInfo()` helper hits Toncenter v3 `/jetton/masters`, preferring the validated indexer `token_info` entry over on-chain TEP-64 `jetton_content`.
23
+ - Logo selection prefers Toncenter's `imgproxy.toncenter.com` variants (`_image_medium` → `_image_small` → `_image_big`) before the raw `image` URL. Many jetton issuers serve their PNG with `Cross-Origin-Resource-Policy: same-origin`, which browsers refuse to embed cross-origin; the proxied variants load reliably.
24
+ - `OtherChain.Ton` added to `chainsWithTokenMetadataDiscovery`; the new `getTonTokenMetadata` resolver is registered under the `ton` chain kind.
25
+
26
+ Unblocks vultisig/vultisig-windows#4029.
27
+
28
+ ## 2.9.0
29
+
30
+ ### Minor Changes
31
+
32
+ - [#610](https://github.com/vultisig/vultisig-sdk/pull/610) [`c87816b`](https://github.com/vultisig/vultisig-sdk/commit/c87816b6797e8237d7a94923025311e479e0c520) Thanks [@Ehsan-saradar](https://github.com/Ehsan-saradar)! - fix(swap): proactively detect below-minimum native swaps ([#604](https://github.com/vultisig/vultisig-sdk/issues/604))
33
+
34
+ Small cross-chain swaps below the economic minimum (e.g. ETH→BTC ~$2.81) no longer surface a misleading generic "No swap route found" error. `findSwapQuote` now computes the THORChain minimum up front from the destination chain's `outbound_fee` and spot pool prices, and surfaces an actionable `AmountBelowMinimum` error with the concrete threshold ("Minimum is ~0.012 ETH. Please increase the amount.") instead of relying on brittle provider error-string matching.
35
+ - New exported helper `getNativeSwapMinAmountIn` (and `NATIVE_SWAP_MIN_OUTBOUND_FEE_MULTIPLIER`) so consumers can show the minimum proactively as the user types.
36
+ - The computed minimum is now `max(outbound-fee minimum, source dust threshold)` — THORChain rejects an input below the source chain's `dust_threshold` ("amount less than dust threshold") before economics apply (e.g. DOGE's ~1 DOGE floor), so the threshold is included alongside the outbound-fee economics. The result exposes `dustThresholdBaseUnit` and `binding: 'outbound' | 'dust'` for diagnostics.
37
+ - Eager short-circuit only when a native protocol is the sole route family; multi-provider pairs still query every provider so an aggregator with a lower minimum is never blocked.
38
+ - The generic all-fail path now logs raw provider error messages so future sub-minimum wordings become data-driven instead of guessed.
39
+ - Trading-halt detection: when a native protocol rejects with "trading is halted" (THORChain mimir `HALT<CHAIN>TRADING`, pool ragnarok, churn) the pair fails for _every_ amount, so a new `TradingHalted` error surfaces "This swap route is temporarily unavailable — trading is halted on …" instead of the misleading generic "No swap route found" / "increase the amount".
40
+
3
41
  ## 2.8.0
4
42
 
5
43
  ### Minor Changes
@@ -7,5 +7,16 @@ export declare const getJettonWalletAddress: (input: GetJettonWalletInput) => Pr
7
7
  /** Fetches the balance of a specific jetton for a given owner address. */
8
8
  export declare const getJettonBalance: (input: GetJettonWalletInput) => Promise<bigint>;
9
9
  export declare const getTonWalletState: (address: string) => Promise<string>;
10
+ export type JettonMasterInfo = {
11
+ ticker: string;
12
+ decimals: number;
13
+ logo?: string;
14
+ };
15
+ /**
16
+ * Fetches jetton master metadata (ticker, decimals, logo) from toncenter v3.
17
+ * Prefers Toncenter's validated indexer entry (`token_info` with `valid: true`),
18
+ * falling back to the on-chain TEP-64 `jetton_content` stored in the master.
19
+ */
20
+ export declare const getJettonMasterInfo: (jettonMasterAddress: string) => Promise<JettonMasterInfo>;
10
21
  export {};
11
22
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/api.ts"],"names":[],"mappings":"AAqBA,KAAK,oBAAoB,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAA;AAUD,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,GAAU,OAAO,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAUxF,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,GAAU,OAAO,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAKlF,CAAA;AAOD,eAAO,MAAM,iBAAiB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,CAKvE,CAAA"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/api.ts"],"names":[],"mappings":"AAqBA,KAAK,oBAAoB,GAAG;IAC1B,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB,EAAE,MAAM,CAAA;CAC5B,CAAA;AAeD,4FAA4F;AAC5F,eAAO,MAAM,sBAAsB,GAAU,OAAO,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAUxF,CAAA;AAED,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,GAAU,OAAO,oBAAoB,KAAG,OAAO,CAAC,MAAM,CAKlF,CAAA;AAOD,eAAO,MAAM,iBAAiB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,MAAM,CAKvE,CAAA;AA4CD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAU,qBAAqB,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAsC/F,CAAA"}
@@ -2,11 +2,16 @@ import { rootApiUrl } from '@vultisig/core-config';
2
2
  import { queryUrl } from '@vultisig/lib-utils/query/queryUrl';
3
3
  import { tonAddressToRaw } from './address.js';
4
4
  const tonApiUrl = `${rootApiUrl}/ton`;
5
- /** Builds the toncenter v3 jetton wallets query URL, converting addresses to raw format. */
5
+ /**
6
+ * Builds the Vultisig proxy jetton wallets query URL.
7
+ * The proxy expects `owner_id` + `jetton_master_id` (not `owner_address` / `jetton_address`).
8
+ * Using the wrong param names returns an empty array without an error, silently
9
+ * making every jetton balance call return 0 and every transfer fail with "no jetton wallet".
10
+ */
6
11
  const getJettonWalletsUrl = ({ ownerAddress, jettonMasterAddress }) => {
7
12
  const rawOwner = tonAddressToRaw(ownerAddress);
8
13
  const rawMaster = tonAddressToRaw(jettonMasterAddress);
9
- return `${tonApiUrl}/v3/jetton/wallets?owner_address=${rawOwner}&jetton_address=${rawMaster}`;
14
+ return `${tonApiUrl}/v3/jetton/wallets?owner_id=${rawOwner}&jetton_master_id=${rawMaster}`;
10
15
  };
11
16
  /** Resolves the user-friendly jetton wallet address for a given owner and jetton master. */
12
17
  export const getJettonWalletAddress = async (input) => {
@@ -22,11 +27,47 @@ export const getJettonWalletAddress = async (input) => {
22
27
  export const getJettonBalance = async (input) => {
23
28
  const response = await queryUrl(getJettonWalletsUrl(input));
24
29
  const balance = response.jetton_wallets[0]?.balance;
25
- return BigInt(balance ?? 0);
30
+ return BigInt(balance || '0');
26
31
  };
27
32
  export const getTonWalletState = async (address) => {
28
33
  const url = `${tonApiUrl}/v3/addressInformation?address=${address}&use_v2=false`;
29
34
  const response = await queryUrl(url);
30
35
  return response.status;
31
36
  };
37
+ /**
38
+ * Fetches jetton master metadata (ticker, decimals, logo) from toncenter v3.
39
+ * Prefers Toncenter's validated indexer entry (`token_info` with `valid: true`),
40
+ * falling back to the on-chain TEP-64 `jetton_content` stored in the master.
41
+ */
42
+ export const getJettonMasterInfo = async (jettonMasterAddress) => {
43
+ const url = `${tonApiUrl}/v3/jetton/masters?address=${encodeURIComponent(jettonMasterAddress)}&limit=1`;
44
+ const response = await queryUrl(url);
45
+ const master = response.jetton_masters[0];
46
+ if (!master) {
47
+ throw new Error(`No jetton master found for ${jettonMasterAddress}`);
48
+ }
49
+ const nonEmpty = (value) => {
50
+ const trimmed = value?.trim();
51
+ return trimmed ? trimmed : undefined;
52
+ };
53
+ const indexed = response.metadata?.[master.address]?.token_info?.find(entry => entry.valid === true);
54
+ const content = master.jetton_content;
55
+ const ticker = nonEmpty(indexed?.symbol) ?? nonEmpty(content?.symbol);
56
+ if (!ticker) {
57
+ throw new Error(`Jetton master ${jettonMasterAddress} has no symbol`);
58
+ }
59
+ const decimalsRaw = indexed?.extra?.decimals ?? content?.decimals;
60
+ const parsedDecimals = decimalsRaw !== undefined ? parseInt(decimalsRaw, 10) : NaN;
61
+ const decimals = Number.isFinite(parsedDecimals) ? parsedDecimals : 9;
62
+ // Prefer Toncenter's imgproxy URLs: the original `image` URL often serves
63
+ // with `Cross-Origin-Resource-Policy: same-origin`, which browsers refuse
64
+ // to embed cross-origin. The `_image_*` variants are normalized PNGs from
65
+ // `imgproxy.toncenter.com` and load reliably in extension/desktop pages.
66
+ const logo = nonEmpty(indexed?.extra?._image_medium) ??
67
+ nonEmpty(indexed?.extra?._image_small) ??
68
+ nonEmpty(indexed?.extra?._image_big) ??
69
+ nonEmpty(indexed?.image) ??
70
+ nonEmpty(content?.image);
71
+ return { ticker, decimals, logo };
72
+ };
32
73
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,SAAS,GAAG,GAAG,UAAU,MAAM,CAAA;AAqBrC,4FAA4F;AAC5F,MAAM,mBAAmB,GAAG,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAwB,EAAU,EAAE;IAClG,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAA;IAEtD,OAAO,GAAG,SAAS,oCAAoC,QAAQ,mBAAmB,SAAS,EAAE,CAAA;AAC/F,CAAC,CAAA;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,KAA2B,EAAmB,EAAE;IAC3F,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAuB,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;IAEjF,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IACzD,OAAO,YAAY,EAAE,aAAa,IAAI,aAAa,CAAA;AACrD,CAAC,CAAA;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAA2B,EAAmB,EAAE;IACrF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAuB,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;IAEjF,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACnD,OAAO,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAA;AAC7B,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE;IAC1E,MAAM,GAAG,GAAG,GAAG,SAAS,kCAAkC,OAAO,eAAe,CAAA;IAChF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA6B,GAAG,CAAC,CAAA;IAEhE,OAAO,QAAQ,CAAC,MAAM,CAAA;AACxB,CAAC,CAAA"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/chains/ton/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAA;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,MAAM,SAAS,GAAG,GAAG,UAAU,MAAM,CAAA;AAqBrC;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAwB,EAAU,EAAE;IAClG,MAAM,QAAQ,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,eAAe,CAAC,mBAAmB,CAAC,CAAA;IAEtD,OAAO,GAAG,SAAS,+BAA+B,QAAQ,qBAAqB,SAAS,EAAE,CAAA;AAC5F,CAAC,CAAA;AAED,4FAA4F;AAC5F,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,KAA2B,EAAmB,EAAE;IAC3F,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAuB,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;IAEjF,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACzD,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;IAC3C,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IACzD,OAAO,YAAY,EAAE,aAAa,IAAI,aAAa,CAAA;AACrD,CAAC,CAAA;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAA2B,EAAmB,EAAE;IACrF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAuB,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAA;IAEjF,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,OAAO,CAAA;IACnD,OAAO,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,CAAA;AAC/B,CAAC,CAAA;AAOD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE;IAC1E,MAAM,GAAG,GAAG,GAAG,SAAS,kCAAkC,OAAO,eAAe,CAAA;IAChF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAA6B,GAAG,CAAC,CAAA;IAEhE,OAAO,QAAQ,CAAC,MAAM,CAAA;AACxB,CAAC,CAAA;AAkDD;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,mBAA2B,EAA6B,EAAE;IAClG,MAAM,GAAG,GAAG,GAAG,SAAS,8BAA8B,kBAAkB,CAAC,mBAAmB,CAAC,UAAU,CAAA;IACvG,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAwB,GAAG,CAAC,CAAA;IAE3D,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,mBAAmB,EAAE,CAAC,CAAA;IACtE,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,KAAyB,EAAsB,EAAE;QACjE,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;QAC7B,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;IACtC,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAA;IACpG,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,CAAA;IAErC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACrE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,mBAAmB,gBAAgB,CAAC,CAAA;IACvE,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,IAAI,OAAO,EAAE,QAAQ,CAAA;IACjE,MAAM,cAAc,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAClF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;IAErE,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,IAAI,GACR,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC;QACvC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC;QACtC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC;QACpC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QACxB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAE1B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { DeriveChainKind } from '@vultisig/core-chain/ChainKind';
2
2
  import { OtherChain } from '../../../Chain.js';
3
- export declare const chainsWithTokenMetadataDiscovery: readonly ("Arbitrum" | "Base" | "Blast" | "Optimism" | "Zksync" | "Mantle" | "Avalanche" | "CronosChain" | "BSC" | "Ethereum" | "Polygon" | "Hyperliquid" | "Sei" | "Cosmos" | "Osmosis" | "Dydx" | "Kujira" | "Terra" | "TerraClassic" | "Noble" | "Akash" | "THORChain" | "MayaChain" | OtherChain.Solana | OtherChain.Tron | OtherChain.Cardano)[];
3
+ export declare const chainsWithTokenMetadataDiscovery: readonly ("Arbitrum" | "Base" | "Blast" | "Optimism" | "Zksync" | "Mantle" | "Avalanche" | "CronosChain" | "BSC" | "Ethereum" | "Polygon" | "Hyperliquid" | "Sei" | "Cosmos" | "Osmosis" | "Dydx" | "Kujira" | "Terra" | "TerraClassic" | "Noble" | "Akash" | "THORChain" | "MayaChain" | OtherChain.Solana | OtherChain.Ton | OtherChain.Tron | OtherChain.Cardano)[];
4
4
  export type ChainWithTokenMetadataDiscovery = (typeof chainsWithTokenMetadataDiscovery)[number];
5
5
  export type ChainKindWithTokenMetadataDiscovery = DeriveChainKind<ChainWithTokenMetadataDiscovery>;
6
6
  //# sourceMappingURL=chains.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEhE,OAAO,EAAyB,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,eAAO,MAAM,gCAAgC,uVAMnC,CAAA;AAEV,MAAM,MAAM,+BAA+B,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/F,MAAM,MAAM,mCAAmC,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAA"}
1
+ {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAEhE,OAAO,EAAyB,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,eAAO,MAAM,gCAAgC,wWAOnC,CAAA;AAEV,MAAM,MAAM,+BAA+B,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/F,MAAM,MAAM,mCAAmC,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAA"}
@@ -2,6 +2,7 @@ import { CosmosChain, EvmChain, OtherChain } from '../../../Chain.js';
2
2
  export const chainsWithTokenMetadataDiscovery = [
3
3
  ...Object.values(EvmChain),
4
4
  OtherChain.Solana,
5
+ OtherChain.Ton,
5
6
  OtherChain.Tron,
6
7
  OtherChain.Cardano,
7
8
  ...Object.values(CosmosChain),
@@ -1 +1 @@
1
- {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/chains.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC1B,UAAU,CAAC,MAAM;IACjB,UAAU,CAAC,IAAI;IACf,UAAU,CAAC,OAAO;IAClB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;CACrB,CAAA"}
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/chains.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAElE,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC1B,UAAU,CAAC,MAAM;IACjB,UAAU,CAAC,GAAG;IACd,UAAU,CAAC,IAAI;IACf,UAAU,CAAC,OAAO;IAClB,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;CACrB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAelD,eAAO,MAAM,gBAAgB,EAAE,qBAM9B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAiBlD,eAAO,MAAM,gBAAgB,EAAE,qBAM9B,CAAA"}
@@ -3,11 +3,13 @@ import { getCardanoTokenMetadata } from './resolvers/cardano.js';
3
3
  import { getCosmosTokenMetadata } from './resolvers/cosmos.js';
4
4
  import { getEvmTokenMetadata } from './resolvers/evm.js';
5
5
  import { getSolanaTokenMetadata } from './resolvers/solana.js';
6
+ import { getTonTokenMetadata } from './resolvers/ton.js';
6
7
  import { getTronTokenMetadata } from './resolvers/tron.js';
7
8
  const resolvers = {
8
9
  evm: getEvmTokenMetadata,
9
10
  solana: getSolanaTokenMetadata,
10
11
  cosmos: getCosmosTokenMetadata,
12
+ ton: getTonTokenMetadata,
11
13
  tron: getTronTokenMetadata,
12
14
  cardano: getCardanoTokenMetadata,
13
15
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAI7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,SAAS,GAA4E;IACzF,GAAG,EAAE,mBAAmB;IACxB,MAAM,EAAE,sBAAsB;IAC9B,MAAM,EAAE,sBAAsB;IAC9B,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,uBAAuB;CACjC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA0B,KAAK,EAAC,KAAK,EAAC,EAAE;IACnE,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE3C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;IAErC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/token/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAI7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAEvD,MAAM,SAAS,GAA4E;IACzF,GAAG,EAAE,mBAAmB;IACxB,MAAM,EAAE,sBAAsB;IAC9B,MAAM,EAAE,sBAAsB;IAC9B,GAAG,EAAE,mBAAmB;IACxB,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,uBAAuB;CACjC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAA0B,KAAK,EAAC,KAAK,EAAC,EAAE;IACnE,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE3C,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;IAErC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { OtherChain } from '@vultisig/core-chain/Chain';
2
+ import { TokenMetadataResolver } from '../resolver.js';
3
+ /**
4
+ * Resolves TON jetton metadata from the Toncenter v3 `/jetton/masters` endpoint.
5
+ * The `id` is the jetton master contract address (user-friendly EQ.../UQ... form).
6
+ */
7
+ export declare const getTonTokenMetadata: TokenMetadataResolver<OtherChain.Ton>;
8
+ //# sourceMappingURL=ton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ton.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/token/metadata/resolvers/ton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,qBAAqB,CAAC,UAAU,CAAC,GAAG,CAIrE,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { getJettonMasterInfo } from '@vultisig/core-chain/chains/ton/api';
2
+ /**
3
+ * Resolves TON jetton metadata from the Toncenter v3 `/jetton/masters` endpoint.
4
+ * The `id` is the jetton master contract address (user-friendly EQ.../UQ... form).
5
+ */
6
+ export const getTonTokenMetadata = async ({ id }) => {
7
+ const { ticker, decimals, logo } = await getJettonMasterInfo(id);
8
+ return { ticker, decimals, logo };
9
+ };
10
+ //# sourceMappingURL=ton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ton.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/coin/token/metadata/resolvers/ton.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AAIzE;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAA0C,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACzF,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAA;IAEhE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AACnC,CAAC,CAAA"}
@@ -7,6 +7,8 @@ export declare enum SwapErrorCode {
7
7
  AmountBelowMinimum = "SWAP_AMOUNT_BELOW_MINIMUM",
8
8
  /** All configured providers were attempted and all failed */
9
9
  AllProvidersFailed = "SWAP_ALL_PROVIDERS_FAILED",
10
+ /** Trading for this pair is temporarily halted by the provider (not an amount problem) */
11
+ TradingHalted = "SWAP_TRADING_HALTED",
10
12
  /** Caller passed invalid configuration (e.g. mixed-case THORName affiliateFeeAddress) */
11
13
  InvalidConfig = "SWAP_INVALID_CONFIG"
12
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SwapError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,kFAAkF;IAClF,aAAa,yBAAyB;IACtC,kEAAkE;IAClE,cAAc,0BAA0B;IACxC,8FAA8F;IAC9F,kBAAkB,8BAA8B;IAChD,6DAA6D;IAC7D,kBAAkB,8BAA8B;IAChD,yFAAyF;IACzF,aAAa,wBAAwB;CACtC;AAED,qBAAa,SAAU,SAAQ,KAAK;aAIhB,IAAI,EAAE,aAAa;IAHrC,QAAQ,CAAC,IAAI,eAAc;gBAGT,IAAI,EAAE,aAAa,EACnC,OAAO,EAAE,MAAM;CAIlB"}
1
+ {"version":3,"file":"SwapError.d.ts","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IACvB,kFAAkF;IAClF,aAAa,yBAAyB;IACtC,kEAAkE;IAClE,cAAc,0BAA0B;IACxC,8FAA8F;IAC9F,kBAAkB,8BAA8B;IAChD,6DAA6D;IAC7D,kBAAkB,8BAA8B;IAChD,0FAA0F;IAC1F,aAAa,wBAAwB;IACrC,yFAAyF;IACzF,aAAa,wBAAwB;CACtC;AAED,qBAAa,SAAU,SAAQ,KAAK;aAIhB,IAAI,EAAE,aAAa;IAHrC,QAAQ,CAAC,IAAI,eAAc;gBAGT,IAAI,EAAE,aAAa,EACnC,OAAO,EAAE,MAAM;CAIlB"}
@@ -8,6 +8,8 @@ export var SwapErrorCode;
8
8
  SwapErrorCode["AmountBelowMinimum"] = "SWAP_AMOUNT_BELOW_MINIMUM";
9
9
  /** All configured providers were attempted and all failed */
10
10
  SwapErrorCode["AllProvidersFailed"] = "SWAP_ALL_PROVIDERS_FAILED";
11
+ /** Trading for this pair is temporarily halted by the provider (not an amount problem) */
12
+ SwapErrorCode["TradingHalted"] = "SWAP_TRADING_HALTED";
11
13
  /** Caller passed invalid configuration (e.g. mixed-case THORName affiliateFeeAddress) */
12
14
  SwapErrorCode["InvalidConfig"] = "SWAP_INVALID_CONFIG";
13
15
  })(SwapErrorCode || (SwapErrorCode = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"SwapError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAWX;AAXD,WAAY,aAAa;IACvB,kFAAkF;IAClF,uDAAsC,CAAA;IACtC,kEAAkE;IAClE,yDAAwC,CAAA;IACxC,8FAA8F;IAC9F,iEAAgD,CAAA;IAChD,6DAA6D;IAC7D,iEAAgD,CAAA;IAChD,yFAAyF;IACzF,sDAAqC,CAAA;AACvC,CAAC,EAXW,aAAa,KAAb,aAAa,QAWxB;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAIhB;IAHT,IAAI,GAAG,WAAW,CAAA;IAE3B,YACkB,IAAmB,EACnC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAe;IAIrC,CAAC;CACF"}
1
+ {"version":3,"file":"SwapError.js","sourceRoot":"","sources":["../../../../../packages/core/chain/swap/SwapError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,aAaX;AAbD,WAAY,aAAa;IACvB,kFAAkF;IAClF,uDAAsC,CAAA;IACtC,kEAAkE;IAClE,yDAAwC,CAAA;IACxC,8FAA8F;IAC9F,iEAAgD,CAAA;IAChD,6DAA6D;IAC7D,iEAAgD,CAAA;IAChD,0FAA0F;IAC1F,sDAAqC,CAAA;IACrC,yFAAyF;IACzF,sDAAqC,CAAA;AACvC,CAAC,EAbW,aAAa,KAAb,aAAa,QAaxB;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAIhB;IAHT,IAAI,GAAG,WAAW,CAAA;IAE3B,YACkB,IAAmB,EACnC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHE,SAAI,GAAJ,IAAI,CAAe;IAIrC,CAAC;CACF"}
@@ -1,3 +1,4 @@
1
+ import { LifiAffiliateConfig } from '@vultisig/core-chain/swap/general/lifi/config';
1
2
  import { LifiSwapEnabledChain } from '@vultisig/core-chain/swap/general/lifi/LifiSwapEnabledChains';
2
3
  import { TransferDirection } from '@vultisig/lib-utils/TransferDirection';
3
4
  import { AccountCoinKey } from '../../../../coin/AccountCoin.js';
@@ -7,6 +8,9 @@ type Input = Record<TransferDirection, AccountCoinKey<LifiSwapEnabledChain> & {
7
8
  }> & {
8
9
  amount: bigint;
9
10
  affiliateBps?: number;
11
+ /** Consumer-supplied LI.FI integrator override. When omitted, falls back
12
+ * to the global `lifiConfig.integratorName` (vultisig-0 by default). */
13
+ lifiAffiliateConfig?: LifiAffiliateConfig;
10
14
  };
11
15
  /** @internal exported for unit tests only */
12
16
  export declare const STABLE_TICKERS: ReadonlySet<string>;
@@ -16,6 +20,6 @@ export declare const isStablePair: (from: {
16
20
  }, to: {
17
21
  ticker?: string;
18
22
  }) => boolean;
19
- export declare const getLifiSwapQuote: ({ amount, affiliateBps, ...transfer }: Input) => Promise<GeneralSwapQuote>;
23
+ export declare const getLifiSwapQuote: ({ amount, affiliateBps, lifiAffiliateConfig, ...transfer }: Input) => Promise<GeneralSwapQuote>;
20
24
  export {};
21
25
  //# sourceMappingURL=getLifiSwapQuote.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getLifiSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/getLifiSwapQuote.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmB,oBAAoB,EAAE,MAAM,8DAA8D,CAAA;AAKpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC,oBAAoB,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG;IACnG,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAKD,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAa7C,CAAA;AAKF,6CAA6C;AAC7C,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OACxB,CAAA;AA+F1D,eAAO,MAAM,gBAAgB,GAAU,uCAAuC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAgK7G,CAAA"}
1
+ {"version":3,"file":"getLifiSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/getLifiSwapQuote.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAyB,MAAM,+CAA+C,CAAA;AAC1G,OAAO,EAAmB,oBAAoB,EAAE,MAAM,8DAA8D,CAAA;AAKpH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,cAAc,CAAC,oBAAoB,CAAC,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG;IACnG,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;4EACwE;IACxE,mBAAmB,CAAC,EAAE,mBAAmB,CAAA;CAC1C,CAAA;AAKD,6CAA6C;AAC7C,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CAa7C,CAAA;AAKF,6CAA6C;AAC7C,eAAO,MAAM,YAAY,GAAI,MAAM;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OACxB,CAAA;AAkG1D,eAAO,MAAM,gBAAgB,GAAU,4DAKpC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CA8KlC,CAAA"}
@@ -1,8 +1,8 @@
1
- import { createConfig, getQuote } from '@lifi/sdk';
1
+ import { getQuote } from '@lifi/sdk';
2
2
  import { getChainKind } from '@vultisig/core-chain/ChainKind';
3
3
  import { solanaConfig } from '@vultisig/core-chain/chains/solana/solanaConfig';
4
4
  import { chainFeeCoin } from '@vultisig/core-chain/coin/chainFeeCoin';
5
- import { lifiConfig } from '@vultisig/core-chain/swap/general/lifi/config';
5
+ import { lifiConfig, setupLifi } from '@vultisig/core-chain/swap/general/lifi/config';
6
6
  import { lifiSwapChainId } from '@vultisig/core-chain/swap/general/lifi/LifiSwapEnabledChains';
7
7
  import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
8
8
  import { match } from '@vultisig/lib-utils/match';
@@ -30,10 +30,13 @@ export const STABLE_TICKERS = new Set([
30
30
  const isStableTicker = (ticker) => ticker !== undefined && STABLE_TICKERS.has(ticker.toUpperCase());
31
31
  /** @internal exported for unit tests only */
32
32
  export const isStablePair = (from, to) => isStableTicker(from.ticker) && isStableTicker(to.ticker);
33
- const setupLifi = memoize(() => {
34
- createConfig({
35
- integrator: lifiConfig.integratorName,
36
- });
33
+ /** Lazy bootstrap for callers that never invoked the public `setupLifi`
34
+ * — uses whatever defaults sit on `lifiConfig` (vultisig-0 + no apiUrl
35
+ * unless a consumer mutated them at module load). The public `setupLifi`
36
+ * exported from ../config is idempotent and short-circuits subsequent
37
+ * calls, so this is safe to call on every quote. */
38
+ const ensureLifiConfigured = memoize(() => {
39
+ setupLifi();
37
40
  });
38
41
  // Slippage tolerance baked into the LiFi-prebuilt swap tx. The
39
42
  // returned `transactionRequest.data` is a fully-formed Solana / EVM
@@ -119,8 +122,8 @@ const resolveSwapFeeChain = (chainId, fallback) => {
119
122
  }
120
123
  return resolved;
121
124
  };
122
- export const getLifiSwapQuote = async ({ amount, affiliateBps, ...transfer }) => {
123
- setupLifi();
125
+ export const getLifiSwapQuote = async ({ amount, affiliateBps, lifiAffiliateConfig, ...transfer }) => {
126
+ ensureLifiConfigured();
124
127
  const [fromChain, toChain] = [transfer.from, transfer.to].map(({ chain }) => lifiSwapChainId[chain]);
125
128
  const [fromToken, toToken] = [transfer.from, transfer.to].map(({ id, chain }) => id ?? chainFeeCoin[chain].ticker);
126
129
  const [fromAddress, toAddress] = [transfer.from, transfer.to].map(({ address }) => address);
@@ -136,6 +139,12 @@ export const getLifiSwapQuote = async ({ amount, affiliateBps, ...transfer }) =>
136
139
  if (combinedCostBps > MAX_COMBINED_COST_BPS) {
137
140
  console.warn(`[getLifiSwapQuote] affiliate + slippage combined cost exceeds ${MAX_COMBINED_COST_BPS}bps: ${combinedCostBps}bps`);
138
141
  }
142
+ // Per-call integrator override — when the consumer supplied a
143
+ // `lifiAffiliateConfig` (e.g. Station via mcp-ts) the affiliate fee
144
+ // for THIS quote is tagged to their portal integrator instead of the
145
+ // SDK-default. Falls back to whatever `lifiConfig.integratorName`
146
+ // resolves to (vultisig-0 unless the consumer's setupLifi() ran first).
147
+ const integrator = lifiAffiliateConfig?.integratorName ?? lifiConfig.integratorName;
139
148
  const quote = await getQuote({
140
149
  fromChain,
141
150
  toChain,
@@ -144,8 +153,15 @@ export const getLifiSwapQuote = async ({ amount, affiliateBps, ...transfer }) =>
144
153
  fromAmount: amount.toString(),
145
154
  fromAddress,
146
155
  toAddress,
147
- fee: affiliateBps ? affiliateBps / 10000 : undefined,
156
+ // NeOMakinG #618 r2 should-fix: explicit `undefined` only when affiliateBps
157
+ // is genuinely unset. `affiliateBps: 0` previously fell into the truthy-test
158
+ // and became `undefined`, which let LiFi's getQuote silently fall back to
159
+ // `_config.routeOptions?.fee` (see @lifi/sdk src/services/api.js: `params.fee
160
+ // ??= _config.routeOptions?.fee`). For a consumer that explicitly set 0,
161
+ // that's a silent non-zero fee. Now: 0 stays 0.
162
+ fee: affiliateBps !== undefined ? affiliateBps / 10000 : undefined,
148
163
  slippage,
164
+ integrator,
149
165
  });
150
166
  const { transactionRequest, estimate } = quote;
151
167
  const chainKind = getChainKind(transfer.from.chain);
@@ -1 +1 @@
1
- {"version":3,"file":"getLifiSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/getLifiSwapQuote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getLifiSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/lifi/api/getLifiSwapQuote.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAmB,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAA;AACrE,OAAO,EAAuB,UAAU,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAA;AAC1G,OAAO,EAAE,eAAe,EAAwB,MAAM,8DAA8D,CAAA;AACpH,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAA;AAKtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAUrE,yEAAyE;AACzE,uEAAuE;AACvE,yEAAyE;AACzE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,cAAc,GAAwB,IAAI,GAAG,CAAC;IACzD,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACR,CAAC,CAAA;AAEF,MAAM,cAAc,GAAG,CAAC,MAA0B,EAAW,EAAE,CAC7D,MAAM,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAA;AAElE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAyB,EAAE,EAAuB,EAAW,EAAE,CAC1F,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;AAE1D;;;;oDAIoD;AACpD,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;IACxC,SAAS,EAAE,CAAA;AACb,CAAC,CAAC,CAAA;AAEF,+DAA+D;AAC/D,oEAAoE;AACpE,gEAAgE;AAChE,oEAAoE;AACpE,kEAAkE;AAClE,iEAAiE;AACjE,6DAA6D;AAC7D,kEAAkE;AAClE,8DAA8D;AAC9D,yDAAyD;AACzD,iEAAiE;AACjE,gEAAgE;AAChE,kEAAkE;AAClE,8DAA8D;AAC9D,+DAA+D;AAC/D,oDAAoD;AACpD,EAAE;AACF,iEAAiE;AACjE,iEAAiE;AACjE,kEAAkE;AAClE,oEAAoE;AACpE,sEAAsE;AACtE,mEAAmE;AACnE,8DAA8D;AAC9D,oDAAoD;AACpD,EAAE;AACF,2DAA2D;AAC3D,kEAAkE;AAClE,sEAAsE;AACtE,mEAAmE;AACnE,qEAAqE;AACrE,mEAAmE;AACnE,iEAAiE;AACjE,gEAAgE;AAChE,mEAAmE;AACnE,gEAAgE;AAChE,mEAAmE;AACnE,EAAE;AACF,6DAA6D;AAC7D,iEAAiE;AACjE,oEAAoE;AACpE,iEAAiE;AACjE,8DAA8D;AAC9D,EAAE;AACF,gCAAgC;AAChC,gEAAgE;AAChE,iEAAiE;AACjE,yCAAyC;AACzC,oEAAoE;AACpE,kEAAkE;AAClE,MAAM,+BAA+B,GAAG,IAAI,CAAA;AAC5C,MAAM,mCAAmC,GAAG,KAAK,CAAA;AAEjD,mEAAmE;AACnE,mEAAmE;AACnE,mEAAmE;AACnE,mEAAmE;AACnE,0BAA0B;AAC1B,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEjC,gFAAgF;AAChF,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,4EAA4E;AAC5E,yEAAyE;AACzE,4DAA4D;AAC5D,EAAE;AACF,2EAA2E;AAC3E,qEAAqE;AACrE,8DAA8D;AAC9D,uEAAuE;AACvE,wEAAwE;AACxE,+DAA+D;AAC/D,MAAM,mBAAmB,GAAG,CAAC,OAAgB,EAAE,QAA8B,EAAwB,EAAE;IACrG,MAAM,QAAQ,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAA;IACvD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,wCAAwC,OAAO,4CAA4C,QAAQ,EAAE,CAAC,CAAA;QACnH,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,MAAM,EACN,YAAY,EACZ,mBAAmB,EACnB,GAAG,QAAQ,EACL,EAA6B,EAAE;IACrC,oBAAoB,EAAE,CAAA;IAEtB,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;IAEpG,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;IAClH,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAA;IAE3F,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,CAAC;QACvD,CAAC,CAAC,mCAAmC;QACrC,CAAC,CAAC,+BAA+B,CAAA;IAEnC,qEAAqE;IACrE,oEAAoE;IACpE,kEAAkE;IAClE,oEAAoE;IACpE,0DAA0D;IAC1D,MAAM,eAAe,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,KAAK,CAAA;IAC9D,IAAI,eAAe,GAAG,qBAAqB,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CACV,iEAAiE,qBAAqB,QAAQ,eAAe,KAAK,CACnH,CAAA;IACH,CAAC;IAED,8DAA8D;IAC9D,oEAAoE;IACpE,qEAAqE;IACrE,kEAAkE;IAClE,wEAAwE;IACxE,MAAM,UAAU,GAAG,mBAAmB,EAAE,cAAc,IAAI,UAAU,CAAC,cAAc,CAAA;IAEnF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC;QAC3B,SAAS;QACT,OAAO;QACP,SAAS;QACT,OAAO;QACP,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE;QAC7B,WAAW;QACX,SAAS;QACT,4EAA4E;QAC5E,6EAA6E;QAC7E,0EAA0E;QAC1E,8EAA8E;QAC9E,yEAAyE;QACzE,gDAAgD;QAChD,GAAG,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS;QAClE,QAAQ;QACR,UAAU;KACX,CAAC,CAAA;IAEF,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAA;IAE9C,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAEnD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAA;IAE/E,2EAA2E;IAC3E,8EAA8E;IAC9E,2EAA2E;IAC3E,8DAA8D;IAC9D,IAAI,SAAS,KAAK,QAAQ,IAAI,OAAO,KAAK,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACjF,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QACrC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAA;QACvC,MAAM,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3F,MAAM,cAAc,GAClB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;QAE7G,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,MAAM,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAA;QACnH,8EAA8E;QAC9E,6EAA6E;QAC7E,4EAA4E;QAC5E,+EAA+E;QAC/E,8EAA8E;QAC9E,gFAAgF;QAEhF,wFAAwF;QACxF,kFAAkF;QAClF,iFAAiF;QACjF,gHAAgH;QAChH,mFAAmF;QACnF,kFAAkF;QAClF,2EAA2E;QAC3E,uDAAuD;QACvD,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAE7E,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,QAAQ;YAC5B,QAAQ,EAAE,OAAO;YACjB,EAAE,EAAE;gBACF,MAAM,EAAE;oBACN,IAAI,EAAE,WAAW;oBACjB,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,aAAa;oBACrD,OAAO,EAAE;wBACP,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;wBAC9B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;wBAChC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;wBACtE,EAAE,EAAE,cAAc;qBACnB;iBACF;aACF;SACF,CAAA;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,QAAQ;QAC5B,QAAQ,EAAE,OAAO;QACjB,EAAE,EAAE,KAAK,CAAgE,SAAS,EAAE;YAClF,MAAM,EAAE,GAAG,EAAE;gBACX,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAA;gBACvC,MAAM,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;gBAE9C,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAA;gBAEtC,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;gBAE3F,MAAM,cAAc,GAClB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;gBAE7G,OAAO;oBACL,MAAM,EAAE;wBACN,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;wBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;wBACrC,OAAO,EAAE;4BACP,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;4BAC9B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;4BAChC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;4BACtE,EAAE,EAAE,cAAc;yBACnB;qBACF;iBACF,CAAA;YACH,CAAC;YACD,GAAG,EAAE,GAAG,EAAE;gBACR,0DAA0D;gBAC1D,mEAAmE;gBACnE,kEAAkE;gBAClE,mEAAmE;gBACnE,8DAA8D;gBAC9D,+DAA+D;gBAC/D,yDAAyD;gBACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAA;gBACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;gBAC1E,+DAA+D;gBAC/D,+DAA+D;gBAC/D,6DAA6D;gBAC7D,+CAA+C;gBAC/C,MAAM,cAAc,GAAG,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;gBAC3D,MAAM,cAAc,GAClB,OAAO;oBACP,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,cAAc,CAAC;wBACzE,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;gBACzC,OAAO;oBACL,GAAG,EAAE;wBACH,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;wBAC3B,EAAE,EAAE,eAAe,CAAC,EAAE,CAAC;wBACvB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;wBAC3B,KAAK,EAAE,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;wBAChD,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;wBACjD,GAAG,CAAC,OAAO;4BACT,CAAC,CAAC;gCACE,YAAY,EAAE;oCACZ,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;oCAC9B,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ;oCAChC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oCACtE,EAAE,EAAE,cAAc;iCACnB;6BACF;4BACH,CAAC,CAAC,EAAE,CAAC;qBACR;iBACF,CAAA;YACH,CAAC;SACF,CAAC;KACH,CAAA;AACH,CAAC,CAAA"}
@@ -1,4 +1,75 @@
1
+ /**
2
+ * SDK-default LI.FI integrator + (optional) API URL. Used when no consumer
3
+ * has called `setupLifi` with a custom config — affiliate fees on routes
4
+ * fetched with these defaults land in the `vultisig-0` portal bucket.
5
+ *
6
+ * Consumers (e.g. Station via vultisig/mcp-ts) override at module boot
7
+ * via `setupLifi({integratorName, apiUrl})` to redirect both the global
8
+ * LI.FI SDK init AND the per-call integrator tag.
9
+ */
1
10
  export declare const lifiConfig: {
2
11
  integratorName: string;
12
+ apiUrl: string | undefined;
3
13
  };
14
+ /**
15
+ * Per-CALL affiliate config for LI.FI. Consumer-supplied via
16
+ * `SwapAffiliateConfig.lifi`. Overrides the `integrator` tag on a single
17
+ * `getQuote` request so affiliate fees route to the consumer's LI.FI portal
18
+ * integrator instead of the SDK-default `vultisig-0`.
19
+ *
20
+ * NOTE: this type is INTENTIONALLY narrower than `LifiBootstrapConfig`.
21
+ * LI.FI's `getQuote` API does not accept a per-call `apiUrl` — the base URL
22
+ * is a property of the global SDK init. Including `apiUrl` here would
23
+ * silently mislead consumers who supply `lifi: { integratorName, apiUrl }`
24
+ * via `SwapAffiliateConfig` and expect the proxy to apply: it would not.
25
+ * For the proxy URL, consumers must call `setupLifi({integratorName, apiUrl})`
26
+ * at module boot — see `LifiBootstrapConfig`. (Ehsan-saradar #618 review.)
27
+ */
28
+ export type LifiAffiliateConfig = {
29
+ integratorName: string;
30
+ };
31
+ /**
32
+ * Global LI.FI SDK bootstrap config. Strictly wider than `LifiAffiliateConfig`
33
+ * because `apiUrl` is meaningful here (passed to `@lifi/sdk`'s `createConfig`
34
+ * as the base URL for every request the LI.FI SDK makes after this point) and
35
+ * intentionally meaningless on the per-call surface.
36
+ *
37
+ * Consumers call `setupLifi(bootstrap)` once at module boot.
38
+ */
39
+ export type LifiBootstrapConfig = {
40
+ integratorName: string;
41
+ apiUrl?: string;
42
+ };
43
+ /**
44
+ * Initialise the global LI.FI SDK config.
45
+ *
46
+ * Two call modes:
47
+ *
48
+ * 1. **Consumer bootstrap** (`setupLifi(config)` with a config arg):
49
+ * Always applies — re-invokes `createConfig` with the supplied
50
+ * integrator + apiUrl regardless of whether a prior lazy default-fallback
51
+ * already ran. This protects against an "ordering footgun" where a swap
52
+ * quote runs before the consumer's boot-time setup and the lazy path
53
+ * silently latches the `vultisig-0` default + drops the consumer's
54
+ * later apiUrl proxy. (Ehsan-saradar #618 review.)
55
+ *
56
+ * 2. **Lazy default** (`setupLifi()` with no arg, called from
57
+ * `ensureLifiConfigured` in `getLifiSwapQuote`): only runs once; idempotent
58
+ * no-op on every subsequent call. Falls back to whatever `lifiConfig`
59
+ * currently holds — `vultisig-0` + no apiUrl unless a consumer mutated
60
+ * them already.
61
+ *
62
+ * Net effect:
63
+ * - Consumer-before-lazy: consumer wins (the only `createConfig` call).
64
+ * - Lazy-before-consumer: lazy installs defaults, then the consumer's
65
+ * explicit call overwrites them via the explicit-bootstrap branch above.
66
+ * - Consumer-after-consumer: the latest consumer-bootstrap call overwrites
67
+ * `lifiConfig` and re-runs `createConfig` (last-writer wins). In practice
68
+ * consumers should only call this once. The `getLifiSwapQuote.integrator`
69
+ * test `'repeated calls re-run createConfig with each new config'` pins
70
+ * this contract. (Ehsan-saradar #618 r2.)
71
+ */
72
+ export declare const setupLifi: (config?: LifiBootstrapConfig) => void;
73
+ /** @internal Test-only reset hook. Never call from production code. */
74
+ export declare const _resetLifiConfigForTest: () => void;
4
75
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/lifi/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;CAEtB,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/lifi/config.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU;;YAEA,MAAM,GAAG,SAAS;CACxC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,SAAS,GAAI,SAAS,mBAAmB,KAAG,IAmBxD,CAAA;AAED,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,QAAO,IAI1C,CAAA"}
@@ -1,4 +1,70 @@
1
+ import { createConfig } from '@lifi/sdk';
2
+ /**
3
+ * SDK-default LI.FI integrator + (optional) API URL. Used when no consumer
4
+ * has called `setupLifi` with a custom config — affiliate fees on routes
5
+ * fetched with these defaults land in the `vultisig-0` portal bucket.
6
+ *
7
+ * Consumers (e.g. Station via vultisig/mcp-ts) override at module boot
8
+ * via `setupLifi({integratorName, apiUrl})` to redirect both the global
9
+ * LI.FI SDK init AND the per-call integrator tag.
10
+ */
1
11
  export const lifiConfig = {
2
12
  integratorName: 'vultisig-0',
13
+ apiUrl: undefined,
14
+ };
15
+ let configured = false;
16
+ /**
17
+ * Initialise the global LI.FI SDK config.
18
+ *
19
+ * Two call modes:
20
+ *
21
+ * 1. **Consumer bootstrap** (`setupLifi(config)` with a config arg):
22
+ * Always applies — re-invokes `createConfig` with the supplied
23
+ * integrator + apiUrl regardless of whether a prior lazy default-fallback
24
+ * already ran. This protects against an "ordering footgun" where a swap
25
+ * quote runs before the consumer's boot-time setup and the lazy path
26
+ * silently latches the `vultisig-0` default + drops the consumer's
27
+ * later apiUrl proxy. (Ehsan-saradar #618 review.)
28
+ *
29
+ * 2. **Lazy default** (`setupLifi()` with no arg, called from
30
+ * `ensureLifiConfigured` in `getLifiSwapQuote`): only runs once; idempotent
31
+ * no-op on every subsequent call. Falls back to whatever `lifiConfig`
32
+ * currently holds — `vultisig-0` + no apiUrl unless a consumer mutated
33
+ * them already.
34
+ *
35
+ * Net effect:
36
+ * - Consumer-before-lazy: consumer wins (the only `createConfig` call).
37
+ * - Lazy-before-consumer: lazy installs defaults, then the consumer's
38
+ * explicit call overwrites them via the explicit-bootstrap branch above.
39
+ * - Consumer-after-consumer: the latest consumer-bootstrap call overwrites
40
+ * `lifiConfig` and re-runs `createConfig` (last-writer wins). In practice
41
+ * consumers should only call this once. The `getLifiSwapQuote.integrator`
42
+ * test `'repeated calls re-run createConfig with each new config'` pins
43
+ * this contract. (Ehsan-saradar #618 r2.)
44
+ */
45
+ export const setupLifi = (config) => {
46
+ // Consumer-bootstrap branch — always applies, regardless of `configured`.
47
+ if (config) {
48
+ lifiConfig.integratorName = config.integratorName;
49
+ lifiConfig.apiUrl = config.apiUrl;
50
+ createConfig(config.apiUrl
51
+ ? { integrator: config.integratorName, apiUrl: config.apiUrl }
52
+ : { integrator: config.integratorName });
53
+ configured = true;
54
+ return;
55
+ }
56
+ // Lazy default branch — idempotent.
57
+ if (configured)
58
+ return;
59
+ const integrator = lifiConfig.integratorName;
60
+ const apiUrl = lifiConfig.apiUrl;
61
+ createConfig(apiUrl ? { integrator, apiUrl } : { integrator });
62
+ configured = true;
63
+ };
64
+ /** @internal Test-only reset hook. Never call from production code. */
65
+ export const _resetLifiConfigForTest = () => {
66
+ configured = false;
67
+ lifiConfig.integratorName = 'vultisig-0';
68
+ lifiConfig.apiUrl = undefined;
3
69
  };
4
70
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/lifi/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc,EAAE,YAAY;CAC7B,CAAA"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/swap/general/lifi/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAExC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,cAAc,EAAE,YAAY;IAC5B,MAAM,EAAE,SAA+B;CACxC,CAAA;AAiCD,IAAI,UAAU,GAAG,KAAK,CAAA;AAEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAA4B,EAAQ,EAAE;IAC9D,0EAA0E;IAC1E,IAAI,MAAM,EAAE,CAAC;QACX,UAAU,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;QACjD,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QACjC,YAAY,CACV,MAAM,CAAC,MAAM;YACX,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAC9D,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,CAC1C,CAAA;QACD,UAAU,GAAG,IAAI,CAAA;QACjB,OAAM;IACR,CAAC;IACD,oCAAoC;IACpC,IAAI,UAAU;QAAE,OAAM;IACtB,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAA;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;IAChC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAA;IAC9D,UAAU,GAAG,IAAI,CAAA;AACnB,CAAC,CAAA;AAED,uEAAuE;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAS,EAAE;IAChD,UAAU,GAAG,KAAK,CAAA;IAClB,UAAU,CAAC,cAAc,GAAG,YAAY,CAAA;IACxC,UAAU,CAAC,MAAM,GAAG,SAAS,CAAA;AAC/B,CAAC,CAAA"}