@pasosdejesus/m 0.27.1 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/README.md +2 -2
  2. package/dist/CHANGELOG.md +141 -0
  3. package/dist/compose/derive.d.ts +53 -0
  4. package/dist/compose/derive.d.ts.map +1 -0
  5. package/dist/compose/derive.js +128 -0
  6. package/dist/compose/derive.js.map +1 -0
  7. package/dist/compose/discover.d.ts +32 -0
  8. package/dist/compose/discover.d.ts.map +1 -0
  9. package/dist/compose/discover.js +96 -0
  10. package/dist/compose/discover.js.map +1 -0
  11. package/dist/compose/index.d.ts +17 -0
  12. package/dist/compose/index.d.ts.map +1 -0
  13. package/dist/compose/index.js +16 -0
  14. package/dist/compose/index.js.map +1 -0
  15. package/dist/compose/manifest.d.ts +89 -0
  16. package/dist/compose/manifest.d.ts.map +1 -0
  17. package/dist/compose/manifest.js +16 -0
  18. package/dist/compose/manifest.js.map +1 -0
  19. package/dist/compose/sync.d.ts +12 -0
  20. package/dist/compose/sync.d.ts.map +1 -0
  21. package/dist/compose/sync.js +27 -0
  22. package/dist/compose/sync.js.map +1 -0
  23. package/dist/compose/usage.d.ts +54 -0
  24. package/dist/compose/usage.d.ts.map +1 -0
  25. package/dist/compose/usage.js +167 -0
  26. package/dist/compose/usage.js.map +1 -0
  27. package/dist/compose/vendor.d.ts +45 -0
  28. package/dist/compose/vendor.d.ts.map +1 -0
  29. package/dist/compose/vendor.js +147 -0
  30. package/dist/compose/vendor.js.map +1 -0
  31. package/dist/compose/verify.d.ts +11 -0
  32. package/dist/compose/verify.d.ts.map +1 -0
  33. package/dist/compose/verify.js +74 -0
  34. package/dist/compose/verify.js.map +1 -0
  35. package/dist/e2e/env.d.ts +1 -1
  36. package/dist/e2e/env.js +3 -3
  37. package/dist/e2e/env.js.map +1 -1
  38. package/dist/e2e/local-node.js +1 -1
  39. package/dist/e2e/local-node.js.map +1 -1
  40. package/dist/e2e/wallet-mock.js +1 -1
  41. package/dist/e2e/wallet-mock.js.map +1 -1
  42. package/dist/e2e/warmup.js +1 -1
  43. package/dist/e2e/warmup.js.map +1 -1
  44. package/dist/engine.d.ts +3 -16
  45. package/dist/engine.d.ts.map +1 -1
  46. package/dist/i18n/locales/cli.d.ts.map +1 -1
  47. package/dist/i18n/locales/cli.js +16 -10
  48. package/dist/i18n/locales/cli.js.map +1 -1
  49. package/dist/m.js +13 -10
  50. package/dist/m.js.map +1 -1
  51. package/dist/shadcn_components/ui/button.d.ts +1 -1
  52. package/dist/tasks/create.d.ts +7 -2
  53. package/dist/tasks/create.d.ts.map +1 -1
  54. package/dist/tasks/create.js +13 -17
  55. package/dist/tasks/create.js.map +1 -1
  56. package/dist/tasks/db.d.ts +2 -1
  57. package/dist/tasks/db.d.ts.map +1 -1
  58. package/dist/tasks/db.js +14 -11
  59. package/dist/tasks/db.js.map +1 -1
  60. package/dist/tasks/e2e-summary.js +1 -1
  61. package/dist/tasks/e2e-summary.js.map +1 -1
  62. package/dist/tasks/e2e.js +1 -1
  63. package/dist/tasks/e2e.js.map +1 -1
  64. package/dist/tasks/engine.d.ts.map +1 -1
  65. package/dist/tasks/engine.js +246 -17
  66. package/dist/tasks/engine.js.map +1 -1
  67. package/dist/tasks/msip.d.ts +11 -0
  68. package/dist/tasks/msip.d.ts.map +1 -0
  69. package/dist/tasks/{base-model.js → msip.js} +161 -25
  70. package/dist/tasks/msip.js.map +1 -0
  71. package/dist/tasks/update.d.ts +16 -0
  72. package/dist/tasks/update.d.ts.map +1 -1
  73. package/dist/tasks/update.js +61 -10
  74. package/dist/tasks/update.js.map +1 -1
  75. package/dist/tasks/warmup.js +1 -1
  76. package/dist/tasks/warmup.js.map +1 -1
  77. package/dist/templates/apps/hardhat/README.md +0 -8
  78. package/dist/templates/apps/nextjs/bin/m +3 -0
  79. package/dist/templates/apps/nextjs/package.json.hbs +1 -0
  80. package/dist/templates/apps/nextjs/tests/global-setup.ts +28 -0
  81. package/dist/templates/apps/nextjs/vitest.config.ts +3 -0
  82. package/dist/test-utils/console.d.ts +1 -1
  83. package/dist/test-utils/console.js +1 -1
  84. package/dist/test-utils/kysely-mocks.d.ts +1 -1
  85. package/dist/test-utils/kysely-mocks.js +1 -1
  86. package/dist/test-utils/wallet-mocks.js +1 -1
  87. package/dist/test-utils/wallet-setup.js +1 -1
  88. package/dist/util/engines.d.ts +4 -6
  89. package/dist/util/engines.d.ts.map +1 -1
  90. package/dist/util/engines.js +5 -38
  91. package/dist/util/engines.js.map +1 -1
  92. package/dist/util/msip.d.ts +17 -0
  93. package/dist/util/msip.d.ts.map +1 -0
  94. package/dist/util/msip.js +86 -0
  95. package/dist/util/msip.js.map +1 -0
  96. package/dist/wallet/index.js +1 -1
  97. package/dist/wallet/index.js.map +1 -1
  98. package/dist/wallet/next/i18n.d.ts +1 -1
  99. package/dist/wallet/next/i18n.js +1 -1
  100. package/dist/wallet/next/index.js +1 -1
  101. package/dist/wallet/next/index.js.map +1 -1
  102. package/dist/wallet/next/namespaces.d.ts +1 -1
  103. package/dist/wallet/next/namespaces.js +1 -1
  104. package/dist/wallet/storage/idb.d.ts +1 -1
  105. package/dist/wallet/storage/idb.js +1 -1
  106. package/package.json +4 -6
  107. package/src/e2e/README.md +6 -6
  108. package/src/tasks/README.md +3 -3
  109. package/src/test-utils/README.md +2 -2
  110. package/src/wallet/README.md +4 -4
  111. package/dist/base-model/baseline.generated.d.ts +0 -48
  112. package/dist/base-model/baseline.generated.d.ts.map +0 -1
  113. package/dist/base-model/baseline.generated.js +0 -930
  114. package/dist/base-model/baseline.generated.js.map +0 -1
  115. package/dist/base-model/check.d.ts +0 -6
  116. package/dist/base-model/check.d.ts.map +0 -1
  117. package/dist/base-model/check.js +0 -195
  118. package/dist/base-model/check.js.map +0 -1
  119. package/dist/base-model/forward/baseline_1_0_0.d.ts +0 -3
  120. package/dist/base-model/forward/baseline_1_0_0.d.ts.map +0 -1
  121. package/dist/base-model/forward/baseline_1_0_0.js +0 -23
  122. package/dist/base-model/forward/baseline_1_0_0.js.map +0 -1
  123. package/dist/base-model/forward/index.d.ts +0 -28
  124. package/dist/base-model/forward/index.d.ts.map +0 -1
  125. package/dist/base-model/forward/index.js +0 -126
  126. package/dist/base-model/forward/index.js.map +0 -1
  127. package/dist/base-model/forward/index.test.d.ts +0 -2
  128. package/dist/base-model/forward/index.test.d.ts.map +0 -1
  129. package/dist/base-model/forward/index.test.js +0 -65
  130. package/dist/base-model/forward/index.test.js.map +0 -1
  131. package/dist/base-model/forward/policy.d.ts +0 -16
  132. package/dist/base-model/forward/policy.d.ts.map +0 -1
  133. package/dist/base-model/forward/policy.js +0 -37
  134. package/dist/base-model/forward/policy.js.map +0 -1
  135. package/dist/base-model/forward/policy.test.d.ts +0 -2
  136. package/dist/base-model/forward/policy.test.d.ts.map +0 -1
  137. package/dist/base-model/forward/policy.test.js +0 -40
  138. package/dist/base-model/forward/policy.test.js.map +0 -1
  139. package/dist/base-model/forward/types.d.ts +0 -21
  140. package/dist/base-model/forward/types.d.ts.map +0 -1
  141. package/dist/base-model/forward/types.js +0 -2
  142. package/dist/base-model/forward/types.js.map +0 -1
  143. package/dist/base-model/generate.d.ts +0 -42
  144. package/dist/base-model/generate.d.ts.map +0 -1
  145. package/dist/base-model/generate.js +0 -241
  146. package/dist/base-model/generate.js.map +0 -1
  147. package/dist/base-model/guidelines.d.ts +0 -13
  148. package/dist/base-model/guidelines.d.ts.map +0 -1
  149. package/dist/base-model/guidelines.js +0 -61
  150. package/dist/base-model/guidelines.js.map +0 -1
  151. package/dist/base-model/index.d.ts +0 -24
  152. package/dist/base-model/index.d.ts.map +0 -1
  153. package/dist/base-model/index.js +0 -29
  154. package/dist/base-model/index.js.map +0 -1
  155. package/dist/base-model/parse-structure.d.ts +0 -4
  156. package/dist/base-model/parse-structure.d.ts.map +0 -1
  157. package/dist/base-model/parse-structure.js +0 -170
  158. package/dist/base-model/parse-structure.js.map +0 -1
  159. package/dist/base-model/queries.d.ts +0 -34
  160. package/dist/base-model/queries.d.ts.map +0 -1
  161. package/dist/base-model/queries.js +0 -118
  162. package/dist/base-model/queries.js.map +0 -1
  163. package/dist/base-model/references/learn-tg.d.ts +0 -21
  164. package/dist/base-model/references/learn-tg.d.ts.map +0 -1
  165. package/dist/base-model/references/learn-tg.js +0 -65
  166. package/dist/base-model/references/learn-tg.js.map +0 -1
  167. package/dist/base-model/references/msip.d.ts +0 -29
  168. package/dist/base-model/references/msip.d.ts.map +0 -1
  169. package/dist/base-model/references/msip.js +0 -33
  170. package/dist/base-model/references/msip.js.map +0 -1
  171. package/dist/base-model/types.d.ts +0 -207
  172. package/dist/base-model/types.d.ts.map +0 -1
  173. package/dist/base-model/types.js +0 -10
  174. package/dist/base-model/types.js.map +0 -1
  175. package/dist/base-model/version.d.ts +0 -19
  176. package/dist/base-model/version.d.ts.map +0 -1
  177. package/dist/base-model/version.js +0 -26
  178. package/dist/base-model/version.js.map +0 -1
  179. package/dist/base-model/wallet-link.d.ts +0 -69
  180. package/dist/base-model/wallet-link.d.ts.map +0 -1
  181. package/dist/base-model/wallet-link.js +0 -220
  182. package/dist/base-model/wallet-link.js.map +0 -1
  183. package/dist/base-model/wallet-link.test.d.ts +0 -2
  184. package/dist/base-model/wallet-link.test.d.ts.map +0 -1
  185. package/dist/base-model/wallet-link.test.js +0 -147
  186. package/dist/base-model/wallet-link.test.js.map +0 -1
  187. package/dist/e2e/env.test.d.ts +0 -2
  188. package/dist/e2e/env.test.d.ts.map +0 -1
  189. package/dist/e2e/env.test.js +0 -72
  190. package/dist/e2e/env.test.js.map +0 -1
  191. package/dist/e2e/full-wallet.test.d.ts +0 -2
  192. package/dist/e2e/full-wallet.test.d.ts.map +0 -1
  193. package/dist/e2e/full-wallet.test.js +0 -63
  194. package/dist/e2e/full-wallet.test.js.map +0 -1
  195. package/dist/e2e/in-app-wallet.test.d.ts +0 -2
  196. package/dist/e2e/in-app-wallet.test.d.ts.map +0 -1
  197. package/dist/e2e/in-app-wallet.test.js +0 -52
  198. package/dist/e2e/in-app-wallet.test.js.map +0 -1
  199. package/dist/e2e/local-node.test.d.ts +0 -2
  200. package/dist/e2e/local-node.test.d.ts.map +0 -1
  201. package/dist/e2e/local-node.test.js +0 -43
  202. package/dist/e2e/local-node.test.js.map +0 -1
  203. package/dist/e2e/retry.test.d.ts +0 -2
  204. package/dist/e2e/retry.test.d.ts.map +0 -1
  205. package/dist/e2e/retry.test.js +0 -43
  206. package/dist/e2e/retry.test.js.map +0 -1
  207. package/dist/e2e/signer.test.d.ts +0 -2
  208. package/dist/e2e/signer.test.d.ts.map +0 -1
  209. package/dist/e2e/signer.test.js +0 -57
  210. package/dist/e2e/signer.test.js.map +0 -1
  211. package/dist/e2e/siwe-optional.test.d.ts +0 -2
  212. package/dist/e2e/siwe-optional.test.d.ts.map +0 -1
  213. package/dist/e2e/siwe-optional.test.js +0 -13
  214. package/dist/e2e/siwe-optional.test.js.map +0 -1
  215. package/dist/e2e/wallet-mock.test.d.ts +0 -2
  216. package/dist/e2e/wallet-mock.test.d.ts.map +0 -1
  217. package/dist/e2e/wallet-mock.test.js +0 -28
  218. package/dist/e2e/wallet-mock.test.js.map +0 -1
  219. package/dist/e2e/warmup.test.d.ts +0 -2
  220. package/dist/e2e/warmup.test.d.ts.map +0 -1
  221. package/dist/e2e/warmup.test.js +0 -67
  222. package/dist/e2e/warmup.test.js.map +0 -1
  223. package/dist/engine.test.d.ts +0 -2
  224. package/dist/engine.test.d.ts.map +0 -1
  225. package/dist/engine.test.js +0 -35
  226. package/dist/engine.test.js.map +0 -1
  227. package/dist/index.test.d.ts +0 -2
  228. package/dist/index.test.d.ts.map +0 -1
  229. package/dist/index.test.js +0 -11
  230. package/dist/index.test.js.map +0 -1
  231. package/dist/tasks/base-model.d.ts +0 -5
  232. package/dist/tasks/base-model.d.ts.map +0 -1
  233. package/dist/tasks/base-model.js.map +0 -1
  234. package/dist/tasks/e2e.test.d.ts +0 -2
  235. package/dist/tasks/e2e.test.d.ts.map +0 -1
  236. package/dist/tasks/e2e.test.js +0 -108
  237. package/dist/tasks/e2e.test.js.map +0 -1
  238. package/dist/tasks/warmup.test.d.ts +0 -2
  239. package/dist/tasks/warmup.test.d.ts.map +0 -1
  240. package/dist/tasks/warmup.test.js +0 -40
  241. package/dist/tasks/warmup.test.js.map +0 -1
  242. package/dist/templates/apps/nextjs/tests/index.test.ts +0 -7
  243. package/dist/templates/apps/nextjs/tests/test-utils.example.test.ts +0 -169
  244. package/dist/templates/apps/nextjs/tsconfig.test.json +0 -38
  245. package/dist/test-utils/console.test.d.ts +0 -2
  246. package/dist/test-utils/console.test.d.ts.map +0 -1
  247. package/dist/test-utils/console.test.js +0 -70
  248. package/dist/test-utils/console.test.js.map +0 -1
  249. package/dist/test-utils/kysely-mocks.test.d.ts +0 -2
  250. package/dist/test-utils/kysely-mocks.test.d.ts.map +0 -1
  251. package/dist/test-utils/kysely-mocks.test.js +0 -126
  252. package/dist/test-utils/kysely-mocks.test.js.map +0 -1
  253. package/dist/test-utils/wallet-mocks.test.d.ts +0 -2
  254. package/dist/test-utils/wallet-mocks.test.d.ts.map +0 -1
  255. package/dist/test-utils/wallet-mocks.test.js +0 -55
  256. package/dist/test-utils/wallet-mocks.test.js.map +0 -1
  257. package/dist/test-utils/wallet-setup.test.d.ts +0 -2
  258. package/dist/test-utils/wallet-setup.test.d.ts.map +0 -1
  259. package/dist/test-utils/wallet-setup.test.js +0 -18
  260. package/dist/test-utils/wallet-setup.test.js.map +0 -1
  261. package/dist/util/engines.test.d.ts +0 -2
  262. package/dist/util/engines.test.d.ts.map +0 -1
  263. package/dist/util/engines.test.js +0 -79
  264. package/dist/util/engines.test.js.map +0 -1
  265. package/dist/wallet/biometric.test.d.ts +0 -2
  266. package/dist/wallet/biometric.test.d.ts.map +0 -1
  267. package/dist/wallet/biometric.test.js +0 -44
  268. package/dist/wallet/biometric.test.js.map +0 -1
  269. package/dist/wallet/crypto.test.d.ts +0 -2
  270. package/dist/wallet/crypto.test.d.ts.map +0 -1
  271. package/dist/wallet/crypto.test.js +0 -34
  272. package/dist/wallet/crypto.test.js.map +0 -1
  273. package/dist/wallet/destinations.test.d.ts +0 -2
  274. package/dist/wallet/destinations.test.d.ts.map +0 -1
  275. package/dist/wallet/destinations.test.js +0 -34
  276. package/dist/wallet/destinations.test.js.map +0 -1
  277. package/dist/wallet/external-provider.test.d.ts +0 -2
  278. package/dist/wallet/external-provider.test.d.ts.map +0 -1
  279. package/dist/wallet/external-provider.test.js +0 -44
  280. package/dist/wallet/external-provider.test.js.map +0 -1
  281. package/dist/wallet/indexeddb.test.d.ts +0 -2
  282. package/dist/wallet/indexeddb.test.d.ts.map +0 -1
  283. package/dist/wallet/indexeddb.test.js +0 -28
  284. package/dist/wallet/indexeddb.test.js.map +0 -1
  285. package/dist/wallet/kdf.test.d.ts +0 -2
  286. package/dist/wallet/kdf.test.d.ts.map +0 -1
  287. package/dist/wallet/kdf.test.js +0 -54
  288. package/dist/wallet/kdf.test.js.map +0 -1
  289. package/dist/wallet/next/components.test.d.ts +0 -2
  290. package/dist/wallet/next/components.test.d.ts.map +0 -1
  291. package/dist/wallet/next/components.test.js +0 -122
  292. package/dist/wallet/next/components.test.js.map +0 -1
  293. package/dist/wallet/next/useInAppWallet.test.d.ts +0 -2
  294. package/dist/wallet/next/useInAppWallet.test.d.ts.map +0 -1
  295. package/dist/wallet/next/useInAppWallet.test.js +0 -261
  296. package/dist/wallet/next/useInAppWallet.test.js.map +0 -1
  297. package/dist/wallet/provider.test.d.ts +0 -2
  298. package/dist/wallet/provider.test.d.ts.map +0 -1
  299. package/dist/wallet/provider.test.js +0 -170
  300. package/dist/wallet/provider.test.js.map +0 -1
  301. package/dist/wallet/signer.test.d.ts +0 -2
  302. package/dist/wallet/signer.test.d.ts.map +0 -1
  303. package/dist/wallet/signer.test.js +0 -62
  304. package/dist/wallet/signer.test.js.map +0 -1
  305. package/dist/wallet/storage.test.d.ts +0 -2
  306. package/dist/wallet/storage.test.d.ts.map +0 -1
  307. package/dist/wallet/storage.test.js +0 -103
  308. package/dist/wallet/storage.test.js.map +0 -1
  309. package/dist/wallet/wallet.test.d.ts +0 -2
  310. package/dist/wallet/wallet.test.d.ts.map +0 -1
  311. package/dist/wallet/wallet.test.js +0 -150
  312. package/dist/wallet/wallet.test.js.map +0 -1
@@ -1,38 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "lib": ["dom", "dom.iterable", "esnext"],
5
- "allowJs": true,
6
- "skipLibCheck": true,
7
- "strict": true,
8
- "noEmit": true,
9
- "esModuleInterop": true,
10
- "module": "esnext",
11
- "moduleResolution": "bundler",
12
- "resolveJsonModule": true,
13
- "isolatedModules": true,
14
- "jsx": "react-jsx",
15
- "incremental": true,
16
- "plugins": [
17
- {
18
- "name": "next"
19
- }
20
- ],
21
- "paths": {
22
- "@/*": ["./*"]
23
- },
24
- "types": ["@testing-library/jest-dom", "vitest", "vitest/globals"]
25
- },
26
- "include": [
27
- "next-env.d.ts",
28
- "**/*.ts",
29
- "**/*.tsx",
30
- "types/**/*.d.ts",
31
- "**/*.test.ts",
32
- "**/*.test.tsx",
33
- "vitest.setup.ts"
34
- ],
35
- "exclude": [
36
- "node_modules"
37
- ]
38
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=console.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"console.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/console.test.ts"],"names":[],"mappings":""}
@@ -1,70 +0,0 @@
1
- import { afterEach, describe, expect, it, vi } from 'vitest';
2
- import { silenceConsole } from './console.js';
3
- // U2 (m/REQ/49): silencing expected console noise, graduated from learn.tg's
4
- // `NOISY_PATTERNS` wrapper.
5
- function fakeConsole() {
6
- const calls = {
7
- log: [], warn: [], error: [], info: [], debug: [],
8
- };
9
- const target = {
10
- log: (...args) => calls.log.push(args),
11
- warn: (...args) => calls.warn.push(args),
12
- error: (...args) => calls.error.push(args),
13
- info: (...args) => calls.info.push(args),
14
- debug: (...args) => calls.debug.push(args),
15
- };
16
- return { target, calls };
17
- }
18
- afterEach(() => vi.restoreAllMocks());
19
- describe('silenceConsole (U2)', () => {
20
- it('suppresses a suppressed log and lets the rest through', () => {
21
- const { target, calls } = fakeConsole();
22
- const handle = silenceConsole(['[retry]'], { console: target });
23
- target.log('[retry] intento 1 falló');
24
- target.log('resultado útil');
25
- expect(calls.log).toEqual([['resultado útil']]);
26
- expect(handle.suppressed).toEqual([['[retry] intento 1 falló']]);
27
- handle.restore();
28
- });
29
- it('matches when any argument contains the pattern', () => {
30
- const { target, calls } = fakeConsole();
31
- const handle = silenceConsole(['AbortError'], { console: target });
32
- target.warn('navegación cancelada', new Error('AbortError: aborted'));
33
- expect(calls.warn).toHaveLength(0);
34
- handle.restore();
35
- });
36
- it('wraps log, warn and error by default', () => {
37
- const { target, calls } = fakeConsole();
38
- const handle = silenceConsole(['ruido'], { console: target });
39
- target.log('ruido A');
40
- target.warn('ruido B');
41
- target.error('ruido C');
42
- target.info('ruido D'); // not wrapped by default
43
- expect(calls.log).toHaveLength(0);
44
- expect(calls.warn).toHaveLength(0);
45
- expect(calls.error).toHaveLength(0);
46
- expect(calls.info).toHaveLength(1);
47
- handle.restore();
48
- });
49
- it('restores the original methods', () => {
50
- const { target, calls } = fakeConsole();
51
- const handle = silenceConsole(['ruido'], { console: target });
52
- handle.restore();
53
- target.log('ruido A');
54
- expect(calls.log).toHaveLength(1);
55
- });
56
- // Defecto reportado por learn.tg: un namespace de módulo (objeto sin
57
- // Symbol.toPrimitive) revienta con `String()`; no debe tumbar el log.
58
- it('no revienta con objetos que no se pueden convertir a primitivo', () => {
59
- const { target, calls } = fakeConsole();
60
- const handle = silenceConsole(['[retry]'], { console: target });
61
- const notPrimitive = Object.create(null);
62
- expect(() => target.log('Module imported:', notPrimitive)).not.toThrow();
63
- expect(() => target.warn(notPrimitive)).not.toThrow();
64
- // No coincide con el patrón: pasa tal cual.
65
- expect(calls.log).toHaveLength(1);
66
- expect(handle.suppressed).toHaveLength(0);
67
- handle.restore();
68
- });
69
- });
70
- //# sourceMappingURL=console.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"console.test.js","sourceRoot":"","sources":["../../src/test-utils/console.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=kysely-mocks.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kysely-mocks.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/kysely-mocks.test.ts"],"names":[],"mappings":""}
@@ -1,126 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { createMockSql, createExpressionBuilder, MockKysely, apiDbMocks, } from './kysely-mocks.js';
3
- // U1 (m/REQ/49): the shared builder must cover what real API routes use, so
4
- // consumers can delete their hand-written `vi.mock('kysely', …)`.
5
- describe('createMockSql (U1)', () => {
6
- it('is a template tag that captures the text and parameters', () => {
7
- const sql = createMockSql();
8
- const fragment = sql `count(*) = ${1} and x`;
9
- expect(fragment.__sql).toBe('count(*) = ? and x');
10
- expect(fragment.parameters).toEqual([1]);
11
- });
12
- it('exposes raw/ref/val/join/literal used by real code', () => {
13
- const sql = createMockSql();
14
- expect(sql.raw('platform_score').__sql).toBe('platform_score');
15
- expect(sql.ref('usuario.id').__sql).toBe('usuario.id');
16
- expect(sql.val(42)).toBe(42);
17
- expect(sql.literal('foo').__sql).toBe('foo');
18
- expect(sql.join([sql.raw('a'), sql.raw('b')]).__sql).toBe('a b');
19
- });
20
- });
21
- describe('createExpressionBuilder (U1)', () => {
22
- it('invokes the subquery callback of eb(col, in, cb)', () => {
23
- const eb = createExpressionBuilder();
24
- const seen = [];
25
- eb('id', 'in', (sub) => {
26
- seen.push(sub);
27
- return {};
28
- });
29
- expect(seen).toHaveLength(1);
30
- });
31
- // Regresión reportada por sivel3: el callback de `eb(col, in, cb)` debe traer
32
- // un builder con `selectFrom` (subconsulta), como el `eb` real de Kysely.
33
- it('el callback de eb(col, in, cb) arma subconsultas con selectFrom', () => {
34
- const eb = createExpressionBuilder();
35
- let inner;
36
- eb('c.id', 'in', (sub) => {
37
- inner = sub.selectFrom('sivel2_gen_acto as a').select('a.caso_id').where('a.x', '=', 1);
38
- });
39
- expect(inner).toBeTruthy();
40
- expect(typeof inner.selectFrom).toBe('function');
41
- });
42
- it('eb.exists(cb) también recibe el builder de subconsulta', () => {
43
- const eb = createExpressionBuilder();
44
- const expr = eb.exists((sub) => sub.selectFrom('t').select('id'));
45
- expect(expr.__expr).toBe('exists');
46
- });
47
- it('builds and/or/not/exists combinators', () => {
48
- const eb = createExpressionBuilder();
49
- expect(eb.or([{ a: 1 }]).__expr).toBe('or');
50
- expect(eb.and([{ a: 1 }]).__expr).toBe('and');
51
- expect(eb.not({ a: 1 }).__expr).toBe('not');
52
- expect(eb.exists((b) => b).__expr).toBe('exists');
53
- });
54
- });
55
- describe('MockKysely builder (U1)', () => {
56
- it('exercises eb.or inside where, and a subquery as a table', () => {
57
- const db = new MockKysely();
58
- const eb = createExpressionBuilder();
59
- const base = db.selectFrom('usuario').select('id').as('lb');
60
- const exec = db
61
- .selectFrom(base)
62
- .selectAll()
63
- .where((builder) => builder.or([builder('lb.id', '=', 1), builder('lb.id', '=', 2)]))
64
- .where(eb.or([eb('a', '=', 1), eb('b', '=', 2)]));
65
- expect(exec).toBe(db);
66
- });
67
- it('accepts where(sql`…`) and having', () => {
68
- const db = new MockKysely();
69
- const sql = createMockSql();
70
- const q = db
71
- .selectFrom('score')
72
- .select('usuario_id')
73
- .groupBy('usuario_id')
74
- .where(sql `score > 0`)
75
- .having(sql `count(*) > ${2}`);
76
- expect(q).toBe(db);
77
- });
78
- it('supports fn aggregations by default and via select callbacks', () => {
79
- const db = new MockKysely();
80
- expect(db.fn.countAll().as).toBeTypeOf('function');
81
- expect(db.fn.sum().as).toBeTypeOf('function');
82
- const q = db.selectFrom('t').select(({ fn }) => [fn.countAll().as('n'), fn.avg('x').as('a')]);
83
- expect(q).toBe(db);
84
- });
85
- it('runs transaction().execute(cb) with a fresh mock', async () => {
86
- const db = new MockKysely({ execute: () => Promise.resolve([{ ok: true }]) });
87
- const rows = await db.transaction().execute(async (trx) => trx.execute());
88
- expect(rows).toEqual([{ ok: true }]);
89
- });
90
- it('chains onConflict(...).doNothing()', () => {
91
- const db = new MockKysely();
92
- const oc = db.insertInto('t').values({}).onConflict((b) => b.column('id').doNothing());
93
- expect(oc).toBe(db);
94
- });
95
- it('exposes getExecutor().executeQuery through the injected sqlExecute', async () => {
96
- const sqlExecute = (query) => Promise.resolve({ rows: [query] });
97
- const db = new MockKysely({ sqlExecute });
98
- const res = await db.getExecutor().executeQuery({ tag: 'x' });
99
- expect(res.rows).toEqual([{ tag: 'x' }]);
100
- });
101
- });
102
- describe('apiDbMocks (U1)', () => {
103
- it('exports a wired eb and sql alongside the classic mocks', () => {
104
- expect(apiDbMocks.mockEb).toBeTypeOf('function');
105
- expect(apiDbMocks.mockSql.raw).toBeTypeOf('function');
106
- const db = new apiDbMocks.MockKysely();
107
- expect(db.selectFrom('x')).toBe(db);
108
- });
109
- // Regresión reportada por learn.tg: el tag `sql` volvió a delegar en
110
- // `mockSqlExecute`, el patrón histórico para controlar el SQL.
111
- it('el tag sql delega en mockSqlExecute', async () => {
112
- apiDbMocks.mockSqlExecute.mockReset();
113
- apiDbMocks.mockSqlExecute.mockResolvedValue({ rows: [{ total: '3' }] });
114
- const fragment = apiDbMocks.mockSql `count(*)`;
115
- const result = await fragment.execute({ tag: 'q' });
116
- expect(apiDbMocks.mockSqlExecute).toHaveBeenCalledWith({ tag: 'q' });
117
- expect(result.rows).toEqual([{ total: '3' }]);
118
- });
119
- it('resetMocks re-cablea el tag sql a mockSqlExecute', async () => {
120
- apiDbMocks.resetMocks();
121
- apiDbMocks.mockSqlExecute.mockResolvedValue({ rows: [{ ok: 1 }] });
122
- const result = await apiDbMocks.mockSql `x`.execute({});
123
- expect(result.rows).toEqual([{ ok: 1 }]);
124
- });
125
- });
126
- //# sourceMappingURL=kysely-mocks.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kysely-mocks.test.js","sourceRoot":"","sources":["../../src/test-utils/kysely-mocks.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=wallet-mocks.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet-mocks.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/wallet-mocks.test.ts"],"names":[],"mappings":""}
@@ -1,55 +0,0 @@
1
- import { afterEach, describe, expect, it } from 'vitest';
2
- import { assertUserVerification, createPrfCredential, detectPlatformSupport, evaluatePrf, hasRecentUserVerification, } from '../wallet/web-authn.js';
3
- import { clearDestinations, isKnownDestination, rememberDestination, setDestinationsPrefix, } from '../wallet/destinations.js';
4
- import { installLocalStorage, mockWebAuthn } from './wallet-mocks.js';
5
- afterEach(() => {
6
- clearDestinations();
7
- });
8
- describe('installLocalStorage', () => {
9
- it('provides a working in-memory localStorage on globalThis', () => {
10
- const storage = installLocalStorage();
11
- storage.setItem('a', '1');
12
- expect(globalThis.localStorage.getItem('a')).toBe('1');
13
- expect(storage.length).toBe(1);
14
- expect(storage.key(0)).toBe('a');
15
- storage.removeItem('a');
16
- expect(storage.getItem('a')).toBeNull();
17
- });
18
- });
19
- describe('destinations with mocked localStorage', () => {
20
- it('remembers and reports known destinations', () => {
21
- installLocalStorage();
22
- setDestinationsPrefix('test.destinations.');
23
- const wallet = '0xABC';
24
- const dest = '0xDeF';
25
- expect(isKnownDestination(wallet, dest)).toBe(false);
26
- rememberDestination(wallet, dest);
27
- expect(isKnownDestination(wallet, dest)).toBe(true);
28
- expect(globalThis.localStorage.getItem('test.destinations.0xabc')).toContain('0xdef');
29
- });
30
- });
31
- describe('mockWebAuthn', () => {
32
- it('reports platform support and creates a PRF credential', async () => {
33
- const mock = mockWebAuthn();
34
- const support = await detectPlatformSupport();
35
- expect(support).toEqual({ webauthn: true, userVerifying: true, prf: true });
36
- const credential = await createPrfCredential('alice');
37
- expect(credential.prfEnabled).toBe(true);
38
- expect(credential.credentialId).toBe(mock.credentialId);
39
- });
40
- it('evaluates the PRF and marks the user verified', async () => {
41
- const secret = new Uint8Array(32).fill(9);
42
- mockWebAuthn({ prfSecret: secret });
43
- const result = await evaluatePrf('AQIDBA==', new Uint8Array(32));
44
- expect(Array.from(result ?? [])).toEqual(Array.from(secret));
45
- await assertUserVerification('AQIDBA==');
46
- expect(hasRecentUserVerification()).toBe(true);
47
- });
48
- it('surfaces a cancellation as NotAllowedError', async () => {
49
- mockWebAuthn({ cancelNext: true });
50
- await expect(evaluatePrf('AQIDBA==', new Uint8Array(32))).rejects.toMatchObject({
51
- name: 'NotAllowedError',
52
- });
53
- });
54
- });
55
- //# sourceMappingURL=wallet-mocks.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet-mocks.test.js","sourceRoot":"","sources":["../../src/test-utils/wallet-mocks.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import './wallet-setup.js';
2
- //# sourceMappingURL=wallet-setup.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet-setup.test.d.ts","sourceRoot":"","sources":["../../src/test-utils/wallet-setup.test.ts"],"names":[],"mappings":"AAGA,OAAO,mBAAmB,CAAA"}
@@ -1,18 +0,0 @@
1
- // @vitest-environment jsdom
2
- import { describe, expect, it } from 'vitest';
3
- // Side effect: installs localStorage, fake-indexeddb and a WebAuthn mock.
4
- import './wallet-setup.js';
5
- import { createPrfCredential, detectPlatformSupport } from '../wallet/web-authn.js';
6
- describe('wallet-setup preset (jsdom)', () => {
7
- it('provides a DOM, a localStorage and a WebAuthn mock', async () => {
8
- expect(typeof document).toBe('object');
9
- expect(document.createElement('div')).toBeTruthy();
10
- globalThis.localStorage.setItem('k', 'v');
11
- expect(globalThis.localStorage.getItem('k')).toBe('v');
12
- const support = await detectPlatformSupport();
13
- expect(support).toEqual({ webauthn: true, userVerifying: true, prf: true });
14
- const credential = await createPrfCredential('alice');
15
- expect(credential.prfEnabled).toBe(true);
16
- });
17
- });
18
- //# sourceMappingURL=wallet-setup.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wallet-setup.test.js","sourceRoot":"","sources":["../../src/test-utils/wallet-setup.test.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,0EAA0E;AAC1E,OAAO,mBAAmB,CAAA;AAC1B,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEnF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,CAAC,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAElD,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QACzC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEtD,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAA;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3E,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACrD,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=engines.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engines.test.d.ts","sourceRoot":"","sources":["../../src/util/engines.test.ts"],"names":[],"mappings":""}
@@ -1,79 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { mkdtemp, mkdir, writeFile, rm } from 'node:fs/promises';
3
- import { tmpdir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { discoverEngines, discoverEnginesUpward, findPackagesDir, isEnginePackage } from './engines.js';
6
- async function tmpRoot() {
7
- return mkdtemp(join(tmpdir(), 'm-engines-'));
8
- }
9
- describe('discoverEngines', () => {
10
- it('returns manifests from packages/*/engine.json', async () => {
11
- const root = await tmpRoot();
12
- try {
13
- await mkdir(join(root, 'packages', 'foo'), { recursive: true });
14
- await writeFile(join(root, 'packages', 'foo', 'engine.json'), JSON.stringify({ name: 'foo', version: '1.0.0', stage: 'local' }));
15
- const engines = await discoverEngines(root);
16
- expect(engines).toHaveLength(1);
17
- expect(engines[0].name).toBe('foo');
18
- }
19
- finally {
20
- await rm(root, { recursive: true, force: true });
21
- }
22
- });
23
- it('returns [] when there is no packages dir', async () => {
24
- const root = await tmpRoot();
25
- try {
26
- expect(await discoverEngines(root)).toEqual([]);
27
- }
28
- finally {
29
- await rm(root, { recursive: true, force: true });
30
- }
31
- });
32
- });
33
- describe('findPackagesDir', () => {
34
- it('finds packages dir upward from a nested cwd', async () => {
35
- const root = await tmpRoot();
36
- try {
37
- await mkdir(join(root, 'packages'), { recursive: true });
38
- const nested = join(root, 'apps', 'nextjs');
39
- await mkdir(nested, { recursive: true });
40
- expect(await findPackagesDir(nested)).toBe(join(root, 'packages'));
41
- }
42
- finally {
43
- await rm(root, { recursive: true, force: true });
44
- }
45
- });
46
- it('returns null when not found', async () => {
47
- const root = await tmpRoot();
48
- try {
49
- expect(await findPackagesDir(root)).toBeNull();
50
- }
51
- finally {
52
- await rm(root, { recursive: true, force: true });
53
- }
54
- });
55
- });
56
- describe('discoverEnginesUpward', () => {
57
- it('discovers engines from a nested cwd', async () => {
58
- const root = await tmpRoot();
59
- try {
60
- await mkdir(join(root, 'packages', 'foo'), { recursive: true });
61
- await writeFile(join(root, 'packages', 'foo', 'engine.json'), JSON.stringify({ name: 'foo', version: '1.0.0', stage: 'local' }));
62
- const nested = join(root, 'apps', 'nextjs');
63
- await mkdir(nested, { recursive: true });
64
- const engines = await discoverEnginesUpward(nested);
65
- expect(engines.map(e => e.name)).toEqual(['foo']);
66
- }
67
- finally {
68
- await rm(root, { recursive: true, force: true });
69
- }
70
- });
71
- });
72
- describe('isEnginePackage', () => {
73
- it('detects @pasosdejesus/m-* packages by convention', () => {
74
- expect(isEnginePackage('@pasosdejesus/mpdj', '/nonexistent')).toBe(true);
75
- expect(isEnginePackage('@pasosdejesus/m', '/nonexistent')).toBe(false);
76
- expect(isEnginePackage('lodash', '/nonexistent')).toBe(false);
77
- });
78
- });
79
- //# sourceMappingURL=engines.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engines.test.js","sourceRoot":"","sources":["../../src/util/engines.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=biometric.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"biometric.test.d.ts","sourceRoot":"","sources":["../../src/wallet/biometric.test.ts"],"names":[],"mappings":""}
@@ -1,44 +0,0 @@
1
- import { beforeAll, beforeEach, describe, expect, it } from 'vitest';
2
- import { installIndexedDB, mockWebAuthn } from '../test-utils/wallet-mocks.js';
3
- import { MemoryStorage } from './storage/memory.js';
4
- import { createWallet, deleteWallet, hasBiometricUnlock, lockWallet, unlockWithBiometric, enableBiometricUnlock, disableBiometricUnlock, } from './wallet.js';
5
- import { deleteBiometricRecord, readBiometricRecord } from './biometric.js';
6
- const password = '12345678';
7
- beforeAll(async () => {
8
- await installIndexedDB();
9
- });
10
- describe('biometric unlock (L2) with mocked WebAuthn', () => {
11
- let storage;
12
- beforeEach(async () => {
13
- storage = new MemoryStorage();
14
- await lockWallet();
15
- await deleteBiometricRecord().catch(() => undefined);
16
- mockWebAuthn();
17
- });
18
- it('seals the key with the PRF secret and re-opens it with one gesture', async () => {
19
- const { walletInfo } = await createWallet({ password, storage });
20
- const { address } = await enableBiometricUnlock(password, storage);
21
- expect(address).toBe(walletInfo.address);
22
- expect(await hasBiometricUnlock(storage)).toBe(true);
23
- const sealed = await readBiometricRecord();
24
- expect(sealed?.address).toBe(walletInfo.address);
25
- // El secreto no queda en claro en el registro.
26
- expect(JSON.stringify(sealed)).not.toContain('privateKey');
27
- await lockWallet();
28
- const unlocked = await unlockWithBiometric(storage);
29
- expect(unlocked.address).toBe(walletInfo.address);
30
- });
31
- it('forgets the sealed copy when the biometric unlock is disabled', async () => {
32
- await createWallet({ password, storage });
33
- await enableBiometricUnlock(password, storage);
34
- await disableBiometricUnlock();
35
- expect(await hasBiometricUnlock(storage)).toBe(false);
36
- });
37
- it('cleans the sealed copy when the wallet is deleted', async () => {
38
- await createWallet({ password, storage });
39
- await enableBiometricUnlock(password, storage);
40
- await deleteWallet(storage);
41
- expect(await readBiometricRecord().catch(() => null)).toBeNull();
42
- });
43
- });
44
- //# sourceMappingURL=biometric.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"biometric.test.js","sourceRoot":"","sources":["../../src/wallet/biometric.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=crypto.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.test.d.ts","sourceRoot":"","sources":["../../src/wallet/crypto.test.ts"],"names":[],"mappings":""}
@@ -1,34 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { KDF_ITERATIONS, decryptSecret, encryptSecret, fromBase64, toBase64 } from './crypto.js';
3
- describe('crypto', () => {
4
- it('round-trips a secret with the password', async () => {
5
- const secret = await encryptSecret('0x' + 'ab'.repeat(32), '123456');
6
- expect(secret.kdf.name).toBe('PBKDF2');
7
- expect(secret.kdf.hash).toBe('SHA-256');
8
- expect(secret.kdf.iterations).toBe(KDF_ITERATIONS);
9
- expect(secret.cipher.name).toBe('AES-GCM');
10
- expect(secret.kdf.salt).not.toBe('');
11
- expect(secret.cipher.iv).not.toBe('');
12
- expect(secret.cipher.data).not.toContain('ab'.repeat(32));
13
- await expect(decryptSecret(secret, '123456')).resolves.toBe('0x' + 'ab'.repeat(32));
14
- });
15
- it('uses 600,000 PBKDF2 iterations', () => {
16
- expect(KDF_ITERATIONS).toBe(600_000);
17
- });
18
- it('uses a fresh salt and IV per encryption', async () => {
19
- const first = await encryptSecret('secret', '123456');
20
- const second = await encryptSecret('secret', '123456');
21
- expect(first.kdf.salt).not.toBe(second.kdf.salt);
22
- expect(first.cipher.iv).not.toBe(second.cipher.iv);
23
- expect(first.cipher.data).not.toBe(second.cipher.data);
24
- });
25
- it('rejects a wrong password', async () => {
26
- const secret = await encryptSecret('secret', '123456');
27
- await expect(decryptSecret(secret, '654321')).rejects.toThrow(/Wrong password/i);
28
- });
29
- it('round-trips base64 helpers', () => {
30
- const bytes = new Uint8Array([0, 1, 2, 250, 255]);
31
- expect(Array.from(fromBase64(toBase64(bytes)))).toEqual([0, 1, 2, 250, 255]);
32
- });
33
- });
34
- //# sourceMappingURL=crypto.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.test.js","sourceRoot":"","sources":["../../src/wallet/crypto.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=destinations.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"destinations.test.d.ts","sourceRoot":"","sources":["../../src/wallet/destinations.test.ts"],"names":[],"mappings":""}
@@ -1,34 +0,0 @@
1
- import { beforeEach, describe, expect, it } from 'vitest';
2
- import { clearDestinations, isKnownDestination, rememberDestination, setDestinationsPrefix, } from './destinations.js';
3
- const WALLET = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
4
- const OTHER = '0x70997970C51812dc3A010C7d01b50e0d17dc79C8';
5
- describe('destinations (R-#253)', () => {
6
- beforeEach(() => {
7
- setDestinationsPrefix('m-wallet-test.destinations.');
8
- clearDestinations();
9
- });
10
- it('treats an unseen address as new', () => {
11
- expect(isKnownDestination(WALLET, OTHER)).toBe(false);
12
- });
13
- it('remembers an address, case-insensitively', () => {
14
- rememberDestination(WALLET, OTHER);
15
- expect(isKnownDestination(WALLET, OTHER)).toBe(true);
16
- expect(isKnownDestination(WALLET, OTHER.toLowerCase())).toBe(true);
17
- });
18
- it('keeps the list per wallet', () => {
19
- rememberDestination(WALLET, OTHER);
20
- expect(isKnownDestination('0x0000000000000000000000000000000000000001', OTHER)).toBe(false);
21
- });
22
- it('is false for empty input', () => {
23
- expect(isKnownDestination('', OTHER)).toBe(false);
24
- expect(isKnownDestination(WALLET, '')).toBe(false);
25
- });
26
- it('clears one wallet without touching the others', () => {
27
- rememberDestination(WALLET, OTHER);
28
- rememberDestination('0x0000000000000000000000000000000000000001', OTHER);
29
- clearDestinations(WALLET);
30
- expect(isKnownDestination(WALLET, OTHER)).toBe(false);
31
- expect(isKnownDestination('0x0000000000000000000000000000000000000001', OTHER)).toBe(true);
32
- });
33
- });
34
- //# sourceMappingURL=destinations.test.js.map