@velora-dex/widget 0.10.1 → 0.10.2-dev.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 (80) hide show
  1. package/dist/components/widget/NetworkIcon/NetworkIconSquare.js +23 -23
  2. package/dist/core/Updaters.d.ts.map +1 -1
  3. package/dist/core/Updaters.js +11 -11
  4. package/dist/core/Updaters.js.map +1 -1
  5. package/dist/core/across/isCrosschainPossible.js +4 -4
  6. package/dist/core/inputs/state/selectedTokenActionsAtom.js +32 -32
  7. package/dist/core/inputs/state/setTokenByAddressAtom.d.ts.map +1 -1
  8. package/dist/core/inputs/state/setTokenByAddressAtom.js +69 -67
  9. package/dist/core/inputs/state/setTokenByAddressAtom.js.map +1 -1
  10. package/dist/core/limit/state/selectedTokenActionsAtom.js +29 -29
  11. package/dist/core/limit/state/selectedTokenAtom.js +5 -5
  12. package/dist/core/state/configAtom.js +2 -2
  13. package/dist/core/state/configAtom.js.map +1 -1
  14. package/dist/core/state/tokenListsAtom.d.ts +2 -0
  15. package/dist/core/state/tokenListsAtom.d.ts.map +1 -0
  16. package/dist/core/state/tokenListsAtom.js +9 -0
  17. package/dist/core/state/tokenListsAtom.js.map +1 -0
  18. package/dist/core/twap/state/selectedTokenActionsAtom.js +29 -29
  19. package/dist/hooks/tokens/data/useCombineTokensWithFetched.js +4 -4
  20. package/dist/hooks/useSDK.d.ts +3 -1
  21. package/dist/hooks/useSDK.d.ts.map +1 -1
  22. package/dist/hooks/useSDK.js.map +1 -1
  23. package/dist/lib/constants/urls.d.ts +1 -0
  24. package/dist/lib/constants/urls.d.ts.map +1 -1
  25. package/dist/lib/constants/urls.js +1 -1
  26. package/dist/lib/constants/urls.js.map +1 -1
  27. package/dist/lib/utils/index.js +15 -23
  28. package/dist/lib/utils/index.js.map +1 -1
  29. package/dist/tokens/lists/constants.d.ts +0 -8
  30. package/dist/tokens/lists/constants.d.ts.map +1 -1
  31. package/dist/tokens/lists/constants.js +3 -10
  32. package/dist/tokens/lists/constants.js.map +1 -1
  33. package/dist/tokens/lists/download.d.ts +1 -1
  34. package/dist/tokens/lists/download.d.ts.map +1 -1
  35. package/dist/tokens/lists/download.js +5 -13
  36. package/dist/tokens/lists/download.js.map +1 -1
  37. package/dist/tokens/lists/state/effects.d.ts.map +1 -1
  38. package/dist/tokens/lists/state/effects.js +22 -21
  39. package/dist/tokens/lists/state/effects.js.map +1 -1
  40. package/dist/tokens/lists/state/tokenListsStateAtom.d.ts +1 -1
  41. package/dist/tokens/lists/state/tokenListsStateAtom.d.ts.map +1 -1
  42. package/dist/tokens/lists/state/tokenListsStateAtom.js +17 -21
  43. package/dist/tokens/lists/state/tokenListsStateAtom.js.map +1 -1
  44. package/dist/tokens/lists/utils.d.ts +1 -2
  45. package/dist/tokens/lists/utils.d.ts.map +1 -1
  46. package/dist/tokens/lists/utils.js +5 -6
  47. package/dist/tokens/lists/utils.js.map +1 -1
  48. package/dist/tokens/queries.d.ts.map +1 -1
  49. package/dist/tokens/queries.js +30 -32
  50. package/dist/tokens/queries.js.map +1 -1
  51. package/dist/tokens/stabeCoins/hooks.d.ts +2 -4
  52. package/dist/tokens/stabeCoins/hooks.d.ts.map +1 -1
  53. package/dist/tokens/stabeCoins/hooks.js +14 -16
  54. package/dist/tokens/stabeCoins/hooks.js.map +1 -1
  55. package/dist/tokens/state/addImportedTokenAtom.d.ts +0 -1
  56. package/dist/tokens/state/addImportedTokenAtom.d.ts.map +1 -1
  57. package/dist/tokens/state/addImportedTokenAtom.js.map +1 -1
  58. package/dist/tokens/state/allTokensByChainAtom.d.ts.map +1 -1
  59. package/dist/tokens/state/allTokensByChainAtom.js +20 -30
  60. package/dist/tokens/state/allTokensByChainAtom.js.map +1 -1
  61. package/dist/tokens/state/apiTokensAtom.d.ts +24 -0
  62. package/dist/tokens/state/apiTokensAtom.d.ts.map +1 -0
  63. package/dist/tokens/state/apiTokensAtom.js +53 -0
  64. package/dist/tokens/state/apiTokensAtom.js.map +1 -0
  65. package/dist/tokens/state/fromListsAtom.js +1 -1
  66. package/dist/tokens/state/fromListsAtom.js.map +1 -1
  67. package/dist/tokens/types.d.ts +0 -1
  68. package/dist/tokens/types.d.ts.map +1 -1
  69. package/package.json +2 -2
  70. package/dist/tokens/lists/lists.js +0 -6
  71. package/dist/tokens/lists/lists.js.map +0 -1
  72. package/dist/tokens/lists/lists.json.d.ts +0 -362
  73. package/dist/tokens/stabeCoins/index.d.ts +0 -2
  74. package/dist/tokens/stabeCoins/index.d.ts.map +0 -1
  75. package/dist/tokens/stabeCoins/index.js +0 -6
  76. package/dist/tokens/stabeCoins/index.js.map +0 -1
  77. package/dist/tokens/utils/sets.d.ts +0 -4
  78. package/dist/tokens/utils/sets.d.ts.map +0 -1
  79. package/dist/tokens/utils/sets.js +0 -16
  80. package/dist/tokens/utils/sets.js.map +0 -1
@@ -1,27 +1,26 @@
1
1
  import { useAtomValue as e } from "../core/store.js";
2
2
  import { isTruthy as t } from "../lib/utils/index.js";
3
3
  import { QUERY_KEY_FETCH_TOKEN_LISTS as n } from "./constants.js";
4
- import { stableCoinsTokenLists as r } from "./stabeCoins/index.js";
5
- import { downloadTokenListDataWithFallback as i } from "./lists/download.js";
6
- import { constructPlaceholderData as a } from "./lists/utils.js";
4
+ import { constructPlaceholderData as r } from "./lists/utils.js";
5
+ import { tokenListUrlsAtom as i } from "./lists/state/tokenListsStateAtom.js";
6
+ import { downloadTokenListData as a } from "./lists/download.js";
7
7
  import { overrideTokenList as o } from "./overrides.js";
8
- import { tokenListUrlsAtom as s } from "./lists/state/tokenListsStateAtom.js";
9
- import { c } from "react-compiler-runtime";
8
+ import { c as s } from "react-compiler-runtime";
10
9
  import "react";
11
- import { replaceEqualDeep as l, useQueries as u } from "@tanstack/react-query";
12
- import { versionComparator as d } from "@uniswap/token-lists";
10
+ import { replaceEqualDeep as c, useQueries as l } from "@tanstack/react-query";
11
+ import { versionComparator as u } from "@uniswap/token-lists";
13
12
  //#region src/tokens/queries.ts
14
- function f(e, t) {
15
- return e ? !e.available || !t.available ? e.available !== t.available : d(t.data.version, e.data.version) <= 0 : !1;
13
+ function d(e, t) {
14
+ return e ? !e.available || !t.available ? e.available !== t.available : u(t.data.version, e.data.version) <= 0 : !1;
16
15
  }
17
- function p(e, n) {
18
- return Array.from(new Set(e)).filter(t).map((e) => h(e, n));
16
+ function f(e, n) {
17
+ return Array.from(new Set(e)).filter(t).map((e) => m(e, n));
19
18
  }
20
- function m(e, t) {
19
+ function p(e, t) {
21
20
  return {
22
21
  queryKey: [n, e],
23
22
  queryFn: async ({ signal: n }) => {
24
- let r = o(await i(e, n), e);
23
+ let r = o(await a(e, n), e);
25
24
  return {
26
25
  url: e,
27
26
  name: r.name,
@@ -32,44 +31,43 @@ function m(e, t) {
32
31
  },
33
32
  staleTime: Infinity,
34
33
  gcTime: Infinity,
35
- structuralSharing: (e, t) => f(e, t) ? e : l(e, t)
34
+ structuralSharing: (e, t) => d(e, t) ? e : c(e, t)
36
35
  };
37
36
  }
38
- function h(e, t) {
37
+ function m(e, t) {
39
38
  return {
40
- ...m(e, t),
39
+ ...p(e, t),
41
40
  notifyOnChangeProps: ["data"],
42
- placeholderData: a(e),
41
+ placeholderData: r(e),
43
42
  refetchOnMount: !1
44
43
  };
45
44
  }
46
- var g = (e, t) => {
47
- let n = c(7), r;
48
- n[0] !== e || n[1] !== t ? (r = p(e, t), n[0] = e, n[1] = t, n[2] = r) : r = n[2];
45
+ var h = (e, t) => {
46
+ let n = s(7), r;
47
+ n[0] !== e || n[1] !== t ? (r = f(e, t), n[0] = e, n[1] = t, n[2] = r) : r = n[2];
49
48
  let i;
50
49
  n[3] === r ? i = n[4] : (i = { queries: r }, n[3] = r, n[4] = i);
51
- let a = u(i), o;
52
- return n[5] === a ? o = n[6] : (o = a.map(b), n[5] = a, n[6] = o), o;
50
+ let a = l(i), o;
51
+ return n[5] === a ? o = n[6] : (o = a.map(y), n[5] = a, n[6] = o), o;
53
52
  };
54
- function _(e, t) {
55
- let n = c(2), r = g(e, t), i;
56
- return n[0] === r ? i = n[1] : (i = r.map(v), n[0] = r, n[1] = i), i;
53
+ function g(e, t) {
54
+ let n = s(2), r = h(e, t), i;
55
+ return n[0] === r ? i = n[1] : (i = r.map(_), n[0] = r, n[1] = i), i;
57
56
  }
58
- function v(e) {
57
+ function _(e) {
59
58
  let { dataOrPlaceholder: t } = e;
60
59
  return t;
61
60
  }
62
- function y() {
63
- let t = c(2), n = e(s), i;
64
- return t[0] === n ? i = t[1] : (i = r.concat(n), t[0] = n, t[1] = i), _(i);
61
+ function v() {
62
+ return g(e(i));
65
63
  }
66
- function b(e) {
64
+ function y(e) {
67
65
  return {
68
- dataOrPlaceholder: e.data || a(e.error?.config?.url || ""),
66
+ dataOrPlaceholder: e.data || r(e.error?.config?.url || ""),
69
67
  result: e
70
68
  };
71
69
  }
72
70
  //#endregion
73
- export { m as produceSingleQueryOptionMin, _ as useFetchLists, y as useFetchTokenLists };
71
+ export { p as produceSingleQueryOptionMin, v as useFetchTokenLists };
74
72
 
75
73
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","names":["replaceEqualDeep","useQueries","UseQueryOptions","UseQueryResult","versionComparator","AxiosError","useMemo","downloadTokenListDataWithFallback","TokenListFetched","QUERY_KEY_FETCH_TOKEN_LISTS","constructPlaceholderData","isTruthy","overrideTokenList","stableCoinsTokenLists","useAtomValue","tokenListUrlsAtom","UseFetchListsResult","dataOrPlaceholder","T","result","isDataEqual","currentData","incomingData","available","isOlderOrEqual","data","version","produceQueriesOptions","listURLs","tag","uniqueListURLs","Array","from","Set","filter","map","listURL","produceSingleQueryOption","produceSingleQueryOptionMin","queryKey","queryFn","signal","_data","url","name","isArray","tokens","staleTime","Infinity","gcTime","structuralSharing","oldData","newData","notifyOnChangeProps","placeholderData","refetchOnMount","useFetchListsWithQueryResult","$","_c","t0","t1","queries","queryResults","t2","_temp","useFetchLists","_temp2","useFetchTokenLists","currentlyEnabledLists","concat","includingStablecoins","error","config"],"sources":["../../src/tokens/queries.ts"],"sourcesContent":["import {\n replaceEqualDeep,\n useQueries,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { versionComparator } from \"@uniswap/token-lists\";\nimport type { AxiosError } from \"axios\";\nimport { /* useRef, useLayoutEffect, */ useMemo } from \"react\";\nimport { downloadTokenListDataWithFallback } from \"./lists/download\";\nimport type { TokenListFetched } from \"./types\";\nimport { QUERY_KEY_FETCH_TOKEN_LISTS } from \"./constants\";\nimport { constructPlaceholderData } from \"./lists/utils\";\nimport { isTruthy } from \"@/lib/utils\";\nimport { overrideTokenList } from \"./overrides\";\nimport { stableCoinsTokenLists } from \"./stabeCoins\";\nimport { useAtomValue } from \"@/core/store\";\nimport { tokenListUrlsAtom } from \"./lists/state/tokenListsStateAtom\";\n\ntype UseFetchListsResult<T extends string> = {\n dataOrPlaceholder: TokenListFetched<T>;\n result: UseQueryResult<TokenListFetched<T>, AxiosError>;\n};\n\nfunction isDataEqual<T extends string | never = never>(\n currentData: TokenListFetched<T> | undefined,\n incomingData: TokenListFetched<T>\n): currentData is typeof incomingData {\n // there was no oldData --> data not equal\n if (!currentData) return false;\n // data was a placeholder (available = false) and data.available changed --> data not equal\n if (!currentData.available || !incomingData.available)\n return currentData.available !== incomingData.available;\n // incoming list.version <= current list.version --> consider data equal (don't replace with incoming older version)\n const isOlderOrEqual =\n versionComparator(incomingData.data.version, currentData.data.version) <= 0;\n return isOlderOrEqual;\n}\n\nexport function produceQueriesOptions<T extends string | never = never>(\n listURLs: string[],\n tag?: T\n) {\n // there are duplicate listURLs because in lists.json same list can be present for multiple chains\n const uniqueListURLs = Array.from(new Set(listURLs));\n\n return (\n uniqueListURLs\n // to prevent occasional `token_list_download_error:\"\"` event tag\n .filter(isTruthy)\n .map<UseQueryOptions<TokenListFetched<T>, AxiosError>>((listURL) =>\n produceSingleQueryOption<T>(listURL, tag)\n )\n );\n}\n\nexport function produceSingleQueryOptionMin<T extends string | never = never>(\n listURL: string,\n tag?: T\n): UseQueryOptions<TokenListFetched<T>, AxiosError> {\n return {\n queryKey: [QUERY_KEY_FETCH_TOKEN_LISTS, listURL],\n queryFn: async ({ signal }) => {\n const _data = await downloadTokenListDataWithFallback(listURL, signal);\n\n const data = overrideTokenList(_data, listURL);\n\n return {\n url: listURL,\n name: data.name,\n data,\n tag,\n // possibly mitigates https://sentry.io/organizations/paraswap/discover/ui:3fa26b87e3594d1998ff9fb4770a26d9\n available: Array.isArray(data.tokens),\n };\n },\n staleTime: Infinity,\n gcTime: Infinity,\n\n // custom comparison to optimize big token list comparison\n structuralSharing: (oldData, newData) =>\n isDataEqual(\n oldData as TokenListFetched<T> | undefined,\n newData as TokenListFetched<T>\n )\n ? oldData\n : replaceEqualDeep(oldData, newData),\n };\n}\n\n// adds useQuery options\nexport function produceSingleQueryOption<T extends string | never = never>(\n listURL: string,\n tag?: T\n): UseQueryOptions<TokenListFetched<T>, AxiosError> {\n return {\n ...produceSingleQueryOptionMin<T>(listURL, tag),\n notifyOnChangeProps: [\"data\"],\n placeholderData: constructPlaceholderData(listURL), // start with unavailable but still with url\n refetchOnMount: false,\n };\n}\n\nexport const useFetchListsWithQueryResult = <T extends string | never = never>(\n listURLs: string[],\n tag?: T\n): UseFetchListsResult<T>[] => {\n const queryResults = useQueries<\n UseQueryOptions<TokenListFetched<T>, AxiosError>[]\n >({\n queries: produceQueriesOptions(listURLs, tag),\n });\n\n return useMemo<UseFetchListsResult<T>[]>(\n () =>\n queryResults.map((result) => ({\n // provide {url, name} even on error\n dataOrPlaceholder:\n result.data ||\n constructPlaceholderData(result.error?.config?.url || \"\"),\n result,\n })),\n [queryResults]\n );\n};\n\nexport function useFetchLists<T extends string | never = never>(\n listURLs: string[],\n tag?: T\n): TokenListFetched<T>[] {\n const queryResults = useFetchListsWithQueryResult(listURLs, tag);\n\n return useMemo(\n () => queryResults.map(({ dataOrPlaceholder }) => dataOrPlaceholder),\n [queryResults]\n );\n}\n\nexport function useFetchTokenLists(): TokenListFetched[] {\n const currentlyEnabledLists = useAtomValue(tokenListUrlsAtom);\n\n // stablecoins list is auxiliary list, always in use\n const includingStablecoins = stableCoinsTokenLists.concat(\n currentlyEnabledLists\n );\n\n return useFetchLists(includingStablecoins);\n}\n"],"mappings":";;;;;;;;;;;;;AAwBA,SAASoB,EACPC,GACAC,GACoC;CASpC,OAPKD,IAED,CAACA,EAAYE,aAAa,CAACD,EAAaC,YACnCF,EAAYE,cAAcD,EAAaC,YAG9CnB,EAAkBkB,EAAaG,KAAKC,SAASL,EAAYI,KAAKC,QAAQ,IAAI,IANnD;;AAU3B,SAAgBC,EACdC,GACAC,GACA;CAIA,OAFuBE,MAAMC,KAAK,IAAIC,IAAIL,EAAS,CAGjDE,CAEGI,OAAOvB,EAAS,CAChBwB,KAAuDC,MACtDC,EAA4BD,GAASP,EACvC,CAAC;;AAIP,SAAgBS,EACdF,GACAP,GACkD;CAClD,OAAO;EACLU,UAAU,CAAC9B,GAA6B2B,EAAQ;EAChDI,SAAS,OAAO,EAAEC,gBAAa;GAG7B,IAAMhB,IAAOb,EAAkB8B,MAFXnC,EAAkC6B,GAASK,EAAO,EAEhCL,EAAQ;GAE9C,OAAO;IACLO,KAAKP;IACLQ,MAAMnB,EAAKmB;IACXnB;IACAI;IAEAN,WAAWQ,MAAMc,QAAQpB,EAAKqB,OAAM;IACrC;;EAEHC,WAAWC;EACXC,QAAQD;EAGRE,oBAAoBC,GAASC,MAC3BhC,EACE+B,GACAC,EACD,GACGD,IACAnD,EAAiBmD,GAASC,EAAO;EACxC;;AAIH,SAAgBf,EACdD,GACAP,GACkD;CAClD,OAAO;EACL,GAAGS,EAA+BF,GAASP,EAAI;EAC/CwB,qBAAqB,CAAC,OAAO;EAC7BC,iBAAiB5C,EAAyB0B,EAAQ;EAClDmB,gBAAgB;EACjB;;AAGH,IAAaC,KAA+B5B,GAAAC,MAAA;CAAA,IAAA4B,IAAAC,EAAA,EAAA,EAAAC;CAAA,AAAAF,EAAA,OAAA7B,KAAA6B,EAAA,OAAA5B,KAO/B8B,IAAAhC,EAAsBC,GAAUC,EAAI,EAAA4B,EAAA,KAAA7B,GAAA6B,EAAA,KAAA5B,GAAA4B,EAAA,KAAAE,KAAAA,IAAAF,EAAA;CAAA,IAAAG;CAAA,AAAAH,EAAA,OAAAE,IAC9CC,IAAAH,EAAA,MAFCG,IAAA,EAAAC,SACSF,GACV,EAAAF,EAAA,KAAAE,GAAAF,EAAA,KAAAG;CAJD,IAAAE,IAAqB7D,EAEnB2D,EAEA,EAACG;CAUI,OAVJN,EAAA,OAAAK,IAUIC,IAAAN,EAAA,MANHM,IAAAD,EAAY3B,IAAK6B,EAMd,EAAAP,EAAA,KAAAK,GAAAL,EAAA,KAAAM,IANHA;;AAWN,SAAOE,EAAArC,GAAAC,GAAA;CAAA,IAAA4B,IAAAC,EAAA,EAAA,EAILI,IAAqBN,EAA6B5B,GAAUC,EAAI,EAAC8B;CAGK,OAHLF,EAAA,OAAAK,IAGKH,IAAAF,EAAA,MAA9DE,IAAAG,EAAY3B,IAAK+B,EAA6C,EAAAT,EAAA,KAAAK,GAAAL,EAAA,KAAAE,IAA9DA;;AAPH,SAAAO,EAAAP,GAAA;CAOqB,IAAA,EAAA1C,yBAAA0C;CAAqB,OAAK1C;;AAKtD,SAAOkD,IAAA;CAAA,IAAAV,IAAAC,EAAA,EAAA,EACLU,IAA8BtD,EAAaC,EAAkB,EAAC4C;CAK5D,OAL4DF,EAAA,OAAAW,IAK7DT,IAAAF,EAAA,MAF4BE,IAAA9C,EAAqBwD,OAChDD,EACD,EAAAX,EAAA,KAAAW,GAAAX,EAAA,KAAAE,IAEMM,EAAcK,EAAqB;;AA3CA,SAAAN,EAAA7C,GAAA;CAAA,OAYR;EAAAF,mBAG1BE,EAAMM,QACNf,EAAyBS,EAAMoD,OAAcC,QAAK7B,OAAzB,GAAgC;EAAAxB;EAE5D"}
1
+ {"version":3,"file":"queries.js","names":["replaceEqualDeep","useQueries","UseQueryOptions","UseQueryResult","versionComparator","AxiosError","useMemo","downloadTokenListData","TokenListFetched","QUERY_KEY_FETCH_TOKEN_LISTS","constructPlaceholderData","isTruthy","overrideTokenList","useAtomValue","tokenListUrlsAtom","UseFetchListsResult","dataOrPlaceholder","T","result","isDataEqual","currentData","incomingData","available","isOlderOrEqual","data","version","produceQueriesOptions","listURLs","tag","uniqueListURLs","Array","from","Set","filter","map","listURL","produceSingleQueryOption","produceSingleQueryOptionMin","queryKey","queryFn","signal","_data","url","name","isArray","tokens","staleTime","Infinity","gcTime","structuralSharing","oldData","newData","notifyOnChangeProps","placeholderData","refetchOnMount","useFetchListsWithQueryResult","$","_c","t0","t1","queries","queryResults","t2","_temp","useFetchLists","_temp2","useFetchTokenLists","currentlyEnabledLists","error","config"],"sources":["../../src/tokens/queries.ts"],"sourcesContent":["import {\n replaceEqualDeep,\n useQueries,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport { versionComparator } from \"@uniswap/token-lists\";\nimport type { AxiosError } from \"axios\";\nimport { /* useRef, useLayoutEffect, */ useMemo } from \"react\";\nimport { downloadTokenListData } from \"./lists/download\";\nimport type { TokenListFetched } from \"./types\";\nimport { QUERY_KEY_FETCH_TOKEN_LISTS } from \"./constants\";\nimport { constructPlaceholderData } from \"./lists/utils\";\nimport { isTruthy } from \"@/lib/utils\";\nimport { overrideTokenList } from \"./overrides\";\nimport { useAtomValue } from \"@/core/store\";\nimport { tokenListUrlsAtom } from \"./lists/state/tokenListsStateAtom\";\n\ntype UseFetchListsResult<T extends string> = {\n dataOrPlaceholder: TokenListFetched<T>;\n result: UseQueryResult<TokenListFetched<T>, AxiosError>;\n};\n\nfunction isDataEqual<T extends string | never = never>(\n currentData: TokenListFetched<T> | undefined,\n incomingData: TokenListFetched<T>\n): currentData is typeof incomingData {\n // there was no oldData --> data not equal\n if (!currentData) return false;\n // data was a placeholder (available = false) and data.available changed --> data not equal\n if (!currentData.available || !incomingData.available)\n return currentData.available !== incomingData.available;\n // incoming list.version <= current list.version --> consider data equal (don't replace with incoming older version)\n const isOlderOrEqual =\n versionComparator(incomingData.data.version, currentData.data.version) <= 0;\n return isOlderOrEqual;\n}\n\nexport function produceQueriesOptions<T extends string | never = never>(\n listURLs: string[],\n tag?: T\n) {\n // de-dupe in case the same list URL is configured more than once\n const uniqueListURLs = Array.from(new Set(listURLs));\n\n return (\n uniqueListURLs\n // to prevent occasional `token_list_download_error:\"\"` event tag\n .filter(isTruthy)\n .map<UseQueryOptions<TokenListFetched<T>, AxiosError>>((listURL) =>\n produceSingleQueryOption<T>(listURL, tag)\n )\n );\n}\n\nexport function produceSingleQueryOptionMin<T extends string | never = never>(\n listURL: string,\n tag?: T\n): UseQueryOptions<TokenListFetched<T>, AxiosError> {\n return {\n queryKey: [QUERY_KEY_FETCH_TOKEN_LISTS, listURL],\n queryFn: async ({ signal }) => {\n const _data = await downloadTokenListData(listURL, signal);\n\n const data = overrideTokenList(_data, listURL);\n\n return {\n url: listURL,\n name: data.name,\n data,\n tag,\n // possibly mitigates https://sentry.io/organizations/paraswap/discover/ui:3fa26b87e3594d1998ff9fb4770a26d9\n available: Array.isArray(data.tokens),\n };\n },\n staleTime: Infinity,\n gcTime: Infinity,\n\n // custom comparison to optimize big token list comparison\n structuralSharing: (oldData, newData) =>\n isDataEqual(\n oldData as TokenListFetched<T> | undefined,\n newData as TokenListFetched<T>\n )\n ? oldData\n : replaceEqualDeep(oldData, newData),\n };\n}\n\n// adds useQuery options\nexport function produceSingleQueryOption<T extends string | never = never>(\n listURL: string,\n tag?: T\n): UseQueryOptions<TokenListFetched<T>, AxiosError> {\n return {\n ...produceSingleQueryOptionMin<T>(listURL, tag),\n notifyOnChangeProps: [\"data\"],\n placeholderData: constructPlaceholderData(listURL), // start with unavailable but still with url\n refetchOnMount: false,\n };\n}\n\nexport const useFetchListsWithQueryResult = <T extends string | never = never>(\n listURLs: string[],\n tag?: T\n): UseFetchListsResult<T>[] => {\n const queryResults = useQueries<\n UseQueryOptions<TokenListFetched<T>, AxiosError>[]\n >({\n queries: produceQueriesOptions(listURLs, tag),\n });\n\n return useMemo<UseFetchListsResult<T>[]>(\n () =>\n queryResults.map((result) => ({\n // provide {url, name} even on error\n dataOrPlaceholder:\n result.data ||\n constructPlaceholderData(result.error?.config?.url || \"\"),\n result,\n })),\n [queryResults]\n );\n};\n\nexport function useFetchLists<T extends string | never = never>(\n listURLs: string[],\n tag?: T\n): TokenListFetched<T>[] {\n const queryResults = useFetchListsWithQueryResult(listURLs, tag);\n\n return useMemo(\n () => queryResults.map(({ dataOrPlaceholder }) => dataOrPlaceholder),\n [queryResults]\n );\n}\n\nexport function useFetchTokenLists(): TokenListFetched[] {\n const currentlyEnabledLists = useAtomValue(tokenListUrlsAtom);\n\n return useFetchLists(currentlyEnabledLists);\n}\n"],"mappings":";;;;;;;;;;;;AAuBA,SAASmB,EACPC,GACAC,GACoC;CASpC,OAPKD,IAED,CAACA,EAAYE,aAAa,CAACD,EAAaC,YACnCF,EAAYE,cAAcD,EAAaC,YAG9ClB,EAAkBiB,EAAaG,KAAKC,SAASL,EAAYI,KAAKC,QAAQ,IAAI,IANnD;;AAU3B,SAAgBC,EACdC,GACAC,GACA;CAIA,OAFuBE,MAAMC,KAAK,IAAIC,IAAIL,EAAS,CAGjDE,CAEGI,OAAOtB,EAAS,CAChBuB,KAAuDC,MACtDC,EAA4BD,GAASP,EACvC,CAAC;;AAIP,SAAgBS,EACdF,GACAP,GACkD;CAClD,OAAO;EACLU,UAAU,CAAC7B,GAA6B0B,EAAQ;EAChDI,SAAS,OAAO,EAAEC,gBAAa;GAG7B,IAAMhB,IAAOZ,EAAkB6B,MAFXlC,EAAsB4B,GAASK,EAAO,EAEpBL,EAAQ;GAE9C,OAAO;IACLO,KAAKP;IACLQ,MAAMnB,EAAKmB;IACXnB;IACAI;IAEAN,WAAWQ,MAAMc,QAAQpB,EAAKqB,OAAM;IACrC;;EAEHC,WAAWC;EACXC,QAAQD;EAGRE,oBAAoBC,GAASC,MAC3BhC,EACE+B,GACAC,EACD,GACGD,IACAlD,EAAiBkD,GAASC,EAAO;EACxC;;AAIH,SAAgBf,EACdD,GACAP,GACkD;CAClD,OAAO;EACL,GAAGS,EAA+BF,GAASP,EAAI;EAC/CwB,qBAAqB,CAAC,OAAO;EAC7BC,iBAAiB3C,EAAyByB,EAAQ;EAClDmB,gBAAgB;EACjB;;AAGH,IAAaC,KAA+B5B,GAAAC,MAAA;CAAA,IAAA4B,IAAAC,EAAA,EAAA,EAAAC;CAAA,AAAAF,EAAA,OAAA7B,KAAA6B,EAAA,OAAA5B,KAO/B8B,IAAAhC,EAAsBC,GAAUC,EAAI,EAAA4B,EAAA,KAAA7B,GAAA6B,EAAA,KAAA5B,GAAA4B,EAAA,KAAAE,KAAAA,IAAAF,EAAA;CAAA,IAAAG;CAAA,AAAAH,EAAA,OAAAE,IAC9CC,IAAAH,EAAA,MAFCG,IAAA,EAAAC,SACSF,GACV,EAAAF,EAAA,KAAAE,GAAAF,EAAA,KAAAG;CAJD,IAAAE,IAAqB5D,EAEnB0D,EAEA,EAACG;CAUI,OAVJN,EAAA,OAAAK,IAUIC,IAAAN,EAAA,MANHM,IAAAD,EAAY3B,IAAK6B,EAMd,EAAAP,EAAA,KAAAK,GAAAL,EAAA,KAAAM,IANHA;;AAWN,SAAOE,EAAArC,GAAAC,GAAA;CAAA,IAAA4B,IAAAC,EAAA,EAAA,EAILI,IAAqBN,EAA6B5B,GAAUC,EAAI,EAAC8B;CAGK,OAHLF,EAAA,OAAAK,IAGKH,IAAAF,EAAA,MAA9DE,IAAAG,EAAY3B,IAAK+B,EAA6C,EAAAT,EAAA,KAAAK,GAAAL,EAAA,KAAAE,IAA9DA;;AAPH,SAAAO,EAAAP,GAAA;CAOqB,IAAA,EAAA1C,yBAAA0C;CAAqB,OAAK1C;;AAKtD,SAAOkD,IAAA;CACyD,OAEvDF,EAFuBnD,EAAaC,EAEtBqD,CAAsB;;AAtCD,SAAAJ,EAAA7C,GAAA;CAAA,OAYR;EAAAF,mBAG1BE,EAAMM,QACNd,EAAyBQ,EAAMkD,OAAcC,QAAK3B,OAAzB,GAAgC;EAAAxB;EAE5D"}
@@ -1,5 +1,3 @@
1
- import { ChainTokensSet, TokenListFetched } from '../types';
2
- export declare function useStableCoinTokenLists(): TokenListFetched<"stablecoin">[];
3
- export declare function useStablecoinSetsByChain(): ChainTokensSet;
4
- export declare function useIsAddressStablecoin(addresses: (string | undefined)[], chainId?: number): boolean;
1
+ import { SupportedChainId } from '../../lib/web3/wagmi/types';
2
+ export declare function useIsAddressStablecoin(addresses: (string | undefined)[], chainId: SupportedChainId): boolean;
5
3
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/tokens/stabeCoins/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMjE,wBAAgB,uBAAuB,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAE1E;AAGD,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EACjC,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAOT"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/tokens/stabeCoins/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAK/D,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EACjC,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAWT"}
@@ -1,21 +1,19 @@
1
- import { stableCoinsTokenLists as e } from "./index.js";
2
- import { useFetchLists as t } from "../queries.js";
3
- import { checkAddressesBelongToChainSet as n, tokenlistsToSetsByChain as r } from "../utils/sets.js";
4
- import { c as i } from "react-compiler-runtime";
5
- import "react";
1
+ import { useAtomValue as e } from "../../core/store.js";
2
+ import { apiTokensByChainAtom as t } from "../state/apiTokensAtom.js";
3
+ import { c as n } from "react-compiler-runtime";
6
4
  //#region src/tokens/stabeCoins/hooks.ts
7
- function a() {
8
- return t(e, "stablecoin");
9
- }
10
- function o() {
11
- let e = i(2), t = a(), n;
12
- return e[0] === t ? n = e[1] : (n = r(t), e[0] = t, e[1] = n), n;
13
- }
14
- function s(e, t) {
15
- let r = i(4), a = o(), s;
16
- return r[0] !== e || r[1] !== t || r[2] !== a ? (s = n(a, e, t), r[0] = e, r[1] = t, r[2] = a, r[3] = s) : s = r[3], s;
5
+ var r = "paraswap_community_stablecoin_lists";
6
+ function i(i, a) {
7
+ let o = n(5), s = e(t)[a]?.addressMap;
8
+ if (!s) return !1;
9
+ let c;
10
+ if (o[0] !== s || o[1] !== i) {
11
+ let e;
12
+ o[3] === s ? e = o[4] : (e = (e) => e ? !!s[e.toLowerCase()]?.sources?.includes(r) : !1, o[3] = s, o[4] = e), c = i.every(e), o[0] = s, o[1] = i, o[2] = c;
13
+ } else c = o[2];
14
+ return c;
17
15
  }
18
16
  //#endregion
19
- export { s as useIsAddressStablecoin };
17
+ export { i as useIsAddressStablecoin };
20
18
 
21
19
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","names":["useMemo","stableCoinsTokenLists","useFetchLists","ChainTokensSet","TokenListFetched","checkAddressesBelongToChainSet","tokenlistsToSetsByChain","useStableCoinTokenLists","useStablecoinSetsByChain","$","_c","lists","t0","useIsAddressStablecoin","addresses","chainId","chainId2StableCoinSets"],"sources":["../../../src/tokens/stabeCoins/hooks.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { stableCoinsTokenLists } from \".\";\nimport { useFetchLists } from \"../queries\";\nimport type { ChainTokensSet, TokenListFetched } from \"../types\";\nimport {\n checkAddressesBelongToChainSet,\n tokenlistsToSetsByChain,\n} from \"../utils/sets\";\n\nexport function useStableCoinTokenLists(): TokenListFetched<\"stablecoin\">[] {\n return useFetchLists(stableCoinsTokenLists, \"stablecoin\");\n}\n\n// compose stablecoin sets\nexport function useStablecoinSetsByChain(): ChainTokensSet {\n const lists = useStableCoinTokenLists();\n\n return useMemo(() => tokenlistsToSetsByChain(lists), [lists]);\n}\n\nexport function useIsAddressStablecoin(\n addresses: (string | undefined)[],\n chainId?: number\n): boolean {\n const chainId2StableCoinSets = useStablecoinSetsByChain();\n return checkAddressesBelongToChainSet(\n chainId2StableCoinSets,\n addresses,\n chainId\n );\n}\n"],"mappings":";;;;;;AASA,SAAOO,IAAA;CAAA,OACEL,EAAcD,GAAuB,aAAa;;AAI3D,SAAOO,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACLC,IAAcJ,GAAyB,EAACK;CAEW,OAFXH,EAAA,OAAAE,IAEWC,IAAAH,EAAA,MAA9BG,IAAAN,EAAwBK,EAAM,EAAAF,EAAA,KAAAE,GAAAF,EAAA,KAAAG,IAA9BA;;AAGvB,SAAOC,EAAAC,GAAAC,GAAA;CAAA,IAAAN,IAAAC,EAAA,EAAA,EAILM,IAA+BR,GAA0B,EAACI;CAKzD,OALyDH,EAAA,OAAAK,KAAAL,EAAA,OAAAM,KAAAN,EAAA,OAAAO,KACnDJ,IAAAP,EACLW,GACAF,GACAC,EACD,EAAAN,EAAA,KAAAK,GAAAL,EAAA,KAAAM,GAAAN,EAAA,KAAAO,GAAAP,EAAA,KAAAG,KAAAA,IAAAH,EAAA,IAJMG"}
1
+ {"version":3,"file":"hooks.js","names":["useAtomValue","SupportedChainId","apiTokensByChainAtom","STABLECOIN_SOURCE","useIsAddressStablecoin","addresses","chainId","$","_c","apiTokensByChain","addressMap","t0","t1","address","token","toLowerCase","sources","includes","every"],"sources":["../../../src/tokens/stabeCoins/hooks.ts"],"sourcesContent":["import { useAtomValue } from \"@/core/store\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { apiTokensByChainAtom } from \"@/tokens/state/apiTokensAtom\";\n\nconst STABLECOIN_SOURCE = \"paraswap_community_stablecoin_lists\";\n\nexport function useIsAddressStablecoin(\n addresses: (string | undefined)[],\n chainId: SupportedChainId\n): boolean {\n const apiTokensByChain = useAtomValue(apiTokensByChainAtom);\n\n const addressMap = apiTokensByChain[chainId]?.addressMap;\n if (!addressMap) return false;\n\n return addresses.every((address) => {\n if (!address) return false;\n const token = addressMap[address.toLowerCase()];\n return !!token?.sources?.includes(STABLECOIN_SOURCE);\n });\n}\n"],"mappings":";;;;AAIA,IAAMG,IAAoB;AAE1B,SAAOC,EAAAC,GAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAMLE,IAFyBV,EAAaE,EAEnBO,CAAiBH,IAAoBI;CACxD,IAAI,CAACA,GAAU,OAAS;CAAM,IAAAC;CAAA,IAAAJ,EAAA,OAAAG,KAAAH,EAAA,OAAAF,GAAA;EAAA,IAAAO;EAM5BL,AAN4BA,EAAA,OAAAG,IAM7BE,IAAAL,EAAA,MAJsBK,KAAAC,MAChBA,IAEE,CAAC,CADMH,EAAWG,EAAOE,aAAc,GAChCC,SAAmBC,SAACd,EAAkB,GAF/B,IAGtBI,EAAA,KAAAG,GAAAH,EAAA,KAAAK,IAJMD,IAAAN,EAASa,MAAON,EAIrB,EAAAL,EAAA,KAAAG,GAAAH,EAAA,KAAAF,GAAAE,EAAA,KAAAI;QAAAA,IAAAJ,EAAA;CAAA,OAJKI"}
@@ -5,7 +5,6 @@ import { Address } from 'viem';
5
5
  import { SupportedChainId } from '../../lib/web3/wagmi/types';
6
6
  import { ImportTokenReason } from '../../events/types/importToken';
7
7
  type TokenWithSymbol = MarkRequired<Token, "symbol">;
8
- export type OnImportAction = (tokenImported: TokenWithSymbol) => void;
9
8
  export declare const addImportedTokenAtom: import('jotai').WritableAtom<null, [{
10
9
  newToken: TokenWithSymbol;
11
10
  afterAction?: ImportTokenDrawerProps["onConfirmAction"];
@@ -1 +1 @@
1
- {"version":3,"file":"addImportedTokenAtom.d.ts","sourceRoot":"","sources":["../../../src/tokens/state/addImportedTokenAtom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAKpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,KAAK,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,CAAC,aAAa,EAAE,eAAe,KAAK,IAAI,CAAC;AAEtE,eAAO,MAAM,oBAAoB;cAUjB,eAAe;kBACX,sBAAsB,CAAC,iBAAiB,CAAC;aAC9C,iBAAiB;;;CAuD/B,CAAC;AAKF,eAAO,MAAM,wBAAwB;aAKR,OAAO;aAAW,gBAAgB;;;CA+B9D,CAAC"}
1
+ {"version":3,"file":"addImportedTokenAtom.d.ts","sourceRoot":"","sources":["../../../src/tokens/state/addImportedTokenAtom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAKpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,KAAK,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAErD,eAAO,MAAM,oBAAoB;cAUjB,eAAe;kBACX,sBAAsB,CAAC,iBAAiB,CAAC;aAC9C,iBAAiB;;;CAuD/B,CAAC;AAKF,eAAO,MAAM,wBAAwB;aAKR,OAAO;aAAW,gBAAgB;;;CA+B9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"addImportedTokenAtom.js","names":["atom","ImportedToken","Token","ImportTokenDrawerProps","autoImportedTokensAtom","importedTokensAtom","MarkRequired","fetchUnknownTokenData","constructToken","Address","SupportedChainId","tradeModeAtom","tradeModeToSetTokenAtoms","widgetEventsAtom","ImportTokenReason","TokenWithSymbol","OnImportAction","tokenImported","addImportedTokenAtom","get","set","newToken","afterAction","reason","chainId","network","currentTokens","tokensForChain","newTokenAddressLower","address","toLowerCase","alreadyExists","some","t","tokenToAdd","pickOnlyTokenProps","imported","symbol","onImportToken","event","name","params","token","decimals","img","tradeMode","tokensToSet","tokenAtomToSet","autoAddImportedTokenAtom","minTokenData","fetchedToken","constructedToken","importedToken","currentAutoImportedTokens","tokenType","mainConnector","connectors","allowance","balance","fromList","fromListURL"],"sources":["../../../src/tokens/state/addImportedTokenAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport type { ImportedToken, Token } from \"./types\";\nimport type { ImportTokenDrawerProps } from \"@/components/widget/ImportToken/types\";\nimport {\n autoImportedTokensAtom,\n importedTokensAtom,\n} from \"./importedTokensAtom\";\nimport type { MarkRequired } from \"ts-essentials\";\nimport { fetchUnknownTokenData } from \"@/hooks/tokens/data/useMultichainTokensData\";\nimport { constructToken } from \"@velora-dex/sdk\";\nimport type { Address } from \"viem\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { tradeModeAtom } from \"@/core/state/tradeModeAtom\";\nimport { tradeModeToSetTokenAtoms } from \"@/core/inputs/state/common\";\nimport { widgetEventsAtom } from \"@/core/state/widgetEventsAtom\";\nimport type { ImportTokenReason } from \"@/events/types/importToken\";\n\ntype TokenWithSymbol = MarkRequired<Token, \"symbol\">;\nexport type OnImportAction = (tokenImported: TokenWithSymbol) => void;\n\nexport const addImportedTokenAtom = atom(\n null,\n (\n get,\n set,\n {\n newToken,\n afterAction,\n reason = \"manual\",\n }: {\n newToken: TokenWithSymbol;\n afterAction?: ImportTokenDrawerProps[\"onConfirmAction\"];\n reason?: ImportTokenReason;\n }\n ) => {\n const chainId = newToken.network;\n const currentTokens = get(importedTokensAtom);\n const tokensForChain = currentTokens[chainId] ?? [];\n // Avoid duplicates by address\n const newTokenAddressLower = newToken.address.toLowerCase();\n const alreadyExists = tokensForChain.some(\n (t) => t.address.toLowerCase() === newTokenAddressLower\n );\n if (alreadyExists) return;\n\n const tokenToAdd: ImportedToken = {\n // get rid of extra props attached for display purposes (usdBalance, fetchedOnChain)\n ...pickOnlyTokenProps(newToken),\n imported: true,\n symbol: newToken.symbol,\n };\n\n set(importedTokensAtom, {\n ...currentTokens,\n [chainId]: [...tokensForChain, tokenToAdd],\n });\n\n get(widgetEventsAtom).onImportToken?.({\n event: {\n name: \"ImportToken:imported\",\n params: {\n reason,\n token: {\n address: tokenToAdd.address,\n network: tokenToAdd.network,\n symbol: tokenToAdd.symbol,\n decimals: tokenToAdd.decimals,\n img: tokenToAdd.img,\n },\n },\n },\n });\n\n if (!afterAction) return tokenToAdd;\n\n const tradeMode = get(tradeModeAtom);\n const tokensToSet = tradeModeToSetTokenAtoms[tradeMode];\n const tokenAtomToSet =\n tokensToSet[\n afterAction === \"set-token-from\" ? \"tokenFromAtom\" : \"tokenToAtom\"\n ];\n // atom setter inside takes care of disallowed pair choices,\n // like invalid crosschain match\n set(tokenAtomToSet, tokenToAdd);\n\n return tokenToAdd;\n }\n);\n\n// fetches Token data onchain internally,\n// adds it to addImportedTokenAtom.\n// then adds it to autoImportedTokensAtom.\nexport const autoAddImportedTokenAtom = atom(\n [],\n async (\n get,\n set,\n minTokenData: { address: Address; chainId: SupportedChainId }\n ) => {\n const fetchedToken = await fetchUnknownTokenData(minTokenData);\n\n if (fetchedToken) {\n const constructedToken = constructToken(fetchedToken);\n const importedToken = set(addImportedTokenAtom, {\n newToken: {\n ...constructedToken,\n symbol: fetchedToken.symbol,\n network: minTokenData.chainId,\n },\n reason: \"auto\",\n });\n\n if (importedToken) {\n const currentAutoImportedTokens = get(autoImportedTokensAtom);\n const alreadyExists = currentAutoImportedTokens.some(\n (t) =>\n t.address.toLowerCase() === importedToken.address.toLowerCase() &&\n t.network === importedToken.network\n );\n if (alreadyExists) return;\n\n set(autoImportedTokensAtom, [\n ...currentAutoImportedTokens,\n importedToken,\n ]);\n }\n }\n }\n);\n\nfunction pickOnlyTokenProps(token: Token): Token {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n tokenType: token.tokenType,\n mainConnector: token.mainConnector,\n connectors: token.connectors,\n network: token.network,\n img: token.img,\n allowance: token.allowance,\n balance: token.balance,\n imported: token.imported,\n name: token.name,\n fromList: token.fromList,\n fromListURL: token.fromListURL,\n };\n}\n"],"mappings":";;;;;;;;AAoBA,IAAakB,IAAuBlB,EAClC,OAEEmB,GACAC,GACA,EACEC,aACAC,gBACAC,YAAS,eAMR;CACH,IAAMC,IAAUH,EAASI,SACnBC,IAAgBP,EAAId,EAAmB,EACvCsB,IAAiBD,EAAcF,MAAY,EAAE,EAE7CI,IAAuBP,EAASQ,QAAQC,aAAa;CAI3D,IAHsBH,EAAeK,MAClCC,MAAMA,EAAEJ,QAAQC,aAAa,KAAKF,EAEjCG,EAAe;CAEnB,IAAMG,IAA4B;EAEhC,GAAGC,EAAmBd,EAAS;EAC/Be,UAAU;EACVC,QAAQhB,EAASgB;EAClB;CAuBD,IArBAjB,EAAIf,GAAoB;EACtB,GAAGqB;GACFF,IAAU,CAAC,GAAGG,GAAgBO,EAAU;EAC1C,CAAC,EAEFf,EAAIN,EAAiB,CAACyB,gBAAgB,EACpCC,OAAO;EACLC,MAAM;EACNC,QAAQ;GACNlB;GACAmB,OAAO;IACLb,SAASK,EAAWL;IACpBJ,SAASS,EAAWT;IACpBY,QAAQH,EAAWG;IACnBM,UAAUT,EAAWS;IACrBC,KAAKV,EAAWU;IAClB;GACF;EACF,EACD,CAAC,EAEE,CAACtB,GAAa,OAAOY;CAIzB,IAAMa,IADcnC,EADFO,EAAIR,EACuBkC,EAGzCvB,MAAgB,mBAAmB,kBAAkB;CAMzD,OAFAF,EAAI2B,GAAgBb,EAAW,EAExBA;EAEV,EAKYc,IAA2BhD,EACtC,EAAE,EACF,OACEmB,GACAC,GACA6B,MACG;CACH,IAAMC,IAAe,MAAM3C,EAAsB0C,EAAa;CAE9D,IAAIC,GAAc;EAEhB,IAAME,IAAgBhC,EAAIF,GAAsB;GAC9CG,UAAU;IACR,GAHqBb,EAAe0C,EAGjCC;IACHd,QAAQa,EAAab;IACrBZ,SAASwB,EAAazB;IACvB;GACDD,QAAQ;GACT,CAAC;EAEF,IAAI6B,GAAe;GACjB,IAAMC,IAA4BlC,EAAIf,EAAuB;GAM7D,IALsBiD,EAA0BrB,MAC7CC,MACCA,EAAEJ,QAAQC,aAAa,KAAKsB,EAAcvB,QAAQC,aAAa,IAC/DG,EAAER,YAAY2B,EAAc3B,QAE5BM,EAAe;GAEnBX,EAAIhB,GAAwB,CAC1B,GAAGiD,GACHD,EACD,CAAC;;;EAIT;AAED,SAASjB,EAAmBO,GAAqB;CAC/C,OAAO;EACLb,SAASa,EAAMb;EACfc,UAAUD,EAAMC;EAChBN,QAAQK,EAAML;EACdiB,WAAWZ,EAAMY;EACjBC,eAAeb,EAAMa;EACrBC,YAAYd,EAAMc;EAClB/B,SAASiB,EAAMjB;EACfmB,KAAKF,EAAME;EACXa,WAAWf,EAAMe;EACjBC,SAAShB,EAAMgB;EACftB,UAAUM,EAAMN;EAChBI,MAAME,EAAMF;EACZmB,UAAUjB,EAAMiB;EAChBC,aAAalB,EAAMkB;EACpB"}
1
+ {"version":3,"file":"addImportedTokenAtom.js","names":["atom","ImportedToken","Token","ImportTokenDrawerProps","autoImportedTokensAtom","importedTokensAtom","MarkRequired","fetchUnknownTokenData","constructToken","Address","SupportedChainId","tradeModeAtom","tradeModeToSetTokenAtoms","widgetEventsAtom","ImportTokenReason","TokenWithSymbol","addImportedTokenAtom","get","set","newToken","afterAction","reason","chainId","network","currentTokens","tokensForChain","newTokenAddressLower","address","toLowerCase","alreadyExists","some","t","tokenToAdd","pickOnlyTokenProps","imported","symbol","onImportToken","event","name","params","token","decimals","img","tradeMode","tokensToSet","tokenAtomToSet","autoAddImportedTokenAtom","minTokenData","fetchedToken","constructedToken","importedToken","currentAutoImportedTokens","tokenType","mainConnector","connectors","allowance","balance","fromList","fromListURL"],"sources":["../../../src/tokens/state/addImportedTokenAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport type { ImportedToken, Token } from \"./types\";\nimport type { ImportTokenDrawerProps } from \"@/components/widget/ImportToken/types\";\nimport {\n autoImportedTokensAtom,\n importedTokensAtom,\n} from \"./importedTokensAtom\";\nimport type { MarkRequired } from \"ts-essentials\";\nimport { fetchUnknownTokenData } from \"@/hooks/tokens/data/useMultichainTokensData\";\nimport { constructToken } from \"@velora-dex/sdk\";\nimport type { Address } from \"viem\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { tradeModeAtom } from \"@/core/state/tradeModeAtom\";\nimport { tradeModeToSetTokenAtoms } from \"@/core/inputs/state/common\";\nimport { widgetEventsAtom } from \"@/core/state/widgetEventsAtom\";\nimport type { ImportTokenReason } from \"@/events/types/importToken\";\n\ntype TokenWithSymbol = MarkRequired<Token, \"symbol\">;\n\nexport const addImportedTokenAtom = atom(\n null,\n (\n get,\n set,\n {\n newToken,\n afterAction,\n reason = \"manual\",\n }: {\n newToken: TokenWithSymbol;\n afterAction?: ImportTokenDrawerProps[\"onConfirmAction\"];\n reason?: ImportTokenReason;\n }\n ) => {\n const chainId = newToken.network;\n const currentTokens = get(importedTokensAtom);\n const tokensForChain = currentTokens[chainId] ?? [];\n // Avoid duplicates by address\n const newTokenAddressLower = newToken.address.toLowerCase();\n const alreadyExists = tokensForChain.some(\n (t) => t.address.toLowerCase() === newTokenAddressLower\n );\n if (alreadyExists) return;\n\n const tokenToAdd: ImportedToken = {\n // get rid of extra props attached for display purposes (usdBalance, fetchedOnChain)\n ...pickOnlyTokenProps(newToken),\n imported: true,\n symbol: newToken.symbol,\n };\n\n set(importedTokensAtom, {\n ...currentTokens,\n [chainId]: [...tokensForChain, tokenToAdd],\n });\n\n get(widgetEventsAtom).onImportToken?.({\n event: {\n name: \"ImportToken:imported\",\n params: {\n reason,\n token: {\n address: tokenToAdd.address,\n network: tokenToAdd.network,\n symbol: tokenToAdd.symbol,\n decimals: tokenToAdd.decimals,\n img: tokenToAdd.img,\n },\n },\n },\n });\n\n if (!afterAction) return tokenToAdd;\n\n const tradeMode = get(tradeModeAtom);\n const tokensToSet = tradeModeToSetTokenAtoms[tradeMode];\n const tokenAtomToSet =\n tokensToSet[\n afterAction === \"set-token-from\" ? \"tokenFromAtom\" : \"tokenToAtom\"\n ];\n // atom setter inside takes care of disallowed pair choices,\n // like invalid crosschain match\n set(tokenAtomToSet, tokenToAdd);\n\n return tokenToAdd;\n }\n);\n\n// fetches Token data onchain internally,\n// adds it to addImportedTokenAtom.\n// then adds it to autoImportedTokensAtom.\nexport const autoAddImportedTokenAtom = atom(\n [],\n async (\n get,\n set,\n minTokenData: { address: Address; chainId: SupportedChainId }\n ) => {\n const fetchedToken = await fetchUnknownTokenData(minTokenData);\n\n if (fetchedToken) {\n const constructedToken = constructToken(fetchedToken);\n const importedToken = set(addImportedTokenAtom, {\n newToken: {\n ...constructedToken,\n symbol: fetchedToken.symbol,\n network: minTokenData.chainId,\n },\n reason: \"auto\",\n });\n\n if (importedToken) {\n const currentAutoImportedTokens = get(autoImportedTokensAtom);\n const alreadyExists = currentAutoImportedTokens.some(\n (t) =>\n t.address.toLowerCase() === importedToken.address.toLowerCase() &&\n t.network === importedToken.network\n );\n if (alreadyExists) return;\n\n set(autoImportedTokensAtom, [\n ...currentAutoImportedTokens,\n importedToken,\n ]);\n }\n }\n }\n);\n\nfunction pickOnlyTokenProps(token: Token): Token {\n return {\n address: token.address,\n decimals: token.decimals,\n symbol: token.symbol,\n tokenType: token.tokenType,\n mainConnector: token.mainConnector,\n connectors: token.connectors,\n network: token.network,\n img: token.img,\n allowance: token.allowance,\n balance: token.balance,\n imported: token.imported,\n name: token.name,\n fromList: token.fromList,\n fromListURL: token.fromListURL,\n };\n}\n"],"mappings":";;;;;;;;AAmBA,IAAagB,IAAuBhB,EAClC,OAEEiB,GACAC,GACA,EACEC,aACAC,gBACAC,YAAS,eAMR;CACH,IAAMC,IAAUH,EAASI,SACnBC,IAAgBP,EAAIZ,EAAmB,EACvCoB,IAAiBD,EAAcF,MAAY,EAAE,EAE7CI,IAAuBP,EAASQ,QAAQC,aAAa;CAI3D,IAHsBH,EAAeK,MAClCC,MAAMA,EAAEJ,QAAQC,aAAa,KAAKF,EAEjCG,EAAe;CAEnB,IAAMG,IAA4B;EAEhC,GAAGC,EAAmBd,EAAS;EAC/Be,UAAU;EACVC,QAAQhB,EAASgB;EAClB;CAuBD,IArBAjB,EAAIb,GAAoB;EACtB,GAAGmB;GACFF,IAAU,CAAC,GAAGG,GAAgBO,EAAU;EAC1C,CAAC,EAEFf,EAAIJ,EAAiB,CAACuB,gBAAgB,EACpCC,OAAO;EACLC,MAAM;EACNC,QAAQ;GACNlB;GACAmB,OAAO;IACLb,SAASK,EAAWL;IACpBJ,SAASS,EAAWT;IACpBY,QAAQH,EAAWG;IACnBM,UAAUT,EAAWS;IACrBC,KAAKV,EAAWU;IAClB;GACF;EACF,EACD,CAAC,EAEE,CAACtB,GAAa,OAAOY;CAIzB,IAAMa,IADcjC,EADFK,EAAIN,EACuBgC,EAGzCvB,MAAgB,mBAAmB,kBAAkB;CAMzD,OAFAF,EAAI2B,GAAgBb,EAAW,EAExBA;EAEV,EAKYc,IAA2B9C,EACtC,EAAE,EACF,OACEiB,GACAC,GACA6B,MACG;CACH,IAAMC,IAAe,MAAMzC,EAAsBwC,EAAa;CAE9D,IAAIC,GAAc;EAEhB,IAAME,IAAgBhC,EAAIF,GAAsB;GAC9CG,UAAU;IACR,GAHqBX,EAAewC,EAGjCC;IACHd,QAAQa,EAAab;IACrBZ,SAASwB,EAAazB;IACvB;GACDD,QAAQ;GACT,CAAC;EAEF,IAAI6B,GAAe;GACjB,IAAMC,IAA4BlC,EAAIb,EAAuB;GAM7D,IALsB+C,EAA0BrB,MAC7CC,MACCA,EAAEJ,QAAQC,aAAa,KAAKsB,EAAcvB,QAAQC,aAAa,IAC/DG,EAAER,YAAY2B,EAAc3B,QAE5BM,EAAe;GAEnBX,EAAId,GAAwB,CAC1B,GAAG+C,GACHD,EACD,CAAC;;;EAIT;AAED,SAASjB,EAAmBO,GAAqB;CAC/C,OAAO;EACLb,SAASa,EAAMb;EACfc,UAAUD,EAAMC;EAChBN,QAAQK,EAAML;EACdiB,WAAWZ,EAAMY;EACjBC,eAAeb,EAAMa;EACrBC,YAAYd,EAAMc;EAClB/B,SAASiB,EAAMjB;EACfmB,KAAKF,EAAME;EACXa,WAAWf,EAAMe;EACjBC,SAAShB,EAAMgB;EACftB,UAAUM,EAAMN;EAChBI,MAAME,EAAMF;EACZmB,UAAUjB,EAAMiB;EAChBC,aAAalB,EAAMkB;EACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"allTokensByChainAtom.d.ts","sourceRoot":"","sources":["../../../src/tokens/state/allTokensByChainAtom.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK5D,eAAO,MAAM,oBAAoB,2EA2D/B,CAAC"}
1
+ {"version":3,"file":"allTokensByChainAtom.d.ts","sourceRoot":"","sources":["../../../src/tokens/state/allTokensByChainAtom.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAS5D,eAAO,MAAM,oBAAoB,2EA6C/B,CAAC"}
@@ -1,38 +1,28 @@
1
- import { gatherObjectsByProp as e } from "../../lib/utils/index.js";
2
- import { fromListsAtom as t } from "./fromListsAtom.js";
3
- import { importedTokensAtom as n } from "./importedTokensAtom.js";
4
- import { atom as r } from "jotai";
1
+ import { apiTokensByChainAtom as e } from "./apiTokensAtom.js";
2
+ import { enabledTokenListsAtom as t } from "../../core/state/tokenListsAtom.js";
3
+ import { fromListsAtom as n } from "./fromListsAtom.js";
4
+ import { importedTokensAtom as r } from "./importedTokensAtom.js";
5
+ import { atom as i } from "jotai";
5
6
  //#region src/tokens/state/allTokensByChainAtom.ts
6
- var i = r((r) => {
7
- let i = r(t), a = r(n), o = {
7
+ var a = i((i) => {
8
+ let a = i(t).length > 0, o = i(n), s = i(e), c = i(r), l = a ? o.listByChainId : s, u = {
8
9
  listByChainId: {},
9
- disabledListByChainId: i.disabledListByChainId,
10
- tokensFromAllChains: i.tokensFromAllChains.slice()
11
- };
12
- for (let [e, t] of Object.entries(i.listByChainId)) {
13
- let n = Number(e), r = a[n] || [], i = t.tokens.slice(), s = { ...t.addressMap };
14
- for (let e of r) {
15
- let t = e.address.toLowerCase();
16
- s[t] || (i.push(e), s[t] = e, o.tokensFromAllChains.push(e));
17
- }
18
- o.listByChainId[n] = {
19
- tokens: i,
20
- addressMap: s
10
+ disabledListByChainId: o.disabledListByChainId,
11
+ tokensFromAllChains: []
12
+ }, d = new Set([...Object.keys(l).map(Number), ...Object.keys(c).map(Number)]);
13
+ for (let e of d) {
14
+ let t = [], n = {}, r = (e) => {
15
+ let r = e.address.toLowerCase();
16
+ n[r] || (n[r] = e, t.push(e));
21
17
  };
18
+ l[e]?.tokens.forEach(r), (c[e] || []).forEach(r), u.listByChainId[e] = {
19
+ tokens: t,
20
+ addressMap: n
21
+ }, u.tokensFromAllChains.push(...t);
22
22
  }
23
- for (let [t, n] of Object.entries(a)) {
24
- let r = Number(t);
25
- if (!o.listByChainId[r]) {
26
- let t = e(n, (e) => e.address.toLowerCase());
27
- o.listByChainId[r] = {
28
- tokens: n,
29
- addressMap: t
30
- };
31
- }
32
- }
33
- return o;
23
+ return u;
34
24
  });
35
25
  //#endregion
36
- export { i as allTokensByChainAtom };
26
+ export { a as allTokensByChainAtom };
37
27
 
38
28
  //# sourceMappingURL=allTokensByChainAtom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"allTokensByChainAtom.js","names":["atom","fromListsAtom","TokensFromListsState","importedTokensAtom","ImportedToken","TokenFromList","gatherObjectsByProp","allTokensByChainAtom","get","fromListsState","importedByChain","result","listByChainId","disabledListByChainId","tokensFromAllChains","slice","chainIdStr","fromListsArr","Object","entries","chainId","Number","imported","tokens","addressMap","address","token","addressKey","toLowerCase","push","importedArr"],"sources":["../../../src/tokens/state/allTokensByChainAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport { fromListsAtom, type TokensFromListsState } from \"./fromListsAtom\";\nimport { importedTokensAtom } from \"./importedTokensAtom\";\nimport type { ImportedToken, TokenFromList } from \"./types\";\n// import { getLogger } from \"@/core/logger\";\nimport { gatherObjectsByProp } from \"@/lib/utils\";\n\n// returns TokenFromListState + ImportedTokenState merged, conforming the shape of the first one\nexport const allTokensByChainAtom = atom((get) => {\n const fromListsState = get(fromListsAtom);\n const importedByChain = get(importedTokensAtom);\n\n // start with a fresh result object to avoid mutating fromListsState\n const result: TokensFromListsState<TokenFromList | ImportedToken> = {\n listByChainId: {},\n // disabledListByChainId won't be deep-changed, so clone shallowly\n disabledListByChainId: fromListsState.disabledListByChainId,\n tokensFromAllChains: fromListsState.tokensFromAllChains.slice(),\n };\n\n // merge tokens list & map for chains present in fromListsState\n for (const [chainIdStr, fromListsArr] of Object.entries(\n fromListsState.listByChainId\n )) {\n const chainId = Number(chainIdStr);\n const imported = importedByChain[chainId] || [];\n\n // clone base tokens and addressMap to avoid mutation\n const tokens: (TokenFromList | ImportedToken)[] =\n fromListsArr.tokens.slice();\n const addressMap: { [address: string]: TokenFromList | ImportedToken } = {\n ...fromListsArr.addressMap,\n };\n\n // add imported tokens if not already present\n for (const token of imported) {\n const addressKey = token.address.toLowerCase();\n if (!addressMap[addressKey]) {\n tokens.push(token);\n addressMap[addressKey] = token;\n\n // add imported to all Tokens\n result.tokensFromAllChains.push(token);\n }\n // @TODO: suppressing the logs for now as it clutters the console\n // else {\n // getLogger(\"AllTokensByChain\").log(\n // `LOGIC ERROR: Token ${token.address} on chain ${chainId} already exists in fromListsAtom, skipping import.`\n // );\n // }\n }\n\n result.listByChainId[chainId] = { tokens, addressMap };\n }\n\n // normally shouldn't happen, but add chains that only have imported tokens\n for (const [chainIdStr, importedArr] of Object.entries(importedByChain)) {\n const chainId = Number(chainIdStr);\n if (!result.listByChainId[chainId]) {\n const addressMap = gatherObjectsByProp(importedArr, (token) =>\n token.address.toLowerCase()\n );\n result.listByChainId[chainId] = { tokens: importedArr, addressMap };\n }\n }\n\n return result;\n});\n"],"mappings":";;;;;AAQA,IAAaO,IAAuBP,GAAMQ,MAAQ;CAChD,IAAMC,IAAiBD,EAAIP,EAAc,EACnCS,IAAkBF,EAAIL,EAAmB,EAGzCQ,IAA8D;EAClEC,eAAe,EAAE;EAEjBC,uBAAuBJ,EAAeI;EACtCC,qBAAqBL,EAAeK,oBAAoBC,OAAM;EAC/D;CAGD,KAAK,IAAM,CAACC,GAAYC,MAAiBC,OAAOC,QAC9CV,EAAeG,cAChB,EAAE;EACD,IAAMQ,IAAUC,OAAOL,EAAW,EAC5BM,IAAWZ,EAAgBU,MAAY,EAAE,EAGzCG,IACJN,EAAaM,OAAOR,OAAO,EACvBS,IAAmE,EACvE,GAAGP,EAAaO,YACjB;EAGD,KAAK,IAAME,KAASJ,GAAU;GAC5B,IAAMK,IAAaD,EAAMD,QAAQG,aAAa;GAC9C,AAAKJ,EAAWG,OACdJ,EAAOM,KAAKH,EAAM,EAClBF,EAAWG,KAAcD,GAGzBf,EAAOG,oBAAoBe,KAAKH,EAAM;;EAU1Cf,EAAOC,cAAcQ,KAAW;GAAEG;GAAQC;GAAY;;CAIxD,KAAK,IAAM,CAACR,GAAYc,MAAgBZ,OAAOC,QAAQT,EAAgB,EAAE;EACvE,IAAMU,IAAUC,OAAOL,EAAW;EAClC,IAAI,CAACL,EAAOC,cAAcQ,IAAU;GAClC,IAAMI,IAAalB,EAAoBwB,IAAcJ,MACnDA,EAAMD,QAAQG,aAChB,CAAC;GACDjB,EAAOC,cAAcQ,KAAW;IAAEG,QAAQO;IAAaN;IAAY;;;CAIvE,OAAOb;EACP"}
1
+ {"version":3,"file":"allTokensByChainAtom.js","names":["atom","fromListsAtom","TokensFromListsState","importedTokensAtom","apiTokensByChainAtom","ImportedToken","TokenFromList","enabledTokenListsAtom","allTokensByChainAtom","get","enabledLists","usingUserLists","length","fromListsState","apiByChain","importedByChain","baseByChain","listByChainId","result","disabledListByChainId","tokensFromAllChains","chainIds","Set","Object","keys","map","Number","chainId","tokens","addressMap","address","addIfAbsent","token","addressKey","toLowerCase","push","forEach"],"sources":["../../../src/tokens/state/allTokensByChainAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport { fromListsAtom, type TokensFromListsState } from \"./fromListsAtom\";\nimport { importedTokensAtom } from \"./importedTokensAtom\";\nimport { apiTokensByChainAtom } from \"./apiTokensAtom\";\nimport type { ImportedToken, TokenFromList } from \"./types\";\nimport { enabledTokenListsAtom } from \"@/core/state/tokenListsAtom\";\n\n// The active token set shown in the widget:\n// - if the user configured tokenLists, ONLY those lists' tokens are used\n// (the API default source is replaced entirely, matching the pre-API behavior)\n// - otherwise the API's full token set (default source) is used\n// Imported tokens are always included on top.\n// Shape matches TokensFromListsState so downstream hooks are unaffected.\nexport const allTokensByChainAtom = atom((get) => {\n const enabledLists = get(enabledTokenListsAtom);\n const usingUserLists = enabledLists.length > 0;\n\n const fromListsState = get(fromListsAtom);\n const apiByChain = get(apiTokensByChainAtom);\n const importedByChain = get(importedTokensAtom);\n\n // user-provided lists replace the API default source when present\n const baseByChain = usingUserLists\n ? fromListsState.listByChainId\n : apiByChain;\n\n const result: TokensFromListsState<TokenFromList | ImportedToken> = {\n listByChainId: {},\n // disabledListByChainId won't be deep-changed, so clone shallowly\n disabledListByChainId: fromListsState.disabledListByChainId,\n tokensFromAllChains: [],\n };\n\n const chainIds = new Set<number>([\n ...Object.keys(baseByChain).map(Number),\n ...Object.keys(importedByChain).map(Number),\n ]);\n\n for (const chainId of chainIds) {\n const tokens: (TokenFromList | ImportedToken)[] = [];\n const addressMap: { [address: string]: TokenFromList | ImportedToken } = {};\n\n const addIfAbsent = (token: TokenFromList | ImportedToken) => {\n const addressKey = token.address.toLowerCase();\n if (addressMap[addressKey]) return;\n addressMap[addressKey] = token;\n tokens.push(token);\n };\n\n // active source (user lists or API), then imported tokens on top\n baseByChain[chainId]?.tokens.forEach(addIfAbsent);\n (importedByChain[chainId] || []).forEach(addIfAbsent);\n\n result.listByChainId[chainId] = { tokens, addressMap };\n result.tokensFromAllChains.push(...tokens);\n }\n\n return result;\n});\n"],"mappings":";;;;;;AAaA,IAAaQ,IAAuBR,GAAMS,MAAQ;CAEhD,IAAME,IADeF,EAAIF,EACFG,CAAaE,SAAS,GAEvCC,IAAiBJ,EAAIR,EAAc,EACnCa,IAAaL,EAAIL,EAAqB,EACtCW,IAAkBN,EAAIN,EAAmB,EAGzCa,IAAcL,IAChBE,EAAeI,gBACfH,GAEEI,IAA8D;EAClED,eAAe,EAAE;EAEjBE,uBAAuBN,EAAeM;EACtCC,qBAAqB,EAAA;EACtB,EAEKC,IAAW,IAAIC,IAAY,CAC/B,GAAGC,OAAOC,KAAKR,EAAY,CAACS,IAAIC,OAAO,EACvC,GAAGH,OAAOC,KAAKT,EAAgB,CAACU,IAAIC,OAAO,CAC5C,CAAC;CAEF,KAAK,IAAMC,KAAWN,GAAU;EAC9B,IAAMO,IAA4C,EAAE,EAC9CC,IAAmE,EAAE,EAErEE,KAAeC,MAAyC;GAC5D,IAAMC,IAAaD,EAAMF,QAAQI,aAAa;GAC1CL,EAAWI,OACfJ,EAAWI,KAAcD,GACzBJ,EAAOO,KAAKH,EAAM;;EAQpBd,AAJAF,EAAYW,IAAUC,OAAOQ,QAAQL,EAAY,GAChDhB,EAAgBY,MAAY,EAAE,EAAES,QAAQL,EAAY,EAErDb,EAAOD,cAAcU,KAAW;GAAEC;GAAQC;GAAY,EACtDX,EAAOE,oBAAoBe,KAAK,GAAGP,EAAO;;CAG5C,OAAOV;EACP"}
@@ -0,0 +1,24 @@
1
+ import { TokensFromLists } from './fromListsAtom';
2
+ export declare const API_TOKENS_LIST_URL = "https://api.velora.xyz/fiat/tokens/all";
3
+ /**
4
+ * Query atom that fetches the full token set from the API (all chains at once).
5
+ * Using atomWithQuery so fetched tokens land in atom state directly, with no
6
+ * useQuery + useEffect bridge. It fetches lazily once something subscribes to the
7
+ * token list (allTokensByChainAtom), which Updaters already does.
8
+ */
9
+ export declare const apiTokensQueryAtom: import('jotai').WritableAtom<import('jotai-tanstack-query').AtomWithQueryResult<{
10
+ symbol?: string | undefined | undefined;
11
+ address: string;
12
+ decimals: number;
13
+ network: number;
14
+ tags?: string[] | undefined | undefined;
15
+ sources: string[];
16
+ categories: string[];
17
+ tokenType: import('@velora-dex/sdk/dist/helpers/token').LendingToken | import('@velora-dex/sdk/dist/helpers/token').TokenType;
18
+ mainConnector: string;
19
+ connectors: string[];
20
+ img?: string | undefined | undefined;
21
+ name: string;
22
+ }[], Error>, [], void>;
23
+ export declare const apiTokensByChainAtom: import('jotai').Atom<Record<number, TokensFromLists>>;
24
+ //# sourceMappingURL=apiTokensAtom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiTokensAtom.d.ts","sourceRoot":"","sources":["../../../src/tokens/state/apiTokensAtom.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,eAAO,MAAM,mBAAmB,2CAAoC,CAAC;AASrE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;sBAkB7B,CAAC;AAoBH,eAAO,MAAM,oBAAoB,uDA0BhC,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { gatherObjectsByProp as e } from "../../lib/utils/index.js";
2
+ import { supportedChainIds as t } from "../../lib/web3/wagmi/constants.js";
3
+ import { PROD_API_URL as n, getApiURL as r } from "../../lib/constants/urls.js";
4
+ import { apiConfigAtom as i } from "../../core/state/apiConfigAtom.js";
5
+ import { isSupportedChainId as a } from "../../lib/web3/wagmi/utils.js";
6
+ import { isBlacklistedToken as o } from "../blacklist.js";
7
+ import { atom as s } from "jotai";
8
+ import c from "axios";
9
+ import { constructAxiosFetcher as l, constructGetTokens as u, constructPartialSDK as d } from "@velora-dex/sdk";
10
+ import { atomWithQuery as f } from "jotai-tanstack-query";
11
+ //#region src/tokens/state/apiTokensAtom.ts
12
+ var p = `${n}/fiat/tokens/all`, m = t[0], h = f((e) => {
13
+ let t = e(i), n = r();
14
+ return {
15
+ queryKey: [
16
+ "tokens/all",
17
+ n,
18
+ t
19
+ ],
20
+ queryFn: async () => d({
21
+ apiURL: n,
22
+ chainId: m,
23
+ fetcher: l(c, t)
24
+ }, u).getAllTokens(),
25
+ staleTime: Infinity,
26
+ gcTime: Infinity
27
+ };
28
+ });
29
+ function g(e) {
30
+ let t = e.network, n = e.symbol;
31
+ return !a(t) || !n || o(e) ? null : {
32
+ ...e,
33
+ network: t,
34
+ symbol: n,
35
+ fromListURL: p
36
+ };
37
+ }
38
+ var _ = s((t) => {
39
+ let { data: n } = t(h);
40
+ if (!n) return {};
41
+ let r = n.reduce((e, t) => {
42
+ let n = g(t);
43
+ return n && (e[n.network] ||= []).push(n), e;
44
+ }, {});
45
+ return Object.entries(r).reduce((t, [n, r]) => (t[Number(n)] = {
46
+ tokens: r,
47
+ addressMap: e(r, (e) => e.address.toLowerCase())
48
+ }, t), {});
49
+ });
50
+ //#endregion
51
+ export { p as API_TOKENS_LIST_URL, _ as apiTokensByChainAtom, h as apiTokensQueryAtom };
52
+
53
+ //# sourceMappingURL=apiTokensAtom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apiTokensAtom.js","names":["axios","atom","atomWithQuery","constructAxiosFetcher","constructGetTokens","constructPartialSDK","apiConfigAtom","getApiURL","PROD_API_URL","supportedChainIds","gatherObjectsByProp","isSupportedChainId","isBlacklistedToken","TokenFromList","TokensFromLists","TokensSDK","API_TOKENS_LIST_URL","API_TOKENS_CHAIN_ID","APIToken","Awaited","ReturnType","apiTokensQueryAtom","get","apiConfig","apiURL","queryKey","queryFn","fetcher","sdk","chainId","getAllTokens","staleTime","Infinity","gcTime","mapAPITokenToTokenFromList","token","network","symbol","fromListURL","apiTokensByChainAtom","Record","data","tokensByChain","reduce","acc","rawToken","push","Object","entries","chainIdStr","chainTokens","Number","tokens","addressMap","address","toLowerCase"],"sources":["../../../src/tokens/state/apiTokensAtom.ts"],"sourcesContent":["import axios from \"axios\";\nimport { atom } from \"jotai\";\nimport { atomWithQuery } from \"jotai-tanstack-query\";\nimport {\n constructAxiosFetcher,\n constructGetTokens,\n constructPartialSDK,\n} from \"@velora-dex/sdk\";\nimport { apiConfigAtom } from \"@/core/state/apiConfigAtom\";\nimport { getApiURL, PROD_API_URL } from \"@/lib/constants/urls\";\nimport { supportedChainIds } from \"@/lib/web3/wagmi/constants\";\nimport { gatherObjectsByProp } from \"@/lib/utils\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport { isBlacklistedToken } from \"../blacklist\";\nimport type { TokenFromList } from \"./types\";\nimport type { TokensFromLists } from \"./fromListsAtom\";\nimport type { TokensSDK } from \"@/hooks/useSDK\";\n\nexport const API_TOKENS_LIST_URL = `${PROD_API_URL}/fiat/tokens/all`;\n\n// getAllTokens hits `/fiat/tokens/all` and is chain-independent, so the chainId used\n// to construct the SDK is irrelevant — use a stable supported chain.\nconst API_TOKENS_CHAIN_ID = supportedChainIds[0];\n\n// element type of getAllTokens() result — the SDK doesn't export it directly\ntype APIToken = Awaited<ReturnType<TokensSDK[\"getAllTokens\"]>>[number];\n\n/**\n * Query atom that fetches the full token set from the API (all chains at once).\n * Using atomWithQuery so fetched tokens land in atom state directly, with no\n * useQuery + useEffect bridge. It fetches lazily once something subscribes to the\n * token list (allTokensByChainAtom), which Updaters already does.\n */\nexport const apiTokensQueryAtom = atomWithQuery((get) => {\n const apiConfig = get(apiConfigAtom);\n const apiURL = getApiURL();\n\n return {\n queryKey: [\"tokens/all\", apiURL, apiConfig],\n queryFn: async () => {\n const fetcher = constructAxiosFetcher(axios, apiConfig);\n const sdk = constructPartialSDK(\n { apiURL, chainId: API_TOKENS_CHAIN_ID, fetcher },\n constructGetTokens\n );\n // does GET https://api.velora.xyz/fiat/tokens/all internally\n return sdk.getAllTokens();\n },\n staleTime: Infinity,\n gcTime: Infinity,\n };\n});\n\nfunction mapAPITokenToTokenFromList(token: APIToken): TokenFromList | null {\n const network = token.network;\n const symbol = token.symbol;\n // the API returns tokens for all chains; keep only the ones we support\n if (!isSupportedChainId(network)) return null;\n // TokenFromList requires a symbol\n if (!symbol) return null;\n if (isBlacklistedToken(token)) return null;\n\n return {\n ...token,\n network,\n symbol,\n fromListURL: API_TOKENS_LIST_URL,\n };\n}\n\n// API tokens mapped to internal tokens and grouped by chain in the TokensFromLists shape\nexport const apiTokensByChainAtom = atom<Record<number, TokensFromLists>>(\n (get) => {\n const { data } = get(apiTokensQueryAtom);\n if (!data) return {};\n\n const tokensByChain = data.reduce<Record<number, TokenFromList[]>>(\n (acc, rawToken) => {\n const token = mapAPITokenToTokenFromList(rawToken);\n if (token) (acc[token.network] ||= []).push(token);\n return acc;\n },\n {}\n );\n\n return Object.entries(tokensByChain).reduce<\n Record<number, TokensFromLists>\n >((acc, [chainIdStr, chainTokens]) => {\n acc[Number(chainIdStr)] = {\n tokens: chainTokens,\n addressMap: gatherObjectsByProp(chainTokens, (token) =>\n token.address.toLowerCase()\n ),\n };\n return acc;\n }, {});\n }\n);\n"],"mappings":";;;;;;;;;;;AAkBA,IAAagB,IAAsB,GAAGR,EAAY,mBAI5CS,IAAsBR,EAAkB,IAWjCY,IAAqBnB,GAAeoB,MAAQ;CACvD,IAAMC,IAAYD,EAAIhB,EAAc,EAC9BkB,IAASjB,GAAW;CAE1B,OAAO;EACLkB,UAAU;GAAC;GAAcD;GAAQD;GAAU;EAC3CG,SAAS,YAEKrB,EACV;GAAEmB;GAAQK,SAASZ;GAAqBU,SAF1BxB,EAAsBH,GAAOuB,EAEHI;GAAS,EACjDvB,EAGKwB,CAAIE,cAAc;EAE3BC,WAAWC;EACXC,QAAQD;EACT;EACD;AAEF,SAASE,EAA2BC,GAAuC;CACzE,IAAMC,IAAUD,EAAMC,SAChBC,IAASF,EAAME;CAOrB,OALI,CAAC1B,EAAmByB,EAAQ,IAE5B,CAACC,KACDzB,EAAmBuB,EAAM,GAAS,OAE/B;EACL,GAAGA;EACHC;EACAC;EACAC,aAAatB;EACd;;AAIH,IAAauB,IAAuBtC,GACjCqB,MAAQ;CACP,IAAM,EAAEmB,YAASnB,EAAID,EAAmB;CACxC,IAAI,CAACoB,GAAM,OAAO,EAAE;CAEpB,IAAMC,IAAgBD,EAAKE,QACxBC,GAAKC,MAAa;EACjB,IAAMV,IAAQD,EAA2BW,EAAS;EAElD,OADIV,MAAQS,EAAIT,EAAMC,aAAa,EAAE,EAAEU,KAAKX,EAAM,EAC3CS;IAET,EACF,CAAC;CAED,OAAOG,OAAOC,QAAQN,EAAc,CAACC,QAElCC,GAAK,CAACK,GAAYC,QACnBN,EAAIO,OAAOF,EAAW,IAAI;EACxBG,QAAQF;EACRG,YAAY3C,EAAoBwC,IAAcf,MAC5CA,EAAMmB,QAAQC,aAChB,CAAA;EACD,EACMX,IACN,EAAE,CAAC;EAET"}
@@ -1,6 +1,6 @@
1
1
  import { gatherObjectsByProp as e } from "../../lib/utils/index.js";
2
2
  import { isSupportedChainId as t } from "../../lib/web3/wagmi/utils.js";
3
- import { constructedTokensByURLAtom as n, enabledAndDefaultTokenURLSAtom as r } from "../lists/state/tokenListsStateAtom.js";
3
+ import { constructedTokensByURLAtom as n, enabledTokenURLSAtom as r } from "../lists/state/tokenListsStateAtom.js";
4
4
  import { constructTokensFromLists as i } from "./constructTokens.js";
5
5
  import { atom as a } from "jotai";
6
6
  //#region src/tokens/state/fromListsAtom.ts
@@ -1 +1 @@
1
- {"version":3,"file":"fromListsAtom.js","names":["Token","TokenFromList","constructedTokensByURLAtom","enabledAndDefaultTokenURLSAtom","atom","constructTokensFromLists","gatherObjectsByProp","isSupportedChainId","MarkOptional","TokensFromLists","tokens","TToken","addressMap","Record","TokensFromListsByChain","listByChainId","disabledListByChainId","TokensFromListsState","tokensFromAllChains","fromListsAtom","get","constructedTokensByURLState","enabledAndDefaultTokenURLS","chainsFromLists","Object","keys","map","Number","filter","fromLists","reduce","acc","chainId","tokenListForChain","constructedLists","enabledListURLs","enabled","tokensFromListByURL","allListURLs","all","list","token","address","toLowerCase","disabledList","values","flatMap"],"sources":["../../../src/tokens/state/fromListsAtom.ts"],"sourcesContent":["import type { Token, TokenFromList } from \"./types\";\nimport {\n constructedTokensByURLAtom,\n enabledAndDefaultTokenURLSAtom,\n} from \"../lists/state/tokenListsStateAtom\";\nimport { atom } from \"jotai\";\nimport { constructTokensFromLists } from \"./constructTokens\";\nimport { gatherObjectsByProp } from \"@/lib/utils\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport type { MarkOptional } from \"ts-essentials\";\n\nexport type TokensFromLists<TToken extends Token = TokenFromList> = {\n tokens: TToken[];\n addressMap: Record<string, TToken>;\n};\n\ntype TokensFromListsByChain<TToken extends Token = TokenFromList> = {\n listByChainId: Record<number, TokensFromLists<TToken>>;\n // unlike listByChainId, this contains tokens from disabled lists only, no imported tokens\n disabledListByChainId: Record<number, TokensFromLists<TToken>>;\n};\n\nexport type TokensFromListsState<TToken extends Token = TokenFromList> =\n TokensFromListsByChain<TToken> & {\n tokensFromAllChains: MarkOptional<TokenFromList, \"fromListURL\">[]; // without disabled\n };\n\nexport const fromListsAtom = atom<TokensFromListsState>((get) => {\n // get the current list atoms\n const constructedTokensByURLState = get(constructedTokensByURLAtom);\n const enabledAndDefaultTokenURLS = get(enabledAndDefaultTokenURLSAtom);\n\n const chainsFromLists = Object.keys(enabledAndDefaultTokenURLS)\n .map(Number)\n .filter(isSupportedChainId);\n\n // atom with the lists of constructed SDK tokens\n const fromLists = chainsFromLists.reduce<TokensFromListsByChain>(\n (acc, chainId) => {\n const tokenListForChain = enabledAndDefaultTokenURLS[chainId];\n if (!tokenListForChain) return acc;\n\n const constructedLists = constructTokensFromLists({\n enabledListURLs: tokenListForChain.enabled || [],\n tokensFromListByURL: constructedTokensByURLState,\n allListURLs: tokenListForChain.all || [],\n chainId,\n });\n if (!constructedLists) return acc;\n\n acc.listByChainId[chainId] = {\n tokens: constructedLists.list,\n addressMap: gatherObjectsByProp(constructedLists.list, (token) =>\n token.address.toLowerCase()\n ),\n };\n acc.disabledListByChainId[chainId] = {\n tokens: constructedLists.disabledList,\n addressMap: gatherObjectsByProp(\n constructedLists.disabledList,\n (token) => token.address.toLowerCase()\n ),\n };\n\n return acc;\n },\n {\n listByChainId: {},\n disabledListByChainId: {},\n }\n );\n\n const tokensFromAllChains = Object.values(fromLists.listByChainId).flatMap(\n ({ tokens }) => tokens\n );\n\n return { ...fromLists, tokensFromAllChains };\n});\n"],"mappings":";;;;;;AA2BA,IAAamB,IAAgBf,GAA4BgB,MAAQ;CAE/D,IAAMC,IAA8BD,EAAIlB,EAA2B,EAC7DoB,IAA6BF,EAAIjB,EAA+B,EAOhE0B,IALkBL,OAAOC,KAAKH,EAA2B,CAC5DI,IAAIC,OAAO,CACXC,OAAOrB,EAGQgB,CAAgBO,QAC/BC,GAAKC,MAAY;EAChB,IAAMC,IAAoBX,EAA2BU;EACrD,IAAI,CAACC,GAAmB,OAAOF;EAE/B,IAAMG,IAAmB7B,EAAyB;GAChD8B,iBAAiBF,EAAkBG,WAAW,EAAE;GAChDC,qBAAqBhB;GACrBiB,aAAaL,EAAkBM,OAAO,EAAE;GACxCP;GACD,CAAC;EAiBF,OAhBKE,KAELH,EAAIhB,cAAciB,KAAW;GAC3BtB,QAAQwB,EAAiBM;GACzB5B,YAAYN,EAAoB4B,EAAiBM,OAAOC,MACtDA,EAAMC,QAAQC,aAChB,CAAA;GACD,EACDZ,EAAIf,sBAAsBgB,KAAW;GACnCtB,QAAQwB,EAAiBU;GACzBhC,YAAYN,EACV4B,EAAiBU,eAChBH,MAAUA,EAAMC,QAAQC,aAC3B,CAAA;GACD,EAEMZ,KAhBuBA;IAkBhC;EACEhB,eAAe,EAAE;EACjBC,uBAAuB,EAAC;EAE5B,CAAC,EAEKE,IAAsBM,OAAOqB,OAAOhB,EAAUd,cAAc,CAAC+B,SAChE,EAAEpC,gBAAaA,EACjB;CAED,OAAO;EAAE,GAAGmB;EAAWX;EAAqB;EAC5C"}
1
+ {"version":3,"file":"fromListsAtom.js","names":["Token","TokenFromList","constructedTokensByURLAtom","enabledTokenURLSAtom","atom","constructTokensFromLists","gatherObjectsByProp","isSupportedChainId","MarkOptional","TokensFromLists","tokens","TToken","addressMap","Record","TokensFromListsByChain","listByChainId","disabledListByChainId","TokensFromListsState","tokensFromAllChains","fromListsAtom","get","constructedTokensByURLState","enabledTokenURLS","chainsFromLists","Object","keys","map","Number","filter","fromLists","reduce","acc","chainId","tokenListForChain","constructedLists","enabledListURLs","enabled","tokensFromListByURL","allListURLs","all","list","token","address","toLowerCase","disabledList","values","flatMap"],"sources":["../../../src/tokens/state/fromListsAtom.ts"],"sourcesContent":["import type { Token, TokenFromList } from \"./types\";\nimport {\n constructedTokensByURLAtom,\n enabledTokenURLSAtom,\n} from \"../lists/state/tokenListsStateAtom\";\nimport { atom } from \"jotai\";\nimport { constructTokensFromLists } from \"./constructTokens\";\nimport { gatherObjectsByProp } from \"@/lib/utils\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport type { MarkOptional } from \"ts-essentials\";\n\nexport type TokensFromLists<TToken extends Token = TokenFromList> = {\n tokens: TToken[];\n addressMap: Record<string, TToken>;\n};\n\ntype TokensFromListsByChain<TToken extends Token = TokenFromList> = {\n listByChainId: Record<number, TokensFromLists<TToken>>;\n // unlike listByChainId, this contains tokens from disabled lists only, no imported tokens\n disabledListByChainId: Record<number, TokensFromLists<TToken>>;\n};\n\nexport type TokensFromListsState<TToken extends Token = TokenFromList> =\n TokensFromListsByChain<TToken> & {\n tokensFromAllChains: MarkOptional<TokenFromList, \"fromListURL\">[]; // without disabled\n };\n\nexport const fromListsAtom = atom<TokensFromListsState>((get) => {\n // get the current list atoms\n const constructedTokensByURLState = get(constructedTokensByURLAtom);\n const enabledTokenURLS = get(enabledTokenURLSAtom);\n\n const chainsFromLists = Object.keys(enabledTokenURLS)\n .map(Number)\n .filter(isSupportedChainId);\n\n // atom with the lists of constructed SDK tokens\n const fromLists = chainsFromLists.reduce<TokensFromListsByChain>(\n (acc, chainId) => {\n const tokenListForChain = enabledTokenURLS[chainId];\n if (!tokenListForChain) return acc;\n\n const constructedLists = constructTokensFromLists({\n enabledListURLs: tokenListForChain.enabled || [],\n tokensFromListByURL: constructedTokensByURLState,\n allListURLs: tokenListForChain.all || [],\n chainId,\n });\n if (!constructedLists) return acc;\n\n acc.listByChainId[chainId] = {\n tokens: constructedLists.list,\n addressMap: gatherObjectsByProp(constructedLists.list, (token) =>\n token.address.toLowerCase()\n ),\n };\n acc.disabledListByChainId[chainId] = {\n tokens: constructedLists.disabledList,\n addressMap: gatherObjectsByProp(\n constructedLists.disabledList,\n (token) => token.address.toLowerCase()\n ),\n };\n\n return acc;\n },\n {\n listByChainId: {},\n disabledListByChainId: {},\n }\n );\n\n const tokensFromAllChains = Object.values(fromLists.listByChainId).flatMap(\n ({ tokens }) => tokens\n );\n\n return { ...fromLists, tokensFromAllChains };\n});\n"],"mappings":";;;;;;AA2BA,IAAamB,IAAgBf,GAA4BgB,MAAQ;CAE/D,IAAMC,IAA8BD,EAAIlB,EAA2B,EAC7DoB,IAAmBF,EAAIjB,EAAqB,EAO5C0B,IALkBL,OAAOC,KAAKH,EAAiB,CAClDI,IAAIC,OAAO,CACXC,OAAOrB,EAGQgB,CAAgBO,QAC/BC,GAAKC,MAAY;EAChB,IAAMC,IAAoBX,EAAiBU;EAC3C,IAAI,CAACC,GAAmB,OAAOF;EAE/B,IAAMG,IAAmB7B,EAAyB;GAChD8B,iBAAiBF,EAAkBG,WAAW,EAAE;GAChDC,qBAAqBhB;GACrBiB,aAAaL,EAAkBM,OAAO,EAAE;GACxCP;GACD,CAAC;EAiBF,OAhBKE,KAELH,EAAIhB,cAAciB,KAAW;GAC3BtB,QAAQwB,EAAiBM;GACzB5B,YAAYN,EAAoB4B,EAAiBM,OAAOC,MACtDA,EAAMC,QAAQC,aAChB,CAAA;GACD,EACDZ,EAAIf,sBAAsBgB,KAAW;GACnCtB,QAAQwB,EAAiBU;GACzBhC,YAAYN,EACV4B,EAAiBU,eAChBH,MAAUA,EAAMC,QAAQC,aAC3B,CAAA;GACD,EAEMZ,KAhBuBA;IAkBhC;EACEhB,eAAe,EAAE;EACjBC,uBAAuB,EAAC;EAE5B,CAAC,EAEKE,IAAsBM,OAAOqB,OAAOhB,EAAUd,cAAc,CAAC+B,SAChE,EAAEpC,gBAAaA,EACjB;CAED,OAAO;EAAE,GAAGmB;EAAWX;EAAqB;EAC5C"}
@@ -25,5 +25,4 @@ export type IndividualTokenOverride = {
25
25
  remove?: boolean;
26
26
  merge?: Partial<TokenInfo>;
27
27
  };
28
- export type ChainTokensSet = Record<number, Set<string>>;
29
28
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tokens/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,IACzD,iBAAiB,CAAC,CAAC,CAAC,GACpB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG;IACvE,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CAC5B,CAAC;AAGF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tokens/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK;IACjE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,KAAK,CAAC;CAClB;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,IACzD,iBAAiB,CAAC,CAAC,CAAC,GACpB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG;IACvE,OAAO,EAAE,gBAAgB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;CAC5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@velora-dex/widget",
3
- "version": "0.10.1",
3
+ "version": "0.10.2-dev.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "files": [
@@ -79,7 +79,7 @@
79
79
  "@tanstack/react-pacer": "^0.22.1",
80
80
  "@tanstack/react-virtual": "^3.14.3",
81
81
  "@uniswap/token-lists": "1.0.0-beta.34",
82
- "@velora-dex/sdk": "10.1.0",
82
+ "@velora-dex/sdk": "10.2.0-dev.0",
83
83
  "@wagmi/core": "^3.5.2",
84
84
  "@walletconnect/ethereum-provider": "^2.21.5",
85
85
  "axios": "^1.16.1",
@@ -1,6 +0,0 @@
1
- //#region src/tokens/lists/lists.json
2
- var e = /* @__PURE__ */ JSON.parse("[{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":1,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://tokens.coingecko.com/ethereum/all.json\",\"filename\":\"coingecko\",\"chainId\":1,\"listName\":\"CoinGecko\",\"onByDefault\":true},{\"url\":\"https://tokens.uniswap.org\",\"filename\":\"uniswap_default\",\"chainId\":1,\"listName\":\"Uniswap Default List\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/bgd-labs/aave-address-book/main/tokenlist.json\",\"filename\":\"aave_list_multichain\",\"chainId\":1,\"listName\":\"Aave token list\",\"onByDefault\":true},{\"url\":\"https://tokenlist.zerion.eth.link\",\"filename\":\"zerion\",\"chainId\":1,\"listName\":\"Zerion\",\"ipfsUrl\":\"tokenlist.zerion.eth\"},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":137,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://unpkg.com/quickswap-default-token-list@latest/build/quickswap-default.tokenlist.json\",\"filename\":\"quickswap\",\"chainId\":137,\"listName\":\"Quickswap Token List\",\"onByDefault\":true},{\"url\":\"https://unpkg.com/@cometh-game/default-token-list@latest/build/comethswap-default.tokenlist.json\",\"filename\":\"comethswap_default\",\"chainId\":137,\"listName\":\"Comethswap Default List\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/bgd-labs/aave-address-book/main/tokenlist.json\",\"filename\":\"aave_list_multichain\",\"chainId\":137,\"listName\":\"Aave token list\",\"onByDefault\":true},{\"url\":\"https://tokens.coingecko.com/polygon-pos/all.json\",\"filename\":\"coingecko_polygon\",\"chainId\":137,\"listName\":\"Coingecko\",\"onByDefault\":true},{\"url\":\"https://gateway.pinata.cloud/ipfs/QmPs3EX688haEMgp49QLqoKApMukU6yaaApRr6C6ax1kWZ\",\"filename\":\"jarvis\",\"chainId\":137,\"listName\":\"Jarvis Network\"},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":56,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://tokens.pancakeswap.finance/pancakeswap-extended.json\",\"filename\":\"pancakeswap_extended\",\"chainId\":56,\"listName\":\"PancakeSwap Extended\",\"onByDefault\":true},{\"url\":\"https://tokens.pancakeswap.finance/pancakeswap-top-100.json\",\"filename\":\"pancakeswap_top_100\",\"chainId\":56,\"listName\":\"PancakeSwap Top 100\"},{\"url\":\"https://tokens.coingecko.com/binance-smart-chain/all.json\",\"filename\":\"coingecko_bsc\",\"chainId\":56,\"listName\":\"Coingecko\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/bgd-labs/aave-address-book/main/tokenlist.json\",\"filename\":\"aave_list_multichain\",\"chainId\":56,\"listName\":\"Aave token list\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":43114,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/pangolindex/tokenlists/main/pangolin.tokenlist.json\",\"filename\":\"pangolin_avax\",\"chainId\":43114,\"listName\":\"Pangolin Tokenlist\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/traderjoe-xyz/joe-tokenlists/main/mc.tokenlist.json\",\"filename\":\"trader_joe_default\",\"chainId\":43114,\"listName\":\"Trader Joe Default\",\"onByDefault\":true},{\"url\":\"https://tokens.coingecko.com/avalanche/all.json\",\"filename\":\"coingecko_avax\",\"chainId\":43114,\"listName\":\"Coingecko\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/bgd-labs/aave-address-book/main/tokenlist.json\",\"filename\":\"aave_list_multichain\",\"chainId\":43114,\"listName\":\"Aave token list\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":42161,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://bridge.arbitrum.io/token-list-42161.json\",\"filename\":\"arbitrum_tokens_list\",\"chainId\":42161,\"listName\":\"Arbitrum List\",\"onByDefault\":true},{\"url\":\"https://tokens.coingecko.com/arbitrum-one/all.json\",\"filename\":\"coingecko_arbitrum\",\"chainId\":42161,\"listName\":\"Coingecko\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/bgd-labs/aave-address-book/main/tokenlist.json\",\"filename\":\"aave_list_multichain\",\"chainId\":42161,\"listName\":\"Aave token list\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":10,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://static.optimism.io/optimism.tokenlist.json\",\"filename\":\"optimism_tokens_list\",\"chainId\":10,\"listName\":\"Optimism List\",\"onByDefault\":true},{\"url\":\"https://tokens.coingecko.com/optimistic-ethereum/all.json\",\"filename\":\"coingecko_optimism\",\"chainId\":10,\"listName\":\"Coingecko\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/bgd-labs/aave-address-book/main/tokenlist.json\",\"filename\":\"aave_list_multichain\",\"chainId\":10,\"listName\":\"Aave token list\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":8453,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://static.optimism.io/optimism.tokenlist.json\",\"filename\":\"optimism_tokens_list\",\"chainId\":8453,\"listName\":\"Superchain List - Base\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/bgd-labs/aave-address-book/main/tokenlist.json\",\"filename\":\"aave_list_multichain\",\"chainId\":8453,\"listName\":\"Aave token list\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.stablelist.json\",\"filename\":\"paraswap_community_stablecoin_lists\",\"chainId\":\"multi\",\"listName\":\"ParaSwap Community Stablecoin Lists\",\"tags\":[\"stablecoin\"]},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":100,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://tokens.coingecko.com/xdai/all.json\",\"filename\":\"coingecko_gnosis\",\"chainId\":100,\"listName\":\"Coingecko\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/SmolDapp/tokenLists/main/lists/100.json\",\"filename\":\"tokenlistooor_gnosis\",\"chainId\":100,\"listName\":\"Gnosis\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/SmolDapp/tokenLists/refs/heads/main/lists/100/cowswap.json\",\"filename\":\"tokenlistooor_cowswap\",\"chainId\":100,\"listName\":\"CoW Swap\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/bgd-labs/aave-address-book/main/tokenlist.json\",\"filename\":\"aave_list_multichain\",\"chainId\":100,\"listName\":\"Aave token list\",\"onByDefault\":true},{\"url\":\"https://raw.githubusercontent.com/paraswap/community-token-list/master/src/sources/paraswap.extralist.json\",\"filename\":\"paraswap_extra\",\"chainId\":130,\"listName\":\"ParaSwap Extra Token List\",\"onByDefault\":true},{\"url\":\"https://tokens.uniswap.org\",\"filename\":\"uniswap_default\",\"chainId\":130,\"listName\":\"Uniswap Default List\",\"onByDefault\":true},{\"url\":\"https://tokens.coingecko.com/unichain/all.json\",\"filename\":\"coingecko_unichain\",\"chainId\":130,\"listName\":\"Coingecko\",\"onByDefault\":true},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":1,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":10,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":137,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":56,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":43114,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":42161,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":100,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":130,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]},{\"url\":\"https://cdn.velora.xyz/web/token-lists/crosschain_token_list.json\",\"filename\":\"crosschain_token_list\",\"chainId\":8453,\"listName\":\"Crosschain Token List\",\"onByDefault\":true,\"tags\":[\"crosschain_swap\"]}]");
3
- //#endregion
4
- export { e as default };
5
-
6
- //# sourceMappingURL=lists.js.map