@velora-dex/widget 0.10.2-dev.0 → 0.10.2

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 (89) 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 +37 -37
  7. package/dist/core/inputs/state/setTokenByAddressAtom.d.ts.map +1 -1
  8. package/dist/core/inputs/state/setTokenByAddressAtom.js +68 -70
  9. package/dist/core/inputs/state/setTokenByAddressAtom.js.map +1 -1
  10. package/dist/core/limit/state/selectedTokenActionsAtom.js +27 -27
  11. package/dist/core/limit/state/selectedTokenAtom.js +7 -7
  12. package/dist/core/state/chainToAtom.js +14 -14
  13. package/dist/core/twap/state/selectedTokenActionsAtom.js +33 -33
  14. package/dist/hooks/tokens/data/useCombineTokensWithFetched.js +4 -4
  15. package/dist/hooks/tokens/useAllTokensWithFilter.js +15 -15
  16. package/dist/hooks/tokens/useTokensByAddress.js +6 -6
  17. package/dist/hooks/useSDK.d.ts +1 -3
  18. package/dist/hooks/useSDK.d.ts.map +1 -1
  19. package/dist/hooks/useSDK.js.map +1 -1
  20. package/dist/lib/constants/urls.d.ts +0 -1
  21. package/dist/lib/constants/urls.d.ts.map +1 -1
  22. package/dist/lib/constants/urls.js +1 -1
  23. package/dist/lib/constants/urls.js.map +1 -1
  24. package/dist/lib/utils/index.js +23 -15
  25. package/dist/lib/utils/index.js.map +1 -1
  26. package/dist/tokens/constructor.d.ts +8 -1
  27. package/dist/tokens/constructor.d.ts.map +1 -1
  28. package/dist/tokens/constructor.js +4 -2
  29. package/dist/tokens/constructor.js.map +1 -1
  30. package/dist/tokens/defaultTokens.d.ts.map +1 -1
  31. package/dist/tokens/defaultTokens.js +12 -5
  32. package/dist/tokens/defaultTokens.js.map +1 -1
  33. package/dist/tokens/lists/constants.d.ts +8 -0
  34. package/dist/tokens/lists/constants.d.ts.map +1 -1
  35. package/dist/tokens/lists/constants.js +13 -3
  36. package/dist/tokens/lists/constants.js.map +1 -1
  37. package/dist/tokens/lists/download.d.ts +1 -1
  38. package/dist/tokens/lists/download.d.ts.map +1 -1
  39. package/dist/tokens/lists/download.js +13 -5
  40. package/dist/tokens/lists/download.js.map +1 -1
  41. package/dist/tokens/lists/lists.js +22 -0
  42. package/dist/tokens/lists/lists.js.map +1 -0
  43. package/dist/tokens/lists/lists.json.d.ts +12 -0
  44. package/dist/tokens/lists/state/effects.d.ts.map +1 -1
  45. package/dist/tokens/lists/state/effects.js +21 -22
  46. package/dist/tokens/lists/state/effects.js.map +1 -1
  47. package/dist/tokens/lists/state/tokenListsStateAtom.d.ts +1 -1
  48. package/dist/tokens/lists/state/tokenListsStateAtom.d.ts.map +1 -1
  49. package/dist/tokens/lists/state/tokenListsStateAtom.js +21 -17
  50. package/dist/tokens/lists/state/tokenListsStateAtom.js.map +1 -1
  51. package/dist/tokens/lists/types.d.ts +6 -4
  52. package/dist/tokens/lists/types.d.ts.map +1 -1
  53. package/dist/tokens/lists/utils.d.ts +2 -1
  54. package/dist/tokens/lists/utils.d.ts.map +1 -1
  55. package/dist/tokens/lists/utils.js +6 -5
  56. package/dist/tokens/lists/utils.js.map +1 -1
  57. package/dist/tokens/queries.d.ts.map +1 -1
  58. package/dist/tokens/queries.js +32 -30
  59. package/dist/tokens/queries.js.map +1 -1
  60. package/dist/tokens/stabeCoins/hooks.d.ts +4 -1
  61. package/dist/tokens/stabeCoins/hooks.d.ts.map +1 -1
  62. package/dist/tokens/stabeCoins/hooks.js +7 -8
  63. package/dist/tokens/stabeCoins/hooks.js.map +1 -1
  64. package/dist/tokens/stabeCoins/index.d.ts +2 -0
  65. package/dist/tokens/stabeCoins/index.d.ts.map +1 -0
  66. package/dist/tokens/stabeCoins/index.js +6 -0
  67. package/dist/tokens/stabeCoins/index.js.map +1 -0
  68. package/dist/tokens/state/addImportedTokenAtom.d.ts +1 -0
  69. package/dist/tokens/state/addImportedTokenAtom.d.ts.map +1 -1
  70. package/dist/tokens/state/addImportedTokenAtom.js +4 -1
  71. package/dist/tokens/state/addImportedTokenAtom.js.map +1 -1
  72. package/dist/tokens/state/allTokensByChainAtom.d.ts.map +1 -1
  73. package/dist/tokens/state/allTokensByChainAtom.js +30 -20
  74. package/dist/tokens/state/allTokensByChainAtom.js.map +1 -1
  75. package/dist/tokens/state/fromListsAtom.js +1 -1
  76. package/dist/tokens/state/fromListsAtom.js.map +1 -1
  77. package/dist/tokens/types.d.ts +1 -0
  78. package/dist/tokens/types.d.ts.map +1 -1
  79. package/dist/tokens/utils/sets.d.ts +4 -0
  80. package/dist/tokens/utils/sets.d.ts.map +1 -0
  81. package/package.json +2 -2
  82. package/dist/core/state/tokenListsAtom.d.ts +0 -2
  83. package/dist/core/state/tokenListsAtom.d.ts.map +0 -1
  84. package/dist/core/state/tokenListsAtom.js +0 -9
  85. package/dist/core/state/tokenListsAtom.js.map +0 -1
  86. package/dist/tokens/state/apiTokensAtom.d.ts +0 -24
  87. package/dist/tokens/state/apiTokensAtom.d.ts.map +0 -1
  88. package/dist/tokens/state/apiTokensAtom.js +0 -53
  89. package/dist/tokens/state/apiTokensAtom.js.map +0 -1
@@ -1,31 +1,30 @@
1
1
  import { jotaiStore as e, useAtomValue as t } from "../../../core/store.js";
2
2
  import { queryClient as n } from "../../../lib/queryClient.js";
3
- import { apiTokensQueryAtom as r } from "../../state/apiTokensAtom.js";
4
- import { constructedTokensByURLAtom as i, tokenListUrlsAtom as a } from "./tokenListsStateAtom.js";
5
- import { produceSingleQueryOptionMin as o } from "../../queries.js";
6
- import { addTokenListsAtom as s } from "./tokenListsActionsAtom.js";
7
- import { atom as c } from "jotai";
8
- import { atomEffect as l } from "jotai-effect";
3
+ import { constructedTokensByURLAtom as r, tokenListUrlsAtom as i } from "./tokenListsStateAtom.js";
4
+ import { produceSingleQueryOptionMin as a } from "../../queries.js";
5
+ import { addTokenListsAtom as o } from "./tokenListsActionsAtom.js";
6
+ import { atom as s } from "jotai";
7
+ import { atomEffect as c } from "jotai-effect";
9
8
  //#region src/tokens/lists/state/effects.ts
10
- var u = /* @__PURE__ */ new Set();
11
- async function d(t) {
12
- if (u.has(t)) return;
13
- let r = o(t), i = await n.ensureQueryData(r);
14
- u.add(t), i?.available && e.set(s, [i]);
9
+ var l = /* @__PURE__ */ new Set();
10
+ async function u(t) {
11
+ if (l.has(t)) return;
12
+ let r = a(t), i = await n.ensureQueryData(r);
13
+ l.add(t), i?.available && e.set(o, [i]);
15
14
  }
16
- var f = l((e) => {
17
- e(a).forEach(d);
15
+ var d = c((e) => {
16
+ e(i).forEach(u);
18
17
  });
19
- function p() {
20
- t(f);
18
+ function f() {
19
+ t(d);
21
20
  }
22
- var m = c((e) => {
23
- let t = e(a), { isSuccess: n } = e(r);
24
- if (t.length === 0) return n;
25
- let o = e(i);
26
- return t.every((e) => o[e] !== void 0);
27
- }), h = () => t(m);
21
+ var p = s((e) => {
22
+ let t = e(i);
23
+ if (t.length === 0) return !1;
24
+ let n = e(r);
25
+ return t.every((e) => n[e] !== void 0);
26
+ }), m = () => t(p);
28
27
  //#endregion
29
- export { p as useActivateEffects, h as useAllTokensListsFetched };
28
+ export { f as useActivateEffects, m as useAllTokensListsFetched };
30
29
 
31
30
  //# sourceMappingURL=effects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"effects.js","names":["jotaiStore","queryClient","produceSingleQueryOptionMin","atomEffect","addTokenListsAtom","constructedTokensByURLAtom","tokenListUrlsAtom","useAtomValue","atom","apiTokensQueryAtom","addedUrlsSet","Set","addTokenList","url","has","queryOptions","tokenList","ensureQueryData","add","available","set","addTokenListEffect","get","forEach","useActivateEffects","allTokensListsFetchedSuccesfully","tokenListUrls","isSuccess","length","constructedTokensByURL","every","undefined","useAllTokensListsFetched"],"sources":["../../../../src/tokens/lists/state/effects.ts"],"sourcesContent":["import { jotaiStore } from \"@/core/store\";\nimport { queryClient } from \"@/lib/queryClient\";\nimport { produceSingleQueryOptionMin } from \"@/tokens/queries\";\nimport { atomEffect } from \"jotai-effect\";\nimport { addTokenListsAtom } from \"./tokenListsActionsAtom\";\nimport {\n constructedTokensByURLAtom,\n tokenListUrlsAtom,\n} from \"./tokenListsStateAtom\";\nimport { useAtomValue } from \"@/core/store\";\nimport { atom } from \"jotai\";\nimport { apiTokensQueryAtom } from \"@/tokens/state/apiTokensAtom\";\n\nconst addedUrlsSet = new Set<string>();\n\nasync function addTokenList(url: string) {\n // list already in store\n if (addedUrlsSet.has(url)) return;\n\n // fetch token list or get from cache\n const queryOptions = produceSingleQueryOptionMin(url);\n const tokenList = await queryClient.ensureQueryData(queryOptions);\n\n // add url to set\n addedUrlsSet.add(url);\n\n // add to state once per fetched list\n if (tokenList?.available) jotaiStore.set(addTokenListsAtom, [tokenList]);\n}\n\nconst addTokenListEffect = atomEffect((get) => {\n get(tokenListUrlsAtom).forEach(addTokenList);\n});\n\nexport function useActivateEffects() {\n useAtomValue(addTokenListEffect);\n}\n\nconst allTokensListsFetchedSuccesfully = atom<boolean>((get) => {\n const tokenListUrls = get(tokenListUrlsAtom);\n const { isSuccess } = get(apiTokensQueryAtom);\n if (tokenListUrls.length === 0) return isSuccess;\n const constructedTokensByURL = get(constructedTokensByURLAtom);\n return tokenListUrls.every(\n (url) => constructedTokensByURL[url] !== undefined\n );\n});\n\nexport const useAllTokensListsFetched = () => {\n return useAtomValue(allTokensListsFetchedSuccesfully);\n};\n"],"mappings":";;;;;;;;;AAaA,IAAMU,oBAAe,IAAIC,KAAa;AAEtC,eAAeC,EAAaC,GAAa;CAEvC,IAAIH,EAAaI,IAAID,EAAI,EAAE;CAG3B,IAAME,IAAeb,EAA4BW,EAAI,EAC/CG,IAAY,MAAMf,EAAYgB,gBAAgBF,EAAa;CAMjE,AAHAL,EAAaQ,IAAIL,EAAI,EAGjBG,GAAWG,aAAWnB,EAAWoB,IAAIhB,GAAmB,CAACY,EAAU,CAAC;;AAG1E,IAAMK,IAAqBlB,GAAYmB,MAAQ;CAC7CA,EAAIhB,EAAkB,CAACiB,QAAQX,EAAa;EAC5C;AAEF,SAAOY,IAAA;CACLjB,EAAac,EAAmB;;AAGlC,IAAMI,IAAmCjB,GAAec,MAAQ;CAC9D,IAAMI,IAAgBJ,EAAIhB,EAAkB,EACtC,EAAEqB,iBAAcL,EAAIb,EAAmB;CAC7C,IAAIiB,EAAcE,WAAW,GAAG,OAAOD;CACvC,IAAME,IAAyBP,EAAIjB,EAA2B;CAC9D,OAAOqB,EAAcI,OAClBjB,MAAQgB,EAAuBhB,OAASkB,KAAAA,EAC1C;EACD,EAEWC,UACJzB,EAAakB,EAAiC"}
1
+ {"version":3,"file":"effects.js","names":["jotaiStore","queryClient","produceSingleQueryOptionMin","atomEffect","addTokenListsAtom","constructedTokensByURLAtom","tokenListUrlsAtom","useAtomValue","atom","addedUrlsSet","Set","addTokenList","url","has","queryOptions","tokenList","ensureQueryData","add","available","set","addTokenListEffect","get","forEach","useActivateEffects","allTokensListsFetchedSuccesfully","tokenListUrls","length","constructedTokensByURL","every","undefined","useAllTokensListsFetched"],"sources":["../../../../src/tokens/lists/state/effects.ts"],"sourcesContent":["import { jotaiStore } from \"@/core/store\";\nimport { queryClient } from \"@/lib/queryClient\";\nimport { produceSingleQueryOptionMin } from \"@/tokens/queries\";\nimport { atomEffect } from \"jotai-effect\";\nimport { addTokenListsAtom } from \"./tokenListsActionsAtom\";\nimport {\n constructedTokensByURLAtom,\n tokenListUrlsAtom,\n} from \"./tokenListsStateAtom\";\nimport { useAtomValue } from \"@/core/store\";\nimport { atom } from \"jotai\";\n\nconst addedUrlsSet = new Set<string>();\n\nasync function addTokenList(url: string) {\n // list already in store\n if (addedUrlsSet.has(url)) return;\n\n // fetch token list or get from cache\n const queryOptions = produceSingleQueryOptionMin(url);\n const tokenList = await queryClient.ensureQueryData(queryOptions);\n\n // add url to set\n addedUrlsSet.add(url);\n\n // add to state once per fetched list\n if (tokenList?.available) jotaiStore.set(addTokenListsAtom, [tokenList]);\n}\n\nconst addTokenListEffect = atomEffect((get) => {\n get(tokenListUrlsAtom).forEach(addTokenList);\n});\n\nexport function useActivateEffects() {\n useAtomValue(addTokenListEffect);\n}\n\nconst allTokensListsFetchedSuccesfully = atom<boolean>((get) => {\n const tokenListUrls = get(tokenListUrlsAtom);\n if (tokenListUrls.length === 0) return false;\n const constructedTokensByURL = get(constructedTokensByURLAtom);\n return tokenListUrls.every(\n (url) => constructedTokensByURL[url] !== undefined\n );\n});\n\nexport const useAllTokensListsFetched = () => {\n return useAtomValue(allTokensListsFetchedSuccesfully);\n};\n"],"mappings":";;;;;;;;AAYA,IAAMS,oBAAe,IAAIC,KAAa;AAEtC,eAAeC,EAAaC,GAAa;CAEvC,IAAIH,EAAaI,IAAID,EAAI,EAAE;CAG3B,IAAME,IAAeZ,EAA4BU,EAAI,EAC/CG,IAAY,MAAMd,EAAYe,gBAAgBF,EAAa;CAMjE,AAHAL,EAAaQ,IAAIL,EAAI,EAGjBG,GAAWG,aAAWlB,EAAWmB,IAAIf,GAAmB,CAACW,EAAU,CAAC;;AAG1E,IAAMK,IAAqBjB,GAAYkB,MAAQ;CAC7CA,EAAIf,EAAkB,CAACgB,QAAQX,EAAa;EAC5C;AAEF,SAAOY,IAAA;CACLhB,EAAaa,EAAmB;;AAGlC,IAAMI,IAAmChB,GAAea,MAAQ;CAC9D,IAAMI,IAAgBJ,EAAIf,EAAkB;CAC5C,IAAImB,EAAcC,WAAW,GAAG,OAAO;CACvC,IAAMC,IAAyBN,EAAIhB,EAA2B;CAC9D,OAAOoB,EAAcG,OAClBhB,MAAQe,EAAuBf,OAASiB,KAAAA,EAC1C;EACD,EAEWC,UACJvB,EAAaiB,EAAiC"}
@@ -4,7 +4,7 @@ export declare const tokenListUrlsAtom: import('jotai').Atom<string[]>;
4
4
  Enabled and default token list URLs by chain ID,
5
5
  taking into account any configured lists in the widget config.
6
6
  **/
7
- export declare const enabledTokenURLSAtom: import('jotai').Atom<{
7
+ export declare const enabledAndDefaultTokenURLSAtom: import('jotai').Atom<{
8
8
  1: {
9
9
  all: string[];
10
10
  enabled: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"tokenListsStateAtom.d.ts","sourceRoot":"","sources":["../../../../src/tokens/lists/state/tokenListsStateAtom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAWrD,eAAO,MAAM,iBAAiB,gCAK5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsB/B,CAAC;AAEH;;IAEI;AACJ,eAAO,MAAM,6BAA6B;;CAAkC,CAAC;AAE7E;;GAEG;AACH,eAAO,MAAM,0BAA0B,6CASrC,CAAC"}
1
+ {"version":3,"file":"tokenListsStateAtom.d.ts","sourceRoot":"","sources":["../../../../src/tokens/lists/state/tokenListsStateAtom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAyBrD,eAAO,MAAM,iBAAiB,gCAQ5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBzC,CAAC;AAEH;;IAEI;AACJ,eAAO,MAAM,6BAA6B;;CAAkC,CAAC;AAE7E;;GAEG;AACH,eAAO,MAAM,0BAA0B,6CASrC,CAAC"}
@@ -1,30 +1,34 @@
1
- import { emptyArray as e } from "../../../lib/constants/index.js";
2
- import { isValidUrl as t } from "../../../lib/utils/index.js";
1
+ import { isValidUrl as e } from "../../../lib/utils/index.js";
2
+ import { tokenListsAtom as t } from "../../../core/state/configAtom.js";
3
3
  import { isSupportedChainId as n } from "../../../lib/web3/wagmi/utils.js";
4
- import { allEnabledChainsAtom as r } from "../../../core/state/enabledChainsAtom.js";
5
- import { gatherEmptyTokenUrlsMappingByChainId as i } from "../utils.js";
6
- import { enabledTokenListsAtom as a } from "../../../core/state/tokenListsAtom.js";
7
- import { atom as o } from "jotai";
4
+ import { gatherEnabledAndDefaultUrlsMappingByChainId as r } from "../utils.js";
5
+ import { allEnabledChainsAtom as i } from "../../../core/state/enabledChainsAtom.js";
6
+ import { atom as a } from "jotai";
8
7
  //#region src/tokens/lists/state/tokenListsStateAtom.ts
9
- var s = (e) => Array.from(new Set(e)).filter(t), c = o((t) => {
10
- let n = t(a);
11
- return n.length === 0 ? e : s(n);
12
- }), l = o((e) => {
13
- let o = e(a), s = i(e(r));
14
- return o.length === 0 || o.forEach((e) => {
8
+ var o = a((e) => r(e(i))), s = a((t) => {
9
+ let n = t(o);
10
+ return Object.values(n).flatMap((e) => e.all).filter(e);
11
+ }), c = (t) => Array.from(new Set(t)).filter(e), l = a((e) => {
12
+ let n = e(t);
13
+ return n.length === 0 ? c(e(s)) : c(n);
14
+ }), u = a((r) => {
15
+ let i = r(t), a = r(o);
16
+ if (i.length === 0) return a;
17
+ let s = { ...a };
18
+ return i.forEach((t) => {
15
19
  Object.keys(s).forEach((r) => {
16
20
  let i = Number(r);
17
- n(i) && t(e) && (s[i].all.includes(e) || s[i].all.push(e), s[i].enabled.includes(e) || s[i].enabled.push(e));
21
+ n(i) && e(t) && (s[i].all.includes(t) || s[i].all.push(t), s[i].enabled.includes(t) || s[i].enabled.push(t));
18
22
  });
19
23
  }), s;
20
- }), u = o({}), d = o((e) => {
21
- let t = e(u);
22
- return e(c).reduce((e, n) => {
24
+ }), d = a({}), f = a((e) => {
25
+ let t = e(d);
26
+ return e(l).reduce((e, n) => {
23
27
  let r = t[n];
24
28
  return r && (e[n] = r), e;
25
29
  }, {});
26
30
  });
27
31
  //#endregion
28
- export { u as allConstructedTokensByURLAtom, d as constructedTokensByURLAtom, l as enabledTokenURLSAtom, c as tokenListUrlsAtom };
32
+ export { d as allConstructedTokensByURLAtom, f as constructedTokensByURLAtom, u as enabledAndDefaultTokenURLSAtom, l as tokenListUrlsAtom };
29
33
 
30
34
  //# sourceMappingURL=tokenListsStateAtom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenListsStateAtom.js","names":["ConstructedListsByURL","atom","isValidUrl","isSupportedChainId","allEnabledChainsAtom","gatherEmptyTokenUrlsMappingByChainId","emptyArray","enabledTokenListsAtom","getUniqueValidUrls","urls","Array","from","Set","filter","tokenListUrlsAtom","get","enabledLists","length","enabledTokenURLSAtom","allEnabledChains","result","forEach","url","Object","keys","_chainId","chainId","Number","all","includes","push","enabled","allConstructedTokensByURLAtom","constructedTokensByURLAtom","constructedLists","tokenListUrls","reduce","acc","tokens"],"sources":["../../../../src/tokens/lists/state/tokenListsStateAtom.ts"],"sourcesContent":["import type { ConstructedListsByURL } from \"./types\";\nimport { atom } from \"jotai\";\nimport { isValidUrl } from \"@/lib/utils\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport { allEnabledChainsAtom } from \"@/core/state/enabledChainsAtom\";\nimport { gatherEmptyTokenUrlsMappingByChainId } from \"../utils\";\nimport { emptyArray } from \"@/lib/constants\";\nimport { enabledTokenListsAtom } from \"@/core/state/tokenListsAtom\";\n\nconst getUniqueValidUrls = (urls: string[]) =>\n Array.from(new Set(urls)).filter(isValidUrl);\nexport const tokenListUrlsAtom = atom<string[]>((get) => {\n const enabledLists = get(enabledTokenListsAtom);\n if (enabledLists.length === 0) return emptyArray;\n\n return getUniqueValidUrls(enabledLists);\n});\n\n/** \n Enabled and default token list URLs by chain ID,\n taking into account any configured lists in the widget config. \n**/\nexport const enabledTokenURLSAtom = atom((get) => {\n const enabledLists = get(enabledTokenListsAtom);\n\n const allEnabledChains = get(allEnabledChainsAtom);\n const result = gatherEmptyTokenUrlsMappingByChainId(allEnabledChains);\n\n if (enabledLists.length === 0) return result;\n\n enabledLists.forEach((url) => {\n Object.keys(result).forEach((_chainId) => {\n const chainId = Number(_chainId);\n if (!isSupportedChainId(chainId)) return; // Object.keys destroys types\n if (!isValidUrl(url)) return; // skip if provided URL is not valid\n\n // put URL from config into both enabled and all lists\n if (!result[chainId].all.includes(url)) result[chainId].all.push(url);\n if (!result[chainId].enabled.includes(url))\n result[chainId].enabled.push(url);\n });\n });\n\n return result;\n});\n\n/**\n All constructed tokens from all fetched lists during the widget lifecycle.\n **/\nexport const allConstructedTokensByURLAtom = atom<ConstructedListsByURL>({});\n\n/**\n Constructed tokens from currently enabled lists only (from config or defaults).\n**/\nexport const constructedTokensByURLAtom = atom<ConstructedListsByURL>((get) => {\n const constructedLists = get(allConstructedTokensByURLAtom);\n const tokenListUrls = get(tokenListUrlsAtom);\n\n return tokenListUrls.reduce<ConstructedListsByURL>((acc, url) => {\n const tokens = constructedLists[url];\n if (tokens) acc[url] = tokens;\n return acc;\n }, {});\n});\n"],"mappings":";;;;;;;;AASA,IAAMQ,KAAsBC,MAC1BC,MAAMC,KAAK,IAAIC,IAAIH,EAAK,CAAC,CAACI,OAAOX,EAAW,EACjCY,IAAoBb,GAAgBc,MAAQ;CACvD,IAAMC,IAAeD,EAAIR,EAAsB;CAG/C,OAFIS,EAAaC,WAAW,IAAUX,IAE/BE,EAAmBQ,EAAa;EACvC,EAMWE,IAAuBjB,GAAMc,MAAQ;CAChD,IAAMC,IAAeD,EAAIR,EAAsB,EAGzCa,IAASf,EADUU,EAAIX,EACuBe,CAAiB;CAiBrE,OAfIH,EAAaC,WAAW,KAE5BD,EAAaK,SAASC,MAAQ;EAC5BC,OAAOC,KAAKJ,EAAO,CAACC,SAASI,MAAa;GACxC,IAAMC,IAAUC,OAAOF,EAAS;GAC3BtB,EAAmBuB,EAAQ,IAC3BxB,EAAWoB,EAAI,KAGfF,EAAOM,GAASE,IAAIC,SAASP,EAAI,IAAEF,EAAOM,GAASE,IAAIE,KAAKR,EAAI,EAChEF,EAAOM,GAASK,QAAQF,SAASP,EAAI,IACxCF,EAAOM,GAASK,QAAQD,KAAKR,EAAI;IACnC;GACF,EAboCF;EAgBtC,EAKWY,IAAgC/B,EAA4B,EAAE,CAAC,EAK/DgC,IAA6BhC,GAA6Bc,MAAQ;CAC7E,IAAMmB,IAAmBnB,EAAIiB,EAA8B;CAG3D,OAFsBjB,EAAID,EAEnBqB,CAAcC,QAA+BC,GAAKf,MAAQ;EAC/D,IAAMgB,IAASJ,EAAiBZ;EAEhC,OADIgB,MAAQD,EAAIf,KAAOgB,IAChBD;IACN,EAAE,CAAC;EACN"}
1
+ {"version":3,"file":"tokenListsStateAtom.js","names":["ConstructedListsByURL","atom","tokenListsAtom","isValidUrl","isSupportedChainId","allEnabledChainsAtom","gatherEnabledAndDefaultUrlsMappingByChainId","enabledAndDefaultUrlsMappingAtom","get","allEnabledChains","defaultListsAtom","enabledAndDefaultTokenURLS","Object","values","flatMap","lists","all","filter","getUniqueValidUrls","urls","Array","from","Set","tokenListUrlsAtom","configuredLists","length","defaultLists","enabledAndDefaultTokenURLSAtom","enabledAndDefault","forEach","url","keys","_chainId","chainId","Number","includes","push","enabled","allConstructedTokensByURLAtom","constructedTokensByURLAtom","constructedLists","tokenListUrls","reduce","acc","tokens"],"sources":["../../../../src/tokens/lists/state/tokenListsStateAtom.ts"],"sourcesContent":["import type { ConstructedListsByURL } from \"./types\";\nimport { atom } from \"jotai\";\nimport { tokenListsAtom } from \"@/core/state/configAtom\";\nimport { isValidUrl } from \"@/lib/utils\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport { allEnabledChainsAtom } from \"@/core/state/enabledChainsAtom\";\nimport { gatherEnabledAndDefaultUrlsMappingByChainId } from \"../utils\";\n\nconst enabledAndDefaultUrlsMappingAtom = atom((get) => {\n const allEnabledChains = get(allEnabledChainsAtom);\n return gatherEnabledAndDefaultUrlsMappingByChainId(allEnabledChains);\n});\n\n/**\n * Returns default token list URLs available for enabled chains.\n */\nconst defaultListsAtom = atom<string[]>((get) => {\n const enabledAndDefaultTokenURLS = get(enabledAndDefaultUrlsMappingAtom);\n return Object.values(enabledAndDefaultTokenURLS)\n .flatMap((lists) => lists.all)\n .filter(isValidUrl);\n});\n\nconst getUniqueValidUrls = (urls: string[]) =>\n Array.from(new Set(urls)).filter(isValidUrl);\nexport const tokenListUrlsAtom = atom<string[]>((get) => {\n const configuredLists = get(tokenListsAtom);\n if (configuredLists.length === 0) {\n const defaultLists = get(defaultListsAtom);\n return getUniqueValidUrls(defaultLists);\n }\n\n return getUniqueValidUrls(configuredLists);\n});\n\n/** \n Enabled and default token list URLs by chain ID,\n taking into account any configured lists in the widget config. \n**/\nexport const enabledAndDefaultTokenURLSAtom = atom((get) => {\n const configuredLists = get(tokenListsAtom);\n\n const enabledAndDefaultTokenURLS = get(enabledAndDefaultUrlsMappingAtom);\n if (configuredLists.length === 0) return enabledAndDefaultTokenURLS;\n\n const enabledAndDefault = { ...enabledAndDefaultTokenURLS };\n configuredLists.forEach((url) => {\n Object.keys(enabledAndDefault).forEach((_chainId) => {\n const chainId = Number(_chainId);\n if (!isSupportedChainId(chainId)) return; // Object.keys destroys types\n if (!isValidUrl(url)) return; // skip if provided URL is not valid\n\n // put URL from config into both enabled and all lists\n if (!enabledAndDefault[chainId].all.includes(url))\n enabledAndDefault[chainId].all.push(url);\n if (!enabledAndDefault[chainId].enabled.includes(url))\n enabledAndDefault[chainId].enabled.push(url);\n });\n });\n\n return enabledAndDefault;\n});\n\n/**\n All constructed tokens from all fetched lists during the widget lifecycle.\n **/\nexport const allConstructedTokensByURLAtom = atom<ConstructedListsByURL>({});\n\n/**\n Constructed tokens from currently enabled lists only (from config or defaults).\n**/\nexport const constructedTokensByURLAtom = atom<ConstructedListsByURL>((get) => {\n const constructedLists = get(allConstructedTokensByURLAtom);\n const tokenListUrls = get(tokenListUrlsAtom);\n\n return tokenListUrls.reduce<ConstructedListsByURL>((acc, url) => {\n const tokens = constructedLists[url];\n if (tokens) acc[url] = tokens;\n return acc;\n }, {});\n});\n"],"mappings":";;;;;;;AAQA,IAAMO,IAAmCN,GAAMO,MAEtCF,EADkBE,EAAIH,EACsBI,CAAiB,CACpE,EAKIC,IAAmBT,GAAgBO,MAAQ;CAC/C,IAAMG,IAA6BH,EAAID,EAAiC;CACxE,OAAOK,OAAOC,OAAOF,EAA2B,CAC7CG,SAASC,MAAUA,EAAMC,IAAI,CAC7BC,OAAOd,EAAW;EACrB,EAEIe,KAAsBC,MAC1BC,MAAMC,KAAK,IAAIC,IAAIH,EAAK,CAAC,CAACF,OAAOd,EAAW,EACjCoB,IAAoBtB,GAAgBO,MAAQ;CACvD,IAAMgB,IAAkBhB,EAAIN,EAAe;CAM3C,OALIsB,EAAgBC,WAAW,IAEtBP,EADcV,EAAIE,EACCgB,CAAa,GAGlCR,EAAmBM,EAAgB;EAC1C,EAMWG,IAAiC1B,GAAMO,MAAQ;CAC1D,IAAMgB,IAAkBhB,EAAIN,EAAe,EAErCS,IAA6BH,EAAID,EAAiC;CACxE,IAAIiB,EAAgBC,WAAW,GAAG,OAAOd;CAEzC,IAAMiB,IAAoB,EAAE,GAAGjB,GAA4B;CAe3D,OAdAa,EAAgBK,SAASC,MAAQ;EAC/BlB,OAAOmB,KAAKH,EAAkB,CAACC,SAASG,MAAa;GACnD,IAAMC,IAAUC,OAAOF,EAAS;GAC3B5B,EAAmB6B,EAAQ,IAC3B9B,EAAW2B,EAAI,KAGfF,EAAkBK,GAASjB,IAAImB,SAASL,EAAI,IAC/CF,EAAkBK,GAASjB,IAAIoB,KAAKN,EAAI,EACrCF,EAAkBK,GAASI,QAAQF,SAASL,EAAI,IACnDF,EAAkBK,GAASI,QAAQD,KAAKN,EAAI;IAC9C;GACF,EAEKF;EACP,EAKWU,IAAgCrC,EAA4B,EAAE,CAAC,EAK/DsC,IAA6BtC,GAA6BO,MAAQ;CAC7E,IAAMgC,IAAmBhC,EAAI8B,EAA8B;CAG3D,OAFsB9B,EAAIe,EAEnBkB,CAAcC,QAA+BC,GAAKb,MAAQ;EAC/D,IAAMc,IAASJ,EAAiBV;EAEhC,OADIc,MAAQD,EAAIb,KAAOc,IAChBD;IACN,EAAE,CAAC;EACN"}
@@ -1,4 +1,4 @@
1
- export interface TokenListDownloadData {
1
+ export interface BaseTokenListDownloadData {
2
2
  /**
3
3
  * Name of the file. The list is saved to `/assets/web/token-lists/${filename}.json`.
4
4
  */
@@ -8,10 +8,9 @@ export interface TokenListDownloadData {
8
8
  */
9
9
  url: string;
10
10
  /**
11
- * The chain where the majority of tokens belong (can be a number or "multi").
12
- * The list is used on this chain in the UI.
11
+ * The chains where the list is used in the UI.
13
12
  */
14
- chainId: number | "multi";
13
+ chainIds: number[];
15
14
  /**
16
15
  * Display name for the list in the UI.
17
16
  * Some token lists don't have a good name (e.g., DfynList.name = "Default List").
@@ -31,4 +30,7 @@ export interface TokenListDownloadData {
31
30
  */
32
31
  tags?: string[];
33
32
  }
33
+ export interface TokenListDownloadData extends Omit<BaseTokenListDownloadData, "chainIds"> {
34
+ chainId: number;
35
+ }
34
36
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;OAGG;IACH,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAE1B;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAGH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IAGH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,qBACf,SAAQ,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -1,6 +1,7 @@
1
1
  import { TokenListUnavailable } from '../types';
2
+ export declare const getTokenListPlaceholderName: (listUrl: string, chainId: number) => string | undefined;
2
3
  export declare const constructPlaceholderData: (listURL: string) => TokenListUnavailable;
3
- export declare const gatherEmptyTokenUrlsMappingByChainId: <ChainID extends number>(chainIds: ChainID[]) => { [K in ChainID]: {
4
+ export declare const gatherEnabledAndDefaultUrlsMappingByChainId: <ChainID extends number>(chainIds: ChainID[]) => { [K in ChainID]: {
4
5
  all: string[];
5
6
  enabled: string[];
6
7
  }; };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,eAAO,MAAM,wBAAwB,GACnC,SAAS,MAAM,KACd,oBAMF,CAAC;AAEF,eAAO,MAAM,oCAAoC,GAAI,OAAO,SAAS,MAAM,EACzE,UAAU,OAAO,EAAE,KAClB,GAAG,CAAC,IAAI,OAAO,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAMxD,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tokens/lists/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAGrD,eAAO,MAAM,2BAA2B,GACtC,SAAS,MAAM,EACf,SAAS,MAAM,KACd,MAAM,GAAG,SAAkE,CAAC;AAE/E,eAAO,MAAM,wBAAwB,GACnC,SAAS,MAAM,KACd,oBAMF,CAAC;AAEF,eAAO,MAAM,2CAA2C,GACtD,OAAO,SAAS,MAAM,EAEtB,UAAU,OAAO,EAAE,KAClB,GAAG,CAAC,IAAI,OAAO,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAMxD,CAAC"}
@@ -1,14 +1,15 @@
1
1
  import { gatherObjectsByProp as e } from "../../lib/utils/index.js";
2
+ import { chainId2TokenListURLs as t, urlChain2TokenList as n } from "./constants.js";
2
3
  //#region src/tokens/lists/utils.ts
3
- var t = (e) => ({
4
+ var r = (e, t) => n[`${e}@${t}`]?.listName, i = (e) => ({
4
5
  url: e,
5
6
  available: !1,
6
- name: void 0
7
- }), n = (t) => e(t, (e) => String(e), () => ({
7
+ name: r(e, 0)
8
+ }), a = (n) => e(n, (e) => String(e), (e) => t[e] || {
8
9
  enabled: [],
9
10
  all: []
10
- }));
11
+ });
11
12
  //#endregion
12
- export { t as constructPlaceholderData, n as gatherEmptyTokenUrlsMappingByChainId };
13
+ export { i as constructPlaceholderData, a as gatherEnabledAndDefaultUrlsMappingByChainId };
13
14
 
14
15
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["gatherObjectsByProp","TokenListUnavailable","constructPlaceholderData","listURL","url","available","name","undefined","gatherEmptyTokenUrlsMappingByChainId","chainIds","ChainID","all","enabled","chainId","String"],"sources":["../../../src/tokens/lists/utils.ts"],"sourcesContent":["import { gatherObjectsByProp } from \"@/lib/utils\";\nimport type { TokenListUnavailable } from \"../types\";\n\nexport const constructPlaceholderData = (\n listURL: string\n): TokenListUnavailable => {\n return {\n url: listURL,\n available: false,\n name: undefined,\n };\n};\n\nexport const gatherEmptyTokenUrlsMappingByChainId = <ChainID extends number>(\n chainIds: ChainID[]\n): { [K in ChainID]: { all: string[]; enabled: string[] } } => {\n return gatherObjectsByProp(\n chainIds,\n (chainId) => String(chainId),\n () => ({ enabled: [], all: [] })\n );\n};\n"],"mappings":";;AAGA,IAAaE,KACXC,OAEO;CACLC,KAAKD;CACLE,WAAW;CACXC,MAAMC,KAAAA;CACP,GAGUC,KACXC,MAEOT,EACLS,IACCI,MAAYC,OAAOD,EAAQ,SACrB;CAAED,SAAS,EAAE;CAAED,KAAK,EAAA;CAAI,EAChC"}
1
+ {"version":3,"file":"utils.js","names":["gatherObjectsByProp","TokenListUnavailable","chainId2TokenListURLs","urlChain2TokenList","getTokenListPlaceholderName","listUrl","chainId","listName","constructPlaceholderData","listURL","url","available","name","gatherEnabledAndDefaultUrlsMappingByChainId","chainIds","ChainID","all","enabled","String"],"sources":["../../../src/tokens/lists/utils.ts"],"sourcesContent":["import { gatherObjectsByProp } from \"@/lib/utils\";\nimport type { TokenListUnavailable } from \"../types\";\nimport { chainId2TokenListURLs, urlChain2TokenList } from \"./constants\";\n\nexport const getTokenListPlaceholderName = (\n listUrl: string,\n chainId: number\n): string | undefined => urlChain2TokenList[`${listUrl}@${chainId}`]?.listName;\n\nexport const constructPlaceholderData = (\n listURL: string\n): TokenListUnavailable => {\n return {\n url: listURL,\n available: false,\n name: getTokenListPlaceholderName(listURL, 0),\n };\n};\n\nexport const gatherEnabledAndDefaultUrlsMappingByChainId = <\n ChainID extends number,\n>(\n chainIds: ChainID[]\n): { [K in ChainID]: { all: string[]; enabled: string[] } } => {\n return gatherObjectsByProp(\n chainIds,\n (chainId) => String(chainId),\n (chainId) => chainId2TokenListURLs[chainId] || { enabled: [], all: [] }\n );\n};\n"],"mappings":";;;AAIA,IAAaI,KACXC,GACAC,MACuBH,EAAmB,GAAGE,EAAO,GAAIC,MAAYC,UAEzDC,KACXC,OAEO;CACLC,KAAKD;CACLE,WAAW;CACXC,MAAMR,EAA4BK,GAAS,EAAC;CAC7C,GAGUI,KAGXC,MAEOd,EACLc,IACCR,MAAYY,OAAOZ,EAAQ,GAC3BA,MAAYJ,EAAsBI,MAAY;CAAEW,SAAS,EAAE;CAAED,KAAK,EAAA;CACrE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/tokens/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAQhD,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAAI;IAC3C,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;CACzD,CAAC;AAiBF,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EACpE,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,CAAC,EAAE,CAAC,6GAaR;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC1E,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,CAAC,GACN,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CA6BlD;AAGD,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EACvE,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,CAAC,GACN,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAOlD;AAED,eAAO,MAAM,4BAA4B,GAAI,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC3E,UAAU,MAAM,EAAE,EAClB,MAAM,CAAC,KACN,mBAAmB,CAAC,CAAC,CAAC,EAkBxB,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC5D,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,CAAC,EAAE,CAAC,GACN,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAOvB;AAED,wBAAgB,kBAAkB,IAAI,gBAAgB,EAAE,CAIvD"}
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../src/tokens/queries.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAShD,KAAK,mBAAmB,CAAC,CAAC,SAAS,MAAM,IAAI;IAC3C,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;CACzD,CAAC;AAiBF,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EACpE,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,CAAC,EAAE,CAAC,6GAaR;AAED,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC1E,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,CAAC,GACN,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CA6BlD;AAGD,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EACvE,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,CAAC,GACN,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAOlD;AAED,eAAO,MAAM,4BAA4B,GAAI,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC3E,UAAU,MAAM,EAAE,EAClB,MAAM,CAAC,KACN,mBAAmB,CAAC,CAAC,CAAC,EAkBxB,CAAC;AAEF,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,GAAG,KAAK,EAC5D,QAAQ,EAAE,MAAM,EAAE,EAClB,GAAG,CAAC,EAAE,CAAC,GACN,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAOvB;AAED,wBAAgB,kBAAkB,IAAI,gBAAgB,EAAE,CASvD"}
@@ -1,26 +1,27 @@
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 { 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";
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";
7
7
  import { overrideTokenList as o } from "./overrides.js";
8
- import { c as s } from "react-compiler-runtime";
8
+ import { tokenListUrlsAtom as s } from "./lists/state/tokenListsStateAtom.js";
9
+ import { c } from "react-compiler-runtime";
9
10
  import "react";
10
- import { replaceEqualDeep as c, useQueries as l } from "@tanstack/react-query";
11
- import { versionComparator as u } from "@uniswap/token-lists";
11
+ import { replaceEqualDeep as l, useQueries as u } from "@tanstack/react-query";
12
+ import { versionComparator as d } from "@uniswap/token-lists";
12
13
  //#region src/tokens/queries.ts
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;
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;
15
16
  }
16
- function f(e, n) {
17
- return Array.from(new Set(e)).filter(t).map((e) => m(e, n));
17
+ function p(e, n) {
18
+ return Array.from(new Set(e)).filter(t).map((e) => h(e, n));
18
19
  }
19
- function p(e, t) {
20
+ function m(e, t) {
20
21
  return {
21
22
  queryKey: [n, e],
22
23
  queryFn: async ({ signal: n }) => {
23
- let r = o(await a(e, n), e);
24
+ let r = o(await i(e, n), e);
24
25
  return {
25
26
  url: e,
26
27
  name: r.name,
@@ -31,43 +32,44 @@ function p(e, t) {
31
32
  },
32
33
  staleTime: Infinity,
33
34
  gcTime: Infinity,
34
- structuralSharing: (e, t) => d(e, t) ? e : c(e, t)
35
+ structuralSharing: (e, t) => f(e, t) ? e : l(e, t)
35
36
  };
36
37
  }
37
- function m(e, t) {
38
+ function h(e, t) {
38
39
  return {
39
- ...p(e, t),
40
+ ...m(e, t),
40
41
  notifyOnChangeProps: ["data"],
41
- placeholderData: r(e),
42
+ placeholderData: a(e),
42
43
  refetchOnMount: !1
43
44
  };
44
45
  }
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];
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];
48
49
  let i;
49
50
  n[3] === r ? i = n[4] : (i = { queries: r }, n[3] = r, n[4] = i);
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;
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;
52
53
  };
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;
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;
56
57
  }
57
- function _(e) {
58
+ function v(e) {
58
59
  let { dataOrPlaceholder: t } = e;
59
60
  return t;
60
61
  }
61
- function v() {
62
- return g(e(i));
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);
63
65
  }
64
- function y(e) {
66
+ function b(e) {
65
67
  return {
66
- dataOrPlaceholder: e.data || r(e.error?.config?.url || ""),
68
+ dataOrPlaceholder: e.data || a(e.error?.config?.url || ""),
67
69
  result: e
68
70
  };
69
71
  }
70
72
  //#endregion
71
- export { p as produceSingleQueryOptionMin, v as useFetchTokenLists };
73
+ export { m as produceSingleQueryOptionMin, y as useFetchTokenLists };
72
74
 
73
75
  //# sourceMappingURL=queries.js.map
@@ -1 +1 @@
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
+ {"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,3 +1,6 @@
1
+ import { ChainTokensSet, TokenListFetched } from '../types';
1
2
  import { SupportedChainId } from '../../lib/web3/wagmi/types';
2
- export declare function useIsAddressStablecoin(addresses: (string | undefined)[], chainId: SupportedChainId): boolean;
3
+ export declare function useStableCoinTokenLists(): TokenListFetched<"stablecoin">[];
4
+ export declare function useStablecoinSetsByChain(): ChainTokensSet;
5
+ export declare function useIsAddressStablecoin(addresses: (string | undefined)[], chainId?: SupportedChainId): boolean;
3
6
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
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
+ {"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;AAGjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,wBAAgB,uBAAuB,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAE1E;AAGD,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAID,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,EACjC,OAAO,CAAC,EAAE,gBAAgB,GACzB,OAAO,CAUT"}
@@ -1,15 +1,14 @@
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";
1
+ import { useAllTokensMap as e } from "../hooks.js";
2
+ import { c as t } from "react-compiler-runtime";
3
+ import "react";
4
+ import { isAddress as n } from "viem";
4
5
  //#region src/tokens/stabeCoins/hooks.ts
5
6
  var r = "paraswap_community_stablecoin_lists";
6
7
  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) {
8
+ let o = t(5), s = e(a), c;
9
+ if (o[0] !== i || o[1] !== s) {
11
10
  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;
11
+ o[3] === s ? e = o[4] : (e = (e) => !e || !n(e) ? !1 : s[e.toLowerCase()]?.sources?.includes(r) ?? !1, o[3] = s, o[4] = e), c = i.every(e), o[0] = i, o[1] = s, o[2] = c;
13
12
  } else c = o[2];
14
13
  return c;
15
14
  }
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"hooks.js","names":["useMemo","stableCoinsTokenLists","useFetchLists","ChainTokensSet","TokenListFetched","tokenlistsToSetsByChain","useAllTokensMap","SupportedChainId","isAddress","Address","useStableCoinTokenLists","useStablecoinSetsByChain","$","_c","lists","t0","STABLECOIN_SOURCE","useIsAddressStablecoin","addresses","chainId","allTokensMap","t1","address","token","toLowerCase","Lowercase","sources","includes","every"],"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 { tokenlistsToSetsByChain } from \"../utils/sets\";\nimport { useAllTokensMap } from \"../hooks\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { isAddress, type Address } from \"viem\";\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\nconst STABLECOIN_SOURCE = \"paraswap_community_stablecoin_lists\";\n\nexport function useIsAddressStablecoin(\n addresses: (string | undefined)[],\n chainId?: SupportedChainId\n): boolean {\n const allTokensMap = useAllTokensMap(chainId);\n\n return addresses.every((address) => {\n if (!address || !isAddress(address)) return false;\n\n const token = allTokensMap[address.toLowerCase() as Lowercase<Address>];\n\n return token?.sources?.includes(STABLECOIN_SOURCE) ?? false;\n });\n}\n"],"mappings":";;;;;AAoBA,IAAMgB,IAAoB;AAE1B,SAAOC,EAAAC,GAAAC,GAAA;CAAA,IAAAP,IAAAC,EAAA,EAAA,EAILO,IAAqBd,EAAgBa,EAAQ,EAACJ;CAAA,IAAAH,EAAA,OAAAM,KAAAN,EAAA,OAAAQ,GAAA;EAAA,IAAAC;EAQ5CT,AAR4CA,EAAA,OAAAQ,IAQ7CC,IAAAT,EAAA,MANsBS,KAAAC,MACjB,CAACA,KAAD,CAAad,EAAUc,EAAQ,GAAS,KAE9BF,EAAaE,EAAOE,aAAc,GAEpCE,SAAmBC,SAACX,EAA2B,IAApD,IACRJ,EAAA,KAAAQ,GAAAR,EAAA,KAAAS,IANMN,IAAAG,EAASU,MAAOP,EAMrB,EAAAT,EAAA,KAAAM,GAAAN,EAAA,KAAAQ,GAAAR,EAAA,KAAAG;QAAAA,IAAAH,EAAA;CAAA,OANKG"}
@@ -0,0 +1,2 @@
1
+ export declare const stableCoinsTokenLists: string[];
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tokens/stabeCoins/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,qBAAqB,UAET,CAAC"}
@@ -0,0 +1,6 @@
1
+ import e from "../lists/lists.js";
2
+ var t = e.filter((e) => e.tags?.includes("stablecoin")).map((e) => e.url);
3
+ //#endregion
4
+ export { t as stableCoinsTokenLists };
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_TokenLists","BaseTokenListDownloadData","TokenLists","stableCoinsTokenLists","filter","list","tags","includes","map","url"],"sources":["../../../src/tokens/stabeCoins/index.ts"],"sourcesContent":["import _TokenLists from \"../lists/lists.json\";\nimport type { BaseTokenListDownloadData } from \"../lists/types\";\n\nconst TokenLists = _TokenLists as BaseTokenListDownloadData[];\n\n// one ParaSwap Community Stablecoin multichain list for now\nexport const stableCoinsTokenLists = TokenLists.filter((list) =>\n list.tags?.includes(\"stablecoin\")\n).map((list) => list.url);\n"],"mappings":";AAMA,IAAaG,IAAwBD,EAAWE,QAAQC,MACtDA,EAAKC,MAAMC,SAAS,aACtB,CAAC,CAACC,KAAKH,MAASA,EAAKI,IAAI"}
@@ -5,6 +5,7 @@ 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;
8
9
  export declare const addImportedTokenAtom: import('jotai').WritableAtom<null, [{
9
10
  newToken: TokenWithSymbol;
10
11
  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;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
+ {"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"}
@@ -65,7 +65,10 @@ function u(e) {
65
65
  imported: e.imported,
66
66
  name: e.name,
67
67
  fromList: e.fromList,
68
- fromListURL: e.fromListURL
68
+ fromListURL: e.fromListURL,
69
+ sources: e.sources,
70
+ tags: e.tags,
71
+ categories: e.categories
69
72
  };
70
73
  }
71
74
  //#endregion
@@ -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","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
+ {"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","tags","categories"],"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 sources: token.sources,\n tags: token.tags,\n categories: token.categories,\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;EACnBC,SAASnB,EAAMmB;EACfC,MAAMpB,EAAMoB;EACZC,YAAYrB,EAAMqB;EACnB"}
@@ -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;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAS5D,eAAO,MAAM,oBAAoB,2EA6C/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;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK5D,eAAO,MAAM,oBAAoB,2EA2D/B,CAAC"}