@b3dotfun/sdk 0.1.70-alpha.2 → 0.1.70-alpha.21

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 (355) hide show
  1. package/README.md +3 -3
  2. package/constants/chains/b3Chain.js +3 -1
  3. package/dist/cjs/anyspend/constants/rpc.d.ts +3 -1
  4. package/dist/cjs/anyspend/constants/rpc.js +6 -2
  5. package/dist/cjs/anyspend/react/components/AnySpend.d.ts +9 -1
  6. package/dist/cjs/anyspend/react/components/AnySpend.js +123 -46
  7. package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +8 -10
  8. package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +15 -3
  9. package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +78 -25
  10. package/dist/cjs/anyspend/react/components/AnySpendStakeB3.js +32 -13
  11. package/dist/cjs/anyspend/react/components/AnySpendStakeB3ExactIn.js +32 -10
  12. package/dist/cjs/anyspend/react/components/QRDeposit.d.ts +22 -3
  13. package/dist/cjs/anyspend/react/components/QRDeposit.js +25 -16
  14. package/dist/cjs/anyspend/react/components/checkout/CryptoPayPanel.js +18 -11
  15. package/dist/cjs/anyspend/react/components/common/PureTransferView.d.ts +30 -0
  16. package/dist/cjs/anyspend/react/components/common/PureTransferView.js +64 -0
  17. package/dist/cjs/anyspend/react/components/common/TokenBalance.js +4 -5
  18. package/dist/cjs/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +3 -3
  19. package/dist/cjs/anyspend/react/hooks/useSigMint.d.ts +1 -1
  20. package/dist/cjs/anyspend/utils/address.d.ts +2 -1
  21. package/dist/cjs/anyspend/utils/address.js +12 -9
  22. package/dist/cjs/anyspend/utils/chain.d.ts +84 -1
  23. package/dist/cjs/anyspend/utils/chain.js +73 -3
  24. package/dist/cjs/anyspend/utils/token.d.ts +2 -0
  25. package/dist/cjs/anyspend/utils/token.js +15 -1
  26. package/dist/cjs/app.shared.d.ts +9 -1
  27. package/dist/cjs/app.shared.js +19 -0
  28. package/dist/cjs/global-account/app.native.d.ts +1 -1
  29. package/dist/cjs/global-account/better-auth-client.d.ts +3314 -36
  30. package/dist/cjs/global-account/better-auth-client.js +28 -3
  31. package/dist/cjs/global-account/bsmnt.d.ts +2 -2
  32. package/dist/cjs/global-account/bsmnt.native.d.ts +1 -1
  33. package/dist/cjs/global-account/client-manager.d.ts +7 -5
  34. package/dist/cjs/global-account/client-manager.js +51 -4
  35. package/dist/cjs/global-account/react/components/AvatarEditor/AvatarEditor.js +6 -11
  36. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +11 -0
  37. package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.js +12 -0
  38. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +12 -2
  39. package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +25 -3
  40. package/dist/cjs/global-account/react/components/B3Provider/BetterAuthProvider.js +45 -4
  41. package/dist/cjs/global-account/react/components/B3Provider/RelayKitProviderWrapper.d.ts +1 -2
  42. package/dist/cjs/global-account/react/components/B3Provider/RelayKitProviderWrapper.js +11 -5
  43. package/dist/cjs/global-account/react/components/ManageAccount/ContentTokens.js +23 -15
  44. package/dist/cjs/global-account/react/components/ManageAccount/NFTContent.js +2 -2
  45. package/dist/cjs/global-account/react/components/ManageAccount/ProfileSection.js +8 -6
  46. package/dist/cjs/global-account/react/components/ManageAccount/SettingsProfileCard.js +1 -1
  47. package/dist/cjs/global-account/react/components/ManageAccount/TokenContent.js +17 -8
  48. package/dist/cjs/global-account/react/components/Send/Send.js +15 -11
  49. package/dist/cjs/global-account/react/components/SignInWithB3/BetterAuthSignIn.js +3 -1
  50. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +1 -5
  51. package/dist/cjs/global-account/react/components/SignInWithB3/components/AuthButton.js +2 -1
  52. package/dist/cjs/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.js +1 -0
  53. package/dist/cjs/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +3 -2
  54. package/dist/cjs/global-account/react/components/SignInWithB3/utils/signInUtils.js +3 -3
  55. package/dist/cjs/global-account/react/components/index.d.ts +1 -1
  56. package/dist/cjs/global-account/react/components/index.js +3 -3
  57. package/dist/cjs/global-account/react/hooks/index.d.ts +2 -3
  58. package/dist/cjs/global-account/react/hooks/index.js +7 -10
  59. package/dist/cjs/global-account/react/hooks/useAuth.d.ts +5 -4
  60. package/dist/cjs/global-account/react/hooks/useAuth.js +1 -0
  61. package/dist/cjs/global-account/react/hooks/useAuthentication.d.ts +3 -2
  62. package/dist/cjs/global-account/react/hooks/useAuthentication.js +2 -1
  63. package/dist/cjs/global-account/react/hooks/useBetterAuth.d.ts +1657 -22
  64. package/dist/cjs/global-account/react/hooks/useBetterAuth.js +7 -7
  65. package/dist/cjs/global-account/react/hooks/useClient.d.ts +3 -3
  66. package/dist/cjs/global-account/react/hooks/useFirstEOA.d.ts +4 -7666
  67. package/dist/cjs/global-account/react/hooks/useFirstEOA.js +1 -0
  68. package/dist/cjs/global-account/react/hooks/useNativeBalance.js +2 -2
  69. package/dist/cjs/global-account/react/hooks/usePortfolioBalance.d.ts +15 -0
  70. package/dist/cjs/global-account/react/hooks/usePortfolioBalance.js +76 -0
  71. package/dist/cjs/global-account/react/hooks/usePortfolioCollectibles.d.ts +12 -0
  72. package/dist/cjs/global-account/react/hooks/usePortfolioCollectibles.js +178 -0
  73. package/dist/cjs/global-account/react/hooks/useSiwe.d.ts +1 -1
  74. package/dist/cjs/global-account/react/hooks/useSiwe.native.d.ts +1 -1
  75. package/dist/cjs/global-account/react/hooks/useTWAuth.d.ts +1 -1
  76. package/dist/cjs/global-account/react/hooks/useUnifiedChainSwitchAndExecute.d.ts +1 -0
  77. package/dist/cjs/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +37 -27
  78. package/dist/cjs/global-account/react/stores/useModalStore.d.ts +14 -2
  79. package/dist/cjs/global-account/types/b3-api.types.d.ts +5 -0
  80. package/dist/cjs/global-account/types/feature-flags.d.ts +5 -5
  81. package/dist/cjs/notifications/services/api.js +1 -0
  82. package/dist/cjs/shared/constants/chains/b3Chain.d.ts +30 -54
  83. package/dist/cjs/shared/constants/chains/b3Chain.js +5 -41
  84. package/dist/cjs/shared/constants/chains/supported.d.ts +1 -49
  85. package/dist/cjs/shared/constants/chains/supported.js +8 -36
  86. package/dist/cjs/shared/constants/index.d.ts +4 -0
  87. package/dist/cjs/shared/utils/chain-transformers.d.ts +4 -4
  88. package/dist/cjs/shared/utils/chain-transformers.js +38 -37
  89. package/dist/cjs/shared/utils/thirdweb-insights.js +2 -2
  90. package/dist/cjs/shared/utils/upload.d.ts +9 -0
  91. package/dist/cjs/shared/utils/upload.js +34 -0
  92. package/dist/cjs/shared/utils/zerionPositions.d.ts +96 -0
  93. package/dist/cjs/shared/utils/zerionPositions.js +188 -0
  94. package/dist/esm/anyspend/constants/rpc.d.ts +3 -1
  95. package/dist/esm/anyspend/constants/rpc.js +5 -1
  96. package/dist/esm/anyspend/react/components/AnySpend.d.ts +9 -1
  97. package/dist/esm/anyspend/react/components/AnySpend.js +124 -47
  98. package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +9 -11
  99. package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +15 -3
  100. package/dist/esm/anyspend/react/components/AnySpendDeposit.js +80 -27
  101. package/dist/esm/anyspend/react/components/AnySpendStakeB3.js +33 -14
  102. package/dist/esm/anyspend/react/components/AnySpendStakeB3ExactIn.js +33 -11
  103. package/dist/esm/anyspend/react/components/QRDeposit.d.ts +22 -3
  104. package/dist/esm/anyspend/react/components/QRDeposit.js +27 -18
  105. package/dist/esm/anyspend/react/components/checkout/CryptoPayPanel.js +21 -14
  106. package/dist/esm/anyspend/react/components/common/PureTransferView.d.ts +30 -0
  107. package/dist/esm/anyspend/react/components/common/PureTransferView.js +61 -0
  108. package/dist/esm/anyspend/react/components/common/TokenBalance.js +6 -7
  109. package/dist/esm/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +3 -3
  110. package/dist/esm/anyspend/react/hooks/useSigMint.d.ts +1 -1
  111. package/dist/esm/anyspend/utils/address.d.ts +2 -1
  112. package/dist/esm/anyspend/utils/address.js +9 -6
  113. package/dist/esm/anyspend/utils/chain.d.ts +84 -1
  114. package/dist/esm/anyspend/utils/chain.js +73 -5
  115. package/dist/esm/anyspend/utils/token.d.ts +2 -0
  116. package/dist/esm/anyspend/utils/token.js +13 -0
  117. package/dist/esm/app.shared.d.ts +9 -1
  118. package/dist/esm/app.shared.js +17 -0
  119. package/dist/esm/global-account/app.native.d.ts +1 -1
  120. package/dist/esm/global-account/better-auth-client.d.ts +3314 -36
  121. package/dist/esm/global-account/better-auth-client.js +27 -4
  122. package/dist/esm/global-account/bsmnt.d.ts +2 -2
  123. package/dist/esm/global-account/bsmnt.native.d.ts +1 -1
  124. package/dist/esm/global-account/client-manager.d.ts +7 -5
  125. package/dist/esm/global-account/client-manager.js +51 -5
  126. package/dist/esm/global-account/react/components/AvatarEditor/AvatarEditor.js +6 -11
  127. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +11 -0
  128. package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.js +11 -0
  129. package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +12 -2
  130. package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +26 -4
  131. package/dist/esm/global-account/react/components/B3Provider/BetterAuthProvider.js +46 -5
  132. package/dist/esm/global-account/react/components/B3Provider/RelayKitProviderWrapper.d.ts +1 -2
  133. package/dist/esm/global-account/react/components/B3Provider/RelayKitProviderWrapper.js +11 -5
  134. package/dist/esm/global-account/react/components/ManageAccount/ContentTokens.js +24 -16
  135. package/dist/esm/global-account/react/components/ManageAccount/NFTContent.js +3 -3
  136. package/dist/esm/global-account/react/components/ManageAccount/ProfileSection.js +9 -7
  137. package/dist/esm/global-account/react/components/ManageAccount/SettingsProfileCard.js +1 -1
  138. package/dist/esm/global-account/react/components/ManageAccount/TokenContent.js +18 -9
  139. package/dist/esm/global-account/react/components/Send/Send.js +16 -12
  140. package/dist/esm/global-account/react/components/SignInWithB3/BetterAuthSignIn.js +3 -1
  141. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +1 -5
  142. package/dist/esm/global-account/react/components/SignInWithB3/components/AuthButton.js +2 -1
  143. package/dist/esm/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.js +1 -0
  144. package/dist/esm/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +3 -2
  145. package/dist/esm/global-account/react/components/SignInWithB3/utils/signInUtils.js +3 -3
  146. package/dist/esm/global-account/react/components/index.d.ts +1 -1
  147. package/dist/esm/global-account/react/components/index.js +1 -1
  148. package/dist/esm/global-account/react/hooks/index.d.ts +2 -3
  149. package/dist/esm/global-account/react/hooks/index.js +2 -3
  150. package/dist/esm/global-account/react/hooks/useAuth.d.ts +5 -4
  151. package/dist/esm/global-account/react/hooks/useAuth.js +1 -0
  152. package/dist/esm/global-account/react/hooks/useAuthentication.d.ts +3 -2
  153. package/dist/esm/global-account/react/hooks/useAuthentication.js +2 -1
  154. package/dist/esm/global-account/react/hooks/useBetterAuth.d.ts +1657 -22
  155. package/dist/esm/global-account/react/hooks/useBetterAuth.js +8 -8
  156. package/dist/esm/global-account/react/hooks/useClient.d.ts +3 -3
  157. package/dist/esm/global-account/react/hooks/useFirstEOA.d.ts +4 -7666
  158. package/dist/esm/global-account/react/hooks/useFirstEOA.js +1 -0
  159. package/dist/esm/global-account/react/hooks/useNativeBalance.js +1 -1
  160. package/dist/esm/global-account/react/hooks/usePortfolioBalance.d.ts +15 -0
  161. package/dist/esm/global-account/react/hooks/usePortfolioBalance.js +72 -0
  162. package/dist/esm/global-account/react/hooks/usePortfolioCollectibles.d.ts +12 -0
  163. package/dist/esm/global-account/react/hooks/usePortfolioCollectibles.js +175 -0
  164. package/dist/esm/global-account/react/hooks/useSiwe.d.ts +1 -1
  165. package/dist/esm/global-account/react/hooks/useSiwe.native.d.ts +1 -1
  166. package/dist/esm/global-account/react/hooks/useTWAuth.d.ts +1 -1
  167. package/dist/esm/global-account/react/hooks/useUnifiedChainSwitchAndExecute.d.ts +1 -0
  168. package/dist/esm/global-account/react/hooks/useUnifiedChainSwitchAndExecute.js +37 -27
  169. package/dist/esm/global-account/react/stores/useModalStore.d.ts +14 -2
  170. package/dist/esm/global-account/types/b3-api.types.d.ts +5 -0
  171. package/dist/esm/global-account/types/feature-flags.d.ts +5 -5
  172. package/dist/esm/notifications/services/api.js +1 -0
  173. package/dist/esm/shared/constants/chains/b3Chain.d.ts +30 -54
  174. package/dist/esm/shared/constants/chains/b3Chain.js +4 -38
  175. package/dist/esm/shared/constants/chains/supported.d.ts +1 -49
  176. package/dist/esm/shared/constants/chains/supported.js +7 -35
  177. package/dist/esm/shared/constants/index.d.ts +4 -0
  178. package/dist/esm/shared/utils/chain-transformers.d.ts +4 -4
  179. package/dist/esm/shared/utils/chain-transformers.js +38 -37
  180. package/dist/esm/shared/utils/thirdweb-insights.js +2 -2
  181. package/dist/esm/shared/utils/upload.d.ts +9 -0
  182. package/dist/esm/shared/utils/upload.js +31 -0
  183. package/dist/esm/shared/utils/zerionPositions.d.ts +96 -0
  184. package/dist/esm/shared/utils/zerionPositions.js +180 -0
  185. package/dist/styles/index.css +1 -1
  186. package/dist/types/anyspend/constants/rpc.d.ts +3 -1
  187. package/dist/types/anyspend/react/components/AnySpend.d.ts +9 -1
  188. package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +15 -3
  189. package/dist/types/anyspend/react/components/QRDeposit.d.ts +22 -3
  190. package/dist/types/anyspend/react/components/common/PureTransferView.d.ts +30 -0
  191. package/dist/types/anyspend/react/hooks/useCreateDepositFirstOrder.d.ts +3 -3
  192. package/dist/types/anyspend/react/hooks/useSigMint.d.ts +1 -1
  193. package/dist/types/anyspend/utils/address.d.ts +2 -1
  194. package/dist/types/anyspend/utils/chain.d.ts +84 -1
  195. package/dist/types/anyspend/utils/token.d.ts +2 -0
  196. package/dist/types/app.shared.d.ts +9 -1
  197. package/dist/types/global-account/app.native.d.ts +1 -1
  198. package/dist/types/global-account/better-auth-client.d.ts +3314 -36
  199. package/dist/types/global-account/bsmnt.d.ts +2 -2
  200. package/dist/types/global-account/bsmnt.native.d.ts +1 -1
  201. package/dist/types/global-account/client-manager.d.ts +7 -5
  202. package/dist/types/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +11 -0
  203. package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +12 -2
  204. package/dist/types/global-account/react/components/B3Provider/RelayKitProviderWrapper.d.ts +1 -2
  205. package/dist/types/global-account/react/components/SignInWithB3/utils/signInUtils.d.ts +3 -2
  206. package/dist/types/global-account/react/components/index.d.ts +1 -1
  207. package/dist/types/global-account/react/hooks/index.d.ts +2 -3
  208. package/dist/types/global-account/react/hooks/useAuth.d.ts +5 -4
  209. package/dist/types/global-account/react/hooks/useAuthentication.d.ts +3 -2
  210. package/dist/types/global-account/react/hooks/useBetterAuth.d.ts +1657 -22
  211. package/dist/types/global-account/react/hooks/useClient.d.ts +3 -3
  212. package/dist/types/global-account/react/hooks/useFirstEOA.d.ts +4 -7666
  213. package/dist/types/global-account/react/hooks/usePortfolioBalance.d.ts +15 -0
  214. package/dist/types/global-account/react/hooks/usePortfolioCollectibles.d.ts +12 -0
  215. package/dist/types/global-account/react/hooks/useSiwe.d.ts +1 -1
  216. package/dist/types/global-account/react/hooks/useSiwe.native.d.ts +1 -1
  217. package/dist/types/global-account/react/hooks/useTWAuth.d.ts +1 -1
  218. package/dist/types/global-account/react/hooks/useUnifiedChainSwitchAndExecute.d.ts +1 -0
  219. package/dist/types/global-account/react/stores/useModalStore.d.ts +14 -2
  220. package/dist/types/global-account/types/b3-api.types.d.ts +5 -0
  221. package/dist/types/global-account/types/feature-flags.d.ts +5 -5
  222. package/dist/types/shared/constants/chains/b3Chain.d.ts +30 -54
  223. package/dist/types/shared/constants/chains/supported.d.ts +1 -49
  224. package/dist/types/shared/constants/index.d.ts +4 -0
  225. package/dist/types/shared/utils/chain-transformers.d.ts +4 -4
  226. package/dist/types/shared/utils/upload.d.ts +9 -0
  227. package/dist/types/shared/utils/zerionPositions.d.ts +96 -0
  228. package/node_modules/@b3/chain-registry/chains.json +1225 -0
  229. package/node_modules/@b3/chain-registry/dist/chains.json +1225 -0
  230. package/node_modules/@b3/chain-registry/dist/index.cjs +1676 -0
  231. package/node_modules/@b3/chain-registry/dist/index.d.cts +195 -0
  232. package/node_modules/@b3/chain-registry/dist/index.d.ts +195 -0
  233. package/node_modules/@b3/chain-registry/dist/index.mjs +1604 -0
  234. package/node_modules/@b3/chain-registry/dist/src/index.d.ts +193 -0
  235. package/node_modules/@b3/chain-registry/dist/src/index.js +408 -0
  236. package/node_modules/@b3/chain-registry/package.json +66 -0
  237. package/node_modules/@b3/chain-registry/src/index.test.ts +432 -0
  238. package/node_modules/@b3/chain-registry/src/index.ts +672 -0
  239. package/package.json +81 -30
  240. package/src/anyspend/README.md +2 -2
  241. package/src/anyspend/constants/rpc.ts +5 -2
  242. package/src/anyspend/docs/components.md +6 -6
  243. package/src/anyspend/docs/contributing.md +1 -1
  244. package/src/anyspend/docs/hooks.md +3 -3
  245. package/src/anyspend/docs/installation.md +2 -2
  246. package/src/anyspend/react/components/AnySpend.tsx +163 -47
  247. package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +10 -11
  248. package/src/anyspend/react/components/AnySpendDeposit.tsx +130 -31
  249. package/src/anyspend/react/components/AnySpendStakeB3.tsx +55 -14
  250. package/src/anyspend/react/components/AnySpendStakeB3ExactIn.tsx +55 -11
  251. package/src/anyspend/react/components/QRDeposit.tsx +101 -22
  252. package/src/anyspend/react/components/__tests__/QRDeposit.test.tsx +331 -0
  253. package/src/anyspend/react/components/checkout/CryptoPayPanel.tsx +38 -16
  254. package/src/anyspend/react/components/common/PureTransferView.tsx +212 -0
  255. package/src/anyspend/react/components/common/TokenBalance.tsx +10 -7
  256. package/src/anyspend/react/hooks/useAnyspendQuote.ts +13 -13
  257. package/src/anyspend/react/hooks/useCreateDepositFirstOrder.ts +4 -4
  258. package/src/anyspend/services/gas.test.ts +95 -18
  259. package/src/anyspend/types/api_req_res.ts +10 -5
  260. package/src/anyspend/utils/__tests__/address.test.ts +39 -0
  261. package/src/anyspend/utils/__tests__/deprecatedChains.test.ts +44 -0
  262. package/src/anyspend/utils/__tests__/toRegistryChainId.test.ts +17 -0
  263. package/src/anyspend/utils/address.ts +8 -6
  264. package/src/anyspend/utils/chain.ts +79 -3
  265. package/src/anyspend/utils/token.ts +14 -0
  266. package/src/app.shared.ts +21 -1
  267. package/src/global-account/app.native.ts +5 -1
  268. package/src/global-account/better-auth-client.ts +30 -4
  269. package/src/global-account/bsmnt.native.ts +5 -1
  270. package/src/global-account/bsmnt.ts +9 -2
  271. package/src/global-account/client-manager.ts +74 -9
  272. package/src/global-account/react/components/AvatarEditor/AvatarEditor.tsx +6 -11
  273. package/src/global-account/react/components/B3Provider/B3ConfigProvider.tsx +12 -0
  274. package/src/global-account/react/components/B3Provider/B3Provider.tsx +40 -4
  275. package/src/global-account/react/components/B3Provider/BetterAuthProvider.tsx +51 -5
  276. package/src/global-account/react/components/B3Provider/RelayKitProviderWrapper.tsx +11 -11
  277. package/src/global-account/react/components/ManageAccount/ContentTokens.tsx +50 -21
  278. package/src/global-account/react/components/ManageAccount/NFTContent.tsx +5 -3
  279. package/src/global-account/react/components/ManageAccount/ProfileSection.tsx +10 -6
  280. package/src/global-account/react/components/ManageAccount/SettingsProfileCard.tsx +1 -1
  281. package/src/global-account/react/components/ManageAccount/TokenContent.tsx +22 -9
  282. package/src/global-account/react/components/Send/Send.tsx +39 -15
  283. package/src/global-account/react/components/SignInWithB3/BetterAuthSignIn.tsx +12 -1
  284. package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +1 -4
  285. package/src/global-account/react/components/SignInWithB3/components/AuthButton.tsx +9 -1
  286. package/src/global-account/react/components/SignInWithB3/steps/LoginStepBetterAuth.tsx +1 -0
  287. package/src/global-account/react/components/SignInWithB3/utils/signInUtils.ts +4 -4
  288. package/src/global-account/react/components/index.ts +1 -1
  289. package/src/global-account/react/components/ui/button.tsx +1 -2
  290. package/src/global-account/react/hooks/__tests__/useUnifiedChainSwitchAndExecute.test.tsx +156 -0
  291. package/src/global-account/react/hooks/index.ts +2 -3
  292. package/src/global-account/react/hooks/useAuth.ts +5 -4
  293. package/src/global-account/react/hooks/useAuthentication.ts +5 -4
  294. package/src/global-account/react/hooks/useBetterAuth.ts +10 -10
  295. package/src/global-account/react/hooks/useClient.ts +11 -2
  296. package/src/global-account/react/hooks/useFirstEOA.tsx +9 -2
  297. package/src/global-account/react/hooks/useNativeBalance.tsx +1 -1
  298. package/src/global-account/react/hooks/usePortfolioBalance.ts +89 -0
  299. package/src/global-account/react/hooks/usePortfolioCollectibles.ts +212 -0
  300. package/src/global-account/react/hooks/useSiwe.native.tsx +1 -1
  301. package/src/global-account/react/hooks/useSiwe.tsx +1 -1
  302. package/src/global-account/react/hooks/useTWAuth.tsx +1 -1
  303. package/src/global-account/react/hooks/useUnifiedChainSwitchAndExecute.ts +47 -31
  304. package/src/global-account/react/stores/useModalStore.ts +14 -2
  305. package/src/global-account/types/b3-api.types.ts +5 -1
  306. package/src/notifications/services/api.ts +1 -0
  307. package/src/shared/constants/chains/b3Chain.ts +4 -43
  308. package/src/shared/constants/chains/supported.ts +9 -48
  309. package/src/shared/constants/index.ts +8 -0
  310. package/src/shared/react/hooks/__tests__/useCurrencyConversion.test.ts +54 -43
  311. package/src/shared/utils/__tests__/zerionPositions.test.ts +248 -0
  312. package/src/shared/utils/chain-transformers.ts +41 -39
  313. package/src/shared/utils/thirdweb-insights.ts +2 -2
  314. package/src/shared/utils/upload.ts +48 -0
  315. package/src/shared/utils/zerionPositions.ts +247 -0
  316. package/src/styles/index.css +27 -0
  317. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Privy.d.ts +0 -10
  318. package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Privy.js +0 -46
  319. package/dist/cjs/global-account/react/hooks/useHandleConnectWithPrivy.d.ts +0 -11
  320. package/dist/cjs/global-account/react/hooks/useHandleConnectWithPrivy.js +0 -70
  321. package/dist/cjs/global-account/react/hooks/useSimBalance.d.ts +0 -59
  322. package/dist/cjs/global-account/react/hooks/useSimBalance.js +0 -98
  323. package/dist/cjs/global-account/react/hooks/useSimCollectibles.d.ts +0 -45
  324. package/dist/cjs/global-account/react/hooks/useSimCollectibles.js +0 -190
  325. package/dist/cjs/global-account/react/utils/simdune.d.ts +0 -7
  326. package/dist/cjs/global-account/react/utils/simdune.js +0 -21
  327. package/dist/cjs/global-account/types/chain-networks.d.ts +0 -44
  328. package/dist/cjs/global-account/types/chain-networks.js +0 -48
  329. package/dist/cjs/shared/generated/chain-networks.json +0 -684
  330. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Privy.d.ts +0 -10
  331. package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Privy.js +0 -43
  332. package/dist/esm/global-account/react/hooks/useHandleConnectWithPrivy.d.ts +0 -11
  333. package/dist/esm/global-account/react/hooks/useHandleConnectWithPrivy.js +0 -67
  334. package/dist/esm/global-account/react/hooks/useSimBalance.d.ts +0 -59
  335. package/dist/esm/global-account/react/hooks/useSimBalance.js +0 -93
  336. package/dist/esm/global-account/react/hooks/useSimCollectibles.d.ts +0 -45
  337. package/dist/esm/global-account/react/hooks/useSimCollectibles.js +0 -187
  338. package/dist/esm/global-account/react/utils/simdune.d.ts +0 -7
  339. package/dist/esm/global-account/react/utils/simdune.js +0 -17
  340. package/dist/esm/global-account/types/chain-networks.d.ts +0 -44
  341. package/dist/esm/global-account/types/chain-networks.js +0 -45
  342. package/dist/esm/shared/generated/chain-networks.json +0 -684
  343. package/dist/types/global-account/react/components/SignInWithB3/SignInWithB3Privy.d.ts +0 -10
  344. package/dist/types/global-account/react/hooks/useHandleConnectWithPrivy.d.ts +0 -11
  345. package/dist/types/global-account/react/hooks/useSimBalance.d.ts +0 -59
  346. package/dist/types/global-account/react/hooks/useSimCollectibles.d.ts +0 -45
  347. package/dist/types/global-account/react/utils/simdune.d.ts +0 -7
  348. package/dist/types/global-account/types/chain-networks.d.ts +0 -44
  349. package/src/global-account/react/components/SignInWithB3/SignInWithB3Privy.tsx +0 -63
  350. package/src/global-account/react/hooks/useHandleConnectWithPrivy.tsx +0 -79
  351. package/src/global-account/react/hooks/useSimBalance.ts +0 -164
  352. package/src/global-account/react/hooks/useSimCollectibles.ts +0 -238
  353. package/src/global-account/react/utils/simdune.ts +0 -20
  354. package/src/global-account/types/chain-networks.ts +0 -54
  355. package/src/shared/generated/chain-networks.json +0 -684
@@ -0,0 +1,432 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import {
3
+ CANONICAL_NAME_ASSETS,
4
+ chains,
5
+ looksLikeProviderTokenAddress,
6
+ isProviderTokenAddress,
7
+ isRegistryResolvedTokenIdentity,
8
+ isRegistryTokenIdentityCandidate,
9
+ isResolvedTokenIdentity,
10
+ isTokenIdentityCandidate,
11
+ matchCanonicalNativeAssetText,
12
+ nativeAssets,
13
+ looksLikeTokenAddress,
14
+ resolveChainIdentifier,
15
+ resolveDexScreenerChainIdentifier,
16
+ tokenAddressFamily,
17
+ tokenAddressKey,
18
+ validateChainDefinitions,
19
+ type ChainDefinition,
20
+ type NativeAssetDefinition,
21
+ type ResolvedTokenIdentity,
22
+ type TokenIdentityCandidate,
23
+ } from "./index";
24
+
25
+ const WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2";
26
+
27
+ function cloneChains(): ChainDefinition[] {
28
+ return structuredClone(chains);
29
+ }
30
+
31
+ describe("chain identifier resolution", () => {
32
+ it("maps names, keys, normalized aliases, and numeric ids to one chain", () => {
33
+ const canonical = resolveChainIdentifier("solana");
34
+
35
+ expect(canonical?.network).toBe("solana");
36
+ expect(resolveChainIdentifier(" SOLANA ")).toBe(canonical);
37
+ expect(resolveChainIdentifier("Solana Mainnet")).toBe(canonical);
38
+ expect(resolveChainIdentifier("7565164")).toBe(canonical);
39
+ expect(resolveChainIdentifier("unknown-chain")).toBeNull();
40
+ });
41
+
42
+ it("maps registry aliases to provider ids and preserves bounded unknown provider ids", () => {
43
+ expect(resolveDexScreenerChainIdentifier("eth")).toEqual({
44
+ identityChainId: "eth",
45
+ providerChainId: "ethereum",
46
+ chainType: "evm",
47
+ registryChainId: 1,
48
+ });
49
+ expect(resolveDexScreenerChainIdentifier("1")?.providerChainId).toBe("ethereum");
50
+ expect(resolveDexScreenerChainIdentifier("Ethereum")?.providerChainId).toBe("ethereum");
51
+ expect(resolveDexScreenerChainIdentifier("137")?.providerChainId).toBe("polygon");
52
+ expect(resolveDexScreenerChainIdentifier("43114")?.providerChainId).toBe("avalanche");
53
+ expect(resolveDexScreenerChainIdentifier("polygon-zkevm")?.providerChainId).toBe("polygonzkevm");
54
+ expect(resolveDexScreenerChainIdentifier("42170")?.providerChainId).toBe("arbitrumnova");
55
+ expect(resolveDexScreenerChainIdentifier("degen")?.providerChainId).toBe("degenchain");
56
+ expect(resolveDexScreenerChainIdentifier("metis")).toEqual({
57
+ identityChainId: "metis",
58
+ providerChainId: "metis",
59
+ chainType: "evm",
60
+ registryChainId: 1088,
61
+ });
62
+ expect(
63
+ Object.fromEntries(
64
+ chains
65
+ .filter(chain => [10, 4663, 8453, 42161].includes(chain.chainId))
66
+ .map(chain => [chain.chainId, chain.dexscreenerNetwork]),
67
+ ),
68
+ ).toEqual({
69
+ 10: "optimism",
70
+ 4663: "robinhood",
71
+ 8453: "base",
72
+ 42161: "arbitrum",
73
+ });
74
+ expect(resolveDexScreenerChainIdentifier("sui")).toEqual({
75
+ identityChainId: "sui",
76
+ providerChainId: "sui",
77
+ chainType: null,
78
+ registryChainId: null,
79
+ });
80
+ expect(resolveDexScreenerChainIdentifier("bad/provider")).toBeNull();
81
+ expect(resolveDexScreenerChainIdentifier("x".repeat(65))).toBeNull();
82
+ });
83
+
84
+ it("pins every registry chain with declared DexScreener support", () => {
85
+ expect(
86
+ Object.fromEntries(
87
+ chains.filter(chain => chain.dexscreenerNetwork).map(chain => [chain.network, chain.dexscreenerNetwork]),
88
+ ),
89
+ ).toEqual({
90
+ abstract: "abstract",
91
+ arbitrum: "arbitrum",
92
+ arbitrum_nova: "arbitrumnova",
93
+ avax: "avalanche",
94
+ base: "base",
95
+ berachain: "berachain",
96
+ blast: "blast",
97
+ bsc: "bsc",
98
+ celo: "celo",
99
+ cro: "cronos",
100
+ degen: "degenchain",
101
+ eth: "ethereum",
102
+ ftm: "fantom",
103
+ glmr: "moonbeam",
104
+ hyperevm: "hyperevm",
105
+ linea: "linea",
106
+ mantle: "mantle",
107
+ matic: "polygon",
108
+ metis: "metis",
109
+ mode: "mode",
110
+ optimism: "optimism",
111
+ "polygon-zkevm": "polygonzkevm",
112
+ robinhood: "robinhood",
113
+ scroll: "scroll",
114
+ solana: "solana",
115
+ soneium: "soneium",
116
+ sonic: "sonic",
117
+ unichain: "unichain",
118
+ worldchain: "worldchain",
119
+ xdai: "gnosis",
120
+ zksync: "zksync",
121
+ });
122
+ });
123
+
124
+ it("fails closed for registry chains without declared DexScreener support", () => {
125
+ const undeclaredIdentifiers = [
126
+ "ronin",
127
+ "2020",
128
+ "b3",
129
+ "8333",
130
+ "zircuit",
131
+ "48900",
132
+ "plume",
133
+ "98866",
134
+ "taiko",
135
+ "167000",
136
+ "zora",
137
+ "7777777",
138
+ "aurora",
139
+ "1313161554",
140
+ ];
141
+
142
+ expect(
143
+ Object.fromEntries(
144
+ undeclaredIdentifiers.map(identifier => [identifier, resolveDexScreenerChainIdentifier(identifier)]),
145
+ ),
146
+ ).toEqual(Object.fromEntries(undeclaredIdentifiers.map(identifier => [identifier, null])));
147
+ });
148
+
149
+ it("rejects an identifier claimed by two different chains", () => {
150
+ const definitions = cloneChains();
151
+ definitions.push({
152
+ ...definitions[1],
153
+ chainId: 999_999_999,
154
+ key: "OTHER",
155
+ name: "Other",
156
+ network: "ethereum",
157
+ });
158
+
159
+ expect(() => validateChainDefinitions(definitions)).toThrow(
160
+ 'Chain identifier "ethereum" is claimed by both "eth" and "ethereum"',
161
+ );
162
+ });
163
+
164
+ it("rejects a provider id claimed by two different chains", () => {
165
+ const duplicateProviderId = cloneChains();
166
+ duplicateProviderId[1] = { ...duplicateProviderId[1], dexscreenerNetwork: "ethereum" };
167
+ expect(() => validateChainDefinitions(duplicateProviderId)).toThrow(
168
+ 'Chain identifier "ethereum" is claimed by both "eth" and "optimism"',
169
+ );
170
+ });
171
+
172
+ it("rejects duplicate numeric ids and incomplete wrapped-native metadata", () => {
173
+ const duplicateId = cloneChains();
174
+ duplicateId[1] = { ...duplicateId[1], chainId: duplicateId[0].chainId };
175
+ expect(() => validateChainDefinitions(duplicateId)).toThrow(/Chain id 1 is claimed/);
176
+
177
+ const incompleteWrapped = cloneChains();
178
+ const solanaIndex = incompleteWrapped.findIndex(chain => chain.network === "solana");
179
+ incompleteWrapped[solanaIndex] = { ...incompleteWrapped[solanaIndex], dexscreenerNetwork: undefined };
180
+ expect(() => validateChainDefinitions(incompleteWrapped)).toThrow(/Incomplete wrapped-native metadata/);
181
+ });
182
+
183
+ it("rejects invalid canonical SOL and wrapped-address metadata", () => {
184
+ const invalidSol = cloneChains();
185
+ const solanaIndex = invalidSol.findIndex(chain => chain.network === "solana");
186
+ invalidSol[solanaIndex] = {
187
+ ...invalidSol[solanaIndex],
188
+ wrappedNativeCurrency: { name: "Wrapped SOL", symbol: "WSOL", decimals: 9 },
189
+ };
190
+ expect(() => validateChainDefinitions(invalidSol)).toThrow("Canonical Solana SOL/wSOL metadata is invalid");
191
+
192
+ const wrongFamily = cloneChains();
193
+ wrongFamily[0] = { ...wrongFamily[0], wrappedNative: "So11111111111111111111111111111111111111112" };
194
+ expect(() => validateChainDefinitions(wrongFamily)).toThrow(/Invalid wrapped-native address/);
195
+ });
196
+ });
197
+
198
+ describe("token identity trust boundaries", () => {
199
+ const futureWrappedIdentity: ResolvedTokenIdentity = {
200
+ kind: "wrapped-native",
201
+ matchedBy: "canonical",
202
+ chainId: "eth",
203
+ address: WETH,
204
+ marketAddress: WETH,
205
+ name: "Wrapped Ether",
206
+ symbol: "WETH",
207
+ nativeSymbol: "ETH",
208
+ };
209
+ const futureWrappedCandidate: TokenIdentityCandidate = {
210
+ chainId: "eth",
211
+ providerChainId: "ethereum",
212
+ tokenAddress: WETH,
213
+ name: "Wrapped Ether",
214
+ symbol: "WETH",
215
+ pairSide: "base",
216
+ identity: futureWrappedIdentity,
217
+ };
218
+
219
+ it("accepts a structurally valid future wrapped identity without local canonical metadata", () => {
220
+ expect(isResolvedTokenIdentity(futureWrappedIdentity)).toBe(true);
221
+ expect(isTokenIdentityCandidate(futureWrappedCandidate)).toBe(true);
222
+ expect(isRegistryResolvedTokenIdentity(futureWrappedIdentity)).toBe(false);
223
+ expect(isRegistryTokenIdentityCandidate(futureWrappedCandidate)).toBe(false);
224
+ });
225
+
226
+ it("folds token-address case only for EVM identity evidence", () => {
227
+ const lowercaseWeth = WETH.toLowerCase();
228
+ expect(
229
+ isResolvedTokenIdentity({
230
+ ...futureWrappedIdentity,
231
+ address: lowercaseWeth,
232
+ }),
233
+ ).toBe(true);
234
+ expect(
235
+ isTokenIdentityCandidate({
236
+ ...futureWrappedCandidate,
237
+ tokenAddress: lowercaseWeth,
238
+ }),
239
+ ).toBe(true);
240
+
241
+ const futureNativeAsset: NativeAssetDefinition = {
242
+ chainId: 1,
243
+ chain: "eth",
244
+ dexscreenerChain: "ethereum",
245
+ name: "Ethereum",
246
+ symbol: "ETH",
247
+ decimals: 18,
248
+ wrapped: {
249
+ address: WETH,
250
+ name: "Wrapped Ether",
251
+ symbol: "WETH",
252
+ decimals: 18,
253
+ },
254
+ };
255
+ const mutableNativeAssets = nativeAssets as NativeAssetDefinition[];
256
+ const futureAssetIndex = mutableNativeAssets.push(futureNativeAsset) - 1;
257
+ try {
258
+ const lowercaseIdentity: ResolvedTokenIdentity = {
259
+ ...futureWrappedIdentity,
260
+ address: lowercaseWeth,
261
+ marketAddress: lowercaseWeth,
262
+ };
263
+ expect(isRegistryResolvedTokenIdentity(lowercaseIdentity)).toBe(true);
264
+ expect(
265
+ isRegistryTokenIdentityCandidate({
266
+ ...futureWrappedCandidate,
267
+ tokenAddress: lowercaseWeth,
268
+ identity: lowercaseIdentity,
269
+ }),
270
+ ).toBe(true);
271
+ } finally {
272
+ mutableNativeAssets.splice(futureAssetIndex, 1);
273
+ }
274
+ const invalidUppercasePrefix = `0X${WETH.slice(2)}`;
275
+ expect(
276
+ isResolvedTokenIdentity({
277
+ ...futureWrappedIdentity,
278
+ address: invalidUppercasePrefix,
279
+ }),
280
+ ).toBe(false);
281
+ expect(
282
+ isTokenIdentityCandidate({
283
+ ...futureWrappedCandidate,
284
+ tokenAddress: invalidUppercasePrefix,
285
+ }),
286
+ ).toBe(false);
287
+
288
+ const wrappedSol = "So11111111111111111111111111111111111111112";
289
+ const caseMutatedWrappedSol = `s${wrappedSol.slice(1)}`;
290
+ const wrappedSolIdentity: ResolvedTokenIdentity = {
291
+ kind: "wrapped-native",
292
+ matchedBy: "canonical",
293
+ chainId: "solana",
294
+ address: wrappedSol,
295
+ marketAddress: wrappedSol,
296
+ name: "Wrapped SOL",
297
+ symbol: "WSOL",
298
+ nativeSymbol: "SOL",
299
+ };
300
+
301
+ expect(
302
+ isResolvedTokenIdentity({
303
+ ...wrappedSolIdentity,
304
+ address: caseMutatedWrappedSol,
305
+ }),
306
+ ).toBe(false);
307
+ expect(
308
+ isTokenIdentityCandidate({
309
+ chainId: "solana",
310
+ providerChainId: "solana",
311
+ tokenAddress: caseMutatedWrappedSol,
312
+ name: "Wrapped SOL",
313
+ symbol: "WSOL",
314
+ pairSide: "base",
315
+ identity: wrappedSolIdentity,
316
+ }),
317
+ ).toBe(false);
318
+ });
319
+
320
+ it("never promotes case-mutated wrapped Solana addresses to registry-native identity", () => {
321
+ const canonical = "So11111111111111111111111111111111111111112";
322
+ const mutation = `s${canonical.slice(1)}`;
323
+ const mutatedIdentity: ResolvedTokenIdentity = {
324
+ kind: "wrapped-native",
325
+ matchedBy: "canonical",
326
+ chainId: "solana",
327
+ address: mutation,
328
+ marketAddress: mutation,
329
+ name: "Wrapped SOL",
330
+ symbol: "WSOL",
331
+ nativeSymbol: "SOL",
332
+ };
333
+
334
+ expect(isResolvedTokenIdentity(mutatedIdentity)).toBe(true);
335
+ expect(isRegistryResolvedTokenIdentity(mutatedIdentity)).toBe(false);
336
+ });
337
+
338
+ it("rejects a known chain whose address belongs to another family", () => {
339
+ expect(
340
+ isResolvedTokenIdentity({
341
+ kind: "contract",
342
+ matchedBy: "exact",
343
+ chainId: "solana",
344
+ address: WETH,
345
+ marketAddress: WETH,
346
+ name: "Wrong family",
347
+ symbol: "WRONG",
348
+ nativeSymbol: null,
349
+ }),
350
+ ).toBe(false);
351
+ });
352
+
353
+ it("allows structurally valid contracts on provider chains absent from the local registry", () => {
354
+ expect(
355
+ isResolvedTokenIdentity({
356
+ kind: "contract",
357
+ matchedBy: "ranked",
358
+ chainId: "future-evm",
359
+ address: WETH,
360
+ marketAddress: WETH,
361
+ name: "Future token",
362
+ symbol: "FUTURE",
363
+ nativeSymbol: null,
364
+ }),
365
+ ).toBe(true);
366
+ });
367
+
368
+ it("classifies only complete EVM and 32-byte Solana token addresses", () => {
369
+ expect(tokenAddressFamily(WETH)).toBe("evm");
370
+ expect(tokenAddressFamily("So11111111111111111111111111111111111111112")).toBe("solana");
371
+ expect(tokenAddressFamily("0xabc")).toBeNull();
372
+ });
373
+
374
+ it("centralizes canonical SOL and wSOL text matching in the registry", () => {
375
+ expect(CANONICAL_NAME_ASSETS).toHaveLength(1);
376
+ const [solana] = CANONICAL_NAME_ASSETS;
377
+ expect(matchCanonicalNativeAssetText(solana, "$SOL")).toBe("native");
378
+ expect(matchCanonicalNativeAssetText(solana, "Solana")).toBe("native");
379
+ expect(matchCanonicalNativeAssetText(solana, "wSOL")).toBe("wrapped-native");
380
+ expect(matchCanonicalNativeAssetText(solana, "Wrapped SOL")).toBe("wrapped-native");
381
+ expect(matchCanonicalNativeAssetText(solana, "ETH")).toBeNull();
382
+ });
383
+
384
+ it("distinguishes explicit provider coin types from arbitrary opaque user input", () => {
385
+ const suiCoinType = "0x2::sui::SUI";
386
+ const longOpaqueAddress = `EQ${"a".repeat(46)}`;
387
+
388
+ expect(isProviderTokenAddress(suiCoinType)).toBe(true);
389
+ expect(looksLikeTokenAddress(suiCoinType)).toBe(false);
390
+ expect(looksLikeProviderTokenAddress(suiCoinType)).toBe(true);
391
+ expect(looksLikeProviderTokenAddress(longOpaqueAddress)).toBe(false);
392
+ expect(isProviderTokenAddress(longOpaqueAddress)).toBe(true);
393
+ expect(isProviderTokenAddress("not-token")).toBe(false);
394
+ expect(isProviderTokenAddress(`0x2::${"a".repeat(257)}`)).toBe(false);
395
+ expect(tokenAddressKey("sui", "AbCd")).toBe("AbCd");
396
+ expect(tokenAddressKey("future-evm", WETH)).toBe(WETH.toLowerCase());
397
+ expect(tokenAddressKey("eth", WETH)).toBe(WETH.toLowerCase());
398
+ expect(
399
+ isResolvedTokenIdentity({
400
+ kind: "contract",
401
+ matchedBy: "exact",
402
+ chainId: "sui",
403
+ address: suiCoinType,
404
+ marketAddress: suiCoinType,
405
+ name: "Sui",
406
+ symbol: "SUI",
407
+ nativeSymbol: null,
408
+ }),
409
+ ).toBe(true);
410
+ const candidate = {
411
+ chainId: "sui",
412
+ providerChainId: "sui",
413
+ tokenAddress: suiCoinType,
414
+ name: "Sui",
415
+ symbol: "SUI",
416
+ pairSide: "base",
417
+ identity: {
418
+ kind: "contract",
419
+ matchedBy: "exact",
420
+ chainId: "sui",
421
+ address: suiCoinType,
422
+ marketAddress: suiCoinType,
423
+ name: "Sui",
424
+ symbol: "SUI",
425
+ nativeSymbol: null,
426
+ },
427
+ };
428
+ expect(isRegistryTokenIdentityCandidate(candidate)).toBe(true);
429
+ expect(isTokenIdentityCandidate(candidate)).toBe(true);
430
+ expect(isTokenIdentityCandidate({ ...candidate, providerChainId: undefined })).toBe(false);
431
+ });
432
+ });