@broccolo1d/wallet-browser 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/cli.d.ts +14 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +197 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.d.ts +45 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +149 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/extension-pages.d.ts +26 -0
  10. package/dist/extension-pages.d.ts.map +1 -0
  11. package/dist/extension-pages.js +140 -0
  12. package/dist/extension-pages.js.map +1 -0
  13. package/dist/fixture-harness.d.ts +22 -0
  14. package/dist/fixture-harness.d.ts.map +1 -0
  15. package/dist/fixture-harness.js +69 -0
  16. package/dist/fixture-harness.js.map +1 -0
  17. package/dist/fixture-proof.d.ts +23 -0
  18. package/dist/fixture-proof.d.ts.map +1 -0
  19. package/dist/fixture-proof.js +90 -0
  20. package/dist/fixture-proof.js.map +1 -0
  21. package/dist/index.d.ts +13 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +13 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/launcher.d.ts +15 -0
  26. package/dist/launcher.d.ts.map +1 -0
  27. package/dist/launcher.js +26 -0
  28. package/dist/launcher.js.map +1 -0
  29. package/dist/metamask-prompts.d.ts +27 -0
  30. package/dist/metamask-prompts.d.ts.map +1 -0
  31. package/dist/metamask-prompts.js +116 -0
  32. package/dist/metamask-prompts.js.map +1 -0
  33. package/dist/metamask-smoke.d.ts +54 -0
  34. package/dist/metamask-smoke.d.ts.map +1 -0
  35. package/dist/metamask-smoke.js +261 -0
  36. package/dist/metamask-smoke.js.map +1 -0
  37. package/dist/network.d.ts +79 -0
  38. package/dist/network.d.ts.map +1 -0
  39. package/dist/network.js +243 -0
  40. package/dist/network.js.map +1 -0
  41. package/dist/onboarding.d.ts +95 -0
  42. package/dist/onboarding.d.ts.map +1 -0
  43. package/dist/onboarding.js +197 -0
  44. package/dist/onboarding.js.map +1 -0
  45. package/dist/profile-bootstrap.d.ts +33 -0
  46. package/dist/profile-bootstrap.d.ts.map +1 -0
  47. package/dist/profile-bootstrap.js +46 -0
  48. package/dist/profile-bootstrap.js.map +1 -0
  49. package/dist/wallet-control.d.ts +137 -0
  50. package/dist/wallet-control.d.ts.map +1 -0
  51. package/dist/wallet-control.js +453 -0
  52. package/dist/wallet-control.js.map +1 -0
  53. package/package.json +35 -0
@@ -0,0 +1,453 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { rm } from 'node:fs/promises';
3
+ import { relative, resolve, sep } from 'node:path';
4
+ import { assertExpectedChainAndAccount, chainIdToHex, normalizeChainId, normalizeExpectedAccount, provisionSepoliaNetwork, redactRpcUrl } from './network.js';
5
+ export function createWalletDappPageDriver(options) {
6
+ const { page, selectors } = options;
7
+ return {
8
+ async requestConnect() {
9
+ await page.locator(selectors.connectButton).click();
10
+ },
11
+ async getConnectedAccount() {
12
+ return (await page.locator(selectors.connectedAccount).textContent())?.trim() || undefined;
13
+ },
14
+ async requestSignature() {
15
+ await page.locator(selectors.signMessageButton).click();
16
+ },
17
+ async requestTransaction() {
18
+ await page.locator(selectors.sendTransactionButton).click();
19
+ }
20
+ };
21
+ }
22
+ export async function connectWallet(options) {
23
+ const config = createWalletStateConfig(options);
24
+ logWalletControl(options.logger, {
25
+ action: 'connectWallet',
26
+ status: 'started',
27
+ origin: options.origin,
28
+ chainId: config.chainId,
29
+ chainIdHex: config.chainIdHex,
30
+ account: config.expectedAccount,
31
+ decision: 'pending',
32
+ promptType: 'connect',
33
+ metadata: options.metadata
34
+ });
35
+ try {
36
+ assertAllowedOrigin(options.origin, options.guardrails);
37
+ await options.dapp.requestConnect();
38
+ if (!options.prompt.approveConnection) {
39
+ throw new Error('MetaMask connection prompt approval is not implemented for the provided prompt driver; fail closed.');
40
+ }
41
+ await options.prompt.approveConnection({
42
+ origin: options.origin,
43
+ expectedAccount: config.expectedAccount,
44
+ expectedChainIdHex: config.chainIdHex
45
+ });
46
+ logWalletControl(options.logger, {
47
+ action: 'connectWallet',
48
+ status: 'prompt-approved',
49
+ origin: options.origin,
50
+ chainId: config.chainId,
51
+ chainIdHex: config.chainIdHex,
52
+ account: config.expectedAccount,
53
+ decision: 'approved',
54
+ promptType: 'connect',
55
+ metadata: options.metadata
56
+ });
57
+ const connectedAccount = normalizeExpectedAccount(await options.dapp.getConnectedAccount());
58
+ if (connectedAccount !== config.expectedAccount) {
59
+ throw new Error(`Dapp connected account ${connectedAccount} does not match expected ${config.expectedAccount}.`);
60
+ }
61
+ const state = await assertExpectedChainAndAccount(config, options.network);
62
+ logWalletControl(options.logger, {
63
+ action: 'connectWallet',
64
+ status: 'verified',
65
+ origin: options.origin,
66
+ chainId: state.chainId,
67
+ chainIdHex: state.chainIdHex,
68
+ account: state.activeAccount,
69
+ decision: 'approved',
70
+ promptType: 'connect',
71
+ metadata: options.metadata
72
+ });
73
+ return { ...state, status: 'connected' };
74
+ }
75
+ catch (error) {
76
+ logWalletControl(options.logger, {
77
+ action: 'connectWallet',
78
+ status: 'failed',
79
+ origin: options.origin,
80
+ chainId: config.chainId,
81
+ chainIdHex: config.chainIdHex,
82
+ account: config.expectedAccount,
83
+ decision: 'rejected',
84
+ promptType: 'connect',
85
+ metadata: createFailureMetadata(options.metadata, error)
86
+ });
87
+ throw error;
88
+ }
89
+ }
90
+ export async function approveSignature(options) {
91
+ const expectedAccount = normalizeExpectedAccount(options.expectedAccount);
92
+ const stateConfig = createOptionalWalletStateConfig(options);
93
+ logWalletControl(options.logger, {
94
+ action: 'approveSignature',
95
+ status: 'started',
96
+ origin: options.origin,
97
+ chainId: stateConfig?.chainId,
98
+ chainIdHex: stateConfig?.chainIdHex,
99
+ account: expectedAccount,
100
+ decision: 'pending',
101
+ promptType: 'signature',
102
+ metadata: options.metadata
103
+ });
104
+ try {
105
+ assertAllowedOrigin(options.origin, options.guardrails);
106
+ if (stateConfig && options.network) {
107
+ await assertExpectedChainAndAccount(stateConfig, options.network);
108
+ }
109
+ if (!options.prompt.approveSignature) {
110
+ throw new Error('MetaMask signature prompt approval is not implemented for the provided prompt driver; fail closed.');
111
+ }
112
+ if (options.dapp?.requestSignature) {
113
+ await options.dapp.requestSignature({ origin: options.origin, expectedAccount, message: options.message });
114
+ }
115
+ await options.prompt.approveSignature({ origin: options.origin, expectedAccount, message: options.message });
116
+ logWalletControl(options.logger, {
117
+ action: 'approveSignature',
118
+ status: 'prompt-approved',
119
+ origin: options.origin,
120
+ chainId: stateConfig?.chainId,
121
+ chainIdHex: stateConfig?.chainIdHex,
122
+ account: expectedAccount,
123
+ decision: 'approved',
124
+ promptType: 'signature',
125
+ metadata: options.metadata
126
+ });
127
+ }
128
+ catch (error) {
129
+ logWalletControl(options.logger, {
130
+ action: 'approveSignature',
131
+ status: 'failed',
132
+ origin: options.origin,
133
+ chainId: stateConfig?.chainId,
134
+ chainIdHex: stateConfig?.chainIdHex,
135
+ account: expectedAccount,
136
+ decision: 'rejected',
137
+ promptType: 'signature',
138
+ metadata: createFailureMetadata(options.metadata, error)
139
+ });
140
+ throw error;
141
+ }
142
+ }
143
+ export async function approveTransaction(options) {
144
+ const expectedAccount = normalizeExpectedAccount(options.expectedAccount);
145
+ const stateConfig = createOptionalWalletStateConfig(options);
146
+ const target = options.to ? normalizeExpectedAccount(options.to) : undefined;
147
+ const valueWei = parseTransactionValueWei(options.value);
148
+ const maxValueWei = parseTransactionValueWei(options.guardrails?.maxTransactionValueWei ?? 0n);
149
+ logWalletControl(options.logger, {
150
+ action: 'approveTransaction',
151
+ status: 'started',
152
+ origin: options.origin,
153
+ chainId: stateConfig?.chainId,
154
+ chainIdHex: stateConfig?.chainIdHex,
155
+ account: expectedAccount,
156
+ target,
157
+ valueWei: valueWei.toString(),
158
+ decision: 'pending',
159
+ promptType: 'transaction',
160
+ metadata: options.metadata
161
+ });
162
+ try {
163
+ assertAllowedOrigin(options.origin, options.guardrails);
164
+ assertAllowedTarget(target, options.guardrails);
165
+ if (valueWei > maxValueWei) {
166
+ throw new Error(`Transaction value ${valueWei.toString()} wei exceeds configured wallet transaction value cap ${maxValueWei.toString()} wei.`);
167
+ }
168
+ if (stateConfig && options.network) {
169
+ await assertExpectedChainAndAccount(stateConfig, options.network);
170
+ }
171
+ if (!options.prompt.approveTransaction) {
172
+ throw new Error('MetaMask transaction prompt approval is not implemented for the provided prompt driver; fail closed.');
173
+ }
174
+ if (options.dapp?.requestTransaction) {
175
+ await options.dapp.requestTransaction({
176
+ origin: options.origin,
177
+ expectedAccount,
178
+ to: target,
179
+ value: options.value
180
+ });
181
+ }
182
+ await options.prompt.approveTransaction({
183
+ origin: options.origin,
184
+ expectedAccount,
185
+ to: target,
186
+ value: options.value
187
+ });
188
+ logWalletControl(options.logger, {
189
+ action: 'approveTransaction',
190
+ status: 'prompt-approved',
191
+ origin: options.origin,
192
+ chainId: stateConfig?.chainId,
193
+ chainIdHex: stateConfig?.chainIdHex,
194
+ account: expectedAccount,
195
+ target,
196
+ valueWei: valueWei.toString(),
197
+ decision: 'approved',
198
+ promptType: 'transaction',
199
+ metadata: options.metadata
200
+ });
201
+ }
202
+ catch (error) {
203
+ logWalletControl(options.logger, {
204
+ action: 'approveTransaction',
205
+ status: 'failed',
206
+ origin: options.origin,
207
+ chainId: stateConfig?.chainId,
208
+ chainIdHex: stateConfig?.chainIdHex,
209
+ account: expectedAccount,
210
+ target,
211
+ valueWei: valueWei.toString(),
212
+ decision: 'rejected',
213
+ promptType: 'transaction',
214
+ metadata: createFailureMetadata(options.metadata, error)
215
+ });
216
+ throw error;
217
+ }
218
+ }
219
+ export async function switchNetwork(options) {
220
+ const config = createWalletStateConfig(options);
221
+ logWalletControl(options.logger, {
222
+ action: 'switchNetwork',
223
+ status: 'started',
224
+ chainId: config.chainId,
225
+ chainIdHex: config.chainIdHex,
226
+ account: config.expectedAccount,
227
+ decision: 'pending',
228
+ metadata: options.metadata
229
+ });
230
+ try {
231
+ const result = await provisionSepoliaNetwork(config, options.network);
232
+ logWalletControl(options.logger, {
233
+ action: 'switchNetwork',
234
+ status: 'verified',
235
+ chainId: result.chainId,
236
+ chainIdHex: result.chainIdHex,
237
+ account: result.activeAccount,
238
+ decision: 'approved',
239
+ metadata: options.metadata
240
+ });
241
+ return result;
242
+ }
243
+ catch (error) {
244
+ logWalletControl(options.logger, {
245
+ action: 'switchNetwork',
246
+ status: 'failed',
247
+ chainId: config.chainId,
248
+ chainIdHex: config.chainIdHex,
249
+ account: config.expectedAccount,
250
+ decision: 'rejected',
251
+ metadata: createFailureMetadata(options.metadata, error)
252
+ });
253
+ throw error;
254
+ }
255
+ }
256
+ export async function assertWalletState(options) {
257
+ const config = createWalletStateConfig(options);
258
+ logWalletControl(options.logger, {
259
+ action: 'assertWalletState',
260
+ status: 'started',
261
+ chainId: config.chainId,
262
+ chainIdHex: config.chainIdHex,
263
+ account: config.expectedAccount,
264
+ decision: 'pending',
265
+ metadata: options.metadata
266
+ });
267
+ try {
268
+ const result = await assertExpectedChainAndAccount(config, options.network);
269
+ logWalletControl(options.logger, {
270
+ action: 'assertWalletState',
271
+ status: 'verified',
272
+ chainId: result.chainId,
273
+ chainIdHex: result.chainIdHex,
274
+ account: result.activeAccount,
275
+ decision: 'approved',
276
+ metadata: options.metadata
277
+ });
278
+ return result;
279
+ }
280
+ catch (error) {
281
+ logWalletControl(options.logger, {
282
+ action: 'assertWalletState',
283
+ status: 'failed',
284
+ chainId: config.chainId,
285
+ chainIdHex: config.chainIdHex,
286
+ account: config.expectedAccount,
287
+ decision: 'rejected',
288
+ metadata: createFailureMetadata(options.metadata, error)
289
+ });
290
+ throw error;
291
+ }
292
+ }
293
+ export async function resetProfile(options) {
294
+ const profileDir = resolve(options.profileDir);
295
+ const allowedProfileRoot = resolve(options.allowedProfileRoot ?? '.wallet-profiles');
296
+ assertProfileDirIsSafe(profileDir, allowedProfileRoot);
297
+ if (!existsSync(profileDir)) {
298
+ const result = { status: 'skipped', profileDir, allowedProfileRoot };
299
+ logWalletControl(options.logger, { action: 'resetProfile', status: 'skipped', metadata: options.metadata });
300
+ return result;
301
+ }
302
+ await rm(profileDir, { recursive: true, force: true });
303
+ const result = { status: 'deleted', profileDir, allowedProfileRoot };
304
+ logWalletControl(options.logger, { action: 'resetProfile', status: 'deleted', metadata: options.metadata });
305
+ return result;
306
+ }
307
+ function createFailureMetadata(metadata, error) {
308
+ return {
309
+ value: metadata,
310
+ errorMessage: error instanceof Error ? error.message : String(error)
311
+ };
312
+ }
313
+ function createOptionalWalletStateConfig(options) {
314
+ if (options.expectedChainId === undefined && options.network === undefined) {
315
+ return undefined;
316
+ }
317
+ if (options.expectedChainId === undefined || options.network === undefined) {
318
+ throw new Error('Wallet action chain guardrail requires both expectedChainId and network driver when either is configured.');
319
+ }
320
+ return createWalletStateConfig({
321
+ network: options.network,
322
+ expectedAccount: options.expectedAccount,
323
+ expectedChainId: options.expectedChainId
324
+ });
325
+ }
326
+ function createWalletStateConfig(options) {
327
+ const chainId = normalizeChainId(options.expectedChainId);
328
+ return {
329
+ chainId,
330
+ chainIdHex: chainIdToHex(chainId),
331
+ expectedAccount: normalizeExpectedAccount(options.expectedAccount),
332
+ timeoutMs: 30_000,
333
+ debug: false
334
+ };
335
+ }
336
+ function parseTransactionValueWei(value) {
337
+ if (value === undefined || value === '') {
338
+ return 0n;
339
+ }
340
+ if (typeof value === 'bigint') {
341
+ if (value < 0n) {
342
+ throw new Error('Transaction value guardrail must be a non-negative wei amount.');
343
+ }
344
+ return value;
345
+ }
346
+ if (typeof value === 'number') {
347
+ if (!Number.isSafeInteger(value) || value < 0) {
348
+ throw new Error('Transaction value guardrail must be a non-negative safe integer wei amount.');
349
+ }
350
+ return BigInt(value);
351
+ }
352
+ const trimmed = value.trim();
353
+ if (/^0x[0-9a-fA-F]+$/.test(trimmed) || /^\d+$/.test(trimmed)) {
354
+ return BigInt(trimmed);
355
+ }
356
+ throw new Error('Transaction value guardrail must be a non-negative decimal or 0x-prefixed wei amount.');
357
+ }
358
+ function assertAllowedOrigin(origin, guardrails) {
359
+ const allowedOrigins = guardrails?.allowedOrigins;
360
+ if (!allowedOrigins?.length) {
361
+ return;
362
+ }
363
+ if (!origin) {
364
+ throw new Error('Dapp origin is required when wallet origin guardrails are configured.');
365
+ }
366
+ const normalizedOrigin = normalizeDappOriginForPolicy(origin);
367
+ const allowed = allowedOrigins.map((allowedOrigin) => normalizeDappOriginForPolicy(allowedOrigin));
368
+ if (!allowed.includes(normalizedOrigin)) {
369
+ throw new Error(`Dapp origin ${normalizedOrigin} is not allowed by wallet guardrails.`);
370
+ }
371
+ }
372
+ function assertAllowedTarget(target, guardrails) {
373
+ const allowedTargets = guardrails?.allowedTargets;
374
+ if (!allowedTargets?.length) {
375
+ return;
376
+ }
377
+ if (!target) {
378
+ throw new Error('Transaction target is required when wallet target guardrails are configured.');
379
+ }
380
+ const allowed = allowedTargets.map((allowedTarget) => normalizeExpectedAccount(allowedTarget));
381
+ if (!allowed.includes(target)) {
382
+ throw new Error(`Transaction target ${target} is not allowed by wallet guardrails.`);
383
+ }
384
+ }
385
+ function normalizeDappOriginForPolicy(origin) {
386
+ return sanitizeDappOrigin(origin).toLowerCase();
387
+ }
388
+ function assertProfileDirIsSafe(profileDir, allowedProfileRoot) {
389
+ const rel = relative(allowedProfileRoot, profileDir);
390
+ if (rel === '' || rel === '..' || rel.startsWith(`..${sep}`) || rel.includes(`${sep}..${sep}`)) {
391
+ throw new Error(`Refusing to reset wallet profile outside allowed wallet profile root: ${profileDir}`);
392
+ }
393
+ }
394
+ function logWalletControl(logger, event) {
395
+ if (!logger) {
396
+ return;
397
+ }
398
+ logger(sanitizeLogEvent(event));
399
+ }
400
+ function sanitizeLogEvent(event) {
401
+ return redactStructuredValue(event);
402
+ }
403
+ function redactStructuredValue(value, keyHint) {
404
+ if (typeof value === 'string') {
405
+ return keyHint === 'origin' ? sanitizeDappOrigin(value) : redactString(value);
406
+ }
407
+ if (Array.isArray(value)) {
408
+ return value.map((item) => redactStructuredValue(item, keyHint));
409
+ }
410
+ if (value && typeof value === 'object') {
411
+ const redactedEntries = Object.entries(value).map(([key, innerValue]) => {
412
+ const sensitiveReplacement = redactionForSensitiveKey(key);
413
+ return [key, sensitiveReplacement ?? redactStructuredValue(innerValue, key)];
414
+ });
415
+ return Object.fromEntries(redactedEntries);
416
+ }
417
+ return value;
418
+ }
419
+ function redactString(value) {
420
+ return value
421
+ .replace(/^.*\b[A-Z0-9_]*PRIVATE[_-]?KEY[A-Z0-9_]*\s*=.*$/gim, '[redacted:private-key]')
422
+ .replace(/^.*\b[A-Z0-9_]*(?:MNEMONIC|SEED|PHRASE)[A-Z0-9_]*\s*=.*$/gim, '[redacted:seed-phrase]')
423
+ .replace(/^.*\b[A-Z0-9_]*PASSWORD[A-Z0-9_]*\s*=.*$/gim, '[redacted:password]')
424
+ .replace(/0x[a-fA-F0-9]{64}/g, '[redacted:private-key]')
425
+ .replace(/\b[a-fA-F0-9]{64}\b/g, '[redacted:private-key]')
426
+ .replace(/\b(?:[a-z][a-z0-9]*\s+){11,23}[a-z][a-z0-9]*\b/gi, '[redacted:seed-phrase]')
427
+ .replace(/https?:\/\/[^\s)"']+/gi, (match) => redactRpcUrl(match));
428
+ }
429
+ function sanitizeDappOrigin(value) {
430
+ try {
431
+ const parsed = new URL(value);
432
+ return `${parsed.origin}${parsed.pathname === '/' ? '' : parsed.pathname}`;
433
+ }
434
+ catch {
435
+ return redactString(value);
436
+ }
437
+ }
438
+ function redactionForSensitiveKey(key) {
439
+ if (/private[_-]?key/i.test(key)) {
440
+ return '[redacted:private-key]';
441
+ }
442
+ if (/seed|phrase|mnemonic/i.test(key)) {
443
+ return '[redacted:seed-phrase]';
444
+ }
445
+ if (/password|passphrase/i.test(key)) {
446
+ return '[redacted:password]';
447
+ }
448
+ if (/token|secret/i.test(key)) {
449
+ return '[redacted]';
450
+ }
451
+ return undefined;
452
+ }
453
+ //# sourceMappingURL=wallet-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet-control.js","sourceRoot":"","sources":["../src/wallet-control.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@broccolo1d/wallet-browser",
3
+ "version": "0.1.0",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "bin": {
9
+ "wallet-browser": "dist/cli.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "./package.json": "./package.json"
17
+ },
18
+ "files": [
19
+ "dist/",
20
+ "package.json"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsc -p tsconfig.json",
24
+ "test": "vitest run",
25
+ "typecheck": "tsc -p tsconfig.json --noEmit",
26
+ "cli": "node dist/cli.js"
27
+ },
28
+ "dependencies": {
29
+ "playwright": "1.59.1"
30
+ },
31
+ "devDependencies": {},
32
+ "publishConfig": {
33
+ "access": "public"
34
+ }
35
+ }