@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 +49 -27
- package/dist/index.d.ts +53 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +191 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# `@broccolo1d/playwright`
|
|
2
2
|
|
|
3
|
-
Playwright fixtures for
|
|
3
|
+
Playwright fixtures for policy-gated browser-wallet dapp QA.
|
|
4
4
|
|
|
5
|
-
|
|
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 =
|
|
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
|
-
//
|
|
30
|
-
const
|
|
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
|
|
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
|
-
|
|
79
|
+
click: async () => page.getByRole('button', { name: /connect/i }).click()
|
|
76
80
|
});
|
|
77
81
|
|
|
78
|
-
await wallet.
|
|
82
|
+
await wallet.expectConnected();
|
|
83
|
+
await wallet.expectChain({ expectedChainId: 11155111 });
|
|
84
|
+
|
|
79
85
|
const screenshot = await walletArtifacts.screenshot('connected');
|
|
80
|
-
await walletArtifacts.
|
|
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: '
|
|
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
|
-
|
|
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`:
|
|
97
|
-
- `walletPage`:
|
|
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
|
-
- `
|
|
104
|
-
- `
|
|
105
|
-
- `
|
|
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
|
-
|
|
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>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,MAAM,EAAgB,KAAK,cAAc,EAAE,KAAK,IAAI,EAAE,KAAK,oBAAoB,
|
|
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
|
|
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
|
|
77
|
+
origin,
|
|
61
78
|
guardrails: options.guardrails ?? config.guardrails
|
|
62
79
|
});
|
|
63
80
|
},
|
|
64
81
|
async assertState(options = {}) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
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
|
-
...(
|
|
229
|
+
...(maskedAccount ? { maskedAccount } : {}),
|
|
166
230
|
...(options.chainId !== undefined ? { chainId: options.chainId } : {}),
|
|
167
231
|
artifacts,
|
|
168
|
-
...(
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,EAA4E,MAAM,kBAAkB,CAAC;AAChJ,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,mBAAmB,EACnB,mBAAmB,EAUpB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,CAAC;AA8LlB,MAAM,qBAAqB,GAAmB;IAC5C,aAAa,EAAE,KAAK;IACpB,WAAW,EAAE,8BAA8B;CAC5C,CAAC;AACF,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAE3C,SAAS,eAAe;IACtB,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAgC;IACnE,OAAO,YAAY,CAAC,MAAM,CAA6B,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAA2C;IACxE,YAAY,EAAE,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAEvD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE;QAChD,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YAChC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,YAAY,CAAC,OAAoC,CAAC,CAAC;QAC/D,CAAC;gBAAS,CAAC;YACT,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IAED,aAAa,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE;QACxC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QAClC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,eAAe,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE;QAC/D,MAAM,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE;QAC5C,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IAChD,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,MAAsB;IAC/D,KAAK,UAAU,oBAAoB,CAAC,UAAkB,EAAE,UAAoC,EAAE;QAC5F,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC;QAC1E,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC;QAC1E,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,2EAA2E,CAAC,CAAC;QAC5G,CAAC;QAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,UAAU,mEAAmE,CAAC,CAAC;QACpI,OAAO,iBAAiB,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE;YACxB,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC;YAC1E,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC;YAC1E,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;YAC7G,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,iHAAiH,CAAC,CAAC;YACrI,CAAC;YAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;YACxF,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,2FAA2F,CAAC,CAAC;YAC7I,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,oFAAoF,CAAC,CAAC;YACxI,OAAO,aAAa,CAAC;gBACnB,IAAI;gBACJ,MAAM;gBACN,OAAO;gBACP,eAAe;gBACf,eAAe;gBACf,MAAM;gBACN,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU;aACpD,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE;YAC5B,OAAO,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;QAED,KAAK,CAAC,eAAe,CAAC,OAAO,GAAG,EAAE;YAChC,OAAO,oBAAoB,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;QACjE,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE;YAC5B,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;gBAClF,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;YAC7F,CAAC;YACD,OAAO,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;QAED,WAAW,CAAC,OAAe;YACzB,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAU,EAAE,MAAsB,EAAE,iBAAuC;IACnG,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7I,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,CAAC,cAAc;gBAClB,MAAM,iBAAiB,EAAE,CAAC;YAC5B,CAAC;YACD,KAAK,CAAC,mBAAmB;gBACvB,OAAO,UAAU,EAAE,mBAAmB,EAAE,CAAC;YAC3C,CAAC;YACD,gBAAgB,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC;YAChE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,IAAI,CAAC,UAAU,CAAC;SACrE,CAAC;IACJ,CAAC;IAED,OAAO,iBAAiB,CAAC,UAAU,EAAE,wJAAwJ,CAAC,CAAC;AACjM,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAU,EAAE,MAAsB,EAAE,QAAkB;IAC1F,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,IAAI,qBAAqB,CAAC,WAAY,CAAC,CAAC;IACtF,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACzH,OAAO;QACL,WAAW,EAAE,MAAM;QACnB,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,EAAE;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/D,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtD,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACxE,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,OAAO;YAC9B,OAAO,0BAA0B,CAAC,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO;YAChC,MAAM,YAAY,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;YACtD,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBACzF,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAChE,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClC,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAClD,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjD,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC1C,CAAC;gBACD,OAAO,EAAE,GAAG,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YAC7C,CAAC,CAAC,CAAC,CAAC;YACJ,OAAO,0BAA0B,CAAC;gBAChC,GAAG,OAAO;gBACV,WAAW;gBACX,MAAM,EAAE,WAAW;gBACnB,YAAY;gBACZ,WAAW,EAAE,MAAM;gBACnB,IAAI,EAAE,gCAAgC;gBACtC,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC;gBACpC,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,mBAAmB,YAAY,EAAE,CAAC;aACrE,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE;YAC/C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,OAA4C;IAC7F,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,eAAe,GAAG,6BAA6B,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC/E,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO;QACL,KAAK,CAAC,iBAAiB,CAAC,KAAK;YAC3B,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,mBAAmB,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAC5D,IAAI,KAAK,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,kBAAkB,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,CAAC,kBAAkB,4BAA4B,kBAAkB,gBAAgB,CAAC,CAAC;YAC5I,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACvF,CAAC;YACD,MAAM,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,KAAK;YAC1B,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,mBAAmB,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,KAAK;YAC5B,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,mBAAmB,CAAC,KAAK,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAAqC;IACpF,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,sBAAsB,CAAC;IACpE,0BAA0B,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC1D,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9C,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,mBAAmB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IACnI,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,MAAM,OAAO,GAAyB;QACpC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,aAAa,EAAE,SAAS,CAAC,MAAM;QAC/B,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC;IACF,MAAM,QAAQ,GAA0B;QACtC,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,iBAAiB;QAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACxD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU,EAAE;QACpC,UAAU,EAAE;YACV,WAAW,EAAE,wBAAwB;YACrC,cAAc,EAAE,0BAA0B;YAC1C,SAAS,EAAE,YAAY;YACvB,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,IAAI,IAAI,4BAA4B,CAAC;YAC1E,OAAO,EAAE,eAAe,EAAE;SAC3B;QACD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,SAAS;QACT,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,OAAO;QACP,SAAS,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;KAC5E,CAAC;IAEF,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACtD,0BAA0B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,WAAmB,EAAE,YAAY,GAAG,sBAAsB;IAC1G,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,0BAA0B,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAClD,0BAA0B,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA0B,CAAC;IAC3D,IAAI,QAAQ,CAAC,YAAY,KAAK,iBAAiB,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC,CAAC;IAC3H,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC1C,MAAM,mBAAmB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,QAAQ,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,mBAAmB;QAChC,YAAY;QACZ,cAAc;QACd,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3F,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,WAAW,CAAC,mBAAmB,CAAC,aAAa,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7H,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,UAAmC;IACzF,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAChE,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAA0B;QACtC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC;QACtC,IAAI;QACJ,SAAS,EAAE,QAAQ,CAAC,IAAI;QACxB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KACzD,CAAC;IACF,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3B,QAAQ,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC;IAChD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,WAAmB,EAAE,QAA+B;IACrF,0BAA0B,CAAC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAC3D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,gDAAgD,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,IAAI,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA0B,EAAE,QAA4B;IAClF,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,IAAI,WAAW,4BAA4B,QAAQ,gBAAgB,CAAC,CAAC;IACrH,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAc,EAAE,QAAgB;IAC3D,IAAI,6BAA6B,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,yBAAyB,mBAAmB,CAAC,MAAM,CAAC,4BAA4B,mBAAmB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACjJ,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAe;IACpD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY,EAAE,WAAmB;IACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;IACjG,CAAC;IACD,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,OAAO,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,SAAS,oCAAoC,CAAC,KAAc;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;WAC5B,qDAAqD,CAAC,IAAI,CAAC,KAAK,CAAC;WACjE,gEAAgE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;WACzC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;WAClC,4LAA4L,CAAC,IAAI,CAAC,IAAI,CAAC;WACvM,iEAAiE,CAAC,IAAI,CAAC,IAAI,CAAC;WAC5E,qFAAqF,CAAC,IAAI,CAAC,IAAI,CAAC;WAChG,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAgB,EAAE,KAAa;IACjE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChH,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,2BAA2B,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;YAC3I,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAC;AACtH,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAkB;IAC9C,OAAO,oBAAoB,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAmC;IAC/D,OAAO;QACL,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa;IAC3C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,4BAA4B,CAAC;AACrG,CAAC;AAED,SAAS,6BAA6B,CAAC,QAA+B;IACpE,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,EAAE,WAAW,KAAK,wBAAwB,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACjJ,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,KAAK,0BAA0B,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;IAC5C,MAAM,eAAe,GAAG,eAAe,EAAE,CAAC;IAC1C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,eAAe,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,eAAe,CAAC,IAAI,EAAE,CAAC;QAChJ,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1J,MAAM,IAAI,KAAK,CAAC,gHAAgH,CAAC,CAAC;IACpI,CAAC;IACD,MAAM,eAAe,GAAyB;QAC5C,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,GAAG,CAAC,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,aAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;QACxC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC/F,CAAC;IACD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChF,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK;SACT,OAAO,CAAC,6BAA6B,EAAE,sBAAsB,CAAC;SAC9D,OAAO,CAAC,6CAA6C,EAAE,oBAAoB,CAAC;SAC5E,OAAO,CAAC,kEAAkE,EAAE,oBAAoB,CAAC;SACjG,OAAO,CAAC,sFAAsF,EAAE,oBAAoB,CAAC;SACrH,OAAO,CAAC,yIAAyI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SACzL,OAAO,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mGAAmG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAChJ,OAAO,aAAa,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC;AACnE,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,gDAAgD,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK;SACT,OAAO,CAAC,uCAAuC,EAAE,WAAW,CAAC;SAC7D,OAAO,CAAC,4BAA4B,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,iBAAiB,CAAI,KAAoB,EAAE,OAAe;IACjE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACzF,OAAO,SAAS,IAAI,UAAU,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@broccolo1d/playwright",
|
|
3
|
-
"version": "0.2.
|
|
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": "
|
|
53
|
+
"@broccolo1d/wallet-browser": "workspace:^"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@playwright/test": "1.59.1",
|