@rango-dev/wallets-core 0.0.0-experimental-936229e8-20251208

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 (351) hide show
  1. package/CHANGELOG.md +334 -0
  2. package/dist/builders/action.d.ts +22 -0
  3. package/dist/builders/action.d.ts.map +1 -0
  4. package/dist/builders/mod.d.ts +5 -0
  5. package/dist/builders/mod.d.ts.map +1 -0
  6. package/dist/builders/namespace.d.ts +47 -0
  7. package/dist/builders/namespace.d.ts.map +1 -0
  8. package/dist/builders/provider.d.ts +13 -0
  9. package/dist/builders/provider.d.ts.map +1 -0
  10. package/dist/builders/types.d.ts +21 -0
  11. package/dist/builders/types.d.ts.map +1 -0
  12. package/dist/hub/helpers.d.ts +6 -0
  13. package/dist/hub/helpers.d.ts.map +1 -0
  14. package/dist/hub/hub.d.ts +29 -0
  15. package/dist/hub/hub.d.ts.map +1 -0
  16. package/dist/hub/mod.d.ts +9 -0
  17. package/dist/hub/mod.d.ts.map +1 -0
  18. package/dist/hub/namespaces/errors.d.ts +5 -0
  19. package/dist/hub/namespaces/errors.d.ts.map +1 -0
  20. package/dist/hub/namespaces/mod.d.ts +3 -0
  21. package/dist/hub/namespaces/mod.d.ts.map +1 -0
  22. package/dist/hub/namespaces/namespace.d.ts +148 -0
  23. package/dist/hub/namespaces/namespace.d.ts.map +1 -0
  24. package/dist/hub/namespaces/namespace.test.d.ts +11 -0
  25. package/dist/hub/namespaces/namespace.test.d.ts.map +1 -0
  26. package/dist/hub/namespaces/types.d.ts +36 -0
  27. package/dist/hub/namespaces/types.d.ts.map +1 -0
  28. package/dist/hub/provider/mod.d.ts +3 -0
  29. package/dist/hub/provider/mod.d.ts.map +1 -0
  30. package/dist/hub/provider/provider.d.ts +136 -0
  31. package/dist/hub/provider/provider.d.ts.map +1 -0
  32. package/dist/hub/provider/provider.test.d.ts +2 -0
  33. package/dist/hub/provider/provider.test.d.ts.map +1 -0
  34. package/dist/hub/provider/types.d.ts +37 -0
  35. package/dist/hub/provider/types.d.ts.map +1 -0
  36. package/dist/hub/store/events.d.ts +54 -0
  37. package/dist/hub/store/events.d.ts.map +1 -0
  38. package/dist/hub/store/extend.d.ts +14 -0
  39. package/dist/hub/store/extend.d.ts.map +1 -0
  40. package/dist/hub/store/hub.d.ts +11 -0
  41. package/dist/hub/store/hub.d.ts.map +1 -0
  42. package/dist/hub/store/mod.d.ts +8 -0
  43. package/dist/hub/store/mod.d.ts.map +1 -0
  44. package/dist/hub/store/mod.js +2 -0
  45. package/dist/hub/store/mod.js.map +7 -0
  46. package/dist/hub/store/namespaces.d.ts +38 -0
  47. package/dist/hub/store/namespaces.d.ts.map +1 -0
  48. package/dist/hub/store/providers.d.ts +77 -0
  49. package/dist/hub/store/providers.d.ts.map +1 -0
  50. package/dist/hub/store/selectors.d.ts +18 -0
  51. package/dist/hub/store/selectors.d.ts.map +1 -0
  52. package/dist/hub/store/store.d.ts +14 -0
  53. package/dist/hub/store/store.d.ts.map +1 -0
  54. package/dist/hub/store/store.test.d.ts +2 -0
  55. package/dist/hub/store/store.test.d.ts.map +1 -0
  56. package/dist/legacy/helpers.d.ts +12 -0
  57. package/dist/legacy/helpers.d.ts.map +1 -0
  58. package/dist/legacy/mod.d.ts +8 -0
  59. package/dist/legacy/mod.d.ts.map +1 -0
  60. package/dist/legacy/mod.js +2 -0
  61. package/dist/legacy/mod.js.map +7 -0
  62. package/dist/legacy/persistor.d.ts +11 -0
  63. package/dist/legacy/persistor.d.ts.map +1 -0
  64. package/dist/legacy/types.d.ts +247 -0
  65. package/dist/legacy/types.d.ts.map +1 -0
  66. package/dist/legacy/utils.d.ts +8 -0
  67. package/dist/legacy/utils.d.ts.map +1 -0
  68. package/dist/legacy/wallet.d.ts +65 -0
  69. package/dist/legacy/wallet.d.ts.map +1 -0
  70. package/dist/mod.d.ts +9 -0
  71. package/dist/mod.d.ts.map +1 -0
  72. package/dist/mod.js +2 -0
  73. package/dist/mod.js.map +7 -0
  74. package/dist/namespaces/common/actions.d.ts +4 -0
  75. package/dist/namespaces/common/actions.d.ts.map +1 -0
  76. package/dist/namespaces/common/after.d.ts +4 -0
  77. package/dist/namespaces/common/after.d.ts.map +1 -0
  78. package/dist/namespaces/common/and.d.ts +6 -0
  79. package/dist/namespaces/common/and.d.ts.map +1 -0
  80. package/dist/namespaces/common/before.d.ts +4 -0
  81. package/dist/namespaces/common/before.d.ts.map +1 -0
  82. package/dist/namespaces/common/builders.d.ts +5 -0
  83. package/dist/namespaces/common/builders.d.ts.map +1 -0
  84. package/dist/namespaces/common/helpers.d.ts +2 -0
  85. package/dist/namespaces/common/helpers.d.ts.map +1 -0
  86. package/dist/namespaces/common/hooks/changeAccountSubscriber.d.ts +90 -0
  87. package/dist/namespaces/common/hooks/changeAccountSubscriber.d.ts.map +1 -0
  88. package/dist/namespaces/common/hooks/changeAccountSubscriber.test.d.ts +2 -0
  89. package/dist/namespaces/common/hooks/changeAccountSubscriber.test.d.ts.map +1 -0
  90. package/dist/namespaces/common/mod.d.ts +11 -0
  91. package/dist/namespaces/common/mod.d.ts.map +1 -0
  92. package/dist/namespaces/common/mod.js +2 -0
  93. package/dist/namespaces/common/mod.js.map +7 -0
  94. package/dist/namespaces/common/or.d.ts +13 -0
  95. package/dist/namespaces/common/or.d.ts.map +1 -0
  96. package/dist/namespaces/common/types.d.ts +11 -0
  97. package/dist/namespaces/common/types.d.ts.map +1 -0
  98. package/dist/namespaces/common/utils.d.ts +10 -0
  99. package/dist/namespaces/common/utils.d.ts.map +1 -0
  100. package/dist/namespaces/cosmos/actions.d.ts +2 -0
  101. package/dist/namespaces/cosmos/actions.d.ts.map +1 -0
  102. package/dist/namespaces/cosmos/after.d.ts +2 -0
  103. package/dist/namespaces/cosmos/after.d.ts.map +1 -0
  104. package/dist/namespaces/cosmos/and.d.ts +3 -0
  105. package/dist/namespaces/cosmos/and.d.ts.map +1 -0
  106. package/dist/namespaces/cosmos/before.d.ts +2 -0
  107. package/dist/namespaces/cosmos/before.d.ts.map +1 -0
  108. package/dist/namespaces/cosmos/builders.d.ts +4 -0
  109. package/dist/namespaces/cosmos/builders.d.ts.map +1 -0
  110. package/dist/namespaces/cosmos/constants.d.ts +2 -0
  111. package/dist/namespaces/cosmos/constants.d.ts.map +1 -0
  112. package/dist/namespaces/cosmos/mod.d.ts +9 -0
  113. package/dist/namespaces/cosmos/mod.d.ts.map +1 -0
  114. package/dist/namespaces/cosmos/mod.js +2 -0
  115. package/dist/namespaces/cosmos/mod.js.map +7 -0
  116. package/dist/namespaces/cosmos/types.d.ts +19 -0
  117. package/dist/namespaces/cosmos/types.d.ts.map +1 -0
  118. package/dist/namespaces/cosmos/utils.d.ts +3 -0
  119. package/dist/namespaces/cosmos/utils.d.ts.map +1 -0
  120. package/dist/namespaces/evm/actions.d.ts +10 -0
  121. package/dist/namespaces/evm/actions.d.ts.map +1 -0
  122. package/dist/namespaces/evm/after.d.ts +2 -0
  123. package/dist/namespaces/evm/after.d.ts.map +1 -0
  124. package/dist/namespaces/evm/and.d.ts +3 -0
  125. package/dist/namespaces/evm/and.d.ts.map +1 -0
  126. package/dist/namespaces/evm/before.d.ts +2 -0
  127. package/dist/namespaces/evm/before.d.ts.map +1 -0
  128. package/dist/namespaces/evm/builders.d.ts +9 -0
  129. package/dist/namespaces/evm/builders.d.ts.map +1 -0
  130. package/dist/namespaces/evm/constants.d.ts +3 -0
  131. package/dist/namespaces/evm/constants.d.ts.map +1 -0
  132. package/dist/namespaces/evm/eip1193.d.ts +1229 -0
  133. package/dist/namespaces/evm/eip1193.d.ts.map +1 -0
  134. package/dist/namespaces/evm/hooks.d.ts +5 -0
  135. package/dist/namespaces/evm/hooks.d.ts.map +1 -0
  136. package/dist/namespaces/evm/mod.d.ts +10 -0
  137. package/dist/namespaces/evm/mod.d.ts.map +1 -0
  138. package/dist/namespaces/evm/mod.js +2 -0
  139. package/dist/namespaces/evm/mod.js.map +7 -0
  140. package/dist/namespaces/evm/types.d.ts +23 -0
  141. package/dist/namespaces/evm/types.d.ts.map +1 -0
  142. package/dist/namespaces/evm/utils.d.ts +13 -0
  143. package/dist/namespaces/evm/utils.d.ts.map +1 -0
  144. package/dist/namespaces/solana/actions.d.ts +7 -0
  145. package/dist/namespaces/solana/actions.d.ts.map +1 -0
  146. package/dist/namespaces/solana/after.d.ts +2 -0
  147. package/dist/namespaces/solana/after.d.ts.map +1 -0
  148. package/dist/namespaces/solana/and.d.ts +3 -0
  149. package/dist/namespaces/solana/and.d.ts.map +1 -0
  150. package/dist/namespaces/solana/before.d.ts +2 -0
  151. package/dist/namespaces/solana/before.d.ts.map +1 -0
  152. package/dist/namespaces/solana/builders.d.ts +6 -0
  153. package/dist/namespaces/solana/builders.d.ts.map +1 -0
  154. package/dist/namespaces/solana/constants.d.ts +3 -0
  155. package/dist/namespaces/solana/constants.d.ts.map +1 -0
  156. package/dist/namespaces/solana/hooks.d.ts +4 -0
  157. package/dist/namespaces/solana/hooks.d.ts.map +1 -0
  158. package/dist/namespaces/solana/mod.d.ts +10 -0
  159. package/dist/namespaces/solana/mod.d.ts.map +1 -0
  160. package/dist/namespaces/solana/mod.js +2 -0
  161. package/dist/namespaces/solana/mod.js.map +7 -0
  162. package/dist/namespaces/solana/types.d.ts +11 -0
  163. package/dist/namespaces/solana/types.d.ts.map +1 -0
  164. package/dist/namespaces/solana/utils.d.ts +8 -0
  165. package/dist/namespaces/solana/utils.d.ts.map +1 -0
  166. package/dist/namespaces/sui/actions.d.ts +8 -0
  167. package/dist/namespaces/sui/actions.d.ts.map +1 -0
  168. package/dist/namespaces/sui/builders.d.ts +14 -0
  169. package/dist/namespaces/sui/builders.d.ts.map +1 -0
  170. package/dist/namespaces/sui/constants.d.ts +3 -0
  171. package/dist/namespaces/sui/constants.d.ts.map +1 -0
  172. package/dist/namespaces/sui/hooks.d.ts +4 -0
  173. package/dist/namespaces/sui/hooks.d.ts.map +1 -0
  174. package/dist/namespaces/sui/mod.d.ts +7 -0
  175. package/dist/namespaces/sui/mod.d.ts.map +1 -0
  176. package/dist/namespaces/sui/mod.js +2 -0
  177. package/dist/namespaces/sui/mod.js.map +7 -0
  178. package/dist/namespaces/sui/types.d.ts +12 -0
  179. package/dist/namespaces/sui/types.d.ts.map +1 -0
  180. package/dist/namespaces/sui/utils.d.ts +15 -0
  181. package/dist/namespaces/sui/utils.d.ts.map +1 -0
  182. package/dist/namespaces/tron/actions.d.ts +2 -0
  183. package/dist/namespaces/tron/actions.d.ts.map +1 -0
  184. package/dist/namespaces/tron/after.d.ts +2 -0
  185. package/dist/namespaces/tron/after.d.ts.map +1 -0
  186. package/dist/namespaces/tron/and.d.ts +3 -0
  187. package/dist/namespaces/tron/and.d.ts.map +1 -0
  188. package/dist/namespaces/tron/before.d.ts +2 -0
  189. package/dist/namespaces/tron/before.d.ts.map +1 -0
  190. package/dist/namespaces/tron/builders.d.ts +5 -0
  191. package/dist/namespaces/tron/builders.d.ts.map +1 -0
  192. package/dist/namespaces/tron/constants.d.ts +3 -0
  193. package/dist/namespaces/tron/constants.d.ts.map +1 -0
  194. package/dist/namespaces/tron/mod.d.ts +9 -0
  195. package/dist/namespaces/tron/mod.d.ts.map +1 -0
  196. package/dist/namespaces/tron/mod.js +2 -0
  197. package/dist/namespaces/tron/mod.js.map +7 -0
  198. package/dist/namespaces/tron/types.d.ts +8 -0
  199. package/dist/namespaces/tron/types.d.ts.map +1 -0
  200. package/dist/namespaces/tron/utils.d.ts +2 -0
  201. package/dist/namespaces/tron/utils.d.ts.map +1 -0
  202. package/dist/namespaces/utxo/actions.d.ts +2 -0
  203. package/dist/namespaces/utxo/actions.d.ts.map +1 -0
  204. package/dist/namespaces/utxo/after.d.ts +2 -0
  205. package/dist/namespaces/utxo/after.d.ts.map +1 -0
  206. package/dist/namespaces/utxo/and.d.ts +3 -0
  207. package/dist/namespaces/utxo/and.d.ts.map +1 -0
  208. package/dist/namespaces/utxo/before.d.ts +2 -0
  209. package/dist/namespaces/utxo/before.d.ts.map +1 -0
  210. package/dist/namespaces/utxo/builders.d.ts +4 -0
  211. package/dist/namespaces/utxo/builders.d.ts.map +1 -0
  212. package/dist/namespaces/utxo/constants.d.ts +3 -0
  213. package/dist/namespaces/utxo/constants.d.ts.map +1 -0
  214. package/dist/namespaces/utxo/mod.d.ts +9 -0
  215. package/dist/namespaces/utxo/mod.d.ts.map +1 -0
  216. package/dist/namespaces/utxo/mod.js +2 -0
  217. package/dist/namespaces/utxo/mod.js.map +7 -0
  218. package/dist/namespaces/utxo/types.d.ts +8 -0
  219. package/dist/namespaces/utxo/types.d.ts.map +1 -0
  220. package/dist/namespaces/utxo/utils.d.ts +2 -0
  221. package/dist/namespaces/utxo/utils.d.ts.map +1 -0
  222. package/dist/test-utils/fixtures.d.ts +4 -0
  223. package/dist/test-utils/fixtures.d.ts.map +1 -0
  224. package/dist/types/accounts.d.ts +11 -0
  225. package/dist/types/accounts.d.ts.map +1 -0
  226. package/dist/types/actions.d.ts +5 -0
  227. package/dist/types/actions.d.ts.map +1 -0
  228. package/dist/types/mod.d.ts +2 -0
  229. package/dist/types/mod.d.ts.map +1 -0
  230. package/dist/types/utils.d.ts +7 -0
  231. package/dist/types/utils.d.ts.map +1 -0
  232. package/dist/utils/mod.d.ts +4 -0
  233. package/dist/utils/mod.d.ts.map +1 -0
  234. package/dist/utils/mod.js +2 -0
  235. package/dist/utils/mod.js.map +7 -0
  236. package/dist/utils/versions.d.ts +21 -0
  237. package/dist/utils/versions.d.ts.map +1 -0
  238. package/dist/utils/versions.test.d.ts +2 -0
  239. package/dist/utils/versions.test.d.ts.map +1 -0
  240. package/dist/wallets-core.build.json +1 -0
  241. package/legacy/package.json +8 -0
  242. package/package.json +84 -0
  243. package/readme.md +4 -0
  244. package/src/builders/action.ts +86 -0
  245. package/src/builders/mod.ts +5 -0
  246. package/src/builders/namespace.ts +258 -0
  247. package/src/builders/provider.ts +61 -0
  248. package/src/builders/types.ts +29 -0
  249. package/src/hub/helpers.ts +11 -0
  250. package/src/hub/hub.ts +128 -0
  251. package/src/hub/mod.ts +18 -0
  252. package/src/hub/namespaces/errors.ts +11 -0
  253. package/src/hub/namespaces/mod.ts +10 -0
  254. package/src/hub/namespaces/namespace.test.ts +443 -0
  255. package/src/hub/namespaces/namespace.ts +470 -0
  256. package/src/hub/namespaces/types.ts +58 -0
  257. package/src/hub/provider/mod.ts +10 -0
  258. package/src/hub/provider/provider.test.ts +232 -0
  259. package/src/hub/provider/provider.ts +335 -0
  260. package/src/hub/provider/types.ts +50 -0
  261. package/src/hub/store/events.ts +89 -0
  262. package/src/hub/store/extend.ts +125 -0
  263. package/src/hub/store/hub.ts +18 -0
  264. package/src/hub/store/mod.ts +25 -0
  265. package/src/hub/store/namespaces.ts +177 -0
  266. package/src/hub/store/providers.ts +169 -0
  267. package/src/hub/store/selectors.ts +59 -0
  268. package/src/hub/store/store.test.ts +50 -0
  269. package/src/hub/store/store.ts +30 -0
  270. package/src/legacy/helpers.ts +75 -0
  271. package/src/legacy/mod.ts +44 -0
  272. package/src/legacy/persistor.ts +19 -0
  273. package/src/legacy/types.ts +291 -0
  274. package/src/legacy/utils.ts +20 -0
  275. package/src/legacy/wallet.ts +552 -0
  276. package/src/mod.ts +44 -0
  277. package/src/namespaces/common/actions.ts +12 -0
  278. package/src/namespaces/common/after.ts +8 -0
  279. package/src/namespaces/common/and.ts +42 -0
  280. package/src/namespaces/common/before.ts +9 -0
  281. package/src/namespaces/common/builders.ts +14 -0
  282. package/src/namespaces/common/helpers.ts +10 -0
  283. package/src/namespaces/common/hooks/changeAccountSubscriber.test.ts +173 -0
  284. package/src/namespaces/common/hooks/changeAccountSubscriber.ts +236 -0
  285. package/src/namespaces/common/mod.ts +23 -0
  286. package/src/namespaces/common/or.ts +17 -0
  287. package/src/namespaces/common/types.ts +25 -0
  288. package/src/namespaces/common/utils.ts +43 -0
  289. package/src/namespaces/cosmos/actions.ts +3 -0
  290. package/src/namespaces/cosmos/after.ts +3 -0
  291. package/src/namespaces/cosmos/and.ts +5 -0
  292. package/src/namespaces/cosmos/before.ts +3 -0
  293. package/src/namespaces/cosmos/builders.ts +15 -0
  294. package/src/namespaces/cosmos/constants.ts +1 -0
  295. package/src/namespaces/cosmos/mod.ts +9 -0
  296. package/src/namespaces/cosmos/types.ts +26 -0
  297. package/src/namespaces/cosmos/utils.ts +21 -0
  298. package/src/namespaces/evm/actions.ts +119 -0
  299. package/src/namespaces/evm/after.ts +3 -0
  300. package/src/namespaces/evm/and.ts +5 -0
  301. package/src/namespaces/evm/before.ts +3 -0
  302. package/src/namespaces/evm/builders.ts +52 -0
  303. package/src/namespaces/evm/constants.ts +2 -0
  304. package/src/namespaces/evm/eip1193.ts +1415 -0
  305. package/src/namespaces/evm/hooks.ts +43 -0
  306. package/src/namespaces/evm/mod.ts +10 -0
  307. package/src/namespaces/evm/types.ts +33 -0
  308. package/src/namespaces/evm/utils.ts +106 -0
  309. package/src/namespaces/solana/actions.ts +44 -0
  310. package/src/namespaces/solana/after.ts +3 -0
  311. package/src/namespaces/solana/and.ts +5 -0
  312. package/src/namespaces/solana/before.ts +3 -0
  313. package/src/namespaces/solana/builders.ts +40 -0
  314. package/src/namespaces/solana/constants.ts +2 -0
  315. package/src/namespaces/solana/hooks.ts +10 -0
  316. package/src/namespaces/solana/mod.ts +10 -0
  317. package/src/namespaces/solana/types.ts +26 -0
  318. package/src/namespaces/solana/utils.ts +36 -0
  319. package/src/namespaces/sui/actions.ts +27 -0
  320. package/src/namespaces/sui/builders.ts +77 -0
  321. package/src/namespaces/sui/constants.ts +8 -0
  322. package/src/namespaces/sui/hooks.ts +10 -0
  323. package/src/namespaces/sui/mod.ts +8 -0
  324. package/src/namespaces/sui/types.ts +26 -0
  325. package/src/namespaces/sui/utils.ts +56 -0
  326. package/src/namespaces/tron/actions.ts +3 -0
  327. package/src/namespaces/tron/after.ts +3 -0
  328. package/src/namespaces/tron/and.ts +5 -0
  329. package/src/namespaces/tron/before.ts +3 -0
  330. package/src/namespaces/tron/builders.ts +15 -0
  331. package/src/namespaces/tron/constants.ts +8 -0
  332. package/src/namespaces/tron/mod.ts +8 -0
  333. package/src/namespaces/tron/types.ts +15 -0
  334. package/src/namespaces/tron/utils.ts +18 -0
  335. package/src/namespaces/utxo/actions.ts +3 -0
  336. package/src/namespaces/utxo/after.ts +3 -0
  337. package/src/namespaces/utxo/and.ts +5 -0
  338. package/src/namespaces/utxo/before.ts +3 -0
  339. package/src/namespaces/utxo/builders.ts +12 -0
  340. package/src/namespaces/utxo/constants.ts +2 -0
  341. package/src/namespaces/utxo/mod.ts +8 -0
  342. package/src/namespaces/utxo/types.ts +15 -0
  343. package/src/namespaces/utxo/utils.ts +18 -0
  344. package/src/test-utils/fixtures.ts +13 -0
  345. package/src/types/accounts.ts +12 -0
  346. package/src/types/actions.ts +11 -0
  347. package/src/types/mod.ts +1 -0
  348. package/src/types/utils.ts +7 -0
  349. package/src/utils/mod.ts +8 -0
  350. package/src/utils/versions.test.ts +22 -0
  351. package/src/utils/versions.ts +62 -0
@@ -0,0 +1,443 @@
1
+ import { describe, expect, test, vi } from 'vitest';
2
+
3
+ import { createStore } from '../mod.js';
4
+
5
+ import { OR_ELSE_ACTION_FAILED_ERROR } from './errors.js';
6
+ import { Namespace } from './namespace.js';
7
+
8
+ interface CustomMatchers<R = unknown> {
9
+ toThrowErrorWithCause: (expectedError: unknown, expectedCause: unknown) => R;
10
+ }
11
+
12
+ declare module 'vitest' {
13
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-object-type
14
+ interface Assertion<T = any> extends CustomMatchers<T> {}
15
+ // eslint-disable-next-line @typescript-eslint/no-empty-object-type
16
+ interface AsymmetricMatchersContaining extends CustomMatchers {}
17
+ }
18
+
19
+ interface TestNamespaceActions {
20
+ connect: () => void;
21
+ disconnect: () => void;
22
+ }
23
+
24
+ expect.extend({
25
+ toThrowErrorWithCause(actualFunction, expectedError, expectedCause) {
26
+ try {
27
+ actualFunction();
28
+ } catch (error) {
29
+ const isExactError = error === expectedError;
30
+ const hasExpectedCause =
31
+ error instanceof Error && error.cause === expectedCause;
32
+
33
+ if (isExactError) {
34
+ return {
35
+ pass: true,
36
+ message: () => `Expected function to throw the exact error.`,
37
+ };
38
+ }
39
+
40
+ if (hasExpectedCause) {
41
+ return {
42
+ pass: true,
43
+ message: () =>
44
+ `Expected function to throw an error with the exact cause.`,
45
+ };
46
+ }
47
+
48
+ return {
49
+ pass: false,
50
+ message: () =>
51
+ `Expected function to throw the exact error with the expected cause, but got a different error.`,
52
+ };
53
+ }
54
+
55
+ return {
56
+ pass: false,
57
+ message: () =>
58
+ `Expected function to throw an Error, but it did not throw.`,
59
+ };
60
+ },
61
+ });
62
+
63
+ describe('check initializing Namespace', () => {
64
+ const NAMESPACE = 'evm';
65
+ const PROVIDER_ID = 'garbage provider';
66
+
67
+ test('initialize a namespace and run an action', () => {
68
+ const connect = vi.fn();
69
+ const disconnect = vi.fn();
70
+ const actions = new Map();
71
+ actions.set('connect', connect);
72
+ actions.set('disconnect', disconnect);
73
+
74
+ const ns = new Namespace<TestNamespaceActions>(NAMESPACE, PROVIDER_ID, {
75
+ actions: actions,
76
+ });
77
+
78
+ ns.run('connect');
79
+
80
+ expect(disconnect).toBeCalledTimes(0);
81
+ expect(connect).toBeCalledTimes(1);
82
+ });
83
+
84
+ test('init action should be called once', () => {
85
+ const connect = vi.fn();
86
+ const disconnect = vi.fn();
87
+ const init = vi.fn();
88
+ const actions = new Map();
89
+ actions.set('connect', connect);
90
+ actions.set('disconnect', disconnect);
91
+ actions.set('init', init);
92
+
93
+ const ns = new Namespace<TestNamespaceActions>(NAMESPACE, PROVIDER_ID, {
94
+ actions: actions,
95
+ });
96
+
97
+ expect(init).toBeCalledTimes(0);
98
+
99
+ ns.run('connect');
100
+ ns.init();
101
+ ns.init();
102
+
103
+ expect(disconnect).toBeCalledTimes(0);
104
+ expect(connect).toBeCalledTimes(1);
105
+ expect(init).toBeCalledTimes(1);
106
+ });
107
+
108
+ test('state should be updated and actions have access to them', () => {
109
+ const connect = vi.fn((context) => {
110
+ const [, setState] = context.state();
111
+ setState('connected', true);
112
+ });
113
+ const init = vi.fn((context) => {
114
+ const [, setState] = context.state();
115
+ setState('connecting', true);
116
+ });
117
+ const actions = new Map();
118
+ actions.set('connect', connect);
119
+ actions.set('init', init);
120
+
121
+ const store = createStore();
122
+ const ns = new Namespace<TestNamespaceActions>(NAMESPACE, PROVIDER_ID, {
123
+ actions: actions,
124
+ store,
125
+ });
126
+
127
+ ns.run('connect');
128
+ ns.init();
129
+ ns.init();
130
+
131
+ const [currentState] = ns.state();
132
+ expect(currentState().connected).toBe(true);
133
+ expect(currentState('connecting')).toBe(true);
134
+ });
135
+
136
+ test('has method returns true when namespace contains the specified action', () => {
137
+ const connectAction = vi.fn((context) => {
138
+ const [, setState] = context.state();
139
+ setState('connected', true);
140
+ });
141
+
142
+ const actionsMap = new Map([['connect', connectAction]]);
143
+
144
+ const store = createStore();
145
+ const namespace = new Namespace<TestNamespaceActions>(
146
+ NAMESPACE,
147
+ PROVIDER_ID,
148
+ {
149
+ actions: actionsMap,
150
+ store,
151
+ }
152
+ );
153
+
154
+ expect(namespace.has('connect')).toBe(true);
155
+ expect(namespace.has('disconnect')).toBe(false);
156
+ });
157
+ test("throw an error if store doesn't set", () => {
158
+ const ns = new Namespace<TestNamespaceActions>(NAMESPACE, PROVIDER_ID, {
159
+ actions: new Map(),
160
+ });
161
+
162
+ expect(() => ns.state()).toThrowError();
163
+ });
164
+ });
165
+
166
+ describe('check actions with hooks and operators', () => {
167
+ const NAMESPACE = 'bip122';
168
+ const PROVIDER_ID = 'garbage provider';
169
+
170
+ test('add actions and run them.', () => {
171
+ const actions = new Map();
172
+ actions.set('hello', () => 'hello world');
173
+ actions.set('bye', () => 'bye bye');
174
+ actions.set('chainable', () => "it's also chainable");
175
+ actions.set('chain2', () => "it's also chainable");
176
+
177
+ const ns = new Namespace<{
178
+ hello: () => string;
179
+ bye: () => string;
180
+ chainable: () => void;
181
+ chain2: () => void;
182
+ }>(NAMESPACE, PROVIDER_ID, { actions });
183
+
184
+ expect(ns.run('hello')).toBe('hello world');
185
+ expect(ns.run('bye')).toBe('bye bye');
186
+
187
+ expect(() => {
188
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
189
+ // @ts-ignore-next-line
190
+ return ns.run('some_action_name_that_has_not_added');
191
+ }).toThrowError();
192
+ });
193
+
194
+ test('should be called before/after target action correctly even with multiple hook assigned to an action name', () => {
195
+ const beforeAction = vi.fn();
196
+ const anotherBeforeAction = vi.fn();
197
+ const afterAction = vi.fn();
198
+ const anotherAfterAction = vi.fn();
199
+ const connectAction = vi.fn();
200
+ const disconnectAction = vi.fn();
201
+
202
+ const actions = new Map();
203
+ actions.set('connect', connectAction);
204
+ actions.set('disconnect', disconnectAction);
205
+
206
+ const ns = new Namespace<TestNamespaceActions>(NAMESPACE, PROVIDER_ID, {
207
+ actions,
208
+ });
209
+
210
+ ns.run('connect');
211
+ expect(connectAction).toBeCalledTimes(1);
212
+ expect(beforeAction).toBeCalledTimes(0);
213
+ expect(anotherBeforeAction).toBeCalledTimes(0);
214
+ expect(afterAction).toBeCalledTimes(0);
215
+ expect(anotherAfterAction).toBeCalledTimes(0);
216
+
217
+ ns.before('connect', beforeAction);
218
+ ns.before('connect', anotherBeforeAction);
219
+ ns.run('connect');
220
+ expect(connectAction).toBeCalledTimes(2);
221
+ expect(beforeAction).toBeCalledTimes(1);
222
+ expect(anotherBeforeAction).toBeCalledTimes(1);
223
+ expect(afterAction).toBeCalledTimes(0);
224
+ expect(anotherAfterAction).toBeCalledTimes(0);
225
+
226
+ ns.after('connect', afterAction);
227
+ ns.after('connect', anotherAfterAction);
228
+ ns.run('connect');
229
+ expect(beforeAction).toBeCalledTimes(2);
230
+ expect(anotherBeforeAction).toBeCalledTimes(2);
231
+ expect(afterAction).toBeCalledTimes(1);
232
+ expect(anotherAfterAction).toBeCalledTimes(1);
233
+ });
234
+
235
+ test('should call `and_then` sequentially.', () => {
236
+ const andActionFirst = vi.fn((_ctx, result) => result + 1);
237
+ const andActionSecond = vi.fn((_ctx, result) => result + 1);
238
+
239
+ const connectAction = vi.fn(() => 0);
240
+ const disconnectAction = vi.fn();
241
+
242
+ const actions = new Map();
243
+ actions.set('connect', connectAction);
244
+ actions.set('disconnect', disconnectAction);
245
+
246
+ const ns = new Namespace<TestNamespaceActions>(NAMESPACE, PROVIDER_ID, {
247
+ actions: actions,
248
+ });
249
+ ns.and_then('connect', andActionFirst);
250
+ ns.and_then('connect', andActionSecond);
251
+
252
+ const result = ns.run('connect');
253
+
254
+ expect(connectAction).toBeCalledTimes(1);
255
+ expect(andActionFirst).toBeCalledTimes(1);
256
+ expect(andActionSecond).toBeCalledTimes(1);
257
+
258
+ expect(result).toBe(2);
259
+
260
+ ns.run('connect');
261
+ expect(connectAction).toBeCalledTimes(2);
262
+ expect(andActionFirst).toBeCalledTimes(2);
263
+ expect(andActionSecond).toBeCalledTimes(2);
264
+ });
265
+
266
+ test("shouldn't run other `and_then` hooks if one of them fails then fallback to `or_else`.", () => {
267
+ const andActionFirst = vi.fn((_ctx, _result) => {
268
+ throw new Error('Oops!');
269
+ });
270
+ const andActionSecond = vi.fn((_ctx, result) => result + 1);
271
+
272
+ const orAction = vi.fn((_ctx, e) => e instanceof Error);
273
+
274
+ const connectAction = vi.fn(() => 0);
275
+ const actions = new Map();
276
+ actions.set('connect', connectAction);
277
+
278
+ const ns = new Namespace<{
279
+ connect: () => void;
280
+ }>(NAMESPACE, PROVIDER_ID, {
281
+ actions: actions,
282
+ configs: {},
283
+ });
284
+ ns.and_then('connect', andActionFirst);
285
+ ns.and_then('connect', andActionSecond);
286
+
287
+ ns.or_else('connect', orAction);
288
+
289
+ const result = ns.run('connect');
290
+
291
+ expect(connectAction).toBeCalledTimes(1);
292
+ expect(andActionFirst).toBeCalledTimes(1);
293
+ expect(andActionSecond).toBeCalledTimes(0);
294
+ expect(orAction).toBeCalledTimes(1);
295
+ expect(result).toBe(true);
296
+ });
297
+
298
+ test('should throw error if there are no `or` to handle error', () => {
299
+ const andActionFirst = vi.fn((_ctx, _result) => {
300
+ throw new Error('Oops!');
301
+ });
302
+ const andActionSecond = vi.fn((_ctx, result) => result + 1);
303
+
304
+ const connectAction = vi.fn(() => 0);
305
+ const actions = new Map();
306
+ actions.set('connect', connectAction);
307
+
308
+ const ns = new Namespace<{
309
+ connect: () => void;
310
+ }>(NAMESPACE, PROVIDER_ID, {
311
+ actions: actions,
312
+ configs: {},
313
+ });
314
+
315
+ ns.and_then('connect', andActionFirst);
316
+ ns.and_then('connect', andActionSecond);
317
+
318
+ expect(() => ns.run('connect')).toThrowError();
319
+ });
320
+
321
+ test('ensure `or_else` has access to error', () => {
322
+ const actions = new Map();
323
+ actions.set('connect', () => {
324
+ throw new Error('Oops!');
325
+ });
326
+
327
+ const ns = new Namespace<{
328
+ connect: () => void;
329
+ }>(NAMESPACE, PROVIDER_ID, {
330
+ actions: actions,
331
+ configs: {},
332
+ });
333
+
334
+ ns.or_else('connect', (_ctx: unknown, err: unknown) => {
335
+ return err instanceof Error;
336
+ });
337
+
338
+ const result = ns.run('connect');
339
+ expect(result).toBe(true);
340
+ });
341
+
342
+ test('should call `or_else` sequentially.', () => {
343
+ const orActionFirst = vi.fn((_ctx, _err) => 1);
344
+ const orActionSecond = vi.fn((_ctx, _err) => _err + 1);
345
+
346
+ const connectAction = vi.fn(() => {
347
+ throw new Error('Oops!');
348
+ });
349
+
350
+ const actions = new Map();
351
+ actions.set('connect', connectAction);
352
+
353
+ const ns = new Namespace<{
354
+ connect: () => void;
355
+ }>(NAMESPACE, PROVIDER_ID, {
356
+ actions: actions,
357
+ });
358
+
359
+ ns.or_else('connect', orActionFirst);
360
+ ns.or_else('connect', orActionSecond);
361
+
362
+ const result = ns.run('connect');
363
+
364
+ expect(connectAction).toBeCalledTimes(1);
365
+ expect(orActionFirst).toBeCalledTimes(1);
366
+ expect(orActionSecond).toBeCalledTimes(1);
367
+
368
+ expect(result).toBe(2);
369
+
370
+ ns.run('connect');
371
+ expect(connectAction).toBeCalledTimes(2);
372
+ expect(orActionFirst).toBeCalledTimes(2);
373
+ expect(orActionSecond).toBeCalledTimes(2);
374
+ });
375
+ test('throw a wrapped error if `or_else` handler fails to run.', () => {
376
+ const orActionFirst = vi.fn((_ctx, _err) => 1);
377
+ const orActionSecondError = 'This is actually a bad situation';
378
+ const orActionSecond = vi.fn((_ctx, _err) => {
379
+ // eslint-disable-next-line @typescript-eslint/only-throw-error
380
+ throw orActionSecondError;
381
+ });
382
+ const connectActionError = new Error('Oops!');
383
+
384
+ const connectAction = vi.fn(() => {
385
+ throw connectActionError;
386
+ });
387
+
388
+ const actions = new Map();
389
+ actions.set('connect', connectAction);
390
+
391
+ const ns = new Namespace<{
392
+ connect: () => void;
393
+ }>(NAMESPACE, PROVIDER_ID, {
394
+ actions: actions,
395
+ });
396
+
397
+ ns.or_else('connect', orActionFirst);
398
+ ns.or_else('connect', orActionSecond);
399
+
400
+ expect(() => ns.run('connect')).toThrowError(
401
+ expect.objectContaining({
402
+ message: OR_ELSE_ACTION_FAILED_ERROR(
403
+ `connect for ${ns.namespaceId} namespace.`
404
+ ),
405
+ cause: expect.objectContaining({
406
+ message: orActionSecondError,
407
+ cause: connectActionError,
408
+ }),
409
+ })
410
+ );
411
+
412
+ expect(orActionFirst).toBeCalledTimes(1);
413
+ expect(connectAction).toBeCalledTimes(1);
414
+ expect(orActionSecond).toBeCalledTimes(1);
415
+ });
416
+
417
+ test('throw the exact error if `or_else` handler fails and the error is an instance of Error.', () => {
418
+ const orActionError = new Error('Or action error');
419
+ const orAction = vi.fn((_ctx, _err) => {
420
+ throw orActionError;
421
+ });
422
+ const connectActionError = new Error('Oops!');
423
+ const connectAction = vi.fn(() => {
424
+ throw connectActionError;
425
+ });
426
+ const actions = new Map();
427
+ actions.set('connect', connectAction);
428
+
429
+ const ns = new Namespace<{
430
+ connect: () => void;
431
+ }>(NAMESPACE, PROVIDER_ID, {
432
+ actions: actions,
433
+ });
434
+ ns.or_else('connect', orAction);
435
+
436
+ expect(() => {
437
+ ns.run('connect');
438
+ }).toThrowErrorWithCause(orActionError, connectActionError);
439
+
440
+ expect(orAction).toBeCalledTimes(1);
441
+ expect(connectAction).toBeCalledTimes(1);
442
+ });
443
+ });