@broccolo1d/playwright 0.2.1 → 0.2.3

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 CHANGED
@@ -1,13 +1,13 @@
1
1
  # `@broccolo1d/playwright`
2
2
 
3
- Playwright fixtures for wallet-backed dapp QA.
3
+ Playwright fixtures for policy-gated browser-wallet dapp QA.
4
4
 
5
- App repos own routes, selectors, prompt automation, test data, and assertions. This package supplies a small fixture surface for connect/account/chain proof without hiding wallet policy.
5
+ This package is for consumer app repos. The app owns routes, selectors, wallet modal behavior, test data, prompt automation, and assertions. `@broccolo1d/playwright` provides the fixture surface for connect/account/chain proof, artifact capture, and fail-closed policy wiring.
6
6
 
7
7
  ## Install
8
8
 
9
9
  ```bash
10
- pnpm add -D @broccolo1d/playwright @playwright/test
10
+ pnpm add -D @broccolo1d/playwright@0.2.3 @playwright/test
11
11
  ```
12
12
 
13
13
  ESM-only. Node.js `>=22 <23`.
@@ -23,19 +23,23 @@ import {
23
23
  type WalletPromptDriver
24
24
  } from '@broccolo1d/playwright';
25
25
 
26
- const expectedAccount = '0x0000000000000000000000000000000000000000';
26
+ const expectedAccount = process.env.SEPOLIA_WALLET_ADDRESS;
27
+ if (!expectedAccount) throw new Error('SEPOLIA_WALLET_ADDRESS is required for wallet QA');
28
+
27
29
  const origin = 'http://127.0.0.1:5173';
28
30
 
29
- // Replace with explicit prompt automation in real wallet jobs.
30
- const delegate: WalletPromptDriver = {
31
- async approveConnection() {}
31
+ // Implement this in the app test repo after reviewing the exact wallet UI flow.
32
+ const promptAutomation: WalletPromptDriver = {
33
+ async approveConnection() {
34
+ throw new Error('prompt automation must be implemented before approving real wallet prompts');
35
+ }
32
36
  };
33
37
 
34
38
  const prompt = createFailClosedWalletPromptDriver({
35
39
  origin,
36
40
  expectedAccount,
37
41
  expectedChainIdHex: '0xaa36a7',
38
- delegate
42
+ delegate: promptAutomation
39
43
  });
40
44
 
41
45
  const network: MetaMaskNetworkDriver = {
@@ -60,7 +64,7 @@ export default defineWalletQaConfig({
60
64
  });
61
65
  ```
62
66
 
63
- `useRealWallet` defaults to `false`. When enabled, launch config is passed to `@broccolo1d/wallet-browser`, but prompt approval and network reads still require explicit drivers.
67
+ `useRealWallet` defaults to `false`. When enabled, launch options are passed to `@broccolo1d/wallet-browser`, but prompt approval and network reads still require explicit drivers.
64
68
 
65
69
  ## Write a dapp-owned test
66
70
 
@@ -72,37 +76,44 @@ test('connects through wallet policy', async ({ page, wallet, walletArtifacts })
72
76
  await page.goto('http://127.0.0.1:5173');
73
77
 
74
78
  const result = await wallet.connect({
75
- requestConnection: async () => page.getByRole('button', { name: /connect/i }).click()
79
+ click: async () => page.getByRole('button', { name: /connect/i }).click()
76
80
  });
77
81
 
78
- await wallet.assertState();
82
+ await wallet.expectConnected();
83
+ await wallet.expectChain({ expectedChainId: 11155111 });
84
+
79
85
  const screenshot = await walletArtifacts.screenshot('connected');
80
- await walletArtifacts.writeProofManifest({
81
- status: 'connected',
86
+ await walletArtifacts.connectedProof('wallet-connected', {
82
87
  origin: 'http://127.0.0.1:5173',
83
88
  account: result.activeAccount,
84
89
  chainId: result.chainId,
85
- attachments: [{ label: 'wallet-connected', path: screenshot, contentType: 'image/png' }]
90
+ attachments: [{ label: 'dapp-connected', path: screenshot, contentType: 'image/png' }],
91
+ notes: ['connect-only wallet QA proof']
86
92
  });
87
93
 
88
- await verifyWalletQaProofManifest(walletArtifacts.artifactDir);
94
+ await verifyWalletQaProofManifest(walletArtifacts.artifactDir, 'wallet-connected.json');
89
95
  await expect(page.getByText(/connected/i)).toBeVisible();
90
96
  });
91
97
  ```
92
98
 
93
- ## Fixtures
99
+ The proof manifest stores public-oriented metadata: `schemaVersion: 1`, `createdAt`, `runId`, package/framework/tool provenance, optional Playwright project/title metadata, attachment basenames, sha256 hashes, sizes, masked account, safe origin, chain ID, redacted failure text, verifier-friendly `summary`, and artifact checksum lists. It intentionally does not store full local paths, full wallet addresses, raw query/hash origins, or raw secrets.
100
+
101
+ `verifyWalletQaProofManifest()` returns the parsed manifest plus verifier-side provenance (`schemaVersion`, `createdAt`, `runId`, `provenance`) and a `manifestSha256` digest computed from the manifest file. The digest is intentionally returned by the verifier instead of embedded in the manifest to avoid self-hashing ambiguity. Manifests must include schema v1 provenance; downgraded manifests without `schemaVersion` are rejected.
102
+
103
+ ## Fixture surface
94
104
 
95
105
  - `walletConfig`: per-test wallet QA configuration.
96
- - `walletContext`: the browser context under test.
97
- - `walletPage`: the page under test.
98
- - `wallet`: `connect`, `assertState`, and `maskAddress` helpers.
99
- - `walletArtifacts`: screenshot, JSON, proof-manifest, and failure-manifest writers.
106
+ - `walletContext`: browser context under test.
107
+ - `walletPage`: page under test.
108
+ - `wallet`: `connect`, `expectConnected`, `expectChain`, `assertState`, and `maskAddress` helpers.
109
+ - `walletArtifacts`: screenshot, JSON, connected-proof, proof-manifest, and failure-manifest writers.
100
110
 
101
111
  ## Helpers
102
112
 
103
- - `createFailClosedWalletPromptDriver(options)`: wraps an explicit prompt driver and rejects missing handlers, missing/wrong origin, wrong account, or wrong chain.
104
- - `writeWalletQaProofManifest(options)`: writes a public manifest with attachment basename, sha256, size, masked account, safe origin, and redacted failure text.
105
- - `verifyWalletQaProofManifest(artifactDir)`: verifies manifest shape, attachment hashes/sizes, and rejects full addresses or local path leaks.
113
+ - `defineWalletQaConfig(config)`: typed Playwright config wrapper for wallet QA fixtures.
114
+ - `createFailClosedWalletPromptDriver(options)`: wraps explicit prompt automation and rejects missing handlers, missing/wrong origin, wrong account, or wrong chain.
115
+ - `writeWalletQaProofManifest(options)`: writes a public schema v1 proof manifest with safe attachment metadata, provenance, summaries, checksums, and redacted failures.
116
+ - `verifyWalletQaProofManifest(artifactDir)`: verifies manifest shape, required schema v1 provenance, summary/checksum consistency, attachment hashes/sizes, and rejects full addresses, raw secrets/RPC tokens, local path leaks, and downgraded manifests without `schemaVersion`.
106
117
  - `formatWalletQaFailure(error)` / `redactWalletQaValue(value)`: produce doc-safe failure snippets by masking wallet addresses and local paths.
107
118
 
108
119
  ## Failure proof
@@ -116,13 +127,24 @@ try {
116
127
  failure: error,
117
128
  notes: ['negative proof: wrong chain is rejected']
118
129
  });
130
+ await verifyWalletQaProofManifest(walletArtifacts.artifactDir);
119
131
  }
120
132
  ```
121
133
 
122
- The manifest is public-oriented metadata. It must not contain full local paths or full wallet addresses. Treat raw screenshots, traces, videos, and profiles as sensitive until reviewed.
123
-
124
134
  ## Fail-closed behavior
125
135
 
126
- `wallet.connect` requires expected account and chain ID in options or config. It also requires one of `requestConnection`, `walletConfig.dapp`, or `walletConfig.dappSelectors` to trigger the dapp flow.
136
+ `wallet.connect` requires expected account and chain ID in options or config. It also requires one of `click`, `requestConnection`, `walletConfig.dapp`, or `walletConfig.dappSelectors` to trigger the dapp flow. Prefer `click` for new dapp-owned tests; `requestConnection` remains supported for existing tests.
137
+
138
+ No prompt approval is implicit. No signature or transaction approval is claimed by this fixture API. Add those only through reviewed app-owned prompt automation and lower-level policy helpers.
139
+
140
+ ## CI pattern
141
+
142
+ ```yaml
143
+ - run: pnpm install --frozen-lockfile
144
+ - run: pnpm exec playwright install --with-deps chromium
145
+ - run: xvfb-run -a pnpm test
146
+ env:
147
+ SEPOLIA_WALLET_ADDRESS: ${{ secrets.SEPOLIA_WALLET_ADDRESS }}
148
+ ```
127
149
 
128
- No prompt approval is implicit. No signature or transaction approval is claimed by this package-level fixture API. Use lower-level wallet-browser helpers only with explicit policy and tests.
150
+ Keep traces, videos, raw screenshots, profiles, extension bundles, and `.env` files out of git. Upload artifacts only after `verifyWalletQaProofManifest` passes and screenshots have been reviewed.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { expect, type BrowserContext, type Page, type PlaywrightTestConfig } from '@playwright/test';
1
+ import { expect, type BrowserContext, type Page, type PlaywrightTestConfig, type TestInfo } from '@playwright/test';
2
2
  import { launchWalletBrowser, type ConnectWalletResult, type MetaMaskNetworkDriver, type SepoliaNetworkAssertionResult, type WalletDappDriver, type WalletDappPageDriverSelectors, type WalletGuardrailConfig, type WalletPromptDriver } from '@broccolo1d/wallet-browser';
3
3
  export { expect };
4
4
  export type { BrowserContext, Page } from '@playwright/test';
@@ -28,6 +28,9 @@ export interface WalletQaConfig {
28
28
  guardrails?: WalletGuardrailConfig;
29
29
  }
30
30
  export interface WalletConnectOptions {
31
+ /** Preferred developer-first dapp action: click the app's connect button/modal trigger. */
32
+ click?: () => Promise<void>;
33
+ /** Backwards-compatible alias for click. */
31
34
  requestConnection?: () => Promise<void>;
32
35
  expectedAccount?: string;
33
36
  expectedChainId?: string | number;
@@ -49,6 +52,8 @@ export interface WalletAssertStateOptions {
49
52
  export interface WalletQa {
50
53
  connect(options?: WalletConnectOptions): Promise<ConnectWalletResult>;
51
54
  assertState(options?: WalletAssertStateOptions): Promise<SepoliaNetworkAssertionResult>;
55
+ expectConnected(options?: WalletAssertStateOptions): Promise<SepoliaNetworkAssertionResult>;
56
+ expectChain(options?: Pick<WalletAssertStateOptions, 'expectedChainId' | 'expectedAccount'>): Promise<SepoliaNetworkAssertionResult>;
52
57
  maskAddress(address: string): string;
53
58
  }
54
59
  export interface WalletArtifacts {
@@ -56,6 +61,7 @@ export interface WalletArtifacts {
56
61
  screenshot(name: string, options?: Parameters<Page['screenshot']>[0]): Promise<string>;
57
62
  writeManifest(name: string, data: Record<string, unknown>): Promise<string>;
58
63
  writeProofManifest(options: Omit<WalletQaProofManifestOptions, 'artifactDir'>): Promise<string>;
64
+ connectedProof(name: string, options: Omit<WalletQaProofManifestOptions, 'artifactDir' | 'manifestName' | 'status' | 'failure'>): Promise<string>;
59
65
  writeFailureManifest(name: string, error: unknown, data?: Record<string, unknown>): Promise<string>;
60
66
  }
61
67
  export type WalletQaProofStatus = 'connected' | 'failed';
@@ -75,7 +81,13 @@ export interface WalletQaProofArtifact {
75
81
  contentType?: string;
76
82
  }
77
83
  export interface WalletQaProofManifest {
84
+ /** Schema v1 is required for verifier acceptance to prevent downgraded public proof artifacts. */
85
+ schemaVersion: 1;
78
86
  artifactType: 'wallet-qa-proof';
87
+ createdAt: string;
88
+ runId: string;
89
+ provenance: WalletQaProofProvenance;
90
+ test?: WalletQaProofTestMetadata;
79
91
  status: WalletQaProofStatus;
80
92
  origin?: string;
81
93
  maskedAccount?: string;
@@ -83,6 +95,35 @@ export interface WalletQaProofManifest {
83
95
  artifacts: WalletQaProofArtifact[];
84
96
  failure?: string;
85
97
  notes?: string[];
98
+ summary?: WalletQaProofSummary;
99
+ checksums?: WalletQaProofChecksums;
100
+ }
101
+ export interface WalletQaProofProvenance {
102
+ packageName: '@broccolo1d/playwright';
103
+ packageVersion: string;
104
+ framework: 'playwright';
105
+ tool: string;
106
+ runtime: WalletQaProofRuntimeMetadata;
107
+ }
108
+ export interface WalletQaProofRuntimeMetadata {
109
+ node: string;
110
+ platform: string;
111
+ arch: string;
112
+ }
113
+ export interface WalletQaProofTestMetadata {
114
+ project?: string;
115
+ title?: string;
116
+ }
117
+ export interface WalletQaProofSummary {
118
+ status: WalletQaProofStatus;
119
+ origin?: string;
120
+ maskedAccount?: string;
121
+ chainId?: number | string;
122
+ artifactCount: number;
123
+ failure?: string;
124
+ }
125
+ export interface WalletQaProofChecksums {
126
+ artifactSha256: string[];
86
127
  }
87
128
  export interface WalletQaProofManifestOptions {
88
129
  artifactDir: string;
@@ -94,11 +135,20 @@ export interface WalletQaProofManifestOptions {
94
135
  attachments?: WalletQaProofAttachment[];
95
136
  failure?: unknown;
96
137
  notes?: string[];
138
+ runId?: string;
139
+ createdAt?: string;
140
+ tool?: string;
141
+ test?: WalletQaProofTestMetadata;
97
142
  }
98
143
  export interface WalletQaProofVerificationResult {
99
144
  status: 'verified';
100
145
  artifactDir: string;
101
146
  manifestPath: string;
147
+ manifestSha256: string;
148
+ schemaVersion: 1;
149
+ createdAt: string;
150
+ runId: string;
151
+ provenance: WalletQaProofProvenance;
102
152
  manifest: WalletQaProofManifest;
103
153
  }
104
154
  export interface WalletQaFixtures {
@@ -113,6 +163,8 @@ export interface WalletQaWorkerFixtures {
113
163
  type WalletQaPlaywrightConfig = PlaywrightTestConfig<WalletQaFixtures, WalletQaWorkerFixtures>;
114
164
  export declare function defineWalletQaConfig(config: WalletQaPlaywrightConfig): WalletQaPlaywrightConfig;
115
165
  export declare const test: import("@playwright/test").TestType<import("@playwright/test").PlaywrightTestArgs & import("@playwright/test").PlaywrightTestOptions & WalletQaFixtures, import("@playwright/test").PlaywrightWorkerArgs & import("@playwright/test").PlaywrightWorkerOptions & WalletQaWorkerFixtures>;
166
+ export declare function createWalletQa(page: Page, config: WalletQaConfig): WalletQa;
167
+ export declare function createWalletArtifacts(page: Page, config: WalletQaConfig, testInfo: TestInfo): WalletArtifacts;
116
168
  export declare function createFailClosedWalletPromptDriver(options: FailClosedWalletPromptDriverOptions): Required<WalletPromptDriver>;
117
169
  export declare function writeWalletQaProofManifest(options: WalletQaProofManifestOptions): Promise<string>;
118
170
  export declare function verifyWalletQaProofManifest(artifactDir: string, manifestName?: string): Promise<WalletQaProofVerificationResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { createHash } from 'node:crypto';
1
+ import { createHash, randomUUID } from 'node:crypto';
2
2
  import { existsSync } from 'node:fs';
3
- import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
3
+ import { mkdir, readFile, stat, writeFile, copyFile } from 'node:fs/promises';
4
4
  import { basename, dirname, isAbsolute, join, resolve } from 'node:path';
5
5
  import { defineConfig, expect, test as base } from '@playwright/test';
6
6
  import { assertWalletState, connectWallet, createWalletDappPageDriver, launchWalletBrowser, maskEthereumAddress } from '@broccolo1d/wallet-browser';
@@ -9,6 +9,10 @@ const DEFAULT_WALLET_CONFIG = {
9
9
  useRealWallet: false,
10
10
  artifactDir: '.wallet-artifacts/playwright'
11
11
  };
12
+ const PLAYWRIGHT_PACKAGE_VERSION = '0.2.3';
13
+ function runtimeMetadata() {
14
+ return { node: process.version, platform: process.platform, arch: process.arch };
15
+ }
12
16
  export function defineWalletQaConfig(config) {
13
17
  return defineConfig(config);
14
18
  }
@@ -40,7 +44,16 @@ export const test = base.extend({
40
44
  await use(createWalletQa(page, walletConfig));
41
45
  }
42
46
  });
43
- function createWalletQa(page, config) {
47
+ export function createWalletQa(page, config) {
48
+ async function assertStateForHelper(helperName, options = {}) {
49
+ const expectedAccount = options.expectedAccount ?? config.expectedAccount;
50
+ const expectedChainId = options.expectedChainId ?? config.expectedChainId;
51
+ if (!expectedAccount || expectedChainId === undefined) {
52
+ throw new Error(`${helperName} requires expectedAccount and expectedChainId in options or walletConfig.`);
53
+ }
54
+ const network = requireConfigured(config.network, `${helperName} requires walletConfig.network to read wallet state; fail closed.`);
55
+ return assertWalletState({ network, expectedAccount, expectedChainId });
56
+ }
44
57
  return {
45
58
  async connect(options = {}) {
46
59
  const expectedAccount = options.expectedAccount ?? config.expectedAccount;
@@ -48,7 +61,11 @@ function createWalletQa(page, config) {
48
61
  if (!expectedAccount || expectedChainId === undefined) {
49
62
  throw new Error('wallet.connect requires expectedAccount and expectedChainId in options or walletConfig.');
50
63
  }
51
- const dapp = createDappDriver(page, config, options.requestConnection);
64
+ const origin = options.origin ?? config.origin;
65
+ if (!origin) {
66
+ throw new Error('wallet.connect requires origin in options or walletConfig.origin before approving a wallet prompt; fail closed.');
67
+ }
68
+ const dapp = createDappDriver(page, config, options.click ?? options.requestConnection);
52
69
  const prompt = requireConfigured(config.prompt, 'wallet.connect requires walletConfig.prompt to approve a real wallet prompt; fail closed.');
53
70
  const network = requireConfigured(config.network, 'wallet.connect requires walletConfig.network to verify chain/account; fail closed.');
54
71
  return connectWallet({
@@ -57,18 +74,21 @@ function createWalletQa(page, config) {
57
74
  network,
58
75
  expectedAccount,
59
76
  expectedChainId,
60
- origin: options.origin ?? config.origin,
77
+ origin,
61
78
  guardrails: options.guardrails ?? config.guardrails
62
79
  });
63
80
  },
64
81
  async assertState(options = {}) {
65
- const expectedAccount = options.expectedAccount ?? config.expectedAccount;
66
- const expectedChainId = options.expectedChainId ?? config.expectedChainId;
67
- if (!expectedAccount || expectedChainId === undefined) {
68
- throw new Error('wallet.assertState requires expectedAccount and expectedChainId in options or walletConfig.');
82
+ return assertStateForHelper('wallet.assertState', options);
83
+ },
84
+ async expectConnected(options = {}) {
85
+ return assertStateForHelper('wallet.expectConnected', options);
86
+ },
87
+ async expectChain(options = {}) {
88
+ if (options.expectedChainId === undefined && config.expectedChainId === undefined) {
89
+ throw new Error('wallet.expectChain requires expectedChainId in options or walletConfig.');
69
90
  }
70
- const network = requireConfigured(config.network, 'wallet.assertState requires walletConfig.network to read wallet state; fail closed.');
71
- return assertWalletState({ network, expectedAccount, expectedChainId });
91
+ return assertStateForHelper('wallet.expectChain', options);
72
92
  },
73
93
  maskAddress(address) {
74
94
  return maskEthereumAddress(address);
@@ -89,9 +109,9 @@ function createDappDriver(page, config, requestConnection) {
89
109
  requestTransaction: configured?.requestTransaction?.bind(configured)
90
110
  };
91
111
  }
92
- return requireConfigured(configured, 'wallet.connect requires requestConnection, walletConfig.dapp, or walletConfig.dappSelectors; fail closed.');
112
+ return requireConfigured(configured, 'wallet.connect requires click, requestConnection, walletConfig.dapp, or walletConfig.dappSelectors to trigger the dapp connection action; fail closed.');
93
113
  }
94
- function createWalletArtifacts(page, config, testInfo) {
114
+ export function createWalletArtifacts(page, config, testInfo) {
95
115
  const artifactDir = resolve(config.artifactDir ?? DEFAULT_WALLET_CONFIG.artifactDir);
96
116
  const runDir = join(artifactDir, sanitizePathPart(testInfo.project.name || 'default'), sanitizePathPart(testInfo.title));
97
117
  return {
@@ -109,7 +129,30 @@ function createWalletArtifacts(page, config, testInfo) {
109
129
  return filePath;
110
130
  },
111
131
  async writeProofManifest(options) {
112
- return writeWalletQaProofManifest({ ...options, artifactDir: runDir });
132
+ return writeWalletQaProofManifest({ ...options, artifactDir: runDir, test: testMetadataFromInfo(testInfo) });
133
+ },
134
+ async connectedProof(name, options) {
135
+ const manifestName = `${sanitizePathPart(name)}.json`;
136
+ const attachments = await Promise.all((options.attachments ?? []).map(async (attachment) => {
137
+ const file = attachment.publicFile ?? basename(attachment.path);
138
+ assertSafeArtifactBasename(file, 'attachment file');
139
+ const target = join(runDir, file);
140
+ await mkdir(dirname(target), { recursive: true });
141
+ if (resolve(attachment.path) !== resolve(target)) {
142
+ await copyFile(attachment.path, target);
143
+ }
144
+ return { ...attachment, publicFile: file };
145
+ }));
146
+ return writeWalletQaProofManifest({
147
+ ...options,
148
+ attachments,
149
+ status: 'connected',
150
+ manifestName,
151
+ artifactDir: runDir,
152
+ tool: 'walletArtifacts.connectedProof',
153
+ test: testMetadataFromInfo(testInfo),
154
+ notes: [...(options.notes ?? []), `proof manifest: ${manifestName}`]
155
+ });
113
156
  },
114
157
  async writeFailureManifest(name, error, data = {}) {
115
158
  return this.writeManifest(name, { ...data, failure: formatWalletQaFailure(error) });
@@ -158,15 +201,38 @@ export async function writeWalletQaProofManifest(options) {
158
201
  assertSafeArtifactBasename(manifestName, 'manifest name');
159
202
  await mkdir(artifactDir, { recursive: true });
160
203
  const artifacts = await Promise.all((options.attachments ?? []).map((attachment) => createProofArtifact(artifactDir, attachment)));
204
+ const maskedAccount = options.account ? maskEthereumAddress(options.account) : undefined;
205
+ const failure = options.failure !== undefined ? formatWalletQaFailure(options.failure) : undefined;
206
+ const summary = {
207
+ status: options.status,
208
+ ...(options.origin ? { origin: assertSafeOrigin(options.origin) } : {}),
209
+ ...(maskedAccount ? { maskedAccount } : {}),
210
+ ...(options.chainId !== undefined ? { chainId: options.chainId } : {}),
211
+ artifactCount: artifacts.length,
212
+ ...(failure ? { failure } : {})
213
+ };
161
214
  const manifest = {
215
+ schemaVersion: 1,
162
216
  artifactType: 'wallet-qa-proof',
217
+ createdAt: options.createdAt ?? new Date().toISOString(),
218
+ runId: options.runId ?? randomUUID(),
219
+ provenance: {
220
+ packageName: '@broccolo1d/playwright',
221
+ packageVersion: PLAYWRIGHT_PACKAGE_VERSION,
222
+ framework: 'playwright',
223
+ tool: sanitizeProvenanceTool(options.tool ?? 'writeWalletQaProofManifest'),
224
+ runtime: runtimeMetadata()
225
+ },
226
+ ...(options.test ? { test: sanitizeTestMetadata(options.test) } : {}),
163
227
  status: options.status,
164
228
  ...(options.origin ? { origin: assertSafeOrigin(options.origin) } : {}),
165
- ...(options.account ? { maskedAccount: maskEthereumAddress(options.account) } : {}),
229
+ ...(maskedAccount ? { maskedAccount } : {}),
166
230
  ...(options.chainId !== undefined ? { chainId: options.chainId } : {}),
167
231
  artifacts,
168
- ...(options.failure !== undefined ? { failure: formatWalletQaFailure(options.failure) } : {}),
169
- ...(options.notes ? { notes: options.notes.map((note) => redactWalletQaValue(note)) } : {})
232
+ ...(failure !== undefined ? { failure } : {}),
233
+ ...(options.notes ? { notes: options.notes.map((note) => redactWalletQaValue(note)) } : {}),
234
+ summary,
235
+ checksums: { artifactSha256: artifacts.map((artifact) => artifact.sha256) }
170
236
  };
171
237
  const text = `${JSON.stringify(manifest, null, 2)}\n`;
172
238
  assertPublicManifestIsSafe(text, artifactDir);
@@ -180,6 +246,7 @@ export async function verifyWalletQaProofManifest(artifactDir, manifestName = 'w
180
246
  const manifestPath = join(resolvedArtifactDir, manifestName);
181
247
  const text = await readFile(manifestPath, 'utf8');
182
248
  assertPublicManifestIsSafe(text, resolvedArtifactDir);
249
+ const manifestSha256 = createHash('sha256').update(text).digest('hex');
183
250
  const manifest = JSON.parse(text);
184
251
  if (manifest.artifactType !== 'wallet-qa-proof') {
185
252
  throw new Error('Wallet QA proof manifest has an unexpected artifact type.');
@@ -187,20 +254,40 @@ export async function verifyWalletQaProofManifest(artifactDir, manifestName = 'w
187
254
  if (manifest.status !== 'connected' && manifest.status !== 'failed') {
188
255
  throw new Error('Wallet QA proof manifest has an unexpected status.');
189
256
  }
257
+ if (manifest.origin !== undefined) {
258
+ assertSafeOrigin(manifest.origin);
259
+ }
260
+ if (manifest.maskedAccount !== undefined && !isSafeMaskedAccount(manifest.maskedAccount)) {
261
+ throw new Error('Wallet QA proof manifest masked account must be shortened and must not contain a full wallet address.');
262
+ }
190
263
  if (!Array.isArray(manifest.artifacts)) {
191
264
  throw new Error('Wallet QA proof manifest artifacts must be an array.');
192
265
  }
193
266
  for (const artifact of manifest.artifacts) {
194
267
  await verifyProofArtifact(resolvedArtifactDir, artifact);
195
268
  }
196
- return { status: 'verified', artifactDir: resolvedArtifactDir, manifestPath, manifest };
269
+ if (manifest.schemaVersion === undefined) {
270
+ throw new Error('Wallet QA proof manifest schemaVersion is required for verification.');
271
+ }
272
+ verifyWalletQaProofProvenance(manifest);
273
+ return {
274
+ status: 'verified',
275
+ artifactDir: resolvedArtifactDir,
276
+ manifestPath,
277
+ manifestSha256,
278
+ schemaVersion: manifest.schemaVersion,
279
+ createdAt: manifest.createdAt,
280
+ runId: manifest.runId,
281
+ provenance: manifest.provenance,
282
+ manifest
283
+ };
197
284
  }
198
285
  export function formatWalletQaFailure(error) {
199
286
  const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
200
287
  return redactWalletQaValue(message);
201
288
  }
202
289
  export function redactWalletQaValue(value) {
203
- return redactPaths(redactFullAddresses(typeof value === 'string' ? value : JSON.stringify(value, null, 2)));
290
+ return redactPaths(redactFullAddresses(redactSecrets(typeof value === 'string' ? value : JSON.stringify(value, null, 2))));
204
291
  }
205
292
  async function createProofArtifact(artifactDir, attachment) {
206
293
  const file = attachment.publicFile ?? basename(attachment.path);
@@ -266,6 +353,9 @@ function assertPublicManifestIsSafe(text, artifactDir) {
266
353
  if (containsLocalPathLeak(text)) {
267
354
  throw new Error('Wallet QA proof manifest must not contain local path leaks.');
268
355
  }
356
+ if (containsSecretLeak(text)) {
357
+ throw new Error('Wallet QA proof manifest must not contain raw secrets or tokens.');
358
+ }
269
359
  }
270
360
  function containsLocalPathLeak(text) {
271
361
  try {
@@ -292,6 +382,14 @@ function hasLocalPath(value) {
292
382
  || /(?:^|[\s"'`([{<])(?:[A-Za-z]:\\|\\\\)[^\s"'`)\]}>]+/.test(value)
293
383
  || /(?:^|[\s"'`([{<])\/(?!\/)(?:[^/\s"'`)\]}>]+\/)+[^/\s"'`)\]}>]*/.test(value);
294
384
  }
385
+ function containsSecretLeak(text) {
386
+ return /\bnpm_[A-Za-z0-9_-]{20,}\b/.test(text)
387
+ || /\b0x[0-9a-fA-F]{64}\b/.test(text)
388
+ || /\b(?:private[_-]?key|seed(?:[ _-]?phrase)?|mnemonic|password|passphrase|secret|token|rpc(?:[_-]?url)?)\b\s*(?::|=|is|was)?\s+(?:[A-Za-z][A-Za-z0-9_-]{5,}|[0-9a-fA-F]{64}|https?:\/\/\S+)/i.test(text)
389
+ || /https?:\/\/[^\s"'`]*\/(?:[^\s"'`]*[A-Za-z0-9_-]{20,}[^\s"'`]*)/i.test(text)
390
+ || /https?:\/\/[^\s"'`]+[?&](?:api[_-]?key|token|key|auth|access[_-]?token)=[^\s"'`&]+/i.test(text)
391
+ || /https?:\/\/[^\s"'`]+:[^\s"'`@]+@[^\s"'`]+/i.test(text);
392
+ }
295
393
  function assertSafeArtifactBasename(fileName, label) {
296
394
  if (isAbsolute(fileName) || fileName !== basename(fileName) || fileName.includes('..') || fileName.length === 0) {
297
395
  throw new Error(`Wallet QA proof ${label} must be a safe basename.`);
@@ -300,21 +398,92 @@ function assertSafeArtifactBasename(fileName, label) {
300
398
  function assertSafeOrigin(origin) {
301
399
  try {
302
400
  const parsed = new URL(origin);
303
- if ((parsed.protocol === 'http:' || parsed.protocol === 'https:') && parsed.search === '' && parsed.hash === '') {
304
- return origin;
401
+ if ((parsed.protocol === 'http:' || parsed.protocol === 'https:') && parsed.pathname === '/' && parsed.search === '' && parsed.hash === '') {
402
+ return parsed.origin;
305
403
  }
306
404
  }
307
405
  catch {
308
406
  // handled below
309
407
  }
310
- throw new Error('Wallet QA proof origin must be an http(s) origin without query strings or hashes.');
408
+ throw new Error('Wallet QA proof origin must be an http(s) origin without nested paths, query strings, or hashes.');
311
409
  }
312
410
  function sanitizeLabel(value) {
313
411
  return sanitizePathPart(value);
314
412
  }
413
+ function testMetadataFromInfo(testInfo) {
414
+ return sanitizeTestMetadata({
415
+ ...(testInfo.project?.name ? { project: testInfo.project.name } : {}),
416
+ ...(testInfo.title ? { title: testInfo.title } : {})
417
+ });
418
+ }
419
+ function sanitizeTestMetadata(metadata) {
420
+ return {
421
+ ...(metadata.project ? { project: sanitizePathPart(metadata.project) } : {}),
422
+ ...(metadata.title ? { title: redactWalletQaValue(metadata.title) } : {})
423
+ };
424
+ }
425
+ function sanitizeProvenanceTool(value) {
426
+ return value.trim().replace(/[^a-zA-Z0-9._-]+/g, '-').slice(0, 80) || 'writeWalletQaProofManifest';
427
+ }
428
+ function verifyWalletQaProofProvenance(manifest) {
429
+ if (manifest.schemaVersion !== 1) {
430
+ throw new Error('Wallet QA proof manifest schemaVersion is unsupported.');
431
+ }
432
+ if (!manifest.createdAt || Number.isNaN(Date.parse(manifest.createdAt))) {
433
+ throw new Error('Wallet QA proof manifest createdAt provenance is required.');
434
+ }
435
+ if (!manifest.runId || typeof manifest.runId !== 'string') {
436
+ throw new Error('Wallet QA proof manifest runId provenance is required.');
437
+ }
438
+ if (manifest.provenance?.packageName !== '@broccolo1d/playwright' || manifest.provenance.framework !== 'playwright' || !manifest.provenance.tool) {
439
+ throw new Error('Wallet QA proof manifest provenance is incomplete.');
440
+ }
441
+ if (manifest.provenance.packageVersion !== PLAYWRIGHT_PACKAGE_VERSION) {
442
+ throw new Error('Wallet QA proof manifest package version provenance is inconsistent.');
443
+ }
444
+ const runtime = manifest.provenance.runtime;
445
+ const expectedRuntime = runtimeMetadata();
446
+ if (!runtime || runtime.node !== expectedRuntime.node || runtime.platform !== expectedRuntime.platform || runtime.arch !== expectedRuntime.arch) {
447
+ throw new Error('Wallet QA proof manifest runtime provenance is inconsistent.');
448
+ }
449
+ if (manifest.status === 'connected' && (!manifest.origin || !manifest.maskedAccount || manifest.chainId === undefined || manifest.artifacts.length === 0)) {
450
+ throw new Error('Wallet QA connected proof manifest requires origin, masked account, chain, and at least one evidence artifact.');
451
+ }
452
+ const expectedSummary = {
453
+ status: manifest.status,
454
+ ...(manifest.origin ? { origin: manifest.origin } : {}),
455
+ ...(manifest.maskedAccount ? { maskedAccount: manifest.maskedAccount } : {}),
456
+ ...(manifest.chainId !== undefined ? { chainId: manifest.chainId } : {}),
457
+ artifactCount: manifest.artifacts.length,
458
+ ...(manifest.failure ? { failure: manifest.failure } : {})
459
+ };
460
+ if (JSON.stringify(manifest.summary) !== JSON.stringify(expectedSummary)) {
461
+ throw new Error('Wallet QA proof manifest summary does not match verified manifest fields.');
462
+ }
463
+ const expectedChecksums = manifest.artifacts.map((artifact) => artifact.sha256);
464
+ if (JSON.stringify(manifest.checksums?.artifactSha256) !== JSON.stringify(expectedChecksums)) {
465
+ throw new Error('Wallet QA proof manifest checksums do not match verified artifacts.');
466
+ }
467
+ }
315
468
  function redactFullAddresses(value) {
316
469
  return value.replace(/0x[0-9a-fA-F]{40}/g, (address) => maskEthereumAddress(address));
317
470
  }
471
+ function redactSecrets(value) {
472
+ return value
473
+ .replace(/\bnpm_[A-Za-z0-9_-]{20,}\b/g, '[redacted:npm-token]')
474
+ .replace(/https?:\/\/[^\s"'`]+:[^\s"'`@]+@[^\s"'`]+/gi, '[redacted:rpc-url]')
475
+ .replace(/https?:\/\/[^\s"'`]*\/(?:[^\s"'`]*[A-Za-z0-9_-]{20,}[^\s"'`]*)/gi, '[redacted:rpc-url]')
476
+ .replace(/https?:\/\/[^\s"'`]+[?&](?:api[_-]?key|token|key|auth|access[_-]?token)=[^\s"'`&]+/gi, '[redacted:rpc-url]')
477
+ .replace(/\b(?:private[_-]?key|seed(?:[ _-]?phrase)?|mnemonic|password|passphrase|secret|token|rpc(?:[_-]?url)?)\b\s*(?::|=|is|was)?\s+[^\n\r]*/gi, (match) => redactLabeledSecret(match))
478
+ .replace(/\b(?:0x)?[0-9a-fA-F]{64}\b/g, '[redacted:secret]');
479
+ }
480
+ function redactLabeledSecret(value) {
481
+ const label = value.match(/private[_-]?key|seed(?:[ _-]?phrase)?|mnemonic|password|passphrase|secret|token|rpc(?:[_-]?url)?/i)?.[0] ?? 'secret';
482
+ return `[redacted:${label.toLowerCase().replace(/[ _]/g, '-')}]`;
483
+ }
484
+ function isSafeMaskedAccount(value) {
485
+ return /^0x[0-9a-fA-F]{4}(?:…|\.\.\.)[0-9a-fA-F]{4,5}$/.test(value) && !/0x[0-9a-fA-F]{40}/.test(value);
486
+ }
318
487
  function redactPaths(value) {
319
488
  return value
320
489
  .replace(/[A-Za-z]:\\(?:[^\\\s]+\\)*([^\\\s]+)/g, '[path]/$1')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@broccolo1d/playwright",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Playwright fixtures for policy-gated browser-wallet dapp QA.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -50,7 +50,7 @@
50
50
  "@playwright/test": "^1.59.1"
51
51
  },
52
52
  "dependencies": {
53
- "@broccolo1d/wallet-browser": "^0.2.1"
53
+ "@broccolo1d/wallet-browser": "workspace:^"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@playwright/test": "1.59.1",