@pasosdejesus/m 0.23.1 → 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.
- package/dist/CHANGELOG.md +45 -1
- package/dist/e2e/full-wallet.d.ts +41 -0
- package/dist/e2e/full-wallet.d.ts.map +1 -0
- package/dist/e2e/full-wallet.js +138 -0
- package/dist/e2e/full-wallet.js.map +1 -0
- package/dist/e2e/full-wallet.test.d.ts +2 -0
- package/dist/e2e/full-wallet.test.d.ts.map +1 -0
- package/dist/e2e/full-wallet.test.js +37 -0
- package/dist/e2e/full-wallet.test.js.map +1 -0
- package/dist/e2e/index.d.ts +4 -0
- package/dist/e2e/index.d.ts.map +1 -1
- package/dist/e2e/index.js +2 -0
- package/dist/e2e/index.js.map +1 -1
- package/dist/e2e/local-node.d.ts +22 -0
- package/dist/e2e/local-node.d.ts.map +1 -0
- package/dist/e2e/local-node.js +144 -0
- package/dist/e2e/local-node.js.map +1 -0
- package/dist/e2e/local-node.test.d.ts +2 -0
- package/dist/e2e/local-node.test.d.ts.map +1 -0
- package/dist/e2e/local-node.test.js +43 -0
- package/dist/e2e/local-node.test.js.map +1 -0
- package/dist/i18n/locales/cli.d.ts.map +1 -1
- package/dist/i18n/locales/cli.js +2 -0
- package/dist/i18n/locales/cli.js.map +1 -1
- package/dist/m.js +7 -1
- package/dist/m.js.map +1 -1
- package/dist/tasks/e2e-summary.d.ts +13 -0
- package/dist/tasks/e2e-summary.d.ts.map +1 -0
- package/dist/tasks/e2e-summary.js +117 -0
- package/dist/tasks/e2e-summary.js.map +1 -0
- package/dist/tasks/e2e.d.ts +29 -0
- package/dist/tasks/e2e.d.ts.map +1 -1
- package/dist/tasks/e2e.js +130 -36
- package/dist/tasks/e2e.js.map +1 -1
- package/dist/tasks/e2e.test.d.ts +2 -0
- package/dist/tasks/e2e.test.d.ts.map +1 -0
- package/dist/tasks/e2e.test.js +108 -0
- package/dist/tasks/e2e.test.js.map +1 -0
- package/dist/tasks/wallet.d.ts.map +1 -1
- package/dist/tasks/wallet.js +14 -25
- package/dist/tasks/wallet.js.map +1 -1
- package/dist/test-utils/index.d.ts +1 -0
- package/dist/test-utils/index.d.ts.map +1 -1
- package/dist/test-utils/index.js +1 -0
- package/dist/test-utils/index.js.map +1 -1
- package/dist/test-utils/wallet-mocks.d.ts +44 -0
- package/dist/test-utils/wallet-mocks.d.ts.map +1 -0
- package/dist/test-utils/wallet-mocks.js +114 -0
- package/dist/test-utils/wallet-mocks.js.map +1 -0
- package/dist/test-utils/wallet-mocks.test.d.ts +2 -0
- package/dist/test-utils/wallet-mocks.test.d.ts.map +1 -0
- package/dist/test-utils/wallet-mocks.test.js +55 -0
- package/dist/test-utils/wallet-mocks.test.js.map +1 -0
- package/dist/test-utils/wallet-setup.d.ts +2 -0
- package/dist/test-utils/wallet-setup.d.ts.map +1 -0
- package/dist/test-utils/wallet-setup.js +23 -0
- package/dist/test-utils/wallet-setup.js.map +1 -0
- package/dist/test-utils/wallet-setup.test.d.ts +2 -0
- package/dist/test-utils/wallet-setup.test.d.ts.map +1 -0
- package/dist/test-utils/wallet-setup.test.js +18 -0
- package/dist/test-utils/wallet-setup.test.js.map +1 -0
- package/dist/wallet/biometric.d.ts +33 -0
- package/dist/wallet/biometric.d.ts.map +1 -0
- package/dist/wallet/biometric.js +88 -0
- package/dist/wallet/biometric.js.map +1 -0
- package/dist/wallet/biometric.test.d.ts +2 -0
- package/dist/wallet/biometric.test.d.ts.map +1 -0
- package/dist/wallet/biometric.test.js +44 -0
- package/dist/wallet/biometric.test.js.map +1 -0
- package/dist/wallet/crypto.d.ts +42 -0
- package/dist/wallet/crypto.d.ts.map +1 -0
- package/dist/wallet/crypto.js +127 -0
- package/dist/wallet/crypto.js.map +1 -0
- package/dist/wallet/crypto.test.d.ts +2 -0
- package/dist/wallet/crypto.test.d.ts.map +1 -0
- package/dist/wallet/crypto.test.js +34 -0
- package/dist/wallet/crypto.test.js.map +1 -0
- package/dist/wallet/destinations.d.ts +20 -0
- package/dist/wallet/destinations.d.ts.map +1 -0
- package/dist/wallet/destinations.js +98 -0
- package/dist/wallet/destinations.js.map +1 -0
- package/dist/wallet/destinations.test.d.ts +2 -0
- package/dist/wallet/destinations.test.d.ts.map +1 -0
- package/dist/wallet/destinations.test.js +34 -0
- package/dist/wallet/destinations.test.js.map +1 -0
- package/dist/wallet/external-provider.d.ts +33 -0
- package/dist/wallet/external-provider.d.ts.map +1 -0
- package/dist/wallet/external-provider.js +108 -0
- package/dist/wallet/external-provider.js.map +1 -0
- package/dist/wallet/external-provider.test.d.ts +2 -0
- package/dist/wallet/external-provider.test.d.ts.map +1 -0
- package/dist/wallet/external-provider.test.js +44 -0
- package/dist/wallet/external-provider.test.js.map +1 -0
- package/dist/wallet/index.d.ts +14 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/index.js +24 -0
- package/dist/wallet/index.js.map +1 -0
- package/dist/wallet/indexeddb.test.d.ts +2 -0
- package/dist/wallet/indexeddb.test.d.ts.map +1 -0
- package/dist/wallet/indexeddb.test.js +28 -0
- package/dist/wallet/indexeddb.test.js.map +1 -0
- package/dist/wallet/kdf.test.d.ts +2 -0
- package/dist/wallet/kdf.test.d.ts.map +1 -0
- package/dist/wallet/kdf.test.js +54 -0
- package/dist/wallet/kdf.test.js.map +1 -0
- package/dist/wallet/next/components/InAppWalletSetup.d.ts +11 -0
- package/dist/wallet/next/components/InAppWalletSetup.d.ts.map +1 -0
- package/dist/wallet/next/components/InAppWalletSetup.js +55 -0
- package/dist/wallet/next/components/InAppWalletSetup.js.map +1 -0
- package/dist/wallet/next/components/InAppWalletUnlock.d.ts +9 -0
- package/dist/wallet/next/components/InAppWalletUnlock.d.ts.map +1 -0
- package/dist/wallet/next/components/InAppWalletUnlock.js +29 -0
- package/dist/wallet/next/components/InAppWalletUnlock.js.map +1 -0
- package/dist/wallet/next/components.test.d.ts +2 -0
- package/dist/wallet/next/components.test.d.ts.map +1 -0
- package/dist/wallet/next/components.test.js +122 -0
- package/dist/wallet/next/components.test.js.map +1 -0
- package/dist/wallet/next/i18n.d.ts +63 -0
- package/dist/wallet/next/i18n.d.ts.map +1 -0
- package/dist/wallet/next/i18n.js +64 -0
- package/dist/wallet/next/i18n.js.map +1 -0
- package/dist/wallet/next/index.d.ts +7 -0
- package/dist/wallet/next/index.d.ts.map +1 -0
- package/dist/wallet/next/index.js +12 -0
- package/dist/wallet/next/index.js.map +1 -0
- package/dist/wallet/next/namespaces.d.ts +17 -0
- package/dist/wallet/next/namespaces.d.ts.map +1 -0
- package/dist/wallet/next/namespaces.js +17 -0
- package/dist/wallet/next/namespaces.js.map +1 -0
- package/dist/wallet/next/useInAppWallet.d.ts +55 -0
- package/dist/wallet/next/useInAppWallet.d.ts.map +1 -0
- package/dist/wallet/next/useInAppWallet.js +261 -0
- package/dist/wallet/next/useInAppWallet.js.map +1 -0
- package/dist/wallet/next/useInAppWallet.test.d.ts +2 -0
- package/dist/wallet/next/useInAppWallet.test.d.ts.map +1 -0
- package/dist/wallet/next/useInAppWallet.test.js +261 -0
- package/dist/wallet/next/useInAppWallet.test.js.map +1 -0
- package/dist/wallet/provider.d.ts +38 -0
- package/dist/wallet/provider.d.ts.map +1 -0
- package/dist/wallet/provider.js +285 -0
- package/dist/wallet/provider.js.map +1 -0
- package/dist/wallet/provider.test.d.ts +2 -0
- package/dist/wallet/provider.test.d.ts.map +1 -0
- package/dist/wallet/provider.test.js +170 -0
- package/dist/wallet/provider.test.js.map +1 -0
- package/dist/wallet/signer.d.ts +55 -0
- package/dist/wallet/signer.d.ts.map +1 -0
- package/dist/wallet/signer.js +91 -0
- package/dist/wallet/signer.js.map +1 -0
- package/dist/wallet/signer.test.d.ts +2 -0
- package/dist/wallet/signer.test.d.ts.map +1 -0
- package/dist/wallet/signer.test.js +62 -0
- package/dist/wallet/signer.test.js.map +1 -0
- package/dist/wallet/siwe.d.ts +2 -0
- package/dist/wallet/siwe.d.ts.map +1 -0
- package/dist/wallet/siwe.js +5 -0
- package/dist/wallet/siwe.js.map +1 -0
- package/dist/wallet/storage/file.d.ts +19 -0
- package/dist/wallet/storage/file.d.ts.map +1 -0
- package/dist/wallet/storage/file.js +48 -0
- package/dist/wallet/storage/file.js.map +1 -0
- package/dist/wallet/storage/idb.d.ts +25 -0
- package/dist/wallet/storage/idb.d.ts.map +1 -0
- package/dist/wallet/storage/idb.js +58 -0
- package/dist/wallet/storage/idb.js.map +1 -0
- package/dist/wallet/storage/index.d.ts +5 -0
- package/dist/wallet/storage/index.d.ts.map +1 -0
- package/dist/wallet/storage/index.js +4 -0
- package/dist/wallet/storage/index.js.map +1 -0
- package/dist/wallet/storage/indexeddb.d.ts +8 -0
- package/dist/wallet/storage/indexeddb.d.ts.map +1 -0
- package/dist/wallet/storage/indexeddb.js +18 -0
- package/dist/wallet/storage/indexeddb.js.map +1 -0
- package/dist/wallet/storage/memory.d.ts +10 -0
- package/dist/wallet/storage/memory.d.ts.map +1 -0
- package/dist/wallet/storage/memory.js +19 -0
- package/dist/wallet/storage/memory.js.map +1 -0
- package/dist/wallet/storage.test.d.ts +2 -0
- package/dist/wallet/storage.test.d.ts.map +1 -0
- package/dist/wallet/storage.test.js +103 -0
- package/dist/wallet/storage.test.js.map +1 -0
- package/dist/wallet/types.d.ts +69 -0
- package/dist/wallet/types.d.ts.map +1 -0
- package/dist/wallet/types.js +6 -0
- package/dist/wallet/types.js.map +1 -0
- package/dist/wallet/wallet.d.ts +81 -0
- package/dist/wallet/wallet.d.ts.map +1 -0
- package/dist/wallet/wallet.js +358 -0
- package/dist/wallet/wallet.js.map +1 -0
- package/dist/wallet/wallet.test.d.ts +2 -0
- package/dist/wallet/wallet.test.d.ts.map +1 -0
- package/dist/wallet/wallet.test.js +150 -0
- package/dist/wallet/wallet.test.js.map +1 -0
- package/dist/wallet/web-authn.d.ts +78 -0
- package/dist/wallet/web-authn.d.ts.map +1 -0
- package/dist/wallet/web-authn.js +250 -0
- package/dist/wallet/web-authn.js.map +1 -0
- package/package.json +18 -4
- package/src/e2e/README.md +67 -0
- package/src/wallet/README.md +119 -0
package/dist/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,50 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@pasosdejesus/m` are documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.25.0] - 2026-10-09
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **`@pasosdejesus/m/wallet/next` (`m/REQ/37`).** React layer of the in-app wallet, graduated from
|
|
10
|
+
learn.tg's `pdj-wallet-next`: `useInAppWallet`, `InAppWalletSetup`, `InAppWalletUnlock`. Texts
|
|
11
|
+
(`messages`) and storage namespaces (`configureInAppWallet`) are injectable; React is an optional
|
|
12
|
+
peer (the subpath is out of the core barrel).
|
|
13
|
+
- **`test:e2e --retry <N>` / `--retry-delay <ms>` (`m/REQ/49` P3).** After the first pass, each
|
|
14
|
+
failed spec is re-run on its own (a fresh `WALLET_INDEX` per attempt); a spec is green only by
|
|
15
|
+
exit code. The run writes `<E2E_LOG_DIR>/e2e-<timestamp>.log` (default `/tmp`) with one
|
|
16
|
+
`[e2e-result] <file> <ok|fail|skip>` line per spec per attempt.
|
|
17
|
+
- **`test:e2e:summary <log…>` (`m/REQ/49` P4).** Per-spec results of one or more `test:e2e` logs,
|
|
18
|
+
side by side, marking the specs that differ between runs (environmental vs product failure).
|
|
19
|
+
|
|
20
|
+
## [0.24.0] - 2026-10-09
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **`@pasosdejesus/m/wallet` — núcleo compartido de billetera (`m/REQ/14`, fases 1-2).** Mnemónica
|
|
25
|
+
BIP39 y derivación, firma, cifrado en reposo (PBKDF2-SHA256 + AES-256-GCM con calibración de
|
|
26
|
+
iteraciones), almacenamiento intercambiable (`MemoryStorage`/`IndexedDBStorage`/`FileStorage`, el
|
|
27
|
+
último en el subpath `./wallet/storage`), provider EIP-1193 de la billetera in-app, verificación
|
|
28
|
+
del usuario con WebAuthn (L1: gesto; L2: sello con el secreto PRF) y el resolutor EIP-6963 del
|
|
29
|
+
proveedor inyectado. Sin React ni Kysely. Namespaces configurables por consumidor
|
|
30
|
+
(`setWalletDbName`, `setDestinationsPrefix`, `setRpName`) para que learn.tg/sivel3 no compartan
|
|
31
|
+
claves de almacenamiento.
|
|
32
|
+
- **`@pasosdejesus/m/e2e` — `setupFullWalletMock` (`m/REQ/14` fase 3).** Billetera E2E sobre el
|
|
33
|
+
firmador de P6/P7; con `rpcUrl` (opt-in) firma y transmite de verdad y reenvía las lecturas al RPC.
|
|
34
|
+
- **`@pasosdejesus/m/e2e` — `startLocalRpc` (`m/REQ/14` fase 3).** Nodo EVM local y hermético sobre
|
|
35
|
+
`@pasosdejesus/edr` (carga dinámica): el núcleo firma, el nodo ejecuta y confirma, sin red externa
|
|
36
|
+
ni fondos. Incluye la fixture de donación `packages/m/e2e/` (`donate.html` + `donate.spec.mjs`).
|
|
37
|
+
- **`@pasosdejesus/m/test-utils`** — mocks del núcleo de billetera: `installLocalStorage`,
|
|
38
|
+
`installIndexedDB` (devDependency opcional `fake-indexeddb`), `mockWebAuthn`, `setupWalletTests`
|
|
39
|
+
y el preset de vitest `@pasosdejesus/m/test-utils/wallet-setup` (jsdom + mocks).
|
|
40
|
+
- Tests: `packages/m` pasa de 28 a 109 (`wallet` núcleo, crypto, KDF, storage, provider EIP-1193,
|
|
41
|
+
IndexedDB, WebAuthn/biometría, destinos, EIP-6963, nodo EVM local, preset jsdom) incluida la
|
|
42
|
+
paridad CLI ↔ núcleo.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- El CLI `wallet:generate/import/derive/sign/keccak` deriva desde el núcleo (`accountFromMnemonic`
|
|
47
|
+
con `accountIndex`, `privateKeyFromMnemonic`, `keccak`); mismo comportamiento observable.
|
|
48
|
+
|
|
5
49
|
## [0.23.1] - 2026-10-08
|
|
6
50
|
|
|
7
51
|
### Fixed
|
|
@@ -42,7 +86,7 @@ All notable changes to `@pasosdejesus/m` are documented in this file.
|
|
|
42
86
|
|
|
43
87
|
### Documentation
|
|
44
88
|
|
|
45
|
-
- `REQ/49` (helpers E2E), `REQ/36` (tablero único de coordinación), `REQ/
|
|
89
|
+
- `REQ/49` (helpers E2E), `REQ/36` (tablero único de coordinación), `REQ/38` (núcleo de
|
|
46
90
|
identidad) y `REQ/14` (billetera compartida: Fase 3 reutiliza el firmador de `REQ/49`).
|
|
47
91
|
|
|
48
92
|
## [0.22.4] - 2026-10-06
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { E2EPage } from './browser.js';
|
|
2
|
+
export interface FullWalletMockOpts {
|
|
3
|
+
privateKey: `0x${string}`;
|
|
4
|
+
/** Dirección; si se omite se deriva de `privateKey`. */
|
|
5
|
+
address?: string;
|
|
6
|
+
chainId?: number;
|
|
7
|
+
/** RPC real (opt-in): habilita transmisión y lecturas reales. */
|
|
8
|
+
rpcUrl?: string;
|
|
9
|
+
walletName?: string;
|
|
10
|
+
/** Nombre del puente de `personal_sign` (default `__signMessage`). */
|
|
11
|
+
signerName?: string;
|
|
12
|
+
/** Nombre del puente typed-data (default `__signTypedData`). */
|
|
13
|
+
typedDataSignerName?: string;
|
|
14
|
+
/** Nombre del puente que firma y transmite en Node (default `__e2eSendTransaction`). */
|
|
15
|
+
sendBridgeName?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface FullWalletMock {
|
|
18
|
+
address: string;
|
|
19
|
+
signerName: string;
|
|
20
|
+
typedDataSignerName: string;
|
|
21
|
+
sendBridgeName: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Código del proveedor EIP-6963 con firma real. `realRpc` (cuando se conoce el RPC)
|
|
25
|
+
* activa el reenvío de lecturas/transmisión; si no, todo es mock.
|
|
26
|
+
*/
|
|
27
|
+
export declare function fullWalletMockCode(opts: {
|
|
28
|
+
address: string;
|
|
29
|
+
chainId?: number;
|
|
30
|
+
walletName?: string;
|
|
31
|
+
signerName?: string;
|
|
32
|
+
typedDataSignerName?: string;
|
|
33
|
+
sendBridgeName?: string;
|
|
34
|
+
rpcUrl?: string;
|
|
35
|
+
}): string;
|
|
36
|
+
/**
|
|
37
|
+
* Monta la billetera E2E completa. Con `rpcUrl`, `eth_sendTransaction` firma en Node
|
|
38
|
+
* y transmite de verdad (gasta fondos reales: úsalo sólo contra una red de prueba).
|
|
39
|
+
*/
|
|
40
|
+
export declare function setupFullWalletMock(page: E2EPage, opts: FullWalletMockOpts): Promise<FullWalletMock>;
|
|
41
|
+
//# sourceMappingURL=full-wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-wallet.d.ts","sourceRoot":"","sources":["../../src/e2e/full-wallet.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,KAAK,MAAM,EAAE,CAAA;IACzB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;CACvB;AAQD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,MAAM,CAiFT;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,cAAc,CAAC,CAoDzB"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { installRealSigner } from './signer.js';
|
|
2
|
+
const FAKE_TX_HASH = `'0x' + 'cd'.repeat(32)`;
|
|
3
|
+
function rpcForward(method, params) {
|
|
4
|
+
return `(await window.__e2eRpc('${method}', ${params}))`;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Código del proveedor EIP-6963 con firma real. `realRpc` (cuando se conoce el RPC)
|
|
8
|
+
* activa el reenvío de lecturas/transmisión; si no, todo es mock.
|
|
9
|
+
*/
|
|
10
|
+
export function fullWalletMockCode(opts) {
|
|
11
|
+
const addr = opts.address;
|
|
12
|
+
const cid = opts.chainId || 42220;
|
|
13
|
+
const hexChainId = '0x' + cid.toString(16);
|
|
14
|
+
const walletName = opts.walletName || 'MockWallet';
|
|
15
|
+
const signerName = opts.signerName || '__signMessage';
|
|
16
|
+
const typedName = opts.typedDataSignerName || '__signTypedData';
|
|
17
|
+
const sendBridge = opts.sendBridgeName || '__e2eSendTransaction';
|
|
18
|
+
const realRpc = Boolean(opts.rpcUrl);
|
|
19
|
+
const sendTx = realRpc
|
|
20
|
+
? `(await window['${sendBridge}'](JSON.stringify(params[0])))`
|
|
21
|
+
: FAKE_TX_HASH;
|
|
22
|
+
const reads = realRpc
|
|
23
|
+
? `
|
|
24
|
+
if (method === 'eth_getBalance') return ${rpcForward('eth_getBalance', 'params')}
|
|
25
|
+
if (method === 'eth_call') return ${rpcForward('eth_call', 'params')}
|
|
26
|
+
if (method === 'eth_getTransactionReceipt') return ${rpcForward('eth_getTransactionReceipt', 'params')}
|
|
27
|
+
if (method === 'eth_getTransactionCount') return ${rpcForward('eth_getTransactionCount', 'params')}
|
|
28
|
+
if (method === 'eth_blockNumber') return ${rpcForward('eth_blockNumber', '[]')}
|
|
29
|
+
if (method === 'eth_gasPrice') return ${rpcForward('eth_gasPrice', '[]')}
|
|
30
|
+
if (method === 'eth_estimateGas') return ${rpcForward('eth_estimateGas', 'params')}
|
|
31
|
+
`
|
|
32
|
+
: `
|
|
33
|
+
if (method === 'eth_getBalance') return '0x0DE0B6B3A7640000'
|
|
34
|
+
if (method === 'eth_call') return '0x' + '00'.repeat(32)
|
|
35
|
+
if (method === 'eth_getTransactionReceipt') return null
|
|
36
|
+
if (method === 'eth_blockNumber') return '0x1312D00'
|
|
37
|
+
if (method === 'eth_gasPrice') return '0x12A05F200'
|
|
38
|
+
if (method === 'eth_estimateGas') return '0x7A120'
|
|
39
|
+
`;
|
|
40
|
+
return `
|
|
41
|
+
const __provider = {
|
|
42
|
+
isMetaMask: true,
|
|
43
|
+
chainId: '${hexChainId}',
|
|
44
|
+
selectedAddress: '${addr}',
|
|
45
|
+
request: async ({ method, params }) => {
|
|
46
|
+
if (method === 'eth_chainId') return '${hexChainId}'
|
|
47
|
+
if (method === 'eth_accounts') return ['${addr}']
|
|
48
|
+
if (method === 'eth_requestAccounts') return ['${addr}']
|
|
49
|
+
if (method === 'personal_sign') return (await window['${signerName}'](params[0]))
|
|
50
|
+
if (method === 'eth_signTypedData_v4') return (await window['${typedName}'](params[1]))
|
|
51
|
+
if (method === 'wallet_switchEthereumChain') return null
|
|
52
|
+
if (method === 'eth_sendTransaction') return ${sendTx}
|
|
53
|
+
${reads}
|
|
54
|
+
return null
|
|
55
|
+
},
|
|
56
|
+
on: (event, listener) => {
|
|
57
|
+
if (event === 'accountsChanged') {
|
|
58
|
+
window.__eip6963Listeners = window.__eip6963Listeners || {}
|
|
59
|
+
window.__eip6963Listeners[event] = listener
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
removeListener: () => {},
|
|
63
|
+
}
|
|
64
|
+
window.ethereum = __provider
|
|
65
|
+
window.__e2eRealRpc = ${realRpc ? JSON.stringify(opts.rpcUrl) : 'null'}
|
|
66
|
+
window.__e2eRpc = async (method, params) => {
|
|
67
|
+
if (!window.__e2eRealRpc) throw new Error('no real RPC configured')
|
|
68
|
+
const res = await fetch(window.__e2eRealRpc, {
|
|
69
|
+
method: 'POST',
|
|
70
|
+
headers: { 'Content-Type': 'application/json' },
|
|
71
|
+
body: JSON.stringify({ jsonrpc: '2.0', id: Date.now(), method, params: params || [] }),
|
|
72
|
+
})
|
|
73
|
+
const json = await res.json()
|
|
74
|
+
if (json.error) throw new Error(method + ' failed: ' + (json.error.message || 'unknown'))
|
|
75
|
+
return json.result
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const __info = {
|
|
79
|
+
uuid: crypto.randomUUID ? crypto.randomUUID() : 'mock-uuid-full',
|
|
80
|
+
name: '${walletName}',
|
|
81
|
+
icon: 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg"/>',
|
|
82
|
+
rdns: 'com.mock.wallet',
|
|
83
|
+
}
|
|
84
|
+
window.dispatchEvent(new CustomEvent('eip6963:announceProvider', {
|
|
85
|
+
detail: { info: __info, provider: __provider }
|
|
86
|
+
}))
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Monta la billetera E2E completa. Con `rpcUrl`, `eth_sendTransaction` firma en Node
|
|
91
|
+
* y transmite de verdad (gasta fondos reales: úsalo sólo contra una red de prueba).
|
|
92
|
+
*/
|
|
93
|
+
export async function setupFullWalletMock(page, opts) {
|
|
94
|
+
const signer = await installRealSigner(page, {
|
|
95
|
+
privateKey: opts.privateKey,
|
|
96
|
+
name: opts.signerName,
|
|
97
|
+
typedDataName: opts.typedDataSignerName,
|
|
98
|
+
});
|
|
99
|
+
const address = opts.address || signer.address;
|
|
100
|
+
const sendBridgeName = opts.sendBridgeName || '__e2eSendTransaction';
|
|
101
|
+
if (opts.rpcUrl) {
|
|
102
|
+
await page.exposeFunction(sendBridgeName, async (txJson) => {
|
|
103
|
+
const { createWalletClient, createPublicClient, http } = await import('viem');
|
|
104
|
+
const { privateKeyToAccount } = await import('viem/accounts');
|
|
105
|
+
const account = privateKeyToAccount(opts.privateKey);
|
|
106
|
+
const transport = http(opts.rpcUrl);
|
|
107
|
+
const wallet = createWalletClient({ account, transport });
|
|
108
|
+
const client = createPublicClient({ transport });
|
|
109
|
+
const tx = JSON.parse(txJson);
|
|
110
|
+
const hash = await wallet.sendTransaction({
|
|
111
|
+
account,
|
|
112
|
+
chain: null,
|
|
113
|
+
to: tx.to,
|
|
114
|
+
value: tx.value !== undefined ? BigInt(tx.value) : undefined,
|
|
115
|
+
data: tx.data,
|
|
116
|
+
});
|
|
117
|
+
// Espera el recibo para que el spec vea una transacción confirmada.
|
|
118
|
+
await client.waitForTransactionReceipt({ hash });
|
|
119
|
+
return hash;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
await page.evaluateOnNewDocument(fullWalletMockCode({
|
|
123
|
+
address,
|
|
124
|
+
chainId: opts.chainId,
|
|
125
|
+
walletName: opts.walletName,
|
|
126
|
+
signerName: signer.name,
|
|
127
|
+
typedDataSignerName: signer.typedDataName,
|
|
128
|
+
sendBridgeName,
|
|
129
|
+
rpcUrl: opts.rpcUrl,
|
|
130
|
+
}));
|
|
131
|
+
return {
|
|
132
|
+
address,
|
|
133
|
+
signerName: signer.name,
|
|
134
|
+
typedDataSignerName: signer.typedDataName,
|
|
135
|
+
sendBridgeName,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=full-wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-wallet.js","sourceRoot":"","sources":["../../src/e2e/full-wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-wallet.test.d.ts","sourceRoot":"","sources":["../../src/e2e/full-wallet.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { fullWalletMockCode } from './full-wallet.js';
|
|
3
|
+
// m/REQ/14 Fase 3: billetera E2E con firma real; con `rpcUrl` (opt-in) transmite y
|
|
4
|
+
// lee de verdad; sin `rpcUrl` todo es mock (retrocompatible).
|
|
5
|
+
describe('full-wallet mock', () => {
|
|
6
|
+
it('firma personal_sign/typed data con los puentes reales', () => {
|
|
7
|
+
const code = fullWalletMockCode({ address: '0xabc' });
|
|
8
|
+
expect(code).toContain(`window['__signMessage'](params[0])`);
|
|
9
|
+
expect(code).toContain(`window['__signTypedData'](params[1])`);
|
|
10
|
+
});
|
|
11
|
+
it('sin rpcUrl transmite en falso y no reenvía al RPC', () => {
|
|
12
|
+
const code = fullWalletMockCode({ address: '0xabc' });
|
|
13
|
+
expect(code).toContain(`'0x' + 'cd'.repeat(32)`);
|
|
14
|
+
expect(code).toContain('window.__e2eRealRpc = null');
|
|
15
|
+
expect(code).not.toContain(`window['__e2eSendTransaction']`);
|
|
16
|
+
});
|
|
17
|
+
it('con rpcUrl transmite de verdad y reenvía las lecturas', () => {
|
|
18
|
+
const code = fullWalletMockCode({ address: '0xabc', rpcUrl: 'https://rpc.example' });
|
|
19
|
+
expect(code).toContain(`window['__e2eSendTransaction'](JSON.stringify(params[0]))`);
|
|
20
|
+
expect(code).toContain('window.__e2eRealRpc = "https://rpc.example"');
|
|
21
|
+
expect(code).toContain(`window.__e2eRpc('eth_call', params)`);
|
|
22
|
+
expect(code).not.toContain(`'0x' + 'cd'.repeat(32)`);
|
|
23
|
+
});
|
|
24
|
+
it('respeta los nombres de puente personalizados', () => {
|
|
25
|
+
const code = fullWalletMockCode({
|
|
26
|
+
address: '0xabc',
|
|
27
|
+
signerName: '__firma',
|
|
28
|
+
typedDataSignerName: '__firmaTyped',
|
|
29
|
+
sendBridgeName: '__envia',
|
|
30
|
+
rpcUrl: 'https://rpc.example',
|
|
31
|
+
});
|
|
32
|
+
expect(code).toContain(`window['__firma'](params[0])`);
|
|
33
|
+
expect(code).toContain(`window['__firmaTyped'](params[1])`);
|
|
34
|
+
expect(code).toContain(`window['__envia'](JSON.stringify(params[0]))`);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=full-wallet.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"full-wallet.test.js","sourceRoot":"","sources":["../../src/e2e/full-wallet.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAErD,mFAAmF;AACnF,8DAA8D;AAC9D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;QACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAA;QAC5D,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;QACrD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACpD,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC,CAAA;QACpF,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAA;QACnF,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAA;QACrE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qCAAqC,CAAC,CAAA;QAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,IAAI,GAAG,kBAAkB,CAAC;YAC9B,OAAO,EAAE,OAAO;YAChB,UAAU,EAAE,SAAS;YACrB,mBAAmB,EAAE,cAAc;YACnC,cAAc,EAAE,SAAS;YACzB,MAAM,EAAE,qBAAqB;SAC9B,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAA;QACtD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;QAC3D,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/e2e/index.d.ts
CHANGED
|
@@ -12,4 +12,8 @@ export { installRealSigner, REAL_SIGNER_NAME, REAL_TYPED_DATA_SIGNER_NAME } from
|
|
|
12
12
|
export type { RealSigner, RealSignerOpts } from './signer.js';
|
|
13
13
|
export { ethereumMockCode, eip6963MockCode, injectEIP6963 } from './wallet-mock.js';
|
|
14
14
|
export type { EthereumMockOpts, InjectEIP6963Opts } from './wallet-mock.js';
|
|
15
|
+
export { setupFullWalletMock, fullWalletMockCode } from './full-wallet.js';
|
|
16
|
+
export type { FullWalletMockOpts, FullWalletMock } from './full-wallet.js';
|
|
17
|
+
export { startLocalRpc } from './local-node.js';
|
|
18
|
+
export type { LocalRpc, LocalRpcOptions, LocalRpcAccount } from './local-node.js';
|
|
15
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/e2e/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/e2e/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC9E,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC3H,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC5D,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAC9F,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnF,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/e2e/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAC9E,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC3H,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC5D,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAC9F,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AACnF,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1E,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA"}
|
package/dist/e2e/index.js
CHANGED
|
@@ -8,4 +8,6 @@ export { simulateSIWE, checkSessionFull, checkPartialLogin } from './siwe.js';
|
|
|
8
8
|
export { setupSIWEMock } from './siwe-mock.js';
|
|
9
9
|
export { installRealSigner, REAL_SIGNER_NAME, REAL_TYPED_DATA_SIGNER_NAME } from './signer.js';
|
|
10
10
|
export { ethereumMockCode, eip6963MockCode, injectEIP6963 } from './wallet-mock.js';
|
|
11
|
+
export { setupFullWalletMock, fullWalletMockCode } from './full-wallet.js';
|
|
12
|
+
export { startLocalRpc } from './local-node.js';
|
|
11
13
|
//# sourceMappingURL=index.js.map
|
package/dist/e2e/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/e2e/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE9E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE3H,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAE9F,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/e2e/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE9E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE3H,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAE9F,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEnF,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface LocalRpcAccount {
|
|
2
|
+
secretKey: `0x${string}`;
|
|
3
|
+
balance: bigint;
|
|
4
|
+
}
|
|
5
|
+
export interface LocalRpcOptions {
|
|
6
|
+
chainId?: number;
|
|
7
|
+
/** Cuentas financiadas; por defecto las 10 de Hardhat (10.000 ETH cada una). */
|
|
8
|
+
accounts?: LocalRpcAccount[];
|
|
9
|
+
}
|
|
10
|
+
export interface LocalRpc {
|
|
11
|
+
url: string;
|
|
12
|
+
chainId: number;
|
|
13
|
+
/** Direcciones de las cuentas gestionadas (financiadas). */
|
|
14
|
+
accounts: string[];
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Levanta un nodo EVM local en un puerto efímero y devuelve su URL JSON-RPC.
|
|
19
|
+
* Importar `@pasosdejesus/edr` es dinámico: no es una dependencia de runtime de `m`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function startLocalRpc(options?: LocalRpcOptions): Promise<LocalRpc>;
|
|
22
|
+
//# sourceMappingURL=local-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-node.d.ts","sourceRoot":"","sources":["../../src/e2e/local-node.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,KAAK,MAAM,EAAE,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAQD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoIpF"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// src/e2e/local-node.ts
|
|
2
|
+
// Nodo JSON-RPC local y hermético para probar la billetera de verdad (`m/REQ/14`
|
|
3
|
+
// Fase 3). Envuelve `@pasosdejesus/edr` (dependencia opcional) en un servidor HTTP
|
|
4
|
+
// EIP-1193 para que viem del lado Node **o** una página con `setupFullWalletMock`
|
|
5
|
+
// firmen con el núcleo y transmitan de verdad, sin red externa y sin gastar fondos.
|
|
6
|
+
//
|
|
7
|
+
// El nodo **no** verifica la firma del raw tx (re-firma con la llave gestionada de
|
|
8
|
+
// la cuenta destino), así que un test que quiera comprobar la firma del núcleo debe
|
|
9
|
+
// usar `recoverTransactionAddress` sobre el tx serializado por separado.
|
|
10
|
+
import * as http from 'node:http';
|
|
11
|
+
/**
|
|
12
|
+
* Levanta un nodo EVM local en un puerto efímero y devuelve su URL JSON-RPC.
|
|
13
|
+
* Importar `@pasosdejesus/edr` es dinámico: no es una dependencia de runtime de `m`.
|
|
14
|
+
*/
|
|
15
|
+
export async function startLocalRpc(options = {}) {
|
|
16
|
+
const { EdrProvider } = await import('@pasosdejesus/edr');
|
|
17
|
+
const provider = new EdrProvider({
|
|
18
|
+
chainId: options.chainId ?? 31337,
|
|
19
|
+
accounts: options.accounts,
|
|
20
|
+
});
|
|
21
|
+
await provider.init();
|
|
22
|
+
const viem = await import('viem');
|
|
23
|
+
// El nodo re-firma el raw tx, así que su recibo queda bajo SU hash; viem espera
|
|
24
|
+
// el hash del tx que firmó. Re-indexamos el recibo bajo `keccak256(raw)`.
|
|
25
|
+
const receipts = new Map();
|
|
26
|
+
async function handle(method, params) {
|
|
27
|
+
switch (method) {
|
|
28
|
+
case 'eth_chainId':
|
|
29
|
+
return provider.eth_chainId();
|
|
30
|
+
case 'net_version':
|
|
31
|
+
return provider.net_version();
|
|
32
|
+
case 'eth_blockNumber':
|
|
33
|
+
return provider.eth_blockNumber();
|
|
34
|
+
case 'eth_accounts':
|
|
35
|
+
return provider.eth_accounts();
|
|
36
|
+
case 'eth_coinbase':
|
|
37
|
+
return provider.eth_coinbase();
|
|
38
|
+
case 'eth_gasPrice':
|
|
39
|
+
return provider.eth_gasPrice();
|
|
40
|
+
case 'eth_getBalance':
|
|
41
|
+
return provider.eth_getBalance(params[0], params[1]);
|
|
42
|
+
case 'eth_getTransactionCount':
|
|
43
|
+
return provider.eth_getTransactionCount(params[0], params[1]);
|
|
44
|
+
case 'eth_getCode':
|
|
45
|
+
return provider.eth_getCode(params[0], params[1]);
|
|
46
|
+
case 'eth_call':
|
|
47
|
+
return provider.eth_call(params[0], params[1]);
|
|
48
|
+
case 'eth_estimateGas':
|
|
49
|
+
return provider.eth_estimateGas(params[0]);
|
|
50
|
+
case 'eth_sendTransaction':
|
|
51
|
+
return provider.eth_sendTransaction(params[0]);
|
|
52
|
+
case 'eth_sendRawTransaction': {
|
|
53
|
+
// El nodo re-firma; recupera el remitente del raw tx para ejecutar desde
|
|
54
|
+
// esa cuenta (que debe estar financiada).
|
|
55
|
+
const raw = params[0];
|
|
56
|
+
const tx = viem.parseTransaction(raw);
|
|
57
|
+
const from = await viem.recoverTransactionAddress({ serializedTransaction: raw });
|
|
58
|
+
const nodeHash = await provider.eth_sendTransaction({
|
|
59
|
+
from,
|
|
60
|
+
to: tx.to ?? undefined,
|
|
61
|
+
data: tx.data,
|
|
62
|
+
value: tx.value !== undefined ? `0x${tx.value.toString(16)}` : undefined,
|
|
63
|
+
gas: tx.gas !== undefined ? `0x${tx.gas.toString(16)}` : undefined,
|
|
64
|
+
gasPrice: tx.gasPrice !== undefined ? `0x${tx.gasPrice.toString(16)}` : undefined,
|
|
65
|
+
});
|
|
66
|
+
const rawHash = viem.keccak256(raw);
|
|
67
|
+
const receipt = await provider.eth_getTransactionReceipt(nodeHash);
|
|
68
|
+
if (receipt)
|
|
69
|
+
receipts.set(rawHash, { ...receipt, transactionHash: rawHash });
|
|
70
|
+
return rawHash;
|
|
71
|
+
}
|
|
72
|
+
case 'eth_getTransactionReceipt': {
|
|
73
|
+
const hash = params[0];
|
|
74
|
+
return receipts.get(hash) ?? provider.eth_getTransactionReceipt(hash);
|
|
75
|
+
}
|
|
76
|
+
case 'eth_getLogs':
|
|
77
|
+
return provider.eth_getLogs(params[0]);
|
|
78
|
+
case 'eth_getBlockByNumber': {
|
|
79
|
+
// Bloque mínimo: viem lo consulta para baseFeePerGas y confirmaciones.
|
|
80
|
+
const number = await provider.eth_blockNumber();
|
|
81
|
+
return {
|
|
82
|
+
number,
|
|
83
|
+
hash: `0x${'00'.repeat(32)}`,
|
|
84
|
+
parentHash: `0x${'00'.repeat(32)}`,
|
|
85
|
+
baseFeePerGas: '0x1',
|
|
86
|
+
gasLimit: '0x1c9c380',
|
|
87
|
+
gasUsed: '0x0',
|
|
88
|
+
timestamp: `0x${Math.floor(Date.now() / 1000).toString(16)}`,
|
|
89
|
+
transactions: [],
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
case 'eth_feeHistory':
|
|
93
|
+
return { oldestBlock: '0x0', baseFeePerGas: ['0x1'], gasUsedRatio: [0], reward: [] };
|
|
94
|
+
case 'eth_maxPriorityFeePerGas':
|
|
95
|
+
return '0x1';
|
|
96
|
+
case 'evm_snapshot':
|
|
97
|
+
return provider.evm_snapshot();
|
|
98
|
+
case 'evm_revert':
|
|
99
|
+
return provider.evm_revert(params[0]);
|
|
100
|
+
default:
|
|
101
|
+
throw new Error(`local-node: unsupported method ${method}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const server = http.createServer((req, res) => {
|
|
105
|
+
if (req.method !== 'POST') {
|
|
106
|
+
res.writeHead(405).end();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const chunks = [];
|
|
110
|
+
req.on('data', (chunk) => chunks.push(chunk));
|
|
111
|
+
req.on('end', async () => {
|
|
112
|
+
const headers = { 'Content-Type': 'application/json' };
|
|
113
|
+
let body;
|
|
114
|
+
try {
|
|
115
|
+
body = JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
res.writeHead(400, headers).end(JSON.stringify({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } }));
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
const result = await handle(body.method ?? '', body.params ?? []);
|
|
123
|
+
res.writeHead(200, headers).end(JSON.stringify({ jsonrpc: '2.0', id: body.id ?? null, result }));
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
127
|
+
res.writeHead(200, headers).end(JSON.stringify({ jsonrpc: '2.0', id: body.id ?? null, error: { code: -32000, message } }));
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
|
|
132
|
+
const { port } = server.address();
|
|
133
|
+
return {
|
|
134
|
+
url: `http://127.0.0.1:${port}`,
|
|
135
|
+
chainId: options.chainId ?? 31337,
|
|
136
|
+
accounts: provider.getAccounts(),
|
|
137
|
+
close: () => new Promise((resolve) => {
|
|
138
|
+
server.close(() => {
|
|
139
|
+
void provider.shutdown().finally(() => resolve());
|
|
140
|
+
});
|
|
141
|
+
}),
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=local-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-node.js","sourceRoot":"","sources":["../../src/e2e/local-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-node.test.d.ts","sourceRoot":"","sources":["../../src/e2e/local-node.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
2
|
+
import { createPublicClient, createWalletClient, http, parseEther, recoverTransactionAddress, } from 'viem';
|
|
3
|
+
import { accountFromMnemonic } from '../wallet/index.js';
|
|
4
|
+
import { startLocalRpc } from './local-node.js';
|
|
5
|
+
const HARDHAT_MNEMONIC = 'test test test test test test test test test test test junk';
|
|
6
|
+
const HARDHAT_ADDRESS = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
|
|
7
|
+
// Direcciones fuera de las 10 cuentas financiadas por defecto de Hardhat.
|
|
8
|
+
const RECEIVER_A = '0x1111111111111111111111111111111111111111';
|
|
9
|
+
const RECEIVER_B = '0x2222222222222222222222222222222222222222';
|
|
10
|
+
// m/REQ/14 Fase 3: una transacción firmada de verdad por el núcleo, transmitida y
|
|
11
|
+
// confirmada por un EVM local. Hermético: no hay red externa ni fondos reales.
|
|
12
|
+
describe('local EVM node + wallet core', () => {
|
|
13
|
+
let rpc;
|
|
14
|
+
beforeAll(async () => {
|
|
15
|
+
rpc = await startLocalRpc();
|
|
16
|
+
});
|
|
17
|
+
afterAll(async () => {
|
|
18
|
+
await rpc.close();
|
|
19
|
+
});
|
|
20
|
+
async function send(to, value) {
|
|
21
|
+
const account = accountFromMnemonic(HARDHAT_MNEMONIC);
|
|
22
|
+
const wallet = createWalletClient({ account, transport: http(rpc.url) });
|
|
23
|
+
const request = await wallet.prepareTransactionRequest({ account, chain: null, to, value });
|
|
24
|
+
const { from: _from, ...tx } = request;
|
|
25
|
+
const serialized = await account.signTransaction(tx);
|
|
26
|
+
expect(await recoverTransactionAddress({ serializedTransaction: serialized })).toBe(HARDHAT_ADDRESS);
|
|
27
|
+
return wallet.sendRawTransaction({ serializedTransaction: serialized });
|
|
28
|
+
}
|
|
29
|
+
it('signs a transfer the EVM accepts and confirms', async () => {
|
|
30
|
+
const client = createPublicClient({ transport: http(rpc.url) });
|
|
31
|
+
const receipt = await client.waitForTransactionReceipt({
|
|
32
|
+
hash: await send(RECEIVER_A, parseEther('1')),
|
|
33
|
+
});
|
|
34
|
+
expect(receipt.status).toBe('success');
|
|
35
|
+
expect(await client.getBalance({ address: RECEIVER_A })).toBe(parseEther('1'));
|
|
36
|
+
});
|
|
37
|
+
it('moved the funds to the recipient', async () => {
|
|
38
|
+
const client = createPublicClient({ transport: http(rpc.url) });
|
|
39
|
+
await client.waitForTransactionReceipt({ hash: await send(RECEIVER_B, parseEther('2')) });
|
|
40
|
+
expect(await client.getBalance({ address: RECEIVER_B })).toBe(parseEther('2'));
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
//# sourceMappingURL=local-node.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-node.test.js","sourceRoot":"","sources":["../../src/e2e/local-node.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/i18n/locales/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,eAAe,EAAE,cA6L7B,CAAC"}
|
package/dist/i18n/locales/cli.js
CHANGED
|
@@ -88,6 +88,7 @@ export const cliTranslations = {
|
|
|
88
88
|
'cmd.create_arg_required': 'Project name is required',
|
|
89
89
|
'cmd.db_mig_make_missing_arg': 'Migration name is required',
|
|
90
90
|
'cmd.e2e_description': 'Run E2E tests (specs with Puppeteer, smoke with axios). Optional: path pattern, --smoke, --grep <filter>',
|
|
91
|
+
'cmd.test_e2e_summary_description': 'Show per-spec results from one or more test:e2e logs and compare them (marks rows that differ)',
|
|
91
92
|
'cmd.interactive_hint': "Type a command, or 'help' to list commands, or 'exit' to quit.",
|
|
92
93
|
'cmd.interactive_prompt': 'm> ',
|
|
93
94
|
'cmd.interactive_arg_prompt': 'Argument for {{0}}: ',
|
|
@@ -181,6 +182,7 @@ export const cliTranslations = {
|
|
|
181
182
|
'cmd.create_arg_required': 'El nombre del proyecto es requerido',
|
|
182
183
|
'cmd.db_mig_make_missing_arg': 'El nombre de la migración es requerido',
|
|
183
184
|
'cmd.e2e_description': 'Ejecuta pruebas E2E (specs con Puppeteer, smoke con axios). Opcional: patrón, --smoke, --grep <filtro>',
|
|
185
|
+
'cmd.test_e2e_summary_description': 'Muestra el resultado por spec de uno o más logs de test:e2e y los compara (marca las filas que difieren)',
|
|
184
186
|
'cmd.interactive_hint': "Escribe una orden, o 'help' para listar, o 'exit' para salir.",
|
|
185
187
|
'cmd.interactive_prompt': 'm> ',
|
|
186
188
|
'cmd.interactive_arg_prompt': 'Argumento para {{0}}: ',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/i18n/locales/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/i18n/locales/cli.ts"],"names":[],"mappings":"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"}
|