@vultisig/core-chain 2.24.2 → 2.25.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 (42) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/amount/toChainAmount.d.ts.map +1 -1
  3. package/dist/amount/toChainAmount.js +5 -3
  4. package/dist/amount/toChainAmount.js.map +1 -1
  5. package/dist/chains/ripple/account/lines.d.ts +13 -0
  6. package/dist/chains/ripple/account/lines.d.ts.map +1 -0
  7. package/dist/chains/ripple/account/lines.js +28 -0
  8. package/dist/chains/ripple/account/lines.js.map +1 -0
  9. package/dist/chains/ripple/issuedCurrency.d.ts +17 -3
  10. package/dist/chains/ripple/issuedCurrency.d.ts.map +1 -1
  11. package/dist/chains/ripple/issuedCurrency.js +30 -3
  12. package/dist/chains/ripple/issuedCurrency.js.map +1 -1
  13. package/dist/chains/solana/assertSafeSolanaSwapInstructions.d.ts +96 -0
  14. package/dist/chains/solana/assertSafeSolanaSwapInstructions.d.ts.map +1 -0
  15. package/dist/chains/solana/assertSafeSolanaSwapInstructions.js +260 -0
  16. package/dist/chains/solana/assertSafeSolanaSwapInstructions.js.map +1 -0
  17. package/dist/coin/balance/resolvers/ripple.d.ts.map +1 -1
  18. package/dist/coin/balance/resolvers/ripple.js +40 -3
  19. package/dist/coin/balance/resolvers/ripple.js.map +1 -1
  20. package/dist/coin/find/CoinFinderChainKind.d.ts +1 -1
  21. package/dist/coin/find/CoinFinderChainKind.d.ts.map +1 -1
  22. package/dist/coin/find/CoinFinderChainKind.js +1 -1
  23. package/dist/coin/find/CoinFinderChainKind.js.map +1 -1
  24. package/dist/coin/find/index.d.ts.map +1 -1
  25. package/dist/coin/find/index.js +2 -0
  26. package/dist/coin/find/index.js.map +1 -1
  27. package/dist/coin/find/resolvers/ripple.d.ts +12 -0
  28. package/dist/coin/find/resolvers/ripple.d.ts.map +1 -0
  29. package/dist/coin/find/resolvers/ripple.js +50 -0
  30. package/dist/coin/find/resolvers/ripple.js.map +1 -0
  31. package/dist/coin/knownTokens/index.d.ts.map +1 -1
  32. package/dist/coin/knownTokens/index.js +2 -0
  33. package/dist/coin/knownTokens/index.js.map +1 -1
  34. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.d.ts.map +1 -1
  35. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js +9 -0
  36. package/dist/swap/general/jupiter/api/getJupiterSwapQuote.js.map +1 -1
  37. package/dist/swap/general/jupiter/api/jupiterFeeAta.d.ts +2 -1
  38. package/dist/swap/general/jupiter/api/jupiterFeeAta.d.ts.map +1 -1
  39. package/dist/swap/general/jupiter/api/jupiterFeeAta.js +7 -35
  40. package/dist/swap/general/jupiter/api/jupiterFeeAta.js.map +1 -1
  41. package/fixtures/jupiter-swap-transactions.json +30 -0
  42. package/package.json +17 -1
@@ -1,15 +1,44 @@
1
1
  import { getRippleAccountInfo } from '@vultisig/core-chain/chains/ripple/account/info';
2
+ import { getRippleAccountLines } from '@vultisig/core-chain/chains/ripple/account/lines';
3
+ import { parseIssuedCurrencyValue, parseRippleTokenId, toXrplCurrencyCode, } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
2
4
  import { getRippleNetworkInfo } from '@vultisig/core-chain/chains/ripple/network/info';
5
+ import { isFeeCoin } from '@vultisig/core-chain/coin/utils/isFeeCoin';
3
6
  import { shouldBePresent } from '@vultisig/lib-utils/assert/shouldBePresent';
4
7
  import { attempt } from '@vultisig/lib-utils/attempt';
5
8
  import { isInError } from '@vultisig/lib-utils/error/isInError';
6
- export const getRippleCoinBalance = async (input) => {
9
+ /**
10
+ * Balance of a single XRPL issued currency (trust-line token), in base units at
11
+ * `rippleIssuedCurrencyDecimals`.
12
+ *
13
+ * A line with a negative balance means this account is the token's issuer and owes
14
+ * the counterparty, so it is not a holding — it is reported as zero rather than as
15
+ * a negative asset. An account with no line for the token has a zero balance too.
16
+ */
17
+ const getRippleIssuedCurrencyBalance = async ({ address, id }) => {
18
+ const { currency, issuer } = parseRippleTokenId(id);
19
+ const linesResult = await attempt(getRippleAccountLines(address));
20
+ if ('error' in linesResult) {
21
+ // An unfunded account holds no trust lines — it is not an error state.
22
+ if (isInError(linesResult.error, 'Account not found', 'actNotFound')) {
23
+ return BigInt(0);
24
+ }
25
+ throw linesResult.error;
26
+ }
27
+ const line = linesResult.data.find(({ account, currency: lineCurrency }) => account === issuer && toXrplCurrencyCode(lineCurrency) === toXrplCurrencyCode(currency));
28
+ if (!line) {
29
+ return BigInt(0);
30
+ }
31
+ const balance = parseIssuedCurrencyValue(line.balance);
32
+ return balance > 0 ? balance : BigInt(0);
33
+ };
34
+ /** Spendable native XRP: total balance minus the base and owner reserves. */
35
+ const getRippleNativeBalance = async (address) => {
7
36
  const [accountResult, networkResult] = await Promise.all([
8
- attempt(getRippleAccountInfo(input.address)),
37
+ attempt(getRippleAccountInfo(address)),
9
38
  attempt(getRippleNetworkInfo()),
10
39
  ]);
11
40
  if ('error' in accountResult) {
12
- if (isInError(accountResult.error, 'Account not found')) {
41
+ if (isInError(accountResult.error, 'Account not found', 'actNotFound')) {
13
42
  return BigInt(0);
14
43
  }
15
44
  throw accountResult.error;
@@ -24,8 +53,16 @@ export const getRippleCoinBalance = async (input) => {
24
53
  }
25
54
  const totalBalance = BigInt(account_data.Balance);
26
55
  const { reserve_base, reserve_inc } = shouldBePresent(validated_ledger);
56
+ // `OwnerCount` already counts every owned ledger object, trust lines included,
57
+ // so the trust-line count must not be added again here.
27
58
  const totalReserve = BigInt(reserve_base) + BigInt(account_data.OwnerCount) * BigInt(reserve_inc);
28
59
  const spendableBalance = totalBalance - totalReserve;
29
60
  return spendableBalance > 0 ? spendableBalance : BigInt(0);
30
61
  };
62
+ export const getRippleCoinBalance = async (input) => isFeeCoin(input)
63
+ ? getRippleNativeBalance(input.address)
64
+ : getRippleIssuedCurrencyBalance({
65
+ address: input.address,
66
+ id: shouldBePresent(input.id, 'Ripple token id'),
67
+ });
31
68
  //# sourceMappingURL=ripple.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAA;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAI/D,MAAM,CAAC,MAAM,oBAAoB,GAAwB,KAAK,EAAC,KAAK,EAAC,EAAE;IACrE,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvD,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,OAAO,CAAC,oBAAoB,EAAE,CAAC;KAChC,CAAC,CAAA;IAEF,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,IAAI,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,CAAC,EAAE,CAAC;YACxD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC;QAED,MAAM,aAAa,CAAC,KAAK,CAAA;IAC3B,CAAC;IAED,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,MAAM,aAAa,CAAC,KAAK,CAAA;IAC3B,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;IAC3C,MAAM,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;IAE/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACjD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAA;IAEvE,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IACjG,MAAM,gBAAgB,GAAG,YAAY,GAAG,YAAY,CAAA;IAEpD,OAAO,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC5D,CAAC,CAAA"}
1
+ {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/balance/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAA;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAA;AACxF,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAA;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAI/D;;;;;;;GAOG;AACH,MAAM,8BAA8B,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAmC,EAAmB,EAAE;IACjH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAA;IAEnD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;IAEjE,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,uEAAuE;QACvE,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE,CAAC;YACrE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC;QAED,MAAM,WAAW,CAAC,KAAK,CAAA;IACzB,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAChC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,CACtC,OAAO,KAAK,MAAM,IAAI,kBAAkB,CAAC,YAAY,CAAC,KAAK,kBAAkB,CAAC,QAAQ,CAAC,CAC1F,CAAA;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAEtD,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC1C,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAe,EAAmB,EAAE;IACxE,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvD,OAAO,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACtC,OAAO,CAAC,oBAAoB,EAAE,CAAC;KAChC,CAAC,CAAA;IAEF,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,IAAI,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE,CAAC;YACvE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC;QAED,MAAM,aAAa,CAAC,KAAK,CAAA;IAC3B,CAAC;IAED,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,MAAM,aAAa,CAAC,KAAK,CAAA;IAC3B,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;IAC3C,MAAM,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAAC,IAAI,CAAA;IAE/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAClD,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACjD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAA;IAEvE,+EAA+E;IAC/E,wDAAwD;IACxD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;IACjG,MAAM,gBAAgB,GAAG,YAAY,GAAG,YAAY,CAAA;IAEpD,OAAO,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAC5D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAwB,KAAK,EAAC,KAAK,EAAC,EAAE,CACrE,SAAS,CAAC,KAAK,CAAC;IACd,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,OAAO,CAAC;IACvC,CAAC,CAAC,8BAA8B,CAAC;QAC7B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,CAAC;KACjD,CAAC,CAAA"}
@@ -1,3 +1,3 @@
1
- export declare const coinFinderChainKinds: readonly ["evm", "cosmos", "solana", "cardano"];
1
+ export declare const coinFinderChainKinds: readonly ["evm", "cosmos", "solana", "cardano", "ripple"];
2
2
  export type CoinFinderChainKind = (typeof coinFinderChainKinds)[number];
3
3
  //# sourceMappingURL=CoinFinderChainKind.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CoinFinderChainKind.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/find/CoinFinderChainKind.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,iDAAkD,CAAA;AACnF,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA"}
1
+ {"version":3,"file":"CoinFinderChainKind.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/find/CoinFinderChainKind.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,2DAA4D,CAAA;AAC7F,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA"}
@@ -1,2 +1,2 @@
1
- export const coinFinderChainKinds = ['evm', 'cosmos', 'solana', 'cardano'];
1
+ export const coinFinderChainKinds = ['evm', 'cosmos', 'solana', 'cardano', 'ripple'];
2
2
  //# sourceMappingURL=CoinFinderChainKind.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CoinFinderChainKind.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/find/CoinFinderChainKind.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAA"}
1
+ {"version":3,"file":"CoinFinderChainKind.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/find/CoinFinderChainKind.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/find/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAKlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAa9C,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAW9C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/find/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAKlD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAe9C,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,KAAK,CAW9C,CAAA"}
@@ -4,12 +4,14 @@ import { coinFinderChainKinds } from './CoinFinderChainKind.js';
4
4
  import { findCardanoCoins } from './resolvers/cardano.js';
5
5
  import { findCosmosCoins } from './resolvers/cosmos.js';
6
6
  import { findEvmCoins } from './resolvers/evm/index.js';
7
+ import { findRippleCoins } from './resolvers/ripple.js';
7
8
  import { findSolanaCoins } from './resolvers/solana/index.js';
8
9
  const resolvers = {
9
10
  cosmos: findCosmosCoins,
10
11
  evm: findEvmCoins,
11
12
  solana: findSolanaCoins,
12
13
  cardano: findCardanoCoins,
14
+ ripple: findRippleCoins,
13
15
  };
14
16
  export const findCoins = async (input) => {
15
17
  const chainKind = getChainKind(input.chain);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/find/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,OAAO,EAAuB,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,SAAS,GAAwD;IACrE,MAAM,EAAE,eAAe;IACvB,GAAG,EAAE,YAAY;IACjB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,gBAAgB;CAC1B,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAA6B,KAAK,EAAC,KAAK,EAAC,EAAE;IAC/D,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,sBAAsB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvG,CAAA;IACH,CAAC;IAED,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/find/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAE3D,OAAO,EAAuB,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAEjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,SAAS,GAAwD;IACrE,MAAM,EAAE,eAAe;IACvB,GAAG,EAAE,YAAY;IACjB,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAE,eAAe;CACxB,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAA6B,KAAK,EAAC,KAAK,EAAC,EAAE;IAC/D,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC3C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,sCAAsC,SAAS,sBAAsB,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvG,CAAA;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;IAErC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { OtherChain } from '@vultisig/core-chain/Chain';
2
+ import { FindCoinsResolver } from '@vultisig/core-chain/coin/find/resolver';
3
+ /**
4
+ * Discovers XRPL issued currencies (trust-line tokens) held at `address`.
5
+ *
6
+ * Only lines with a strictly positive balance are surfaced: a negative balance means
7
+ * the account is the token's issuer and owes the counterparty rather than holding it,
8
+ * and a zero balance is an open-but-empty trust line that would only clutter the
9
+ * asset list.
10
+ */
11
+ export declare const findRippleCoins: FindCoinsResolver<OtherChain.Ripple>;
12
+ //# sourceMappingURL=ripple.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/find/resolvers/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AASvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAA;AAmB3E;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,UAAU,CAAC,MAAM,CA4BhE,CAAA"}
@@ -0,0 +1,50 @@
1
+ import { getRippleAccountLines } from '@vultisig/core-chain/chains/ripple/account/lines';
2
+ import { parseIssuedCurrencyValue, rippleIssuedCurrencyDecimals, rippleKnownIssuedTokens, rippleTokenId, } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
3
+ import { areEqualCoins } from '@vultisig/core-chain/coin/Coin';
4
+ import { attempt } from '@vultisig/lib-utils/attempt';
5
+ import { isInError } from '@vultisig/lib-utils/error/isInError';
6
+ /**
7
+ * Human-readable ticker for a trust line. Standard 3-character codes (`USD`) are
8
+ * already tickers; the 160-bit hex form encodes ASCII right-padded with zeros, so
9
+ * decoding it recovers the ticker a user would recognise (e.g. `RLUSD`).
10
+ */
11
+ const toIssuedCurrencyTicker = (currency) => {
12
+ if (currency.length !== 40) {
13
+ return currency;
14
+ }
15
+ const ascii = Buffer.from(currency, 'hex').toString('ascii').replace(/\0+$/, '');
16
+ return /^[\x20-\x7e]+$/.test(ascii) ? ascii : currency;
17
+ };
18
+ /**
19
+ * Discovers XRPL issued currencies (trust-line tokens) held at `address`.
20
+ *
21
+ * Only lines with a strictly positive balance are surfaced: a negative balance means
22
+ * the account is the token's issuer and owes the counterparty rather than holding it,
23
+ * and a zero balance is an open-but-empty trust line that would only clutter the
24
+ * asset list.
25
+ */
26
+ export const findRippleCoins = async ({ address, chain }) => {
27
+ const linesResult = await attempt(getRippleAccountLines(address));
28
+ if ('error' in linesResult) {
29
+ // An unfunded account simply holds no trust lines.
30
+ if (isInError(linesResult.error, 'Account not found', 'actNotFound')) {
31
+ return [];
32
+ }
33
+ throw linesResult.error;
34
+ }
35
+ return linesResult.data
36
+ .filter(({ balance }) => parseIssuedCurrencyValue(balance) > 0)
37
+ .map(({ account, currency }) => {
38
+ const coin = {
39
+ id: rippleTokenId({ currency, issuer: account }),
40
+ chain,
41
+ address,
42
+ ticker: toIssuedCurrencyTicker(currency),
43
+ decimals: rippleIssuedCurrencyDecimals,
44
+ };
45
+ // Prefer curated metadata (logo, price provider) when we know the token.
46
+ const knownToken = rippleKnownIssuedTokens.find(token => areEqualCoins(token, coin));
47
+ return knownToken ? { ...coin, ...knownToken, address } : coin;
48
+ });
49
+ };
50
+ //# sourceMappingURL=ripple.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ripple.js","sourceRoot":"","sources":["../../../../../../../packages/core/chain/coin/find/resolvers/ripple.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,kDAAkD,CAAA;AACxF,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,aAAa,GACd,MAAM,mDAAmD,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAE/D;;;;GAIG;AACH,MAAM,sBAAsB,GAAG,CAAC,QAAgB,EAAU,EAAE;IAC1D,IAAI,QAAQ,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAEhF,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;AACxD,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAyC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;IAChG,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAA;IAEjE,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,mDAAmD;QACnD,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE,CAAC;YACrE,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,WAAW,CAAC,KAAK,CAAA;IACzB,CAAC;IAED,OAAO,WAAW,CAAC,IAAI;SACpB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAC9D,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAChD,KAAK;YACL,OAAO;YACP,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC;YACxC,QAAQ,EAAE,4BAA4B;SACvC,CAAA;QAED,yEAAyE;QACzE,MAAM,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;QAEpF,OAAO,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAChE,CAAC,CAAC,CAAA;AACN,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/knownTokens/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAIlD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAKtE,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,iBAOnC,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,iBAOnC,CAAA;AAwwBD,eAAO,MAAM,WAAW,uYAetB,CAAA;AAEF,KAAK,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AAE1D,eAAO,MAAM,gBAAgB,EAAE,UAO7B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/knownTokens/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAKlD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAKtE,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,iBAOnC,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,iBAOnC,CAAA;AAywBD,eAAO,MAAM,WAAW,uYAetB,CAAA;AAEF,KAAK,UAAU,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AAE1D,eAAO,MAAM,gBAAgB,EAAE,UAO7B,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { Chain } from '@vultisig/core-chain/Chain';
2
+ import { rippleKnownIssuedTokens } from '@vultisig/core-chain/chains/ripple/issuedCurrency';
2
3
  import { makeRecord } from '@vultisig/lib-utils/record/makeRecord';
3
4
  import { omit } from '@vultisig/lib-utils/record/omit';
4
5
  import { knownCosmosTokens } from './cosmos.js';
@@ -789,6 +790,7 @@ const leanTokens = {
789
790
  priceProviderId: 'usd-coin',
790
791
  },
791
792
  },
793
+ [Chain.Ripple]: Object.fromEntries(rippleKnownIssuedTokens.map(token => [token.id, omit(token, 'id', 'chain')])),
792
794
  ...knownCosmosTokens,
793
795
  };
794
796
  export const knownTokens = makeRecord(Object.values(Chain), chain => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/knownTokens/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAA;AAGtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAI5C,MAAM,CAAC,MAAM,IAAI,GAAuC;IACtD,EAAE,EAAE,4CAA4C;IAChD,KAAK,EAAE,KAAK,CAAC,QAAQ;IACrB,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,EAAE;IACZ,eAAe,EAAE,UAAU;CAC5B,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAuC;IACtD,EAAE,EAAE,4CAA4C;IAChD,KAAK,EAAE,KAAK,CAAC,QAAQ;IACrB,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,CAAC;IACX,eAAe,EAAE,UAAU;CAC5B,CAAA;AAED,MAAM,UAAU,GAAmC;IACjD,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACX,gDAAgD,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,QAAQ;SAC1B;QACD,gDAAgD,EAAE;YAChD,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,SAAS;SAC3B;QACD,gDAAgD,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,QAAQ;SAC1B;QACD,kDAAkD,EAAE;YAClD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,SAAS;SAC3B;QACD,kDAAkD,EAAE;YAClD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,gBAAgB;SAClC;QACD,gDAAgD,EAAE;YAChD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,QAAQ;SAC1B;QACD,kDAAkD,EAAE;YAClD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,2DAA2D;YACjE,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,iBAAiB;SACnC;QACD,gDAAgD,EAAE;YAChD,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,YAAY;SAC9B;KACF;IACD,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACZ,kCAAkC,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,QAAQ;SAC1B;QACD,iIAAiI;QACjI,kCAAkC,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;QACD,6GAA6G;QAC7G,kCAAkC,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,gGAAgG;QAChG,kCAAkC,EAAE;YAClC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,aAAa;SAC/B;KACF;IACD,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACd,+DAA+D;QAC/D,6DAA6D;QAC7D,iEAAiE;QACjE,8DAA8D;QAC9D,6DAA6D;QAC7D,gEAAgE;QAChE,kEAAkE;QAClE,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,QAAQ;SAC1B;QACD,2CAA2C,EAAE;YAC3C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oCAAoC;YAC1C,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,yBAAyB;SAC3C;QACD,2CAA2C,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,MAAM;SACxB;KACF;IACD,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QAChB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;QACpC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;QACpC,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,QAAQ;SAC1B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,SAAS;SAC3B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,iBAAiB;SACnC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,WAAW;SAC7B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,YAAY;SAC9B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,sBAAsB;SACxC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,KAAK;SACvB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,eAAe;SACjC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,2BAA2B;SAC7C;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,uBAAuB;SACzC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,QAAQ;SAC1B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,UAAU;SAC5B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,OAAO;SACzB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,OAAO;SACzB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,uBAAuB;SACzC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,WAAW;SAC7B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;KACF;IACD,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QACjB,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;KACF;IACD,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACX,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;KACF;IACD,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACZ,qEAAqE;QACrE,qEAAqE;QACrE,qEAAqE;QACrE,0EAA0E;QAC1E,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,KAAK;SACvB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,OAAO;SACzB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,cAAc;SAChC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,GAAG;SACrB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,OAAO;SACzB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,QAAQ;SAC1B;KACF;IACD,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QAChB,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,UAAU;SAC5B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,YAAY;SAC9B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,sBAAsB;SACxC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,QAAQ;SAC1B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,iBAAiB;SACnC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,WAAW;SAC7B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,KAAK;SACvB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,SAAS;SAC3B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,WAAW;SAC7B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,OAAO;SACzB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,cAAc;SAChC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,UAAU;SAC5B;KACF;IACD,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QAChB,4CAA4C,EAAE;YAC5C,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,cAAc;SAChC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;KACF;IACD,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QACf,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;KACF;IACD,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACb,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,UAAU;SAC5B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;SACZ;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,MAAM;SACxB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,EAAE;SACb;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE;SACb;KACF;IACD,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACd,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;QACD,0CAA0C,EAAE;YAC1C,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,QAAQ;SAC1B;KACF;IACD,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACd,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,QAAQ;SAC1B;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;KACF;IACD,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;QACnB,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,qBAAqB;SACvC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,SAAS;YACjB,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,oBAAoB;SACtC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,cAAc;SAChC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,eAAe;SACjC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,OAAO;SACzB;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,aAAa;YACnB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,oBAAoB;SACtC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,cAAc;SAChC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,gBAAgB;SAClC;QACD,4CAA4C,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;KACF;IACD,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QAChB,8DAA8D;QAC9D,0EAA0E;QAC1E,gFAAgF;QAChF,iFAAiF;QACjF,MAAM,EAAE;YACN,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,yEAAyE;YACzE,+EAA+E;YAC/E,8EAA8E;YAC9E,+EAA+E;YAC/E,sCAAsC;YACtC,eAAe,EAAE,QAAQ;SAC1B;QACD,MAAM,EAAE;YACN,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,CAAC;YACX,eAAe,EAAE,UAAU;SAC5B;KACF;IACD,GAAG,iBAAiB;CACrB,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE;IAClE,MAAM,MAAM,GAAgB,EAAE,CAAA;IAE9B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IAChC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACV,GAAG,KAAK;gBACR,KAAK;gBACL,EAAE;aACH,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,gBAAgB,GAAe,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE;IACnF,MAAM,IAAI,GAA8B,EAAE,CAAA;IAC1C,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,SAAQ;QACtB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAA;IACpC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/core/chain/coin/knownTokens/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getJupiterSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AACrF,OAAO,EAEL,KAAK,sBAAsB,EAG5B,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAA;AAE5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAUzE,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC,GAAG;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AA2CD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAU,iEAOvC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CA8FlC,CAAA"}
1
+ {"version":3,"file":"getJupiterSwapQuote.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAA;AACrF,OAAO,EAEL,KAAK,sBAAsB,EAG5B,MAAM,kDAAkD,CAAA;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,oEAAoE,CAAA;AAE5G,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AAUzE,KAAK,KAAK,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC,GAAG;IAC7E,MAAM,EAAE,MAAM,CAAA;IACd,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,sBAAsB,CAAA;IACtC,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AA2CD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,mBAAmB,GAAU,iEAOvC,KAAK,KAAG,OAAO,CAAC,gBAAgB,CAsGlC,CAAA"}
@@ -1,4 +1,6 @@
1
+ import { PublicKey } from '@solana/web3.js';
1
2
  import { Chain } from '@vultisig/core-chain/Chain';
3
+ import { assertSafeSolanaSwapTransactionBase64 } from '@vultisig/core-chain/chains/solana/assertSafeSolanaSwapInstructions';
2
4
  import { solanaConfig } from '@vultisig/core-chain/chains/solana/solanaConfig';
3
5
  import { getJupiterConfig, jupiterFeeOwnerAddress, normalizeJupiterBaseUrl, } from '@vultisig/core-chain/swap/general/jupiter/config';
4
6
  import { assertJupiterPriceImpactWithinCeiling } from '@vultisig/core-chain/swap/general/priceImpactGuard';
@@ -86,6 +88,12 @@ export const getJupiterSwapQuote = async ({ from, to, amount, affiliateBps = 0,
86
88
  if (!swapResponse.swapTransaction) {
87
89
  throw new Error('Jupiter swap response did not include a serialized transaction.');
88
90
  }
91
+ // Fund-safety guard (audit finding SOL-01): the proxy-supplied transaction
92
+ // is validated BEFORE any local mutation (fee-ATA prepend), and regardless
93
+ // of whether a fee is charged on this swap — an unguarded no-fee response
94
+ // was previously forwarded to signing verbatim.
95
+ const userPubkey = new PublicKey(from.address);
96
+ await assertSafeSolanaSwapTransactionBase64(swapResponse.swapTransaction, userPubkey);
89
97
  const data = feeAccountInfo
90
98
  ? await prependJupiterFeeAta({
91
99
  txData: swapResponse.swapTransaction,
@@ -93,6 +101,7 @@ export const getJupiterSwapQuote = async ({ from, to, amount, affiliateBps = 0,
93
101
  mintPubkey: feeAccountInfo.mintPubkey,
94
102
  ownerPubkey: feeAccountInfo.ownerPubkey,
95
103
  tokenProgramId: feeAccountInfo.tokenProgramId,
104
+ userWallet: userPubkey,
96
105
  })
97
106
  : swapResponse.swapTransaction;
98
107
  // Network fee is an upper-bound estimate: Solana's per-signature base fee plus
@@ -1 +1 @@
1
- {"version":3,"file":"getJupiterSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getJupiterSwapQuote.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/getJupiterSwapQuote.ts"],"names":[],"mappings":"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"}
@@ -38,11 +38,12 @@ export declare const deriveJupiterFeeAccount: ({ outputMint, feeOwner, }: {
38
38
  * keysign path refreshes the blockhash before broadcast (same as every other
39
39
  * Solana general-swap route), so we do not refresh it here.
40
40
  */
41
- export declare const prependJupiterFeeAta: ({ txData, feeAccount, mintPubkey, ownerPubkey, tokenProgramId, }: {
41
+ export declare const prependJupiterFeeAta: ({ txData, feeAccount, mintPubkey, ownerPubkey, tokenProgramId, userWallet, }: {
42
42
  txData: string;
43
43
  feeAccount: string;
44
44
  mintPubkey: PublicKey;
45
45
  ownerPubkey: PublicKey;
46
46
  tokenProgramId: PublicKey;
47
+ userWallet: PublicKey;
47
48
  }) => Promise<string>;
48
49
  //# sourceMappingURL=jupiterFeeAta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jupiterFeeAta.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts"],"names":[],"mappings":"AAMA,OAAO,EAA6B,SAAS,EAA4C,MAAM,iBAAiB,CAAA;AAsDhH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,SAAS,CAAA;IACzB,UAAU,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,SAAS,CAAA;CACvB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAU,2BAG3C;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,OAAO,CAAC,iBAAiB,CAa5B,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAAU,kEAMxC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,SAAS,CAAA;IACtB,cAAc,EAAE,SAAS,CAAA;CAC1B,KAAG,OAAO,CAAC,MAAM,CAgDjB,CAAA"}
1
+ {"version":3,"file":"jupiterFeeAta.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAA4C,MAAM,iBAAiB,CAAA;AA+BrF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,cAAc,EAAE,SAAS,CAAA;IACzB,UAAU,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,SAAS,CAAA;CACvB,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,GAAU,2BAG3C;IACD,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,KAAG,OAAO,CAAC,iBAAiB,CAa5B,CAAA;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAAU,8EAOxC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,SAAS,CAAA;IACrB,WAAW,EAAE,SAAS,CAAA;IACtB,cAAc,EAAE,SAAS,CAAA;IACzB,UAAU,EAAE,SAAS,CAAA;CACtB,KAAG,OAAO,CAAC,MAAM,CAqCjB,CAAA"}
@@ -1,29 +1,7 @@
1
1
  import { createAssociatedTokenAccountIdempotentInstruction, getAssociatedTokenAddressSync, TOKEN_2022_PROGRAM_ID, TOKEN_PROGRAM_ID, } from '@solana/spl-token';
2
2
  import { PublicKey, TransactionMessage, VersionedTransaction } from '@solana/web3.js';
3
+ import { assertSafeSolanaSwapInstructions, resolveSolanaAddressLookupTables, } from '@vultisig/core-chain/chains/solana/assertSafeSolanaSwapInstructions';
3
4
  import { getSolanaClient } from '@vultisig/core-chain/chains/solana/client';
4
- /** Maximum attempts for LUT fetches before giving up. */
5
- const MAX_LUT_FETCH_ATTEMPTS = 3;
6
- /**
7
- * Fetch a LUT account with simple retry (exponential back-off, up to 3 attempts).
8
- * RPC timeouts are transient; retrying avoids spurious quote failures.
9
- */
10
- const fetchLutWithRetry = async (client, accountKey) => {
11
- const errors = [];
12
- for (let attempt = 0; attempt < MAX_LUT_FETCH_ATTEMPTS; attempt++) {
13
- try {
14
- const result = await client.getAddressLookupTable(accountKey);
15
- return result.value ?? null;
16
- }
17
- catch (err) {
18
- errors.push(err);
19
- if (attempt < MAX_LUT_FETCH_ATTEMPTS - 1) {
20
- await new Promise(resolve => setTimeout(resolve, 200 * 2 ** attempt));
21
- }
22
- }
23
- }
24
- console.warn('[jupiterFeeAta] LUT fetch failed after retries:', errors);
25
- return null;
26
- };
27
5
  /**
28
6
  * Resolve the SPL token program (Token vs Token-2022) that owns a mint.
29
7
  *
@@ -80,19 +58,13 @@ export const deriveJupiterFeeAccount = async ({ outputMint, feeOwner, }) => {
80
58
  * keysign path refreshes the blockhash before broadcast (same as every other
81
59
  * Solana general-swap route), so we do not refresh it here.
82
60
  */
83
- export const prependJupiterFeeAta = async ({ txData, feeAccount, mintPubkey, ownerPubkey, tokenProgramId, }) => {
84
- const client = getSolanaClient();
61
+ export const prependJupiterFeeAta = async ({ txData, feeAccount, mintPubkey, ownerPubkey, tokenProgramId, userWallet, }) => {
85
62
  const versionedTx = VersionedTransaction.deserialize(Buffer.from(txData, 'base64'));
86
- const lutAccounts = [];
87
- if (versionedTx.message.version === 0) {
88
- const lookups = versionedTx.message.addressTableLookups;
89
- for (const lut of lookups) {
90
- const lutAccount = await fetchLutWithRetry(client, lut.accountKey);
91
- if (lutAccount) {
92
- lutAccounts.push(lutAccount);
93
- }
94
- }
95
- }
63
+ const lutAccounts = await resolveSolanaAddressLookupTables(versionedTx.message);
64
+ // Fund-safety guard (audit finding SOL-01): refuse to build a signable
65
+ // transaction out of a proxy-supplied message containing an instruction
66
+ // that targets an unrecognized program or moves funds to an unknown destination.
67
+ assertSafeSolanaSwapInstructions(versionedTx.message, lutAccounts, userWallet);
96
68
  let decompiledMessage;
97
69
  try {
98
70
  decompiledMessage = TransactionMessage.decompile(versionedTx.message, {
@@ -1 +1 @@
1
- {"version":3,"file":"jupiterFeeAta.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jupiterFeeAta.js","sourceRoot":"","sources":["../../../../../../../../packages/core/chain/swap/general/jupiter/api/jupiterFeeAta.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ {
2
+ "singleHopSolToUsdc": {
3
+ "description": "Real Jupiter /swap response, SOL -> USDC, single-hop route (GoonFi V2), no affiliate fee. Captured 2026-07-09 from lite-api.jup.ag.",
4
+ "swapTransaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAHCkF1wZu9M3iGFk8IKByXc/pvqHgtN0JrxREMhkTk4gAwLtdJLuXn7rwQpTRDeJyvX+7SSUUYoz8GDyRj/e8oxIup1xSSxoBFn4o7mL2SnSCEX4WGaco7ETXE2mDyoUiskwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwZGb+UhFzL/7K26csOb57yM5bvF9xJrLEObOkAAAAAEedVb8jHAbu50xW7OaBUH/bGy3qP0jlECsc2iVrwTjwbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCpjJclj04kifG7PRApFI4NgwtaE5na/xCEBI572Nvp+Fm0P/on9df2SnTAmx8pWHneSwmrNt/J3VFLMhqns4zl6PzRPaBBVZATz0rroahO1wI61P8hqEdH/zsFqzD6ggfDS8uoomrC6yt3ekBLwDYKDjFclgjCt2ho4LrkzQY/kB0HBAAFAsBcFQAEAAkDBBcBAAAAAAAHBgABAA0DBgEBAwIAAQwCAAAAAMqaOwAAAAAGAQEBEQUYBgABAgUSBQgFDwAMAQIKCw0SEBEOBgYJJOUXy5d6460qAQAAAJcAZAABAMqaOwAAAAACVKAEAAAAADIAAAYDAQAAAQkBtQ4ft8S/G/nU4iNQ3DOvYX1x0GnpYwrcIoCFMHsZKVED6u/xBhIuhfIxBQ==",
5
+ "lookupTables": [
6
+ {
7
+ "key": "DBmHWCVEGCzZ3zDNr9WzRaMmSqCjcixMh78imXfno9qJ",
8
+ "dataBase64": "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"
9
+ }
10
+ ]
11
+ },
12
+ "multiHopSolToBonk": {
13
+ "description": "Real Jupiter /swap response, SOL -> BONK, 3-hop route (AlphaQ -> Hadron -> Raydium CLMM). Captured 2026-07-09 from lite-api.jup.ag.",
14
+ "swapTransaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAHEUF1wZu9M3iGFk8IKByXc/pvqHgtN0JrxREMhkTk4gAwLtdJLuXn7rwQpTRDeJyvX+7SSUUYoz8GDyRj/e8oxItuQ0VdX43P57XTzkf9ylsPMXqstrwAaDQ4Gmo7wOYd+m/z+xilXGrCdj1ZMMeA+lC8FSa7b+m4JQDZcseB/tbPcsbbBaKqZoGun7nO3Cnxmd5z4LpCbn+Nzn5BZlWjhh53BHo4HDkVOPejukK6/oQdRT8m1S5xpmRD9q8e3XSK/ZOHamzEoB95HHSyhWUPJaRVgOsbbmLUEeLgRlnxn0hfnaQGHkjbVw2C3oJDEqFkddTsoDHHgFbgcCH+jiu7tvi9uCzVnFfmeLLtEncPfV+UlQA3Ng5SzEDJrbiX8epqO+nUSIsH/jmbGpFV5YIbaX1DAWwKPE87vKKvtB0BYzBXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBkZv5SEXMv/srbpyw5vnvIzlu8X3EmssQ5s6QAAAAAR51VvyMcBu7nTFbs5oFQf9sbLeo/SOUQKxzaJWvBOPBt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKmMlyWPTiSJ8bs9ECkUjg2DC1oTmdr/EIQEjnvY2+n4Wawa49CH8pI3BiVI9wxMBK7CqZVpSYbny7RnUgYh04YwtD/6J/XX9kp0wJsfKVh53ksJqzbfyd1RSzIap7OM5ehA857mb0JLReVQ2y6Jw0WM6LwBrm/iPtZlJfqA+F2jOQgLAAUCwFwVAAsACQOUxQAAAAAAAA4GAAEAHwoNAQEKAgABDAIAAAAAZc0dAAAAAA0BAQERDgYABAAkCg0BAQw8DQ8AAQUCBB8kDAwQDCIPIRMDBRIREhERDSAMKg0NGygpHBsPAx4aCScZJh0MIw8lFAkCGBcWDQYVBwgMLsEgmzNB1pyBBQMAAABoAGQAAaIBZAECGmQCAwBlzR0AAAAA1mX01eEAAABkAAANAwEAAAEJA+JPPiqWVx6GdrLaLkhUEAxNJ0886MhL4Nziho/JGqntAzs4OgUVAzkCIXG1VVSqukVs1RwAZXbHZmmuSS48/+Wc3tDKOaOL5J0fBX+AeH13Ant8FkMhDkzdg/WyYdmIopAi24itINNC7hzdg8iuCgJd6jsGLzE2ODwyBTowNzUz",
15
+ "lookupTables": [
16
+ {
17
+ "key": "GERDuMq2KXct84sG9JUxuRguqfcPvn71gYXg2p3LLHv4",
18
+ "dataBase64": "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"
19
+ },
20
+ {
21
+ "key": "8esSdkAjjSktt5iHjbmojPxWaL8sTac3vuPP9d8r8n2A",
22
+ "dataBase64": "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"
23
+ },
24
+ {
25
+ "key": "2VuLeMEXPF4RGhw6sDEnYF4JjAfzHqtdPCyRYGjyLp3t",
26
+ "dataBase64": "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"
27
+ }
28
+ ]
29
+ }
30
+ }