@pasosdejesus/m 0.24.0 → 0.25.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 (53) hide show
  1. package/dist/CHANGELOG.md +16 -1
  2. package/dist/i18n/locales/cli.d.ts.map +1 -1
  3. package/dist/i18n/locales/cli.js +2 -0
  4. package/dist/i18n/locales/cli.js.map +1 -1
  5. package/dist/m.js +7 -1
  6. package/dist/m.js.map +1 -1
  7. package/dist/tasks/e2e-summary.d.ts +13 -0
  8. package/dist/tasks/e2e-summary.d.ts.map +1 -0
  9. package/dist/tasks/e2e-summary.js +117 -0
  10. package/dist/tasks/e2e-summary.js.map +1 -0
  11. package/dist/tasks/e2e.d.ts +29 -0
  12. package/dist/tasks/e2e.d.ts.map +1 -1
  13. package/dist/tasks/e2e.js +130 -36
  14. package/dist/tasks/e2e.js.map +1 -1
  15. package/dist/tasks/e2e.test.d.ts +2 -0
  16. package/dist/tasks/e2e.test.d.ts.map +1 -0
  17. package/dist/tasks/e2e.test.js +108 -0
  18. package/dist/tasks/e2e.test.js.map +1 -0
  19. package/dist/wallet/next/components/InAppWalletSetup.d.ts +11 -0
  20. package/dist/wallet/next/components/InAppWalletSetup.d.ts.map +1 -0
  21. package/dist/wallet/next/components/InAppWalletSetup.js +55 -0
  22. package/dist/wallet/next/components/InAppWalletSetup.js.map +1 -0
  23. package/dist/wallet/next/components/InAppWalletUnlock.d.ts +9 -0
  24. package/dist/wallet/next/components/InAppWalletUnlock.d.ts.map +1 -0
  25. package/dist/wallet/next/components/InAppWalletUnlock.js +29 -0
  26. package/dist/wallet/next/components/InAppWalletUnlock.js.map +1 -0
  27. package/dist/wallet/next/components.test.d.ts +2 -0
  28. package/dist/wallet/next/components.test.d.ts.map +1 -0
  29. package/dist/wallet/next/components.test.js +122 -0
  30. package/dist/wallet/next/components.test.js.map +1 -0
  31. package/dist/wallet/next/i18n.d.ts +63 -0
  32. package/dist/wallet/next/i18n.d.ts.map +1 -0
  33. package/dist/wallet/next/i18n.js +64 -0
  34. package/dist/wallet/next/i18n.js.map +1 -0
  35. package/dist/wallet/next/index.d.ts +7 -0
  36. package/dist/wallet/next/index.d.ts.map +1 -0
  37. package/dist/wallet/next/index.js +12 -0
  38. package/dist/wallet/next/index.js.map +1 -0
  39. package/dist/wallet/next/namespaces.d.ts +17 -0
  40. package/dist/wallet/next/namespaces.d.ts.map +1 -0
  41. package/dist/wallet/next/namespaces.js +17 -0
  42. package/dist/wallet/next/namespaces.js.map +1 -0
  43. package/dist/wallet/next/useInAppWallet.d.ts +55 -0
  44. package/dist/wallet/next/useInAppWallet.d.ts.map +1 -0
  45. package/dist/wallet/next/useInAppWallet.js +261 -0
  46. package/dist/wallet/next/useInAppWallet.js.map +1 -0
  47. package/dist/wallet/next/useInAppWallet.test.d.ts +2 -0
  48. package/dist/wallet/next/useInAppWallet.test.d.ts.map +1 -0
  49. package/dist/wallet/next/useInAppWallet.test.js +261 -0
  50. package/dist/wallet/next/useInAppWallet.test.js.map +1 -0
  51. package/package.json +5 -1
  52. package/src/e2e/README.md +16 -0
  53. package/src/wallet/README.md +25 -2
package/dist/tasks/e2e.js CHANGED
@@ -1,5 +1,10 @@
1
1
  // test:e2e — Run E2E tests with Puppeteer + SIWE on OpenBSD/adJ
2
- import { spawnSync } from 'child_process';
2
+ //
3
+ // P3 (m/REQ/49): `--retry <N>` re-runs each failed spec on its own, and every
4
+ // spec/attempt emits one stable machine-readable line (`[e2e-result] <file> <r>`)
5
+ // that `test:e2e:summary` (P4) consumes. The full stream is also saved to
6
+ // `E2E_LOG_DIR` (default /tmp).
7
+ import { spawn } from 'child_process';
3
8
  import * as fs from 'fs';
4
9
  import * as path from 'path';
5
10
  import { globSync } from 'glob';
@@ -16,9 +21,13 @@ const t = createTranslator(detectLocale(), {
16
21
  'e2e.no_specs': 'No spec files found in {{0}} matching: {{1}}',
17
22
  'e2e.found': 'Found {{0}} spec(s)',
18
23
  'e2e.running': '▶ {{0}}',
24
+ 'e2e.retry_attempt': '▶ {{0}} (attempt {{1}})',
25
+ 'e2e.retry_start': 'Retrying {{0}} spec(s) — attempt {{1}}/{{2}}',
19
26
  'e2e.failed': ' ✗ {{0}} failed (exit {{1}})',
20
27
  'e2e.all_passed': 'All {{0}} spec(s) passed.',
21
28
  'e2e.partial': '{{0}}/{{1}} spec(s) failed.',
29
+ 'e2e.still_failing': 'Still failing after {{0}} retry(ies): {{1}}',
30
+ 'e2e.log_saved': 'Log saved to {{0}}',
22
31
  },
23
32
  es: {
24
33
  'e2e.no_dir': 'No se encontró directorio e2e/. Esperado: e2e/specs/ o e2e/smoke/',
@@ -27,11 +36,34 @@ const t = createTranslator(detectLocale(), {
27
36
  'e2e.no_specs': 'No se encontraron archivos spec en {{0}} coincidiendo con: {{1}}',
28
37
  'e2e.found': '{{0}} spec(s) encontrado(s)',
29
38
  'e2e.running': '▶ {{0}}',
39
+ 'e2e.retry_attempt': '▶ {{0}} (intento {{1}})',
40
+ 'e2e.retry_start': 'Reintentando {{0}} spec(s) — intento {{1}}/{{2}}',
30
41
  'e2e.failed': ' ✗ {{0}} falló (exit {{1}})',
31
42
  'e2e.all_passed': 'Todos los {{0}} spec(s) pasaron.',
32
43
  'e2e.partial': '{{0}}/{{1}} spec(s) fallaron.',
44
+ 'e2e.still_failing': 'Siguen fallando tras {{0}} reintento(s): {{1}}',
45
+ 'e2e.log_saved': 'Log guardado en {{0}}',
33
46
  },
34
47
  }, commonCli);
48
+ /** Stable, machine-readable prefix consumed by `test:e2e:summary` (P4). */
49
+ export const RESULT_PREFIX = '[e2e-result] ';
50
+ /** One spec result line; `<file>` is the spec file name (e.g. `donate.spec.mjs`). */
51
+ export function resultLine(file, result) {
52
+ return `${RESULT_PREFIX}${file} ${result}`;
53
+ }
54
+ /**
55
+ * Classifies a spec by exit code, and marks a successful spec that printed `[SKIP]`
56
+ * as skipped. A non-zero exit always wins (a spec that failed is not a skip).
57
+ */
58
+ export function classifyResult(status, output) {
59
+ if (status !== 0)
60
+ return 'fail';
61
+ return /\[SKIP\]/.test(output) ? 'skip' : 'ok';
62
+ }
63
+ function getFlag(args, name) {
64
+ const idx = args.indexOf(name);
65
+ return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : null;
66
+ }
35
67
  function findSpecs(subDir, pattern, e2eDir) {
36
68
  const specDir = path.join(e2eDir, subDir);
37
69
  if (!fs.existsSync(specDir))
@@ -39,6 +71,57 @@ function findSpecs(subDir, pattern, e2eDir) {
39
71
  const files = globSync(pattern, { cwd: specDir });
40
72
  return files.map(f => ({ file: f, dir: specDir }));
41
73
  }
74
+ /** Runs one spec, streaming and capturing its output. */
75
+ function runSpec(specPath, env) {
76
+ return new Promise((resolve, reject) => {
77
+ const child = spawn(process.execPath, [specPath], { cwd: process.cwd(), env });
78
+ let output = '';
79
+ const onData = (chunk) => {
80
+ const text = chunk.toString();
81
+ output += text;
82
+ process.stdout.write(text);
83
+ };
84
+ child.stdout.on('data', onData);
85
+ child.stderr.on('data', onData);
86
+ child.on('error', reject);
87
+ child.on('close', (code) => resolve({ status: code ?? 1, output }));
88
+ });
89
+ }
90
+ /**
91
+ * Runs every spec once, then re-runs each failed spec on its own up to `retries`
92
+ * times. Returns the final per-spec result and the attempt count. Extracted from
93
+ * `runE2e` so the retry policy is unit-testable without spawning processes.
94
+ */
95
+ export async function runSpecsWithRetry(specs, runOne, plan) {
96
+ const sleep = plan.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
97
+ const results = new Map();
98
+ const attempts = new Map();
99
+ for (let i = 0; i < specs.length; i++) {
100
+ const spec = specs[i];
101
+ results.set(spec.file, await runOne(spec, 1));
102
+ attempts.set(spec.file, 1);
103
+ if (plan.specDelayMs > 0 && i < specs.length - 1)
104
+ await sleep(plan.specDelayMs);
105
+ }
106
+ let failed = specs.filter((s) => results.get(s.file) === 'fail');
107
+ for (let attempt = 1; attempt <= plan.retries && failed.length > 0; attempt++) {
108
+ plan.onRetry?.(attempt, failed.map((s) => s.file));
109
+ if (plan.retryDelayMs > 0)
110
+ await sleep(plan.retryDelayMs);
111
+ const still = [];
112
+ for (const spec of failed) {
113
+ const result = await runOne(spec, attempt + 1);
114
+ results.set(spec.file, result);
115
+ attempts.set(spec.file, attempt + 1);
116
+ if (result === 'fail')
117
+ still.push(spec);
118
+ if (plan.specDelayMs > 0)
119
+ await sleep(plan.specDelayMs);
120
+ }
121
+ failed = still;
122
+ }
123
+ return { results, attempts };
124
+ }
42
125
  export async function runE2e(testPattern, args = []) {
43
126
  const cwd = process.cwd();
44
127
  // If testPattern looks like a flag, move it to args
@@ -48,6 +131,9 @@ export async function runE2e(testPattern, args = []) {
48
131
  }
49
132
  const smokeOnly = args.includes('--smoke');
50
133
  const grepFilter = args.includes('--grep') ? args[args.indexOf('--grep') + 1] : null;
134
+ const retries = Math.max(0, parseInt(getFlag(args, '--retry') ?? process.env.E2E_RETRIES ?? '0', 10) || 0);
135
+ const retryDelay = Math.max(0, parseInt(getFlag(args, '--retry-delay') ?? '15000', 10) || 0);
136
+ const logDir = process.env.E2E_LOG_DIR || '/tmp';
51
137
  // 1. Detect e2e directory
52
138
  const e2eDir = path.join(cwd, 'e2e');
53
139
  if (!fs.existsSync(e2eDir)) {
@@ -66,7 +152,6 @@ export async function runE2e(testPattern, args = []) {
66
152
  }
67
153
  // 3. Find specs — search in both specs/ and smoke/ when no flag specified
68
154
  let specFiles = [];
69
- // If pattern doesn't contain glob chars and isn't a full filename, wrap with *...*
70
155
  let pattern = testPattern || '**/*.spec.mjs';
71
156
  if (testPattern && !testPattern.includes('*') && !testPattern.endsWith('.spec.mjs')) {
72
157
  pattern = `*${testPattern}*.spec.mjs`;
@@ -75,7 +160,6 @@ export async function runE2e(testPattern, args = []) {
75
160
  specFiles = findSpecs('smoke', pattern, e2eDir);
76
161
  }
77
162
  else {
78
- // Try specs/ first, then smoke/
79
163
  specFiles = findSpecs('specs', pattern, e2eDir);
80
164
  if (specFiles.length === 0) {
81
165
  specFiles = findSpecs('smoke', pattern, e2eDir);
@@ -84,7 +168,6 @@ export async function runE2e(testPattern, args = []) {
84
168
  }
85
169
  }
86
170
  }
87
- // Apply grep filter
88
171
  if (grepFilter && specFiles.length > 0) {
89
172
  specFiles = specFiles.filter(s => s.file.includes(grepFilter));
90
173
  }
@@ -94,43 +177,54 @@ export async function runE2e(testPattern, args = []) {
94
177
  process.exit(0);
95
178
  }
96
179
  info(t("e2e.found", String(specFiles.length)));
97
- // 4. Run each spec
98
- let failures = 0;
180
+ // 4. Log file (best effort) for `test:e2e:summary`.
181
+ const stamp = new Date().toISOString().replace(/[:.]/g, '-');
182
+ const logFile = path.join(logDir, `e2e-${stamp}.log`);
183
+ let log = null;
184
+ try {
185
+ log = fs.createWriteStream(logFile);
186
+ info(t("e2e.log_saved", logFile));
187
+ }
188
+ catch {
189
+ log = null;
190
+ }
99
191
  const specDelay = parseInt(process.env.E2E_SPEC_DELAY_MS || '1500', 10);
100
- for (let i = 0; i < specFiles.length; i++) {
101
- const { file, dir } = specFiles[i];
102
- const specPath = path.join(dir, file);
103
- info(`\n▶ ${path.relative(e2eDir, specPath)}`);
104
- const env = { ...process.env };
192
+ // Every spec RUN (including retries) gets a fresh WALLET_INDEX so a retry does
193
+ // not hammer the site's per-wallet rate limit.
194
+ let walletRun = 0;
195
+ const runOne = async (spec, attempt) => {
196
+ const specPath = path.join(spec.dir, spec.file);
197
+ const rel = path.relative(e2eDir, specPath);
198
+ const env = { ...process.env, WALLET_INDEX: String(walletRun++) };
105
199
  if (chromePath)
106
200
  env.CHROME_PATH = chromePath;
107
- // Rotación de billeteras entre specs (REQ/35): cada spec usa un índice
108
- // distinto de TEST_PRIVATE_KEYS para no martillar el rate-limit del sitio
109
- // con la misma billetera. initTestEnv elige account = wallets[idx % len].
110
- env.WALLET_INDEX = String(i);
111
- const res = spawnSync('node', [specPath], {
112
- stdio: 'inherit',
113
- env,
114
- cwd,
115
- });
116
- if (res.status !== 0) {
117
- failures++;
118
- problem(t("e2e.failed", file, String(res.status)));
119
- }
120
- // Pausa configurable entre specs: el dev site limita requests por wallet
121
- // (429); dar aire entre specs reduce la flakiness de la suite.
122
- if (specDelay > 0 && i < specFiles.length - 1) {
123
- await new Promise((r) => setTimeout(r, specDelay));
124
- }
125
- }
126
- // 5. Summary
127
- if (failures === 0) {
128
- success("\n" + t("e2e.all_passed", String(specFiles.length)));
201
+ info('\n' + (attempt > 1 ? t("e2e.retry_attempt", rel, String(attempt)) : t("e2e.running", rel)));
202
+ const { status, output } = await runSpec(specPath, env);
203
+ const result = classifyResult(status, output);
204
+ const line = resultLine(spec.file, result);
205
+ console.log(line);
206
+ if (result === 'fail')
207
+ problem(t("e2e.failed", spec.file, String(status)));
208
+ log?.write(`▶ ${rel}\n${output}\n${line}\n`);
209
+ return result;
210
+ };
211
+ // 5. Run pass 1 and the retries.
212
+ const { results } = await runSpecsWithRetry(specFiles, runOne, {
213
+ retries,
214
+ retryDelayMs: retryDelay,
215
+ specDelayMs: specDelay,
216
+ onRetry: (attempt, files) => info('\n' + t("e2e.retry_start", String(files.length), String(attempt), String(retries))),
217
+ });
218
+ log?.end();
219
+ // 7. Summary. A spec is green only by exit code.
220
+ const failures = specFiles.filter((s) => results.get(s.file) === 'fail');
221
+ if (failures.length === 0) {
222
+ success('\n' + t("e2e.all_passed", String(specFiles.length)));
129
223
  }
130
224
  else {
131
- problem("\n" + t("e2e.partial", String(failures), String(specFiles.length)));
225
+ problem('\n' + t("e2e.partial", String(failures.length), String(specFiles.length)));
226
+ problem(t("e2e.still_failing", String(retries), failures.map((s) => s.file).join(', ')));
132
227
  }
133
- // process.exit() is mandatory in m CLI commands
134
- process.exit(failures > 0 ? 1 : 0);
228
+ process.exit(failures.length > 0 ? 1 : 0);
135
229
  }
136
230
  //# sourceMappingURL=e2e.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"e2e.js","sourceRoot":"","sources":["../../src/tasks/e2e.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"e2e.js","sourceRoot":"","sources":["../../src/tasks/e2e.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=e2e.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.test.d.ts","sourceRoot":"","sources":["../../src/tasks/e2e.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { classifyResult, resultLine, runSpecsWithRetry } from './e2e.js';
3
+ import { parseE2eLog, renderE2eSummary } from './e2e-summary.js';
4
+ // P3/P4 (m/REQ/49): the runner emits a stable `[e2e-result] <file> <r>` line and
5
+ // `test:e2e:summary` consumes it (last attempt wins).
6
+ describe('classifyResult / resultLine', () => {
7
+ it('reports fail by exit code (even if it also printed [SKIP])', () => {
8
+ expect(classifyResult(1, 'anything')).toBe('fail');
9
+ expect(classifyResult(2, '[SKIP] x')).toBe('fail');
10
+ });
11
+ it('reports skip for a green spec that printed [SKIP]', () => {
12
+ expect(classifyResult(0, 'ran\n[SKIP] needs Chrome')).toBe('skip');
13
+ });
14
+ it('reports ok for a plain green spec', () => {
15
+ expect(classifyResult(0, '[OK] fine')).toBe('ok');
16
+ });
17
+ it('formats the machine-readable line', () => {
18
+ expect(resultLine('donate.spec.mjs', 'ok')).toBe('[e2e-result] donate.spec.mjs ok');
19
+ });
20
+ });
21
+ describe('parseE2eLog', () => {
22
+ it('reads the machine format and keeps the last result per spec', () => {
23
+ const log = [
24
+ '▶ specs/a.spec.mjs',
25
+ '[e2e-result] a.spec.mjs fail',
26
+ '▶ specs/b.spec.mjs',
27
+ '[e2e-result] b.spec.mjs ok',
28
+ '[e2e-retry] ▶ specs/a.spec.mjs (intento 1)',
29
+ '[e2e-result] a.spec.mjs ok',
30
+ ].join('\n');
31
+ const status = parseE2eLog(log);
32
+ expect(status.get('a.spec.mjs')).toBe('ok');
33
+ expect(status.get('b.spec.mjs')).toBe('ok');
34
+ });
35
+ it('falls back to the human format when there are no [e2e-result] lines', () => {
36
+ const log = [
37
+ '▶ specs/a.spec.mjs',
38
+ '[OK] fine',
39
+ '✅ 0 failures',
40
+ '▶ specs/b.spec.mjs',
41
+ '❌ 1 failures',
42
+ '▶ specs/c.spec.mjs',
43
+ 'started and never finished',
44
+ ].join('\n');
45
+ const status = parseE2eLog(log);
46
+ expect(status.get('a.spec.mjs')).toBe('ok');
47
+ expect(status.get('b.spec.mjs')).toBe('fail');
48
+ expect(status.get('c.spec.mjs')).toBe('?');
49
+ });
50
+ });
51
+ describe('renderE2eSummary', () => {
52
+ it('marks the specs whose state differs between runs', () => {
53
+ const site = parseE2eLog('[e2e-result] a.spec.mjs fail\n[e2e-result] b.spec.mjs ok');
54
+ const local = parseE2eLog('[e2e-result] a.spec.mjs ok\n[e2e-result] b.spec.mjs ok');
55
+ const out = renderE2eSummary([
56
+ { file: '/tmp/site.log', status: site },
57
+ { file: '/tmp/local.log', status: local },
58
+ ]);
59
+ expect(out).toContain('a.spec.mjs');
60
+ expect(out).toContain('<-- difiere');
61
+ expect(out).toContain('1 con estado distinto');
62
+ // b didn't differ, so its row must not carry the marker.
63
+ const bLine = out.split('\n').find((l) => l.startsWith('b.spec.mjs')) ?? '';
64
+ expect(bLine).not.toContain('<-- difiere');
65
+ });
66
+ });
67
+ describe('runSpecsWithRetry (P3)', () => {
68
+ it('retries a failing spec until it passes', async () => {
69
+ const calls = [];
70
+ const runOne = async (spec, attempt) => {
71
+ calls.push(`${spec.file}#${attempt}`);
72
+ return attempt >= 2 ? 'ok' : 'fail';
73
+ };
74
+ const { results, attempts } = await runSpecsWithRetry([{ file: 'a.spec.mjs' }], runOne, {
75
+ retries: 2, retryDelayMs: 0, specDelayMs: 0,
76
+ });
77
+ expect(results.get('a.spec.mjs')).toBe('ok');
78
+ expect(attempts.get('a.spec.mjs')).toBe(2);
79
+ expect(calls).toEqual(['a.spec.mjs#1', 'a.spec.mjs#2']);
80
+ });
81
+ it('stops after N retries and reports fail', async () => {
82
+ let n = 0;
83
+ const runOne = async () => { n += 1; return 'fail'; };
84
+ const { results, attempts } = await runSpecsWithRetry([{ file: 'a.spec.mjs' }], runOne, {
85
+ retries: 2, retryDelayMs: 0, specDelayMs: 0,
86
+ });
87
+ expect(results.get('a.spec.mjs')).toBe('fail');
88
+ expect(attempts.get('a.spec.mjs')).toBe(3); // 1 + 2 retries
89
+ expect(n).toBe(3);
90
+ });
91
+ it('does not retry when retries=0', async () => {
92
+ let n = 0;
93
+ const runOne = async () => { n += 1; return 'fail'; };
94
+ const { attempts } = await runSpecsWithRetry([{ file: 'a.spec.mjs' }], runOne, {
95
+ retries: 0, retryDelayMs: 0, specDelayMs: 0,
96
+ });
97
+ expect(attempts.get('a.spec.mjs')).toBe(1);
98
+ expect(n).toBe(1);
99
+ });
100
+ it('leaves a green spec untouched', async () => {
101
+ const runOne = async () => 'ok';
102
+ const { attempts } = await runSpecsWithRetry([{ file: 'a.spec.mjs' }], runOne, {
103
+ retries: 3, retryDelayMs: 0, specDelayMs: 0,
104
+ });
105
+ expect(attempts.get('a.spec.mjs')).toBe(1);
106
+ });
107
+ });
108
+ //# sourceMappingURL=e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/tasks/e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Lang, type WalletReactMessages } from '../i18n.js';
2
+ export interface InAppWalletSetupProps {
3
+ lang?: Lang;
4
+ onDone?: (address: `0x${string}`) => void;
5
+ /** La aplicación decide a qué guía de migración apuntar; el paquete no fija rutas. */
6
+ migrationHref?: string;
7
+ /** Textos del host (sobreescriben los por defecto). */
8
+ messages?: Partial<WalletReactMessages>;
9
+ }
10
+ export declare function InAppWalletSetup({ lang, onDone, migrationHref, messages }: InAppWalletSetupProps): import("react").JSX.Element;
11
+ //# sourceMappingURL=InAppWalletSetup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InAppWalletSetup.d.ts","sourceRoot":"","sources":["../../../../src/wallet/next/components/InAppWalletSetup.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,IAAI,EAAmB,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAGlG,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAA;IACzC,sFAAsF;IACtF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACxC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,IAAW,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,EAAE,qBAAqB,+BA4IvG"}
@@ -0,0 +1,55 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { isValidPassword } from '../../index.js';
5
+ import { resolveMessages } from '../i18n.js';
6
+ import { useInAppWallet } from '../useInAppWallet.js';
7
+ export function InAppWalletSetup({ lang = 'en', onDone, migrationHref, messages }) {
8
+ const msg = (key) => resolveMessages(lang, messages)[key];
9
+ const { create, importExisting, error } = useInAppWallet();
10
+ const [mode, setMode] = useState('create');
11
+ const [password, setPassword] = useState('');
12
+ const [confirm, setConfirm] = useState('');
13
+ const [mnemonic, setMnemonic] = useState('');
14
+ const [privateKey, setPrivateKey] = useState('');
15
+ const [recoveryPhrase, setRecoveryPhrase] = useState(null);
16
+ const [localError, setLocalError] = useState(null);
17
+ const [busy, setBusy] = useState(false);
18
+ async function handleSubmit(event) {
19
+ event.preventDefault();
20
+ setLocalError(null);
21
+ if (!isValidPassword(password)) {
22
+ setLocalError(msg('passwordTooShort'));
23
+ return;
24
+ }
25
+ if (password !== confirm) {
26
+ setLocalError(msg('passwordMismatch'));
27
+ return;
28
+ }
29
+ setBusy(true);
30
+ try {
31
+ if (mode === 'create') {
32
+ const result = await create(password);
33
+ setRecoveryPhrase(result.mnemonic);
34
+ onDone?.(result.walletInfo.address);
35
+ }
36
+ else {
37
+ const info = await importExisting({
38
+ password,
39
+ mnemonic: mnemonic.trim() ? mnemonic : undefined,
40
+ privateKey: privateKey.trim() ? privateKey.trim() : undefined,
41
+ });
42
+ onDone?.(info.address);
43
+ }
44
+ }
45
+ catch (e) {
46
+ setLocalError(e instanceof Error ? e.message : String(e));
47
+ }
48
+ finally {
49
+ setBusy(false);
50
+ }
51
+ }
52
+ const message = localError ?? error;
53
+ return (_jsxs("form", { onSubmit: handleSubmit, "data-testid": "in-app-wallet-setup", children: [_jsx("h2", { children: mode === 'create' ? msg('createTitle') : msg('importTitle') }), _jsxs("div", { role: "group", children: [_jsx("button", { type: "button", "data-testid": "mode-create", onClick: () => setMode('create'), "aria-pressed": mode === 'create', children: msg('create') }), _jsx("button", { type: "button", "data-testid": "mode-import", onClick: () => setMode('import'), "aria-pressed": mode === 'import', children: msg('import') })] }), mode === 'create' && (_jsxs("p", { "data-testid": "import-hint", children: [msg('alreadyHave'), ' ', _jsx("button", { type: "button", "data-testid": "switch-to-import", onClick: () => setMode('import'), children: msg('import') })] })), mode === 'import' && (_jsxs(_Fragment, { children: [_jsxs("p", { "data-testid": "import-security", children: [msg('importSecurity'), migrationHref && (_jsxs(_Fragment, { children: [' ', _jsx("a", { href: migrationHref, "data-testid": "migration-guide", children: msg('migrationGuide') })] }))] }), _jsxs("label", { children: [msg('mnemonic'), _jsx("textarea", { "aria-label": msg('mnemonic'), value: mnemonic, onChange: (e) => setMnemonic(e.target.value) })] }), _jsxs("label", { children: [msg('privateKey'), _jsx("input", { "aria-label": msg('privateKey'), value: privateKey, onChange: (e) => setPrivateKey(e.target.value) })] })] })), _jsxs("label", { children: [msg('password'), _jsx("input", { type: "password", inputMode: "text", "aria-label": msg('password'), value: password, onChange: (e) => setPassword(e.target.value) })] }), _jsxs("label", { children: [msg('passwordConfirm'), _jsx("input", { type: "password", inputMode: "text", "aria-label": msg('passwordConfirm'), value: confirm, onChange: (e) => setConfirm(e.target.value) })] }), _jsx("p", { "data-testid": "recovery-warning", children: msg('warning') }), recoveryPhrase && (_jsxs("div", { "data-testid": "recovery-phrase", children: [_jsx("p", { children: recoveryPhrase }), _jsx("button", { type: "button", onClick: () => navigator.clipboard?.writeText(recoveryPhrase), children: msg('copy') })] })), message && _jsx("p", { role: "alert", children: message }), _jsx("button", { type: "submit", "data-testid": "submit", disabled: busy, children: mode === 'create' ? msg('create') : msg('import') })] }));
54
+ }
55
+ //# sourceMappingURL=InAppWalletSetup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InAppWalletSetup.js","sourceRoot":"","sources":["../../../../src/wallet/next/components/InAppWalletSetup.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type Lang, type WalletReactMessages } from '../i18n.js';
2
+ export interface InAppWalletUnlockProps {
3
+ lang?: Lang;
4
+ onUnlocked?: (address: `0x${string}`) => void;
5
+ /** Textos del host (sobreescriben los por defecto). */
6
+ messages?: Partial<WalletReactMessages>;
7
+ }
8
+ export declare function InAppWalletUnlock({ lang, onUnlocked, messages }: InAppWalletUnlockProps): import("react").JSX.Element;
9
+ //# sourceMappingURL=InAppWalletUnlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InAppWalletUnlock.d.ts","sourceRoot":"","sources":["../../../../src/wallet/next/components/InAppWalletUnlock.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAmB,KAAK,IAAI,EAAmB,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAGlG,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAA;IAC7C,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACxC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,sBAAsB,+BAwC9F"}
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { resolveMessages } from '../i18n.js';
5
+ import { useInAppWallet } from '../useInAppWallet.js';
6
+ export function InAppWalletUnlock({ lang = 'en', onUnlocked, messages }) {
7
+ const msg = (key) => resolveMessages(lang, messages)[key];
8
+ const { unlock } = useInAppWallet();
9
+ const [password, setPassword] = useState('');
10
+ const [error, setError] = useState(null);
11
+ const [busy, setBusy] = useState(false);
12
+ async function handleSubmit(event) {
13
+ event.preventDefault();
14
+ setError(null);
15
+ setBusy(true);
16
+ try {
17
+ const info = await unlock(password);
18
+ onUnlocked?.(info.address);
19
+ }
20
+ catch {
21
+ setError(msg('wrongPassword'));
22
+ }
23
+ finally {
24
+ setBusy(false);
25
+ }
26
+ }
27
+ return (_jsxs("form", { onSubmit: handleSubmit, "data-testid": "in-app-wallet-unlock", children: [_jsx("h2", { children: msg('unlockTitle') }), _jsxs("label", { children: [msg('password'), _jsx("input", { type: "password", inputMode: "text", "aria-label": msg('password'), value: password, onChange: (e) => setPassword(e.target.value) })] }), error && _jsx("p", { role: "alert", children: error }), _jsx("button", { type: "submit", disabled: busy, children: msg('unlock') })] }));
28
+ }
29
+ //# sourceMappingURL=InAppWalletUnlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InAppWalletUnlock.js","sourceRoot":"","sources":["../../../../src/wallet/next/components/InAppWalletUnlock.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,eAAe,EAAwD,MAAM,YAAY,CAAA;AAClG,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AASrD,MAAM,UAAU,iBAAiB,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,UAAU,EAAE,QAAQ,EAA0B;IAC7F,MAAM,GAAG,GAAG,CAAC,GAAe,EAAU,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAA;IAC7E,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAA;IACnC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEvC,KAAK,UAAU,YAAY,CAAC,KAAsB;QAChD,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAA;QACb,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;YACnC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAA;QAChC,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,CAAC,CAAA;QAChB,CAAC;IACH,CAAC;IAED,OAAO,CACL,gBAAM,QAAQ,EAAE,YAAY,iBAAc,sBAAsB,aAC9D,uBAAK,GAAG,CAAC,aAAa,CAAC,GAAM,EAC7B,4BACG,GAAG,CAAC,UAAU,CAAC,EAChB,gBACE,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,MAAM,gBACJ,GAAG,CAAC,UAAU,CAAC,EAC3B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAC5C,IACI,EACP,KAAK,IAAI,YAAG,IAAI,EAAC,OAAO,YAAE,KAAK,GAAK,EACrC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,IAAI,YACjC,GAAG,CAAC,QAAQ,CAAC,GACP,IACJ,CACR,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=components.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.test.d.ts","sourceRoot":"","sources":["../../../src/wallet/next/components.test.tsx"],"names":[],"mappings":""}