@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.
- package/README.md +2 -2
- package/dist/CHANGELOG.md +141 -0
- package/dist/compose/derive.d.ts +53 -0
- package/dist/compose/derive.d.ts.map +1 -0
- package/dist/compose/derive.js +128 -0
- package/dist/compose/derive.js.map +1 -0
- package/dist/compose/discover.d.ts +32 -0
- package/dist/compose/discover.d.ts.map +1 -0
- package/dist/compose/discover.js +96 -0
- package/dist/compose/discover.js.map +1 -0
- package/dist/compose/index.d.ts +17 -0
- package/dist/compose/index.d.ts.map +1 -0
- package/dist/compose/index.js +16 -0
- package/dist/compose/index.js.map +1 -0
- package/dist/compose/manifest.d.ts +89 -0
- package/dist/compose/manifest.d.ts.map +1 -0
- package/dist/compose/manifest.js +16 -0
- package/dist/compose/manifest.js.map +1 -0
- package/dist/compose/sync.d.ts +12 -0
- package/dist/compose/sync.d.ts.map +1 -0
- package/dist/compose/sync.js +27 -0
- package/dist/compose/sync.js.map +1 -0
- package/dist/compose/usage.d.ts +54 -0
- package/dist/compose/usage.d.ts.map +1 -0
- package/dist/compose/usage.js +167 -0
- package/dist/compose/usage.js.map +1 -0
- package/dist/compose/vendor.d.ts +45 -0
- package/dist/compose/vendor.d.ts.map +1 -0
- package/dist/compose/vendor.js +147 -0
- package/dist/compose/vendor.js.map +1 -0
- package/dist/compose/verify.d.ts +11 -0
- package/dist/compose/verify.d.ts.map +1 -0
- package/dist/compose/verify.js +74 -0
- package/dist/compose/verify.js.map +1 -0
- package/dist/e2e/env.d.ts +1 -1
- package/dist/e2e/env.js +3 -3
- package/dist/e2e/env.js.map +1 -1
- package/dist/e2e/local-node.js +1 -1
- package/dist/e2e/local-node.js.map +1 -1
- package/dist/e2e/wallet-mock.js +1 -1
- package/dist/e2e/wallet-mock.js.map +1 -1
- package/dist/e2e/warmup.js +1 -1
- package/dist/e2e/warmup.js.map +1 -1
- package/dist/engine.d.ts +3 -16
- package/dist/engine.d.ts.map +1 -1
- package/dist/i18n/locales/cli.d.ts.map +1 -1
- package/dist/i18n/locales/cli.js +16 -10
- package/dist/i18n/locales/cli.js.map +1 -1
- package/dist/m.js +13 -10
- package/dist/m.js.map +1 -1
- package/dist/shadcn_components/ui/button.d.ts +1 -1
- package/dist/tasks/create.d.ts +7 -2
- package/dist/tasks/create.d.ts.map +1 -1
- package/dist/tasks/create.js +13 -17
- package/dist/tasks/create.js.map +1 -1
- package/dist/tasks/db.d.ts +2 -1
- package/dist/tasks/db.d.ts.map +1 -1
- package/dist/tasks/db.js +14 -11
- package/dist/tasks/db.js.map +1 -1
- package/dist/tasks/e2e-summary.js +1 -1
- package/dist/tasks/e2e-summary.js.map +1 -1
- package/dist/tasks/e2e.js +1 -1
- package/dist/tasks/e2e.js.map +1 -1
- package/dist/tasks/engine.d.ts.map +1 -1
- package/dist/tasks/engine.js +246 -17
- package/dist/tasks/engine.js.map +1 -1
- package/dist/tasks/msip.d.ts +11 -0
- package/dist/tasks/msip.d.ts.map +1 -0
- package/dist/tasks/{base-model.js → msip.js} +161 -25
- package/dist/tasks/msip.js.map +1 -0
- package/dist/tasks/update.d.ts +16 -0
- package/dist/tasks/update.d.ts.map +1 -1
- package/dist/tasks/update.js +61 -10
- package/dist/tasks/update.js.map +1 -1
- package/dist/tasks/warmup.js +1 -1
- package/dist/tasks/warmup.js.map +1 -1
- package/dist/templates/apps/hardhat/README.md +0 -8
- package/dist/templates/apps/nextjs/bin/m +3 -0
- package/dist/templates/apps/nextjs/package.json.hbs +1 -0
- package/dist/templates/apps/nextjs/tests/global-setup.ts +28 -0
- package/dist/templates/apps/nextjs/vitest.config.ts +3 -0
- package/dist/test-utils/console.d.ts +1 -1
- package/dist/test-utils/console.js +1 -1
- package/dist/test-utils/kysely-mocks.d.ts +1 -1
- package/dist/test-utils/kysely-mocks.js +1 -1
- package/dist/test-utils/wallet-mocks.js +1 -1
- package/dist/test-utils/wallet-setup.js +1 -1
- package/dist/util/engines.d.ts +4 -6
- package/dist/util/engines.d.ts.map +1 -1
- package/dist/util/engines.js +5 -38
- package/dist/util/engines.js.map +1 -1
- package/dist/util/msip.d.ts +17 -0
- package/dist/util/msip.d.ts.map +1 -0
- package/dist/util/msip.js +86 -0
- package/dist/util/msip.js.map +1 -0
- package/dist/wallet/index.js +1 -1
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/next/i18n.d.ts +1 -1
- package/dist/wallet/next/i18n.js +1 -1
- package/dist/wallet/next/index.js +1 -1
- package/dist/wallet/next/index.js.map +1 -1
- package/dist/wallet/next/namespaces.d.ts +1 -1
- package/dist/wallet/next/namespaces.js +1 -1
- package/dist/wallet/storage/idb.d.ts +1 -1
- package/dist/wallet/storage/idb.js +1 -1
- package/package.json +4 -6
- package/src/e2e/README.md +6 -6
- package/src/tasks/README.md +3 -3
- package/src/test-utils/README.md +2 -2
- package/src/wallet/README.md +4 -4
- package/dist/base-model/baseline.generated.d.ts +0 -48
- package/dist/base-model/baseline.generated.d.ts.map +0 -1
- package/dist/base-model/baseline.generated.js +0 -930
- package/dist/base-model/baseline.generated.js.map +0 -1
- package/dist/base-model/check.d.ts +0 -6
- package/dist/base-model/check.d.ts.map +0 -1
- package/dist/base-model/check.js +0 -195
- package/dist/base-model/check.js.map +0 -1
- package/dist/base-model/forward/baseline_1_0_0.d.ts +0 -3
- package/dist/base-model/forward/baseline_1_0_0.d.ts.map +0 -1
- package/dist/base-model/forward/baseline_1_0_0.js +0 -23
- package/dist/base-model/forward/baseline_1_0_0.js.map +0 -1
- package/dist/base-model/forward/index.d.ts +0 -28
- package/dist/base-model/forward/index.d.ts.map +0 -1
- package/dist/base-model/forward/index.js +0 -126
- package/dist/base-model/forward/index.js.map +0 -1
- package/dist/base-model/forward/index.test.d.ts +0 -2
- package/dist/base-model/forward/index.test.d.ts.map +0 -1
- package/dist/base-model/forward/index.test.js +0 -65
- package/dist/base-model/forward/index.test.js.map +0 -1
- package/dist/base-model/forward/policy.d.ts +0 -16
- package/dist/base-model/forward/policy.d.ts.map +0 -1
- package/dist/base-model/forward/policy.js +0 -37
- package/dist/base-model/forward/policy.js.map +0 -1
- package/dist/base-model/forward/policy.test.d.ts +0 -2
- package/dist/base-model/forward/policy.test.d.ts.map +0 -1
- package/dist/base-model/forward/policy.test.js +0 -40
- package/dist/base-model/forward/policy.test.js.map +0 -1
- package/dist/base-model/forward/types.d.ts +0 -21
- package/dist/base-model/forward/types.d.ts.map +0 -1
- package/dist/base-model/forward/types.js +0 -2
- package/dist/base-model/forward/types.js.map +0 -1
- package/dist/base-model/generate.d.ts +0 -42
- package/dist/base-model/generate.d.ts.map +0 -1
- package/dist/base-model/generate.js +0 -241
- package/dist/base-model/generate.js.map +0 -1
- package/dist/base-model/guidelines.d.ts +0 -13
- package/dist/base-model/guidelines.d.ts.map +0 -1
- package/dist/base-model/guidelines.js +0 -61
- package/dist/base-model/guidelines.js.map +0 -1
- package/dist/base-model/index.d.ts +0 -24
- package/dist/base-model/index.d.ts.map +0 -1
- package/dist/base-model/index.js +0 -29
- package/dist/base-model/index.js.map +0 -1
- package/dist/base-model/parse-structure.d.ts +0 -4
- package/dist/base-model/parse-structure.d.ts.map +0 -1
- package/dist/base-model/parse-structure.js +0 -170
- package/dist/base-model/parse-structure.js.map +0 -1
- package/dist/base-model/queries.d.ts +0 -34
- package/dist/base-model/queries.d.ts.map +0 -1
- package/dist/base-model/queries.js +0 -118
- package/dist/base-model/queries.js.map +0 -1
- package/dist/base-model/references/learn-tg.d.ts +0 -21
- package/dist/base-model/references/learn-tg.d.ts.map +0 -1
- package/dist/base-model/references/learn-tg.js +0 -65
- package/dist/base-model/references/learn-tg.js.map +0 -1
- package/dist/base-model/references/msip.d.ts +0 -29
- package/dist/base-model/references/msip.d.ts.map +0 -1
- package/dist/base-model/references/msip.js +0 -33
- package/dist/base-model/references/msip.js.map +0 -1
- package/dist/base-model/types.d.ts +0 -207
- package/dist/base-model/types.d.ts.map +0 -1
- package/dist/base-model/types.js +0 -10
- package/dist/base-model/types.js.map +0 -1
- package/dist/base-model/version.d.ts +0 -19
- package/dist/base-model/version.d.ts.map +0 -1
- package/dist/base-model/version.js +0 -26
- package/dist/base-model/version.js.map +0 -1
- package/dist/base-model/wallet-link.d.ts +0 -69
- package/dist/base-model/wallet-link.d.ts.map +0 -1
- package/dist/base-model/wallet-link.js +0 -220
- package/dist/base-model/wallet-link.js.map +0 -1
- package/dist/base-model/wallet-link.test.d.ts +0 -2
- package/dist/base-model/wallet-link.test.d.ts.map +0 -1
- package/dist/base-model/wallet-link.test.js +0 -147
- package/dist/base-model/wallet-link.test.js.map +0 -1
- package/dist/e2e/env.test.d.ts +0 -2
- package/dist/e2e/env.test.d.ts.map +0 -1
- package/dist/e2e/env.test.js +0 -72
- package/dist/e2e/env.test.js.map +0 -1
- package/dist/e2e/full-wallet.test.d.ts +0 -2
- package/dist/e2e/full-wallet.test.d.ts.map +0 -1
- package/dist/e2e/full-wallet.test.js +0 -63
- package/dist/e2e/full-wallet.test.js.map +0 -1
- package/dist/e2e/in-app-wallet.test.d.ts +0 -2
- package/dist/e2e/in-app-wallet.test.d.ts.map +0 -1
- package/dist/e2e/in-app-wallet.test.js +0 -52
- package/dist/e2e/in-app-wallet.test.js.map +0 -1
- package/dist/e2e/local-node.test.d.ts +0 -2
- package/dist/e2e/local-node.test.d.ts.map +0 -1
- package/dist/e2e/local-node.test.js +0 -43
- package/dist/e2e/local-node.test.js.map +0 -1
- package/dist/e2e/retry.test.d.ts +0 -2
- package/dist/e2e/retry.test.d.ts.map +0 -1
- package/dist/e2e/retry.test.js +0 -43
- package/dist/e2e/retry.test.js.map +0 -1
- package/dist/e2e/signer.test.d.ts +0 -2
- package/dist/e2e/signer.test.d.ts.map +0 -1
- package/dist/e2e/signer.test.js +0 -57
- package/dist/e2e/signer.test.js.map +0 -1
- package/dist/e2e/siwe-optional.test.d.ts +0 -2
- package/dist/e2e/siwe-optional.test.d.ts.map +0 -1
- package/dist/e2e/siwe-optional.test.js +0 -13
- package/dist/e2e/siwe-optional.test.js.map +0 -1
- package/dist/e2e/wallet-mock.test.d.ts +0 -2
- package/dist/e2e/wallet-mock.test.d.ts.map +0 -1
- package/dist/e2e/wallet-mock.test.js +0 -28
- package/dist/e2e/wallet-mock.test.js.map +0 -1
- package/dist/e2e/warmup.test.d.ts +0 -2
- package/dist/e2e/warmup.test.d.ts.map +0 -1
- package/dist/e2e/warmup.test.js +0 -67
- package/dist/e2e/warmup.test.js.map +0 -1
- package/dist/engine.test.d.ts +0 -2
- package/dist/engine.test.d.ts.map +0 -1
- package/dist/engine.test.js +0 -35
- package/dist/engine.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -11
- package/dist/index.test.js.map +0 -1
- package/dist/tasks/base-model.d.ts +0 -5
- package/dist/tasks/base-model.d.ts.map +0 -1
- package/dist/tasks/base-model.js.map +0 -1
- package/dist/tasks/e2e.test.d.ts +0 -2
- package/dist/tasks/e2e.test.d.ts.map +0 -1
- package/dist/tasks/e2e.test.js +0 -108
- package/dist/tasks/e2e.test.js.map +0 -1
- package/dist/tasks/warmup.test.d.ts +0 -2
- package/dist/tasks/warmup.test.d.ts.map +0 -1
- package/dist/tasks/warmup.test.js +0 -40
- package/dist/tasks/warmup.test.js.map +0 -1
- package/dist/templates/apps/nextjs/tests/index.test.ts +0 -7
- package/dist/templates/apps/nextjs/tests/test-utils.example.test.ts +0 -169
- package/dist/templates/apps/nextjs/tsconfig.test.json +0 -38
- package/dist/test-utils/console.test.d.ts +0 -2
- package/dist/test-utils/console.test.d.ts.map +0 -1
- package/dist/test-utils/console.test.js +0 -70
- package/dist/test-utils/console.test.js.map +0 -1
- package/dist/test-utils/kysely-mocks.test.d.ts +0 -2
- package/dist/test-utils/kysely-mocks.test.d.ts.map +0 -1
- package/dist/test-utils/kysely-mocks.test.js +0 -126
- package/dist/test-utils/kysely-mocks.test.js.map +0 -1
- package/dist/test-utils/wallet-mocks.test.d.ts +0 -2
- package/dist/test-utils/wallet-mocks.test.d.ts.map +0 -1
- package/dist/test-utils/wallet-mocks.test.js +0 -55
- package/dist/test-utils/wallet-mocks.test.js.map +0 -1
- package/dist/test-utils/wallet-setup.test.d.ts +0 -2
- package/dist/test-utils/wallet-setup.test.d.ts.map +0 -1
- package/dist/test-utils/wallet-setup.test.js +0 -18
- package/dist/test-utils/wallet-setup.test.js.map +0 -1
- package/dist/util/engines.test.d.ts +0 -2
- package/dist/util/engines.test.d.ts.map +0 -1
- package/dist/util/engines.test.js +0 -79
- package/dist/util/engines.test.js.map +0 -1
- package/dist/wallet/biometric.test.d.ts +0 -2
- package/dist/wallet/biometric.test.d.ts.map +0 -1
- package/dist/wallet/biometric.test.js +0 -44
- package/dist/wallet/biometric.test.js.map +0 -1
- package/dist/wallet/crypto.test.d.ts +0 -2
- package/dist/wallet/crypto.test.d.ts.map +0 -1
- package/dist/wallet/crypto.test.js +0 -34
- package/dist/wallet/crypto.test.js.map +0 -1
- package/dist/wallet/destinations.test.d.ts +0 -2
- package/dist/wallet/destinations.test.d.ts.map +0 -1
- package/dist/wallet/destinations.test.js +0 -34
- package/dist/wallet/destinations.test.js.map +0 -1
- package/dist/wallet/external-provider.test.d.ts +0 -2
- package/dist/wallet/external-provider.test.d.ts.map +0 -1
- package/dist/wallet/external-provider.test.js +0 -44
- package/dist/wallet/external-provider.test.js.map +0 -1
- package/dist/wallet/indexeddb.test.d.ts +0 -2
- package/dist/wallet/indexeddb.test.d.ts.map +0 -1
- package/dist/wallet/indexeddb.test.js +0 -28
- package/dist/wallet/indexeddb.test.js.map +0 -1
- package/dist/wallet/kdf.test.d.ts +0 -2
- package/dist/wallet/kdf.test.d.ts.map +0 -1
- package/dist/wallet/kdf.test.js +0 -54
- package/dist/wallet/kdf.test.js.map +0 -1
- package/dist/wallet/next/components.test.d.ts +0 -2
- package/dist/wallet/next/components.test.d.ts.map +0 -1
- package/dist/wallet/next/components.test.js +0 -122
- package/dist/wallet/next/components.test.js.map +0 -1
- package/dist/wallet/next/useInAppWallet.test.d.ts +0 -2
- package/dist/wallet/next/useInAppWallet.test.d.ts.map +0 -1
- package/dist/wallet/next/useInAppWallet.test.js +0 -261
- package/dist/wallet/next/useInAppWallet.test.js.map +0 -1
- package/dist/wallet/provider.test.d.ts +0 -2
- package/dist/wallet/provider.test.d.ts.map +0 -1
- package/dist/wallet/provider.test.js +0 -170
- package/dist/wallet/provider.test.js.map +0 -1
- package/dist/wallet/signer.test.d.ts +0 -2
- package/dist/wallet/signer.test.d.ts.map +0 -1
- package/dist/wallet/signer.test.js +0 -62
- package/dist/wallet/signer.test.js.map +0 -1
- package/dist/wallet/storage.test.d.ts +0 -2
- package/dist/wallet/storage.test.d.ts.map +0 -1
- package/dist/wallet/storage.test.js +0 -103
- package/dist/wallet/storage.test.js.map +0 -1
- package/dist/wallet/wallet.test.d.ts +0 -2
- package/dist/wallet/wallet.test.d.ts.map +0 -1
- package/dist/wallet/wallet.test.js +0 -150
- package/dist/wallet/wallet.test.js.map +0 -1
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { verifyMessage } from 'viem';
|
|
3
|
-
import { extractDestination, getInAppWalletProvider } from './provider.js';
|
|
4
|
-
import { currentLockEpoch, getWalletInfo, importWallet, lockWallet } from './wallet.js';
|
|
5
|
-
import { MemoryStorage } from './storage/memory.js';
|
|
6
|
-
import { CHAIN_IDS } from './types.js';
|
|
7
|
-
const HARDHAT_MNEMONIC = 'test test test test test test test test test test test junk';
|
|
8
|
-
const HARDHAT_ADDRESS = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
|
|
9
|
-
const password = '12345678';
|
|
10
|
-
describe('getInAppWalletProvider', () => {
|
|
11
|
-
beforeEach(async () => {
|
|
12
|
-
await lockWallet();
|
|
13
|
-
});
|
|
14
|
-
it('returns null while the wallet is locked', () => {
|
|
15
|
-
expect(getInAppWalletProvider()).toBeNull();
|
|
16
|
-
});
|
|
17
|
-
it('exposes the address and chain id when unlocked', async () => {
|
|
18
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage: new MemoryStorage() });
|
|
19
|
-
const provider = getInAppWalletProvider();
|
|
20
|
-
expect(provider).not.toBeNull();
|
|
21
|
-
expect(await provider.request({ method: 'eth_accounts' })).toEqual([HARDHAT_ADDRESS]);
|
|
22
|
-
expect(await provider.request({ method: 'eth_requestAccounts' })).toEqual([HARDHAT_ADDRESS]);
|
|
23
|
-
expect(await provider.request({ method: 'eth_chainId' })).toBe(`0x${CHAIN_IDS.celoSepolia.toString(16)}`);
|
|
24
|
-
expect(await provider.request({ method: 'net_version' })).toBe(String(CHAIN_IDS.celoSepolia));
|
|
25
|
-
});
|
|
26
|
-
it('signs personal_sign payloads with the wallet key', async () => {
|
|
27
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage: new MemoryStorage() });
|
|
28
|
-
const provider = getInAppWalletProvider();
|
|
29
|
-
const message = 'Sign in to Learn Through Games.';
|
|
30
|
-
const hex = `0x${Array.from(new TextEncoder().encode(message))
|
|
31
|
-
.map((b) => b.toString(16).padStart(2, '0'))
|
|
32
|
-
.join('')}`;
|
|
33
|
-
const signature = (await provider.request({
|
|
34
|
-
method: 'personal_sign',
|
|
35
|
-
params: [hex, HARDHAT_ADDRESS],
|
|
36
|
-
}));
|
|
37
|
-
expect(await verifyMessage({ address: HARDHAT_ADDRESS, message, signature })).toBe(true);
|
|
38
|
-
});
|
|
39
|
-
it('forwards read methods to the RPC endpoint', async () => {
|
|
40
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage: new MemoryStorage() });
|
|
41
|
-
const calls = [];
|
|
42
|
-
vi.stubGlobal('fetch', vi.fn(async (_url, init) => {
|
|
43
|
-
const body = JSON.parse(init.body);
|
|
44
|
-
calls.push(body.method);
|
|
45
|
-
return { json: async () => ({ result: body.method === 'eth_getBalance' ? '0x64' : '0x1' }) };
|
|
46
|
-
}));
|
|
47
|
-
try {
|
|
48
|
-
const provider = getInAppWalletProvider({ rpcUrl: 'https://rpc.example' });
|
|
49
|
-
const balance = await provider.request({
|
|
50
|
-
method: 'eth_getBalance',
|
|
51
|
-
params: [HARDHAT_ADDRESS, 'latest'],
|
|
52
|
-
});
|
|
53
|
-
expect(balance).toBe('0x64');
|
|
54
|
-
const call = await provider.request({
|
|
55
|
-
method: 'eth_call',
|
|
56
|
-
params: [{ to: HARDHAT_ADDRESS, data: '0x' }, 'latest'],
|
|
57
|
-
});
|
|
58
|
-
expect(call).toBe('0x1');
|
|
59
|
-
expect(calls).toEqual(['eth_getBalance', 'eth_call']);
|
|
60
|
-
}
|
|
61
|
-
finally {
|
|
62
|
-
vi.unstubAllGlobals();
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
it('explains that a read needs an rpcUrl when the provider has none', async () => {
|
|
66
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage: new MemoryStorage() });
|
|
67
|
-
const provider = getInAppWalletProvider();
|
|
68
|
-
await expect(provider.request({ method: 'eth_call', params: [] })).rejects.toThrow(/rpcUrl/);
|
|
69
|
-
});
|
|
70
|
-
it('requires an rpcUrl to broadcast transactions', async () => {
|
|
71
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage: new MemoryStorage() });
|
|
72
|
-
const provider = getInAppWalletProvider();
|
|
73
|
-
await expect(provider.request({ method: 'eth_sendTransaction', params: [{ to: HARDHAT_ADDRESS }] })).rejects.toThrow(/rpcUrl/);
|
|
74
|
-
});
|
|
75
|
-
it('extracts the destination of a native transfer', () => {
|
|
76
|
-
expect(extractDestination({ to: HARDHAT_ADDRESS })).toBe(HARDHAT_ADDRESS);
|
|
77
|
-
});
|
|
78
|
-
it('extracts the recipient of an ERC-20 transfer', () => {
|
|
79
|
-
const recipient = '11'.repeat(20);
|
|
80
|
-
const data = `0xa9059cbb${'0'.repeat(24)}${recipient}${'0'.repeat(64)}`;
|
|
81
|
-
expect(extractDestination({ to: '0xtoken', data })).toBe(`0x${recipient}`);
|
|
82
|
-
});
|
|
83
|
-
it('extracts the recipient of transferFrom (second argument)', () => {
|
|
84
|
-
const recipient = '22'.repeat(20);
|
|
85
|
-
const data = `0x23b872dd${'0'.repeat(64)}${'0'.repeat(24)}${recipient}${'0'.repeat(64)}`;
|
|
86
|
-
expect(extractDestination({ to: '0xtoken', data })).toBe(`0x${recipient}`);
|
|
87
|
-
});
|
|
88
|
-
it('fills nonce, gas and fees before signing a native send', async () => {
|
|
89
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage: new MemoryStorage() });
|
|
90
|
-
const calls = [];
|
|
91
|
-
vi.stubGlobal('fetch', vi.fn(async (_url, init) => {
|
|
92
|
-
const body = JSON.parse(init.body);
|
|
93
|
-
calls.push(body.method);
|
|
94
|
-
const results = {
|
|
95
|
-
eth_chainId: '0xaa37cc',
|
|
96
|
-
eth_getTransactionCount: '0x0',
|
|
97
|
-
eth_estimateGas: '0x5208',
|
|
98
|
-
eth_gasPrice: '0x1',
|
|
99
|
-
eth_sendRawTransaction: '0xhash',
|
|
100
|
-
};
|
|
101
|
-
return { json: async () => ({ result: results[body.method] }) };
|
|
102
|
-
}));
|
|
103
|
-
try {
|
|
104
|
-
const provider = getInAppWalletProvider({
|
|
105
|
-
rpcUrl: 'https://rpc.example',
|
|
106
|
-
requireUserVerification: false,
|
|
107
|
-
});
|
|
108
|
-
const hash = await provider.request({
|
|
109
|
-
method: 'eth_sendTransaction',
|
|
110
|
-
params: [{ from: HARDHAT_ADDRESS, to: HARDHAT_ADDRESS, value: '0x1' }],
|
|
111
|
-
});
|
|
112
|
-
expect(hash).toBe('0xhash');
|
|
113
|
-
expect(calls).toContain('eth_getTransactionCount');
|
|
114
|
-
expect(calls).toContain('eth_estimateGas');
|
|
115
|
-
expect(calls).toContain('eth_gasPrice');
|
|
116
|
-
expect(calls).toContain('eth_sendRawTransaction');
|
|
117
|
-
}
|
|
118
|
-
finally {
|
|
119
|
-
vi.unstubAllGlobals();
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
it('wallet_switchEthereumChain switches to the other known chain and emits chainChanged', async () => {
|
|
123
|
-
const storage = new MemoryStorage();
|
|
124
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
125
|
-
const provider = getInAppWalletProvider({ storage });
|
|
126
|
-
const changes = [];
|
|
127
|
-
provider.on('chainChanged', (payload) => changes.push(payload));
|
|
128
|
-
const celoHex = `0x${CHAIN_IDS.celo.toString(16)}`;
|
|
129
|
-
expect(await provider.request({ method: 'wallet_switchEthereumChain', params: [{ chainId: celoHex }] })).toBeNull();
|
|
130
|
-
expect(await provider.request({ method: 'eth_chainId' })).toBe(celoHex);
|
|
131
|
-
expect(await provider.request({ method: 'net_version' })).toBe(String(CHAIN_IDS.celo));
|
|
132
|
-
expect(changes).toEqual([celoHex]);
|
|
133
|
-
expect((await getWalletInfo(storage))?.chain).toBe('celo');
|
|
134
|
-
});
|
|
135
|
-
it('returns null when asked for the chain it is already on, without emitting', async () => {
|
|
136
|
-
const storage = new MemoryStorage();
|
|
137
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
138
|
-
const provider = getInAppWalletProvider({ storage });
|
|
139
|
-
const changes = [];
|
|
140
|
-
provider.on('chainChanged', (payload) => changes.push(payload));
|
|
141
|
-
expect(await provider.request({
|
|
142
|
-
method: 'wallet_switchEthereumChain',
|
|
143
|
-
params: [{ chainId: `0x${CHAIN_IDS.celoSepolia.toString(16)}` }],
|
|
144
|
-
})).toBeNull();
|
|
145
|
-
expect(changes).toEqual([]);
|
|
146
|
-
});
|
|
147
|
-
it('wallet_switchEthereumChain rejects an unknown chain with 4902', async () => {
|
|
148
|
-
const storage = new MemoryStorage();
|
|
149
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
150
|
-
const provider = getInAppWalletProvider({ storage });
|
|
151
|
-
await expect(provider.request({ method: 'wallet_switchEthereumChain', params: [{ chainId: '0x1' }] })).rejects.toMatchObject({ code: 4902 });
|
|
152
|
-
});
|
|
153
|
-
it('wallet_addEthereumChain accepts the known chains and rejects another', async () => {
|
|
154
|
-
const storage = new MemoryStorage();
|
|
155
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
156
|
-
const provider = getInAppWalletProvider({ storage });
|
|
157
|
-
expect(await provider.request({
|
|
158
|
-
method: 'wallet_addEthereumChain',
|
|
159
|
-
params: [{ chainId: `0x${CHAIN_IDS.celo.toString(16)}` }],
|
|
160
|
-
})).toBeNull();
|
|
161
|
-
await expect(provider.request({ method: 'wallet_addEthereumChain', params: [{ chainId: '0x1' }] })).rejects.toMatchObject({ code: 4902 });
|
|
162
|
-
});
|
|
163
|
-
it('bumps the lock generation when the wallet locks', async () => {
|
|
164
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage: new MemoryStorage() });
|
|
165
|
-
const before = currentLockEpoch();
|
|
166
|
-
await lockWallet();
|
|
167
|
-
expect(currentLockEpoch()).toBe(before + 1);
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
//# sourceMappingURL=provider.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider.test.js","sourceRoot":"","sources":["../../src/wallet/provider.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signer.test.d.ts","sourceRoot":"","sources":["../../src/wallet/signer.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { mkdtemp, readFile, rm } from 'node:fs/promises';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { accountFromMnemonic, addressFromMnemonic, isValidMnemonic, keccak, privateKeyFromMnemonic, } from './signer.js';
|
|
6
|
-
import { runWallet } from '../tasks/wallet.js';
|
|
7
|
-
const HARDHAT_MNEMONIC = 'test test test test test test test test test test test junk';
|
|
8
|
-
const HARDHAT_ADDRESS = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
|
|
9
|
-
describe('signer', () => {
|
|
10
|
-
it('derives the hardhat address and a 0x private key', () => {
|
|
11
|
-
expect(addressFromMnemonic(HARDHAT_MNEMONIC)).toBe(HARDHAT_ADDRESS);
|
|
12
|
-
expect(privateKeyFromMnemonic(HARDHAT_MNEMONIC)).toMatch(/^0x[0-9a-f]{64}$/);
|
|
13
|
-
});
|
|
14
|
-
it('distinguishes accountIndex from addressIndex', () => {
|
|
15
|
-
const byAccount = accountFromMnemonic(HARDHAT_MNEMONIC, 0, 1).address;
|
|
16
|
-
const byAddress = accountFromMnemonic(HARDHAT_MNEMONIC, 1, 0).address;
|
|
17
|
-
expect(byAccount).not.toBe(HARDHAT_ADDRESS);
|
|
18
|
-
expect(byAddress).not.toBe(HARDHAT_ADDRESS);
|
|
19
|
-
expect(byAccount).not.toBe(byAddress);
|
|
20
|
-
});
|
|
21
|
-
it('validates BIP39 phrases (wordlist + checksum)', async () => {
|
|
22
|
-
expect(await isValidMnemonic(HARDHAT_MNEMONIC)).toBe(true);
|
|
23
|
-
expect(await isValidMnemonic('test test test test test test test test test test test test')).toBe(false);
|
|
24
|
-
expect(await isValidMnemonic('not a mnemonic at all')).toBe(false);
|
|
25
|
-
});
|
|
26
|
-
it('computes keccak256 of a UTF-8 string', () => {
|
|
27
|
-
expect(keccak('')).toBe('0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470');
|
|
28
|
-
expect(keccak('hello')).toMatch(/^0x[0-9a-f]{64}$/);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
// m/REQ/14 Fase 1: el CLI de billetera debe usar el núcleo y ambos caminos deben
|
|
32
|
-
// coincidir (paridad CLI ↔ núcleo).
|
|
33
|
-
describe('CLI ↔ core parity', () => {
|
|
34
|
-
let dir;
|
|
35
|
-
let logs;
|
|
36
|
-
beforeEach(async () => {
|
|
37
|
-
dir = await mkdtemp(join(tmpdir(), 'm-wallet-cli-'));
|
|
38
|
-
process.env.M_WALLETS_DIR = dir;
|
|
39
|
-
logs = [];
|
|
40
|
-
vi.spyOn(console, 'log').mockImplementation((...args) => {
|
|
41
|
-
logs.push(args.map((a) => String(a)).join(' '));
|
|
42
|
-
});
|
|
43
|
-
vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
44
|
-
vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
45
|
-
});
|
|
46
|
-
afterEach(async () => {
|
|
47
|
-
vi.restoreAllMocks();
|
|
48
|
-
delete process.env.M_WALLETS_DIR;
|
|
49
|
-
await rm(dir, { recursive: true, force: true });
|
|
50
|
-
});
|
|
51
|
-
it('wallet:keccak matches the core keccak', async () => {
|
|
52
|
-
await runWallet(['keccak', 'hello']);
|
|
53
|
-
expect(logs.join('\n')).toContain(keccak('hello'));
|
|
54
|
-
});
|
|
55
|
-
it('wallet:generate --index 2 derives with the core accountIndex', async () => {
|
|
56
|
-
await runWallet(['generate', '--name', 'parity', '--index', '2']);
|
|
57
|
-
const saved = JSON.parse(await readFile(join(dir, 'parity.json'), 'utf-8'));
|
|
58
|
-
expect(saved.address).toBe(accountFromMnemonic(saved.mnemonic, 0, 2).address);
|
|
59
|
-
expect(saved.privateKey).toBe(privateKeyFromMnemonic(saved.mnemonic, 0, 2));
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
//# sourceMappingURL=signer.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"signer.test.js","sourceRoot":"","sources":["../../src/wallet/signer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.test.d.ts","sourceRoot":"","sources":["../../src/wallet/storage.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it } from 'vitest';
|
|
2
|
-
import { mkdtemp, rm, stat } from 'node:fs/promises';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { encryptSecret } from './crypto.js';
|
|
6
|
-
import { FileStorage } from './storage/file.js';
|
|
7
|
-
import { MemoryStorage } from './storage/memory.js';
|
|
8
|
-
import { createWallet, deleteWallet, exportMnemonic, exportPrivateKey, getWalletInfo, hasWallet, importWallet, lockWallet, signMessage, unlockWallet, } from './wallet.js';
|
|
9
|
-
import { privateKeyFromMnemonic } from './signer.js';
|
|
10
|
-
const password = '12345678';
|
|
11
|
-
const HARDHAT_MNEMONIC = 'test test test test test test test test test test test junk';
|
|
12
|
-
const HARDHAT_ADDRESS = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
|
|
13
|
-
const dirs = [];
|
|
14
|
-
async function tempStorage() {
|
|
15
|
-
const dir = await mkdtemp(join(tmpdir(), 'm-wallet-'));
|
|
16
|
-
dirs.push(dir);
|
|
17
|
-
const path = join(dir, 'wallet.json');
|
|
18
|
-
return { storage: new FileStorage(path), path };
|
|
19
|
-
}
|
|
20
|
-
function sampleRecord() {
|
|
21
|
-
return {
|
|
22
|
-
version: 1,
|
|
23
|
-
address: HARDHAT_ADDRESS,
|
|
24
|
-
chain: 'celoSepolia',
|
|
25
|
-
createdAt: 1,
|
|
26
|
-
kdf: { name: 'PBKDF2', hash: 'SHA-256', iterations: 600_000, salt: 'AA==' },
|
|
27
|
-
cipher: { name: 'AES-GCM', iv: 'BB==', data: 'CC==' },
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
afterEach(async () => {
|
|
31
|
-
await lockWallet();
|
|
32
|
-
while (dirs.length) {
|
|
33
|
-
const dir = dirs.pop();
|
|
34
|
-
if (dir)
|
|
35
|
-
await rm(dir, { recursive: true, force: true });
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
describe('FileStorage', () => {
|
|
39
|
-
it('stores, reads and deletes the encrypted record', async () => {
|
|
40
|
-
const { storage } = await tempStorage();
|
|
41
|
-
expect(await storage.has()).toBe(false);
|
|
42
|
-
expect(await storage.get()).toBeNull();
|
|
43
|
-
await storage.set(sampleRecord());
|
|
44
|
-
expect(await storage.has()).toBe(true);
|
|
45
|
-
expect(await storage.get()).toEqual(sampleRecord());
|
|
46
|
-
await storage.delete();
|
|
47
|
-
expect(await storage.has()).toBe(false);
|
|
48
|
-
});
|
|
49
|
-
it('writes the file with owner-only permissions', async () => {
|
|
50
|
-
const { storage, path } = await tempStorage();
|
|
51
|
-
await storage.set(sampleRecord());
|
|
52
|
-
const info = await stat(path);
|
|
53
|
-
expect(info.mode & 0o777).toBe(0o600);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe('wallet with FileStorage (Node.js)', () => {
|
|
57
|
-
it('creates, persists, unlocks and signs without a browser', async () => {
|
|
58
|
-
const { storage } = await tempStorage();
|
|
59
|
-
const { walletInfo, mnemonic } = await createWallet({ password: password, storage });
|
|
60
|
-
expect(walletInfo.address).toMatch(/^0x[0-9a-fA-F]{40}$/);
|
|
61
|
-
expect(mnemonic.split(' ')).toHaveLength(12);
|
|
62
|
-
await lockWallet();
|
|
63
|
-
expect(await hasWallet(storage)).toBe(true);
|
|
64
|
-
expect(await hasWallet(new FileStorage('/nonexistent/m-wallet.json'))).toBe(false);
|
|
65
|
-
expect((await getWalletInfo(storage))?.address).toBe(walletInfo.address);
|
|
66
|
-
const unlocked = await unlockWallet(password, storage);
|
|
67
|
-
expect(unlocked.address).toBe(walletInfo.address);
|
|
68
|
-
const signature = await signMessage('hola');
|
|
69
|
-
expect(signature).toMatch(/^0x[0-9a-f]+$/);
|
|
70
|
-
await deleteWallet(storage);
|
|
71
|
-
expect(await hasWallet(storage)).toBe(false);
|
|
72
|
-
});
|
|
73
|
-
it('exports the recovery phrase and the private key with the password', async () => {
|
|
74
|
-
const { storage } = await tempStorage();
|
|
75
|
-
const { mnemonic } = await createWallet({ password: password, storage });
|
|
76
|
-
expect(await exportMnemonic(password, storage)).toBe(mnemonic);
|
|
77
|
-
expect(await exportPrivateKey(password, storage)).toMatch(/^0x[0-9a-f]{64}$/i);
|
|
78
|
-
await expect(exportMnemonic('99999999', storage)).rejects.toThrow(/password/);
|
|
79
|
-
await expect(exportPrivateKey('99999999', storage)).rejects.toThrow(/password/);
|
|
80
|
-
});
|
|
81
|
-
it('has no recovery phrase when the wallet was imported from a private key', async () => {
|
|
82
|
-
const { storage } = await tempStorage();
|
|
83
|
-
const privateKey = privateKeyFromMnemonic(HARDHAT_MNEMONIC);
|
|
84
|
-
await importWallet({ privateKey, password: password, storage });
|
|
85
|
-
expect(await exportPrivateKey(password, storage)).toBe(privateKey);
|
|
86
|
-
await expect(exportMnemonic(password, storage)).rejects.toThrow(/recovery phrase/);
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
describe('legacy records', () => {
|
|
90
|
-
it('unlocks a record whose ciphertext is the bare private key', async () => {
|
|
91
|
-
const privateKey = privateKeyFromMnemonic(HARDHAT_MNEMONIC);
|
|
92
|
-
const legacy = await encryptSecret(privateKey, password);
|
|
93
|
-
const storage = new MemoryStorage({
|
|
94
|
-
...sampleRecord(),
|
|
95
|
-
kdf: legacy.kdf,
|
|
96
|
-
cipher: legacy.cipher,
|
|
97
|
-
});
|
|
98
|
-
const info = await unlockWallet(password, storage);
|
|
99
|
-
expect(info.address.toLowerCase()).toBe(HARDHAT_ADDRESS.toLowerCase());
|
|
100
|
-
await expect(exportMnemonic(password, storage)).rejects.toThrow(/recovery phrase/);
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
//# sourceMappingURL=storage.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../src/wallet/storage.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAGpD,MAAM,QAAQ,GAAG,UAAU,CAAA;AAC3B,MAAM,gBAAgB,GAAG,6DAA6D,CAAA;AACtF,MAAM,eAAe,GAAG,4CAA4C,CAAA;AAEpE,MAAM,IAAI,GAAa,EAAE,CAAA;AAEzB,KAAK,UAAU,WAAW;IACxB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC,CAAA;IACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;IACrC,OAAO,EAAE,OAAO,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAA;AACjD,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;QACL,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,CAAC;QACZ,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;QAC3E,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;KACtD,CAAA;AACH,CAAC;AAED,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,MAAM,UAAU,EAAE,CAAA;IAClB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG;YAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,EAAE,CAAA;QAEvC,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;QAEtC,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAA;QACjC,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;QAEnD,MAAM,OAAO,CAAC,MAAM,EAAE,CAAA;QACtB,MAAM,CAAC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,WAAW,EAAE,CAAA;QAC7C,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAA;QAEjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,EAAE,CAAA;QAEvC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;QACpF,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACzD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;QAE5C,MAAM,UAAU,EAAE,CAAA;QAClB,MAAM,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3C,MAAM,CAAC,MAAM,SAAS,CAAC,IAAI,WAAW,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAElF,MAAM,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAExE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACtD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QAEjD,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAA;QAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;QAE1C,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;QAC3B,MAAM,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,EAAE,CAAA;QACvC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;QAExE,MAAM,CAAC,MAAM,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9D,MAAM,CAAC,MAAM,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAE9E,MAAM,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAC7E,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,EAAE,CAAA;QACvC,MAAM,UAAU,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;QAE3D,MAAM,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;QAC/D,MAAM,CAAC,MAAM,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAClE,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,UAAU,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;QAC3D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QACxD,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC;YAChC,GAAG,YAAY,EAAE;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAClD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,CAAA;QAEtE,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACpF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.test.d.ts","sourceRoot":"","sources":["../../src/wallet/wallet.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
-
import { verifyMessage } from 'viem';
|
|
3
|
-
import { createWallet, deleteWallet, getWalletInfo, hasWallet, importWallet, isUnlocked, isValidPassword, lockWallet, signMessage, setWalletChain, unlockWallet, } from './wallet.js';
|
|
4
|
-
import { MemoryStorage } from './storage/memory.js';
|
|
5
|
-
import { KDF_ITERATIONS_FLOOR, encryptSecret } from './crypto.js';
|
|
6
|
-
import { privateKeyFromMnemonic, isValidMnemonic } from './signer.js';
|
|
7
|
-
import { signSIWE } from './siwe.js';
|
|
8
|
-
const HARDHAT_MNEMONIC = 'test test test test test test test test test test test junk';
|
|
9
|
-
const HARDHAT_ADDRESS = '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266';
|
|
10
|
-
const password = '12345678';
|
|
11
|
-
describe('wallet', () => {
|
|
12
|
-
let storage;
|
|
13
|
-
beforeEach(async () => {
|
|
14
|
-
storage = new MemoryStorage();
|
|
15
|
-
await lockWallet();
|
|
16
|
-
});
|
|
17
|
-
it('creates a wallet with a fresh mnemonic and stores it encrypted', async () => {
|
|
18
|
-
const { walletInfo, mnemonic } = await createWallet({ password: password, storage });
|
|
19
|
-
expect(mnemonic.split(' ')).toHaveLength(12);
|
|
20
|
-
expect(walletInfo.address).toMatch(/^0x[0-9a-fA-F]{40}$/);
|
|
21
|
-
expect(walletInfo.chain).toBe('celoSepolia');
|
|
22
|
-
expect(await hasWallet(storage)).toBe(true);
|
|
23
|
-
expect(isUnlocked()).toBe(true);
|
|
24
|
-
const record = await storage.get();
|
|
25
|
-
expect(record?.cipher.data).not.toContain(mnemonic);
|
|
26
|
-
expect(record?.address).toBe(walletInfo.address);
|
|
27
|
-
});
|
|
28
|
-
it('rejects a password shorter than 8 characters', async () => {
|
|
29
|
-
await expect(createWallet({ password: '123', storage })).rejects.toThrow(/at least 8 characters/i);
|
|
30
|
-
await expect(createWallet({ password: 'short', storage })).rejects.toThrow(/at least 8 characters/i);
|
|
31
|
-
await expect(createWallet({ password: '123456', storage })).rejects.toThrow(/at least 8 characters/i);
|
|
32
|
-
});
|
|
33
|
-
it('upgrades the work factor of an old record when it is unlocked', async () => {
|
|
34
|
-
const legacy = new MemoryStorage();
|
|
35
|
-
const secret = await encryptSecret(JSON.stringify({ v: 1, privateKey: privateKeyFromMnemonic(HARDHAT_MNEMONIC) }), password, 1000);
|
|
36
|
-
await legacy.set({
|
|
37
|
-
version: 1,
|
|
38
|
-
address: HARDHAT_ADDRESS,
|
|
39
|
-
chain: 'celoSepolia',
|
|
40
|
-
createdAt: Date.now(),
|
|
41
|
-
kdf: secret.kdf,
|
|
42
|
-
cipher: secret.cipher,
|
|
43
|
-
});
|
|
44
|
-
expect((await unlockWallet(password, legacy)).address).toBe(HARDHAT_ADDRESS);
|
|
45
|
-
const upgraded = await legacy.get();
|
|
46
|
-
expect(upgraded.kdf.iterations).toBeGreaterThanOrEqual(KDF_ITERATIONS_FLOOR);
|
|
47
|
-
await lockWallet();
|
|
48
|
-
expect((await unlockWallet(password, legacy)).address).toBe(HARDHAT_ADDRESS);
|
|
49
|
-
});
|
|
50
|
-
it('accepts a passphrase of 8+ characters and unlocks with it', async () => {
|
|
51
|
-
const { walletInfo } = await createWallet({ password: 'correct horse', storage });
|
|
52
|
-
expect(walletInfo.address).toMatch(/^0x[a-fA-F0-9]{40}$/);
|
|
53
|
-
await lockWallet();
|
|
54
|
-
const unlocked = await unlockWallet('correct horse', storage);
|
|
55
|
-
expect(unlocked.address).toBe(walletInfo.address);
|
|
56
|
-
});
|
|
57
|
-
it('isValidPassword accepts 8+ character secrets only', () => {
|
|
58
|
-
expect(isValidPassword('12345678')).toBe(true);
|
|
59
|
-
expect(isValidPassword('correct horse')).toBe(true);
|
|
60
|
-
expect(isValidPassword('123456')).toBe(false);
|
|
61
|
-
expect(isValidPassword('short')).toBe(false);
|
|
62
|
-
expect(isValidPassword(' short ')).toBe(false);
|
|
63
|
-
});
|
|
64
|
-
it('imports a known mnemonic and derives the expected address', async () => {
|
|
65
|
-
const info = await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
66
|
-
expect(info.address).toBe(HARDHAT_ADDRESS);
|
|
67
|
-
await lockWallet();
|
|
68
|
-
expect(await hasWallet(storage)).toBe(true);
|
|
69
|
-
const unlocked = await unlockWallet(password, storage);
|
|
70
|
-
expect(unlocked.address).toBe(HARDHAT_ADDRESS);
|
|
71
|
-
});
|
|
72
|
-
it('rejects a mnemonic that is not BIP39', async () => {
|
|
73
|
-
const typo = 'test test test test test test test test test test test tset';
|
|
74
|
-
await expect(importWallet({ mnemonic: typo, password: password, storage })).rejects.toThrow(/invalid-mnemonic/);
|
|
75
|
-
expect(await hasWallet(storage)).toBe(false);
|
|
76
|
-
const badChecksum = 'test test test test test test test test test test test test';
|
|
77
|
-
await expect(importWallet({ mnemonic: badChecksum, password: password, storage })).rejects.toThrow(/invalid-mnemonic/);
|
|
78
|
-
await expect(importWallet({ mnemonic: HARDHAT_MNEMONIC.split(' ').slice(0, 11).join(' '), password: password, storage })).rejects.toThrow(/invalid-mnemonic/);
|
|
79
|
-
});
|
|
80
|
-
it('accepts the phrases it generates and a valid 24-word phrase', async () => {
|
|
81
|
-
const { mnemonic } = await createWallet({ password: password, storage });
|
|
82
|
-
expect(await isValidMnemonic(mnemonic)).toBe(true);
|
|
83
|
-
expect(await isValidMnemonic(` ${HARDHAT_MNEMONIC.toUpperCase()} `)).toBe(true);
|
|
84
|
-
expect(await isValidMnemonic('abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon art')).toBe(true);
|
|
85
|
-
expect(await isValidMnemonic('not a mnemonic at all')).toBe(false);
|
|
86
|
-
});
|
|
87
|
-
it('reports the wallet info without unlocking', async () => {
|
|
88
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
89
|
-
await lockWallet();
|
|
90
|
-
const info = await getWalletInfo(storage);
|
|
91
|
-
expect(info?.address).toBe(HARDHAT_ADDRESS);
|
|
92
|
-
expect(isUnlocked()).toBe(false);
|
|
93
|
-
});
|
|
94
|
-
it('rejects a wrong password when unlocking', async () => {
|
|
95
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
96
|
-
await lockWallet();
|
|
97
|
-
await expect(unlockWallet('99999999', storage)).rejects.toThrow(/Wrong password/i);
|
|
98
|
-
});
|
|
99
|
-
it('signs messages only while unlocked', async () => {
|
|
100
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
101
|
-
const signature = await signMessage('hello');
|
|
102
|
-
expect(signature).toMatch(/^0x[0-9a-f]{130}$/i);
|
|
103
|
-
expect(await verifyMessage({ address: HARDHAT_ADDRESS, message: 'hello', signature })).toBe(true);
|
|
104
|
-
await lockWallet();
|
|
105
|
-
await expect(signMessage('hello')).rejects.toThrow(/locked/i);
|
|
106
|
-
});
|
|
107
|
-
it('signs SIWE messages that verify against the wallet address', async () => {
|
|
108
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
109
|
-
const message = [
|
|
110
|
-
'learn.tg:9001 wants you to sign in with your Ethereum account:',
|
|
111
|
-
HARDHAT_ADDRESS,
|
|
112
|
-
'',
|
|
113
|
-
'Sign in to Learn Through Games.',
|
|
114
|
-
'',
|
|
115
|
-
'URI: https://learn.tg:9001',
|
|
116
|
-
'Version: 1',
|
|
117
|
-
'Chain ID: 11142220',
|
|
118
|
-
'Nonce: 12345678',
|
|
119
|
-
'Issued At: 2026-09-15T00:00:00.000Z',
|
|
120
|
-
].join('\n');
|
|
121
|
-
const signature = await signSIWE(message);
|
|
122
|
-
expect(await verifyMessage({ address: HARDHAT_ADDRESS, message, signature })).toBe(true);
|
|
123
|
-
});
|
|
124
|
-
it('switches the declared chain without invalidating the secret', async () => {
|
|
125
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
126
|
-
expect((await getWalletInfo(storage))?.chain).toBe('celoSepolia');
|
|
127
|
-
const info = await setWalletChain('celo', storage);
|
|
128
|
-
expect(info.chain).toBe('celo');
|
|
129
|
-
expect((await getWalletInfo(storage))?.chain).toBe('celo');
|
|
130
|
-
expect(await signMessage('hola')).toMatch(/^0x/);
|
|
131
|
-
await lockWallet();
|
|
132
|
-
const unlocked = await unlockWallet(password, storage);
|
|
133
|
-
expect(unlocked.address).toBe(HARDHAT_ADDRESS);
|
|
134
|
-
expect(unlocked.chain).toBe('celo');
|
|
135
|
-
});
|
|
136
|
-
it('rejects an unsupported chain and a switch with no wallet', async () => {
|
|
137
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
138
|
-
await expect(setWalletChain('optimism', storage)).rejects.toThrow(/unsupported chain/i);
|
|
139
|
-
await expect(setWalletChain('celo', new MemoryStorage())).rejects.toThrow(/no in-app wallet/i);
|
|
140
|
-
});
|
|
141
|
-
it('deletes the wallet and locks it', async () => {
|
|
142
|
-
await importWallet({ mnemonic: HARDHAT_MNEMONIC, password: password, storage });
|
|
143
|
-
await deleteWallet(storage);
|
|
144
|
-
expect(await hasWallet(storage)).toBe(false);
|
|
145
|
-
expect(await getWalletInfo(storage)).toBeNull();
|
|
146
|
-
expect(isUnlocked()).toBe(false);
|
|
147
|
-
await expect(unlockWallet(password, storage)).rejects.toThrow(/no in-app wallet/i);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
//# sourceMappingURL=wallet.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.test.js","sourceRoot":"","sources":["../../src/wallet/wallet.test.ts"],"names":[],"mappings":"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"}
|