@broccolo1d/playwright 0.1.3 → 0.2.1
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 +77 -49
- package/dist/index.d.ts +58 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +214 -2
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Playwright fixtures for wallet-backed dapp QA.
|
|
4
4
|
|
|
5
|
-
|
|
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.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -10,91 +10,119 @@ This package extends `@playwright/test` with wallet fixtures while keeping dapp-
|
|
|
10
10
|
pnpm add -D @broccolo1d/playwright @playwright/test
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
ESM-only. Node.js `>=22 <23`.
|
|
14
14
|
|
|
15
15
|
## Configure
|
|
16
16
|
|
|
17
17
|
```ts
|
|
18
18
|
// playwright.config.ts
|
|
19
|
-
import {
|
|
19
|
+
import {
|
|
20
|
+
createFailClosedWalletPromptDriver,
|
|
21
|
+
defineWalletQaConfig,
|
|
22
|
+
type MetaMaskNetworkDriver,
|
|
23
|
+
type WalletPromptDriver
|
|
24
|
+
} from '@broccolo1d/playwright';
|
|
25
|
+
|
|
26
|
+
const expectedAccount = '0x0000000000000000000000000000000000000000';
|
|
27
|
+
const origin = 'http://127.0.0.1:5173';
|
|
28
|
+
|
|
29
|
+
// Replace with explicit prompt automation in real wallet jobs.
|
|
30
|
+
const delegate: WalletPromptDriver = {
|
|
31
|
+
async approveConnection() {}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const prompt = createFailClosedWalletPromptDriver({
|
|
35
|
+
origin,
|
|
36
|
+
expectedAccount,
|
|
37
|
+
expectedChainIdHex: '0xaa36a7',
|
|
38
|
+
delegate
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
const network: MetaMaskNetworkDriver = {
|
|
42
|
+
async getChainId() { return 11155111; },
|
|
43
|
+
async getAccounts() { return [expectedAccount]; },
|
|
44
|
+
async switchChain() {},
|
|
45
|
+
async addEthereumChain() {}
|
|
46
|
+
};
|
|
20
47
|
|
|
21
48
|
export default defineWalletQaConfig({
|
|
22
49
|
use: {
|
|
23
50
|
walletConfig: {
|
|
24
51
|
useRealWallet: false,
|
|
25
|
-
artifactDir: '.wallet-artifacts/playwright'
|
|
52
|
+
artifactDir: '.wallet-artifacts/playwright',
|
|
53
|
+
expectedAccount,
|
|
54
|
+
expectedChainId: 11155111,
|
|
55
|
+
origin,
|
|
56
|
+
prompt,
|
|
57
|
+
network
|
|
26
58
|
}
|
|
27
59
|
}
|
|
28
60
|
});
|
|
29
61
|
```
|
|
30
62
|
|
|
31
|
-
`useRealWallet` defaults to `false`.
|
|
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.
|
|
32
64
|
|
|
33
65
|
## Write a dapp-owned test
|
|
34
66
|
|
|
35
67
|
```ts
|
|
36
68
|
// tests/wallet.spec.ts
|
|
37
|
-
import { expect, test } from '@broccolo1d/playwright';
|
|
69
|
+
import { expect, test, verifyWalletQaProofManifest } from '@broccolo1d/playwright';
|
|
38
70
|
|
|
39
71
|
test('connects through wallet policy', async ({ page, wallet, walletArtifacts }) => {
|
|
40
72
|
await page.goto('http://127.0.0.1:5173');
|
|
41
73
|
|
|
42
|
-
await wallet.connect({
|
|
43
|
-
requestConnection: async () => page.getByRole('button', { name: /connect/i }).click()
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
74
|
+
const result = await wallet.connect({
|
|
75
|
+
requestConnection: async () => page.getByRole('button', { name: /connect/i }).click()
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
await wallet.assertState();
|
|
79
|
+
const screenshot = await walletArtifacts.screenshot('connected');
|
|
80
|
+
await walletArtifacts.writeProofManifest({
|
|
81
|
+
status: 'connected',
|
|
82
|
+
origin: 'http://127.0.0.1:5173',
|
|
83
|
+
account: result.activeAccount,
|
|
84
|
+
chainId: result.chainId,
|
|
85
|
+
attachments: [{ label: 'wallet-connected', path: screenshot, contentType: 'image/png' }]
|
|
47
86
|
});
|
|
48
87
|
|
|
49
|
-
await walletArtifacts.
|
|
88
|
+
await verifyWalletQaProofManifest(walletArtifacts.artifactDir);
|
|
50
89
|
await expect(page.getByText(/connected/i)).toBeVisible();
|
|
51
90
|
});
|
|
52
91
|
```
|
|
53
92
|
|
|
54
|
-
|
|
55
|
-
// playwright.config.ts
|
|
56
|
-
import { defineWalletQaConfig, type MetaMaskNetworkDriver, type WalletPromptDriver } from '@broccolo1d/playwright';
|
|
93
|
+
## Fixtures
|
|
57
94
|
|
|
58
|
-
|
|
95
|
+
- `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.
|
|
59
100
|
|
|
60
|
-
|
|
61
|
-
const prompt: WalletPromptDriver = {
|
|
62
|
-
async approveConnection() {}
|
|
63
|
-
};
|
|
101
|
+
## Helpers
|
|
64
102
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
async addEthereumChain() {}
|
|
70
|
-
};
|
|
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.
|
|
106
|
+
- `formatWalletQaFailure(error)` / `redactWalletQaValue(value)`: produce doc-safe failure snippets by masking wallet addresses and local paths.
|
|
71
107
|
|
|
72
|
-
|
|
73
|
-
use: {
|
|
74
|
-
walletConfig: {
|
|
75
|
-
useRealWallet: false,
|
|
76
|
-
artifactDir: '.wallet-artifacts/playwright',
|
|
77
|
-
prompt,
|
|
78
|
-
network
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
```
|
|
108
|
+
## Failure proof
|
|
83
109
|
|
|
84
|
-
|
|
110
|
+
```ts
|
|
111
|
+
try {
|
|
112
|
+
await wallet.assertState({ expectedChainId: 1 });
|
|
113
|
+
} catch (error) {
|
|
114
|
+
await walletArtifacts.writeProofManifest({
|
|
115
|
+
status: 'failed',
|
|
116
|
+
failure: error,
|
|
117
|
+
notes: ['negative proof: wrong chain is rejected']
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
```
|
|
85
121
|
|
|
86
|
-
|
|
87
|
-
- `walletContext`: browser context used by the test.
|
|
88
|
-
- `walletPage`: page used by the test.
|
|
89
|
-
- `wallet`: connect/assert/masking helper.
|
|
90
|
-
- `walletArtifacts`: screenshot and JSON manifest writer under the configured local artifact directory.
|
|
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.
|
|
91
123
|
|
|
92
124
|
## Fail-closed behavior
|
|
93
125
|
|
|
94
|
-
`wallet.connect` requires expected account and chain ID. It also requires one of `requestConnection`, `walletConfig.dapp`, or `walletConfig.dappSelectors` to trigger the dapp
|
|
95
|
-
|
|
96
|
-
Real prompt approval is not implicit. A configured prompt driver is required for wallet prompts. A configured network driver is required for chain/account assertions. Without those drivers, the fixtures throw instead of pretending that a wallet action succeeded.
|
|
97
|
-
|
|
98
|
-
## Artifact handling
|
|
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.
|
|
99
127
|
|
|
100
|
-
|
|
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.
|
package/dist/index.d.ts
CHANGED
|
@@ -34,6 +34,14 @@ export interface WalletConnectOptions {
|
|
|
34
34
|
origin?: string;
|
|
35
35
|
guardrails?: WalletGuardrailConfig;
|
|
36
36
|
}
|
|
37
|
+
export interface FailClosedWalletPromptDriverOptions {
|
|
38
|
+
/** Required dapp origin. Prompt approvals fail closed without an explicit expected origin. */
|
|
39
|
+
origin: string;
|
|
40
|
+
expectedAccount: string;
|
|
41
|
+
expectedChainIdHex: string;
|
|
42
|
+
/** Explicit prompt automation. Missing handlers reject instead of approving. */
|
|
43
|
+
delegate?: WalletPromptDriver;
|
|
44
|
+
}
|
|
37
45
|
export interface WalletAssertStateOptions {
|
|
38
46
|
expectedAccount?: string;
|
|
39
47
|
expectedChainId?: string | number;
|
|
@@ -47,6 +55,51 @@ export interface WalletArtifacts {
|
|
|
47
55
|
artifactDir: string;
|
|
48
56
|
screenshot(name: string, options?: Parameters<Page['screenshot']>[0]): Promise<string>;
|
|
49
57
|
writeManifest(name: string, data: Record<string, unknown>): Promise<string>;
|
|
58
|
+
writeProofManifest(options: Omit<WalletQaProofManifestOptions, 'artifactDir'>): Promise<string>;
|
|
59
|
+
writeFailureManifest(name: string, error: unknown, data?: Record<string, unknown>): Promise<string>;
|
|
60
|
+
}
|
|
61
|
+
export type WalletQaProofStatus = 'connected' | 'failed';
|
|
62
|
+
export interface WalletQaProofAttachment {
|
|
63
|
+
label: string;
|
|
64
|
+
/** Local file to hash. The manifest stores only a safe basename. */
|
|
65
|
+
path: string;
|
|
66
|
+
/** Optional public basename override. Absolute paths and nested paths are rejected. */
|
|
67
|
+
publicFile?: string;
|
|
68
|
+
contentType?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface WalletQaProofArtifact {
|
|
71
|
+
label: string;
|
|
72
|
+
file: string;
|
|
73
|
+
sizeBytes: number;
|
|
74
|
+
sha256: string;
|
|
75
|
+
contentType?: string;
|
|
76
|
+
}
|
|
77
|
+
export interface WalletQaProofManifest {
|
|
78
|
+
artifactType: 'wallet-qa-proof';
|
|
79
|
+
status: WalletQaProofStatus;
|
|
80
|
+
origin?: string;
|
|
81
|
+
maskedAccount?: string;
|
|
82
|
+
chainId?: number | string;
|
|
83
|
+
artifacts: WalletQaProofArtifact[];
|
|
84
|
+
failure?: string;
|
|
85
|
+
notes?: string[];
|
|
86
|
+
}
|
|
87
|
+
export interface WalletQaProofManifestOptions {
|
|
88
|
+
artifactDir: string;
|
|
89
|
+
manifestName?: string;
|
|
90
|
+
status: WalletQaProofStatus;
|
|
91
|
+
origin?: string;
|
|
92
|
+
account?: string;
|
|
93
|
+
chainId?: number | string;
|
|
94
|
+
attachments?: WalletQaProofAttachment[];
|
|
95
|
+
failure?: unknown;
|
|
96
|
+
notes?: string[];
|
|
97
|
+
}
|
|
98
|
+
export interface WalletQaProofVerificationResult {
|
|
99
|
+
status: 'verified';
|
|
100
|
+
artifactDir: string;
|
|
101
|
+
manifestPath: string;
|
|
102
|
+
manifest: WalletQaProofManifest;
|
|
50
103
|
}
|
|
51
104
|
export interface WalletQaFixtures {
|
|
52
105
|
walletConfig: WalletQaConfig;
|
|
@@ -60,4 +113,9 @@ export interface WalletQaWorkerFixtures {
|
|
|
60
113
|
type WalletQaPlaywrightConfig = PlaywrightTestConfig<WalletQaFixtures, WalletQaWorkerFixtures>;
|
|
61
114
|
export declare function defineWalletQaConfig(config: WalletQaPlaywrightConfig): WalletQaPlaywrightConfig;
|
|
62
115
|
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>;
|
|
116
|
+
export declare function createFailClosedWalletPromptDriver(options: FailClosedWalletPromptDriverOptions): Required<WalletPromptDriver>;
|
|
117
|
+
export declare function writeWalletQaProofManifest(options: WalletQaProofManifestOptions): Promise<string>;
|
|
118
|
+
export declare function verifyWalletQaProofManifest(artifactDir: string, manifestName?: string): Promise<WalletQaProofVerificationResult>;
|
|
119
|
+
export declare function formatWalletQaFailure(error: unknown): string;
|
|
120
|
+
export declare function redactWalletQaValue(value: unknown): string;
|
|
63
121
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
|
|
4
|
+
import { basename, dirname, isAbsolute, join, resolve } from 'node:path';
|
|
3
5
|
import { defineConfig, expect, test as base } from '@playwright/test';
|
|
4
6
|
import { assertWalletState, connectWallet, createWalletDappPageDriver, launchWalletBrowser, maskEthereumAddress } from '@broccolo1d/wallet-browser';
|
|
5
7
|
export { expect };
|
|
@@ -105,9 +107,219 @@ function createWalletArtifacts(page, config, testInfo) {
|
|
|
105
107
|
await mkdir(dirname(filePath), { recursive: true });
|
|
106
108
|
await writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, 'utf8');
|
|
107
109
|
return filePath;
|
|
110
|
+
},
|
|
111
|
+
async writeProofManifest(options) {
|
|
112
|
+
return writeWalletQaProofManifest({ ...options, artifactDir: runDir });
|
|
113
|
+
},
|
|
114
|
+
async writeFailureManifest(name, error, data = {}) {
|
|
115
|
+
return this.writeManifest(name, { ...data, failure: formatWalletQaFailure(error) });
|
|
108
116
|
}
|
|
109
117
|
};
|
|
110
118
|
}
|
|
119
|
+
export function createFailClosedWalletPromptDriver(options) {
|
|
120
|
+
if (!options.origin) {
|
|
121
|
+
throw new Error('Wallet prompt origin is required; fail closed.');
|
|
122
|
+
}
|
|
123
|
+
const expectedAccount = normalizeAddressForComparison(options.expectedAccount);
|
|
124
|
+
const expectedChainIdHex = options.expectedChainIdHex.toLowerCase();
|
|
125
|
+
return {
|
|
126
|
+
async approveConnection(input) {
|
|
127
|
+
assertPromptOrigin(input.origin, options.origin);
|
|
128
|
+
assertPromptAccount(input.expectedAccount, expectedAccount);
|
|
129
|
+
if (input.expectedChainIdHex.toLowerCase() !== expectedChainIdHex) {
|
|
130
|
+
throw new Error(`Wallet connection prompt chain ${input.expectedChainIdHex} does not match expected ${expectedChainIdHex}; fail closed.`);
|
|
131
|
+
}
|
|
132
|
+
if (!options.delegate?.approveConnection) {
|
|
133
|
+
throw new Error('Wallet connection prompt approval is not configured; fail closed.');
|
|
134
|
+
}
|
|
135
|
+
await options.delegate.approveConnection(input);
|
|
136
|
+
},
|
|
137
|
+
async approveSignature(input) {
|
|
138
|
+
assertPromptOrigin(input.origin, options.origin);
|
|
139
|
+
assertPromptAccount(input.expectedAccount, expectedAccount);
|
|
140
|
+
if (!options.delegate?.approveSignature) {
|
|
141
|
+
throw new Error('Unexpected signature prompt; fail closed.');
|
|
142
|
+
}
|
|
143
|
+
await options.delegate.approveSignature(input);
|
|
144
|
+
},
|
|
145
|
+
async approveTransaction(input) {
|
|
146
|
+
assertPromptOrigin(input.origin, options.origin);
|
|
147
|
+
assertPromptAccount(input.expectedAccount, expectedAccount);
|
|
148
|
+
if (!options.delegate?.approveTransaction) {
|
|
149
|
+
throw new Error('Unexpected transaction prompt; fail closed.');
|
|
150
|
+
}
|
|
151
|
+
await options.delegate.approveTransaction(input);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
export async function writeWalletQaProofManifest(options) {
|
|
156
|
+
const artifactDir = resolve(options.artifactDir);
|
|
157
|
+
const manifestName = options.manifestName ?? 'wallet-qa-proof.json';
|
|
158
|
+
assertSafeArtifactBasename(manifestName, 'manifest name');
|
|
159
|
+
await mkdir(artifactDir, { recursive: true });
|
|
160
|
+
const artifacts = await Promise.all((options.attachments ?? []).map((attachment) => createProofArtifact(artifactDir, attachment)));
|
|
161
|
+
const manifest = {
|
|
162
|
+
artifactType: 'wallet-qa-proof',
|
|
163
|
+
status: options.status,
|
|
164
|
+
...(options.origin ? { origin: assertSafeOrigin(options.origin) } : {}),
|
|
165
|
+
...(options.account ? { maskedAccount: maskEthereumAddress(options.account) } : {}),
|
|
166
|
+
...(options.chainId !== undefined ? { chainId: options.chainId } : {}),
|
|
167
|
+
artifacts,
|
|
168
|
+
...(options.failure !== undefined ? { failure: formatWalletQaFailure(options.failure) } : {}),
|
|
169
|
+
...(options.notes ? { notes: options.notes.map((note) => redactWalletQaValue(note)) } : {})
|
|
170
|
+
};
|
|
171
|
+
const text = `${JSON.stringify(manifest, null, 2)}\n`;
|
|
172
|
+
assertPublicManifestIsSafe(text, artifactDir);
|
|
173
|
+
const manifestPath = join(artifactDir, manifestName);
|
|
174
|
+
await writeFile(manifestPath, text, 'utf8');
|
|
175
|
+
return manifestPath;
|
|
176
|
+
}
|
|
177
|
+
export async function verifyWalletQaProofManifest(artifactDir, manifestName = 'wallet-qa-proof.json') {
|
|
178
|
+
const resolvedArtifactDir = resolve(artifactDir);
|
|
179
|
+
assertSafeArtifactBasename(manifestName, 'manifest name');
|
|
180
|
+
const manifestPath = join(resolvedArtifactDir, manifestName);
|
|
181
|
+
const text = await readFile(manifestPath, 'utf8');
|
|
182
|
+
assertPublicManifestIsSafe(text, resolvedArtifactDir);
|
|
183
|
+
const manifest = JSON.parse(text);
|
|
184
|
+
if (manifest.artifactType !== 'wallet-qa-proof') {
|
|
185
|
+
throw new Error('Wallet QA proof manifest has an unexpected artifact type.');
|
|
186
|
+
}
|
|
187
|
+
if (manifest.status !== 'connected' && manifest.status !== 'failed') {
|
|
188
|
+
throw new Error('Wallet QA proof manifest has an unexpected status.');
|
|
189
|
+
}
|
|
190
|
+
if (!Array.isArray(manifest.artifacts)) {
|
|
191
|
+
throw new Error('Wallet QA proof manifest artifacts must be an array.');
|
|
192
|
+
}
|
|
193
|
+
for (const artifact of manifest.artifacts) {
|
|
194
|
+
await verifyProofArtifact(resolvedArtifactDir, artifact);
|
|
195
|
+
}
|
|
196
|
+
return { status: 'verified', artifactDir: resolvedArtifactDir, manifestPath, manifest };
|
|
197
|
+
}
|
|
198
|
+
export function formatWalletQaFailure(error) {
|
|
199
|
+
const message = error instanceof Error ? `${error.name}: ${error.message}` : String(error);
|
|
200
|
+
return redactWalletQaValue(message);
|
|
201
|
+
}
|
|
202
|
+
export function redactWalletQaValue(value) {
|
|
203
|
+
return redactPaths(redactFullAddresses(typeof value === 'string' ? value : JSON.stringify(value, null, 2)));
|
|
204
|
+
}
|
|
205
|
+
async function createProofArtifact(artifactDir, attachment) {
|
|
206
|
+
const file = attachment.publicFile ?? basename(attachment.path);
|
|
207
|
+
assertSafeArtifactBasename(file, 'attachment file');
|
|
208
|
+
if (!existsSync(attachment.path)) {
|
|
209
|
+
throw new Error(`Wallet QA proof attachment is missing: ${file}`);
|
|
210
|
+
}
|
|
211
|
+
const bytes = await readFile(attachment.path);
|
|
212
|
+
const fileStat = await stat(attachment.path);
|
|
213
|
+
const artifact = {
|
|
214
|
+
label: sanitizeLabel(attachment.label),
|
|
215
|
+
file,
|
|
216
|
+
sizeBytes: fileStat.size,
|
|
217
|
+
sha256: createHash('sha256').update(bytes).digest('hex')
|
|
218
|
+
};
|
|
219
|
+
if (attachment.contentType) {
|
|
220
|
+
artifact.contentType = attachment.contentType;
|
|
221
|
+
}
|
|
222
|
+
return artifact;
|
|
223
|
+
}
|
|
224
|
+
async function verifyProofArtifact(artifactDir, artifact) {
|
|
225
|
+
assertSafeArtifactBasename(artifact.file, 'artifact file');
|
|
226
|
+
if (!/^[0-9a-f]{64}$/.test(artifact.sha256)) {
|
|
227
|
+
throw new Error(`Wallet QA proof artifact hash is invalid for ${artifact.file}.`);
|
|
228
|
+
}
|
|
229
|
+
const artifactPath = join(artifactDir, artifact.file);
|
|
230
|
+
if (!existsSync(artifactPath)) {
|
|
231
|
+
throw new Error(`Wallet QA proof artifact is missing: ${artifact.file}`);
|
|
232
|
+
}
|
|
233
|
+
const bytes = await readFile(artifactPath);
|
|
234
|
+
const fileStat = await stat(artifactPath);
|
|
235
|
+
const sha256 = createHash('sha256').update(bytes).digest('hex');
|
|
236
|
+
if (artifact.sizeBytes !== fileStat.size) {
|
|
237
|
+
throw new Error(`Wallet QA proof artifact size mismatch for ${artifact.file}.`);
|
|
238
|
+
}
|
|
239
|
+
if (artifact.sha256 !== sha256) {
|
|
240
|
+
throw new Error(`Wallet QA proof artifact hash mismatch for ${artifact.file}.`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function assertPromptOrigin(actual, expected) {
|
|
244
|
+
if (expected !== undefined && actual !== expected) {
|
|
245
|
+
throw new Error(`Wallet prompt origin ${actual ?? '<missing>'} does not match expected ${expected}; fail closed.`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
function assertPromptAccount(actual, expected) {
|
|
249
|
+
if (normalizeAddressForComparison(actual) !== expected) {
|
|
250
|
+
throw new Error(`Wallet prompt account ${maskEthereumAddress(actual)} does not match expected ${maskEthereumAddress(expected)}; fail closed.`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function normalizeAddressForComparison(address) {
|
|
254
|
+
if (!/^0x[0-9a-fA-F]{40}$/.test(address)) {
|
|
255
|
+
throw new Error('Wallet prompt account must be a full 0x-prefixed address; fail closed.');
|
|
256
|
+
}
|
|
257
|
+
return address.toLowerCase();
|
|
258
|
+
}
|
|
259
|
+
function assertPublicManifestIsSafe(text, artifactDir) {
|
|
260
|
+
if (text.includes(artifactDir)) {
|
|
261
|
+
throw new Error('Wallet QA proof manifest must not contain the full artifact directory path.');
|
|
262
|
+
}
|
|
263
|
+
if (/0x[0-9a-fA-F]{40}/.test(text)) {
|
|
264
|
+
throw new Error('Wallet QA proof manifest must not contain full wallet addresses.');
|
|
265
|
+
}
|
|
266
|
+
if (containsLocalPathLeak(text)) {
|
|
267
|
+
throw new Error('Wallet QA proof manifest must not contain local path leaks.');
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function containsLocalPathLeak(text) {
|
|
271
|
+
try {
|
|
272
|
+
return publicManifestValueContainsLocalPath(JSON.parse(text));
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
return hasLocalPath(text);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
function publicManifestValueContainsLocalPath(value) {
|
|
279
|
+
if (typeof value === 'string') {
|
|
280
|
+
return hasLocalPath(value);
|
|
281
|
+
}
|
|
282
|
+
if (Array.isArray(value)) {
|
|
283
|
+
return value.some(publicManifestValueContainsLocalPath);
|
|
284
|
+
}
|
|
285
|
+
if (value && typeof value === 'object') {
|
|
286
|
+
return Object.values(value).some(publicManifestValueContainsLocalPath);
|
|
287
|
+
}
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
290
|
+
function hasLocalPath(value) {
|
|
291
|
+
return /file:\/\/\//i.test(value)
|
|
292
|
+
|| /(?:^|[\s"'`([{<])(?:[A-Za-z]:\\|\\\\)[^\s"'`)\]}>]+/.test(value)
|
|
293
|
+
|| /(?:^|[\s"'`([{<])\/(?!\/)(?:[^/\s"'`)\]}>]+\/)+[^/\s"'`)\]}>]*/.test(value);
|
|
294
|
+
}
|
|
295
|
+
function assertSafeArtifactBasename(fileName, label) {
|
|
296
|
+
if (isAbsolute(fileName) || fileName !== basename(fileName) || fileName.includes('..') || fileName.length === 0) {
|
|
297
|
+
throw new Error(`Wallet QA proof ${label} must be a safe basename.`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
function assertSafeOrigin(origin) {
|
|
301
|
+
try {
|
|
302
|
+
const parsed = new URL(origin);
|
|
303
|
+
if ((parsed.protocol === 'http:' || parsed.protocol === 'https:') && parsed.search === '' && parsed.hash === '') {
|
|
304
|
+
return origin;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
// handled below
|
|
309
|
+
}
|
|
310
|
+
throw new Error('Wallet QA proof origin must be an http(s) origin without query strings or hashes.');
|
|
311
|
+
}
|
|
312
|
+
function sanitizeLabel(value) {
|
|
313
|
+
return sanitizePathPart(value);
|
|
314
|
+
}
|
|
315
|
+
function redactFullAddresses(value) {
|
|
316
|
+
return value.replace(/0x[0-9a-fA-F]{40}/g, (address) => maskEthereumAddress(address));
|
|
317
|
+
}
|
|
318
|
+
function redactPaths(value) {
|
|
319
|
+
return value
|
|
320
|
+
.replace(/[A-Za-z]:\\(?:[^\\\s]+\\)*([^\\\s]+)/g, '[path]/$1')
|
|
321
|
+
.replace(/\/(?:[^/\s]+\/)+([^/\s]+)/g, '[path]/$1');
|
|
322
|
+
}
|
|
111
323
|
function requireConfigured(value, message) {
|
|
112
324
|
if (value === undefined) {
|
|
113
325
|
throw new Error(message);
|
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.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Playwright fixtures for policy-gated browser-wallet dapp QA.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
|
@@ -41,11 +41,16 @@
|
|
|
41
41
|
"LICENSE",
|
|
42
42
|
"package.json"
|
|
43
43
|
],
|
|
44
|
+
"scripts": {
|
|
45
|
+
"build": "pnpm --filter @broccolo1d/wallet-browser build && tsc -p tsconfig.json",
|
|
46
|
+
"test": "pnpm --filter @broccolo1d/wallet-browser build && vitest run",
|
|
47
|
+
"typecheck": "pnpm --filter @broccolo1d/wallet-browser build && tsc -p tsconfig.json --noEmit"
|
|
48
|
+
},
|
|
44
49
|
"peerDependencies": {
|
|
45
50
|
"@playwright/test": "^1.59.1"
|
|
46
51
|
},
|
|
47
52
|
"dependencies": {
|
|
48
|
-
"@broccolo1d/wallet-browser": "^0.1
|
|
53
|
+
"@broccolo1d/wallet-browser": "^0.2.1"
|
|
49
54
|
},
|
|
50
55
|
"devDependencies": {
|
|
51
56
|
"@playwright/test": "1.59.1",
|
|
@@ -54,10 +59,5 @@
|
|
|
54
59
|
},
|
|
55
60
|
"publishConfig": {
|
|
56
61
|
"access": "public"
|
|
57
|
-
},
|
|
58
|
-
"scripts": {
|
|
59
|
-
"build": "pnpm --filter @broccolo1d/wallet-browser build && tsc -p tsconfig.json",
|
|
60
|
-
"test": "pnpm --filter @broccolo1d/wallet-browser build && vitest run",
|
|
61
|
-
"typecheck": "pnpm --filter @broccolo1d/wallet-browser build && tsc -p tsconfig.json --noEmit"
|
|
62
62
|
}
|
|
63
|
-
}
|
|
63
|
+
}
|