@shapeshift-labs/frontier-runtime-proof 0.1.0 → 0.1.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 +27 -1
- package/dist/playwright.d.ts +81 -0
- package/dist/playwright.d.ts.map +1 -0
- package/dist/playwright.js +442 -0
- package/dist/playwright.js.map +1 -0
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Runtime-neutral proof capsule, telemetry, and admission primitives for Frontier merge and review evidence.
|
|
4
4
|
|
|
5
|
-
`frontier-runtime-proof` does not launch browsers, run Playwright, read files, inspect Git, or decide whether code is semantically equivalent. It defines the small evidence contract that higher packages can use after a runtime probe has already run: what fixture mode was used, which command/probe produced the evidence, which source-bound signals were observed, and which telemetry artifacts make the proof reviewable.
|
|
5
|
+
The root `frontier-runtime-proof` import does not launch browsers, run Playwright, read files, inspect Git, or decide whether code is semantically equivalent. It defines the small evidence contract that higher packages can use after a runtime probe has already run: what fixture mode was used, which command/probe produced the evidence, which source-bound signals were observed, and which telemetry artifacts make the proof reviewable. The optional `./playwright` subpath can turn an already-owned Playwright `page` into that capsule without adding Playwright to the root dependency graph.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -66,3 +66,29 @@ The return value is machine-checkable. Missing commands, probes, evidence hashes
|
|
|
66
66
|
## Boundary
|
|
67
67
|
|
|
68
68
|
This package owns only the runtime-neutral proof record and admission helpers. Browser execution belongs in adapters such as Playwright harnesses, app-specific test runners, or coordinator packages. Semantic merge packages can depend on this package without importing browser automation or app runtime code.
|
|
69
|
+
|
|
70
|
+
## Optional Playwright Helper
|
|
71
|
+
|
|
72
|
+
The root import stays runtime-neutral. The optional `./playwright` subpath accepts a Playwright-compatible `page` object structurally, so Playwright remains an app/test-runner dependency rather than a root package dependency.
|
|
73
|
+
|
|
74
|
+
```js
|
|
75
|
+
import { capturePlaywrightRuntimeProof } from '@shapeshift-labs/frontier-runtime-proof/playwright';
|
|
76
|
+
|
|
77
|
+
const proof = await capturePlaywrightRuntimeProof(page, {
|
|
78
|
+
mode: 'isolated-fixture',
|
|
79
|
+
command: 'playwright test runtime-proof.spec.ts',
|
|
80
|
+
probeId: 'html-css:runtime-proof:#root',
|
|
81
|
+
signals: ['html-css-browser-runtime'],
|
|
82
|
+
sourcePath: 'src/view.html',
|
|
83
|
+
sourceHash: 'source-hash',
|
|
84
|
+
cssHash: 'css-hash',
|
|
85
|
+
selectors: ['#root'],
|
|
86
|
+
screenshot: true,
|
|
87
|
+
maxCumulativeLayoutShift: 0.01,
|
|
88
|
+
async exercise(page) {
|
|
89
|
+
await page.getByRole('button', { name: 'Save' }).click();
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The helper installs bounded event and layout-shift probes, captures DOM, computed-style, layout, event-trace, optional screenshot, browser, viewport, and telemetry hashes, then returns a normal `runtimeProofCapsule`. If the page cannot be prepared or captured, it returns an `environment-blocked` proof that fails closed.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { type FrontierRuntimeProofCapsule, type FrontierRuntimeProofMode, type FrontierRuntimeProofValidation, type FrontierRuntimeProofViewport } from './index.ts';
|
|
2
|
+
export declare const FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_KIND = "frontier.runtime-proof.playwright-evidence";
|
|
3
|
+
export declare const FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_VERSION = 1;
|
|
4
|
+
export interface FrontierPlaywrightLikePage {
|
|
5
|
+
evaluate<Result, Arg>(pageFunction: (arg: Arg) => Result | Promise<Result>, arg: Arg): Promise<Result>;
|
|
6
|
+
viewportSize?(): {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
} | null;
|
|
10
|
+
screenshot?(options?: Record<string, unknown>): Promise<Uint8Array | string>;
|
|
11
|
+
context?(): {
|
|
12
|
+
browser?(): {
|
|
13
|
+
version?(): string;
|
|
14
|
+
browserType?(): {
|
|
15
|
+
name?(): string;
|
|
16
|
+
};
|
|
17
|
+
} | null;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface FrontierPlaywrightRuntimeProofOptions {
|
|
21
|
+
mode?: FrontierRuntimeProofMode;
|
|
22
|
+
command: string;
|
|
23
|
+
probeId: string;
|
|
24
|
+
signals: readonly string[];
|
|
25
|
+
requiredSignals?: readonly string[];
|
|
26
|
+
sourcePath?: string;
|
|
27
|
+
sourceHash?: string;
|
|
28
|
+
bundleHash?: string;
|
|
29
|
+
cssHash?: string;
|
|
30
|
+
jsHash?: string;
|
|
31
|
+
environmentHash?: string;
|
|
32
|
+
fixtureHash?: string;
|
|
33
|
+
evidenceHash?: string;
|
|
34
|
+
browserName?: string;
|
|
35
|
+
browserVersion?: string;
|
|
36
|
+
viewport?: FrontierRuntimeProofViewport;
|
|
37
|
+
selectors?: readonly string[];
|
|
38
|
+
styleProperties?: readonly string[];
|
|
39
|
+
eventTypes?: readonly string[];
|
|
40
|
+
maxElements?: number;
|
|
41
|
+
maxDepth?: number;
|
|
42
|
+
maxTextLength?: number;
|
|
43
|
+
maxEvents?: number;
|
|
44
|
+
includeText?: boolean;
|
|
45
|
+
screenshot?: boolean | Record<string, unknown>;
|
|
46
|
+
maxCumulativeLayoutShift?: number;
|
|
47
|
+
exercise?: (page: FrontierPlaywrightLikePage) => Promise<void> | void;
|
|
48
|
+
}
|
|
49
|
+
export interface FrontierPlaywrightRuntimeTelemetry {
|
|
50
|
+
environment?: Record<string, unknown>;
|
|
51
|
+
domSnapshot: unknown;
|
|
52
|
+
computedStyleSnapshot: unknown;
|
|
53
|
+
layoutSnapshot: unknown;
|
|
54
|
+
eventTrace: unknown;
|
|
55
|
+
layoutShift: {
|
|
56
|
+
cumulativeLayoutShift: number;
|
|
57
|
+
entries: unknown[];
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export interface FrontierPlaywrightRuntimeProof {
|
|
61
|
+
kind: typeof FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_KIND;
|
|
62
|
+
version: typeof FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_VERSION;
|
|
63
|
+
status: 'passed' | 'blocked';
|
|
64
|
+
mode: FrontierRuntimeProofMode | 'environment-blocked';
|
|
65
|
+
command: string;
|
|
66
|
+
probeId: string;
|
|
67
|
+
signals: string[];
|
|
68
|
+
sourcePath?: string;
|
|
69
|
+
runtimeProofCapsule: FrontierRuntimeProofCapsule | Record<string, unknown>;
|
|
70
|
+
telemetry?: FrontierPlaywrightRuntimeTelemetry;
|
|
71
|
+
validation: FrontierRuntimeProofValidation;
|
|
72
|
+
error?: {
|
|
73
|
+
name?: string;
|
|
74
|
+
message: string;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export declare function capturePlaywrightRuntimeProof(page: FrontierPlaywrightLikePage, options: FrontierPlaywrightRuntimeProofOptions): Promise<FrontierPlaywrightRuntimeProof>;
|
|
78
|
+
export declare function installPlaywrightRuntimeProofTrace(page: FrontierPlaywrightLikePage, options?: Pick<FrontierPlaywrightRuntimeProofOptions, 'eventTypes' | 'maxEvents'>): Promise<void>;
|
|
79
|
+
export declare function capturePlaywrightRuntimeTelemetry(page: FrontierPlaywrightLikePage, options?: Pick<FrontierPlaywrightRuntimeProofOptions, 'selectors' | 'styleProperties' | 'maxElements' | 'maxDepth' | 'maxTextLength' | 'includeText'>): Promise<FrontierPlaywrightRuntimeTelemetry>;
|
|
80
|
+
export declare function createEnvironmentBlockedPlaywrightRuntimeProof(options: Pick<FrontierPlaywrightRuntimeProofOptions, 'command' | 'probeId' | 'signals' | 'sourcePath'>, error: unknown): FrontierPlaywrightRuntimeProof;
|
|
81
|
+
//# sourceMappingURL=playwright.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import { createRuntimeProofCapsule, hashRuntimeProofValue, validateRuntimeProofEvidence } from "./index.js";
|
|
2
|
+
export const FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_KIND = 'frontier.runtime-proof.playwright-evidence';
|
|
3
|
+
export const FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_VERSION = 1;
|
|
4
|
+
const defaultStyleProperties = Object.freeze([
|
|
5
|
+
'display',
|
|
6
|
+
'position',
|
|
7
|
+
'visibility',
|
|
8
|
+
'opacity',
|
|
9
|
+
'z-index',
|
|
10
|
+
'box-sizing',
|
|
11
|
+
'width',
|
|
12
|
+
'height',
|
|
13
|
+
'margin-top',
|
|
14
|
+
'margin-right',
|
|
15
|
+
'margin-bottom',
|
|
16
|
+
'margin-left',
|
|
17
|
+
'padding-top',
|
|
18
|
+
'padding-right',
|
|
19
|
+
'padding-bottom',
|
|
20
|
+
'padding-left',
|
|
21
|
+
'border-top-width',
|
|
22
|
+
'border-right-width',
|
|
23
|
+
'border-bottom-width',
|
|
24
|
+
'border-left-width',
|
|
25
|
+
'color',
|
|
26
|
+
'background-color',
|
|
27
|
+
'font-family',
|
|
28
|
+
'font-size',
|
|
29
|
+
'font-weight',
|
|
30
|
+
'line-height',
|
|
31
|
+
'transform',
|
|
32
|
+
'overflow',
|
|
33
|
+
'pointer-events'
|
|
34
|
+
]);
|
|
35
|
+
const defaultEventTypes = Object.freeze([
|
|
36
|
+
'click',
|
|
37
|
+
'input',
|
|
38
|
+
'change',
|
|
39
|
+
'submit',
|
|
40
|
+
'keydown',
|
|
41
|
+
'keyup',
|
|
42
|
+
'pointerdown',
|
|
43
|
+
'pointerup',
|
|
44
|
+
'focus',
|
|
45
|
+
'blur'
|
|
46
|
+
]);
|
|
47
|
+
export async function capturePlaywrightRuntimeProof(page, options) {
|
|
48
|
+
try {
|
|
49
|
+
await installPlaywrightRuntimeProofTrace(page, options);
|
|
50
|
+
await options.exercise?.(page);
|
|
51
|
+
const telemetry = await capturePlaywrightRuntimeTelemetry(page, options);
|
|
52
|
+
const screenshotHash = await captureScreenshotHash(page, options);
|
|
53
|
+
const browser = browserMetadata(page, options);
|
|
54
|
+
const viewport = viewportMetadata(page, options, telemetry);
|
|
55
|
+
const telemetryHashes = {
|
|
56
|
+
domSnapshotHash: hashRuntimeProofValue(telemetry.domSnapshot),
|
|
57
|
+
computedStyleHash: hashRuntimeProofValue(telemetry.computedStyleSnapshot),
|
|
58
|
+
layoutSnapshotHash: hashRuntimeProofValue(telemetry.layoutSnapshot),
|
|
59
|
+
eventTraceHash: hashRuntimeProofValue(telemetry.eventTrace),
|
|
60
|
+
layoutShiftHash: hashRuntimeProofValue(telemetry.layoutShift),
|
|
61
|
+
screenshotHash,
|
|
62
|
+
cumulativeLayoutShift: telemetry.layoutShift.cumulativeLayoutShift
|
|
63
|
+
};
|
|
64
|
+
const telemetryHash = hashRuntimeProofValue({
|
|
65
|
+
kind: 'frontier.runtime-proof.telemetry.v1',
|
|
66
|
+
...telemetryHashes
|
|
67
|
+
});
|
|
68
|
+
const artifacts = {
|
|
69
|
+
sourceHash: options.sourceHash,
|
|
70
|
+
bundleHash: options.bundleHash,
|
|
71
|
+
cssHash: options.cssHash,
|
|
72
|
+
jsHash: options.jsHash
|
|
73
|
+
};
|
|
74
|
+
const evidenceHash = options.evidenceHash ?? hashRuntimeProofValue({
|
|
75
|
+
kind: FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_KIND,
|
|
76
|
+
version: FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_VERSION,
|
|
77
|
+
mode: options.mode ?? 'isolated-fixture',
|
|
78
|
+
command: options.command,
|
|
79
|
+
probeId: options.probeId,
|
|
80
|
+
signals: uniqueStrings(options.signals),
|
|
81
|
+
sourcePath: options.sourcePath,
|
|
82
|
+
artifacts,
|
|
83
|
+
browser,
|
|
84
|
+
viewport,
|
|
85
|
+
telemetryHash
|
|
86
|
+
});
|
|
87
|
+
const runtimeProofCapsule = createRuntimeProofCapsule({
|
|
88
|
+
mode: options.mode ?? 'isolated-fixture',
|
|
89
|
+
status: 'passed',
|
|
90
|
+
command: options.command,
|
|
91
|
+
probeId: options.probeId,
|
|
92
|
+
evidenceHash,
|
|
93
|
+
signals: uniqueStrings(options.signals),
|
|
94
|
+
browser,
|
|
95
|
+
viewport,
|
|
96
|
+
environmentHash: options.environmentHash,
|
|
97
|
+
fixtureHash: options.fixtureHash,
|
|
98
|
+
artifacts,
|
|
99
|
+
telemetry: {
|
|
100
|
+
hash: telemetryHash,
|
|
101
|
+
...telemetryHashes
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
const proof = {
|
|
105
|
+
kind: FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_KIND,
|
|
106
|
+
version: FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_VERSION,
|
|
107
|
+
status: 'passed',
|
|
108
|
+
mode: runtimeProofCapsule.mode,
|
|
109
|
+
command: options.command,
|
|
110
|
+
probeId: options.probeId,
|
|
111
|
+
signals: runtimeProofCapsule.signals,
|
|
112
|
+
sourcePath: options.sourcePath,
|
|
113
|
+
runtimeProofCapsule,
|
|
114
|
+
telemetry
|
|
115
|
+
};
|
|
116
|
+
return {
|
|
117
|
+
...proof,
|
|
118
|
+
validation: validateRuntimeProofEvidence(proof, validationOptions(options))
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
return createEnvironmentBlockedPlaywrightRuntimeProof(options, error);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export async function installPlaywrightRuntimeProofTrace(page, options = {}) {
|
|
126
|
+
await page.evaluate(installBrowserTrace, {
|
|
127
|
+
traceKind: 'frontier.runtime-proof.playwright.trace.v1',
|
|
128
|
+
eventTypes: uniqueStrings(options.eventTypes ?? defaultEventTypes),
|
|
129
|
+
maxEvents: boundedInteger(options.maxEvents, 200)
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
export async function capturePlaywrightRuntimeTelemetry(page, options = {}) {
|
|
133
|
+
return page.evaluate(captureBrowserTelemetry, {
|
|
134
|
+
captureKind: 'frontier.runtime-proof.playwright.capture.v1',
|
|
135
|
+
selectors: uniqueStrings(options.selectors ?? ['body']),
|
|
136
|
+
styleProperties: uniqueStrings(options.styleProperties ?? defaultStyleProperties),
|
|
137
|
+
maxElements: boundedInteger(options.maxElements, 120),
|
|
138
|
+
maxDepth: boundedInteger(options.maxDepth, 8),
|
|
139
|
+
maxTextLength: boundedInteger(options.maxTextLength, 80),
|
|
140
|
+
includeText: options.includeText === true
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
export function createEnvironmentBlockedPlaywrightRuntimeProof(options, error) {
|
|
144
|
+
const normalizedError = normalizeError(error);
|
|
145
|
+
const evidenceHash = hashRuntimeProofValue({
|
|
146
|
+
kind: 'frontier.runtime-proof.playwright-environment-blocked.v1',
|
|
147
|
+
command: options.command,
|
|
148
|
+
probeId: options.probeId,
|
|
149
|
+
signals: uniqueStrings(options.signals),
|
|
150
|
+
error: normalizedError
|
|
151
|
+
});
|
|
152
|
+
const proof = {
|
|
153
|
+
kind: FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_KIND,
|
|
154
|
+
version: FRONTIER_PLAYWRIGHT_RUNTIME_PROOF_VERSION,
|
|
155
|
+
status: 'blocked',
|
|
156
|
+
mode: 'environment-blocked',
|
|
157
|
+
command: options.command,
|
|
158
|
+
probeId: options.probeId,
|
|
159
|
+
signals: uniqueStrings(options.signals),
|
|
160
|
+
sourcePath: options.sourcePath,
|
|
161
|
+
runtimeProofCapsule: {
|
|
162
|
+
mode: 'environment-blocked',
|
|
163
|
+
status: 'blocked',
|
|
164
|
+
command: options.command,
|
|
165
|
+
probeId: options.probeId,
|
|
166
|
+
evidenceHash,
|
|
167
|
+
signals: uniqueStrings(options.signals)
|
|
168
|
+
},
|
|
169
|
+
error: normalizedError
|
|
170
|
+
};
|
|
171
|
+
return {
|
|
172
|
+
...proof,
|
|
173
|
+
validation: validateRuntimeProofEvidence(proof, {
|
|
174
|
+
requiredSignals: uniqueStrings(options.signals),
|
|
175
|
+
requireRuntimeProofCapsule: true
|
|
176
|
+
})
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
function installBrowserTrace(input) {
|
|
180
|
+
const global = window;
|
|
181
|
+
global.__frontierRuntimeProofEventTrace = [];
|
|
182
|
+
if (!global.__frontierRuntimeProofTraceInstalled) {
|
|
183
|
+
global.__frontierRuntimeProofTraceInstalled = true;
|
|
184
|
+
for (const type of input.eventTypes) {
|
|
185
|
+
window.addEventListener(type, (event) => {
|
|
186
|
+
const trace = global.__frontierRuntimeProofEventTrace ?? [];
|
|
187
|
+
if (trace.length >= input.maxEvents)
|
|
188
|
+
return;
|
|
189
|
+
const target = event.target instanceof Element ? event.target : undefined;
|
|
190
|
+
trace.push(compactBrowserRecord({
|
|
191
|
+
sequence: trace.length,
|
|
192
|
+
type: event.type,
|
|
193
|
+
target: target ? cssPath(target) : undefined,
|
|
194
|
+
defaultPrevented: event.defaultPrevented,
|
|
195
|
+
key: event instanceof KeyboardEvent ? event.key : undefined,
|
|
196
|
+
button: event instanceof MouseEvent ? event.button : undefined,
|
|
197
|
+
valueHash: target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement
|
|
198
|
+
? hashBrowserString(target.value)
|
|
199
|
+
: undefined,
|
|
200
|
+
checked: target instanceof HTMLInputElement && (target.type === 'checkbox' || target.type === 'radio')
|
|
201
|
+
? target.checked
|
|
202
|
+
: undefined
|
|
203
|
+
}));
|
|
204
|
+
}, { capture: true });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
global.__frontierRuntimeProofLayoutShifts = [];
|
|
208
|
+
if (!global.__frontierRuntimeProofLayoutObserverInstalled && 'PerformanceObserver' in window) {
|
|
209
|
+
global.__frontierRuntimeProofLayoutObserverInstalled = true;
|
|
210
|
+
try {
|
|
211
|
+
const observer = new PerformanceObserver((list) => {
|
|
212
|
+
const shifts = global.__frontierRuntimeProofLayoutShifts ?? [];
|
|
213
|
+
for (const entry of list.getEntries()) {
|
|
214
|
+
if (entry.hadRecentInput)
|
|
215
|
+
continue;
|
|
216
|
+
shifts.push({
|
|
217
|
+
value: roundBrowserNumber(entry.value),
|
|
218
|
+
sources: entry.sources?.map((source) => compactBrowserRecord({
|
|
219
|
+
node: source.node instanceof Element ? cssPath(source.node) : undefined,
|
|
220
|
+
previousRect: rectRecord(source.previousRect),
|
|
221
|
+
currentRect: rectRecord(source.currentRect)
|
|
222
|
+
})) ?? []
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
observer.observe({ type: 'layout-shift', buffered: true });
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
global.__frontierRuntimeProofLayoutObserverInstalled = false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function captureBrowserTelemetry(input) {
|
|
234
|
+
const global = window;
|
|
235
|
+
const roots = selectRoots(input);
|
|
236
|
+
const elements = collectElements(roots, input.maxElements);
|
|
237
|
+
const layoutShiftEntries = global.__frontierRuntimeProofLayoutShifts ?? [];
|
|
238
|
+
return {
|
|
239
|
+
environment: compactBrowserRecord({
|
|
240
|
+
url: location.href,
|
|
241
|
+
userAgentHash: hashBrowserString(navigator.userAgent),
|
|
242
|
+
deviceScaleFactor: window.devicePixelRatio,
|
|
243
|
+
viewport: {
|
|
244
|
+
width: window.innerWidth,
|
|
245
|
+
height: window.innerHeight
|
|
246
|
+
},
|
|
247
|
+
colorScheme: window.matchMedia?.('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',
|
|
248
|
+
reducedMotion: window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ? 'reduce' : 'no-preference'
|
|
249
|
+
}),
|
|
250
|
+
domSnapshot: roots.map((root) => snapshotElement(root, input, 0)),
|
|
251
|
+
computedStyleSnapshot: elements.map((element) => computedStyleRecord(element, input.styleProperties)),
|
|
252
|
+
layoutSnapshot: elements.map((element) => layoutRecord(element)),
|
|
253
|
+
eventTrace: global.__frontierRuntimeProofEventTrace ?? [],
|
|
254
|
+
layoutShift: {
|
|
255
|
+
cumulativeLayoutShift: roundBrowserNumber(layoutShiftEntries.reduce((sum, entry) => {
|
|
256
|
+
const value = typeof entry.value === 'number' ? entry.value : 0;
|
|
257
|
+
return sum + value;
|
|
258
|
+
}, 0)),
|
|
259
|
+
entries: layoutShiftEntries
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function selectRoots(input) {
|
|
264
|
+
const roots = [];
|
|
265
|
+
for (const selector of input.selectors) {
|
|
266
|
+
roots.push(...Array.from(document.querySelectorAll(selector)));
|
|
267
|
+
}
|
|
268
|
+
if (roots.length === 0 && document.body)
|
|
269
|
+
roots.push(document.body);
|
|
270
|
+
return roots.slice(0, input.maxElements);
|
|
271
|
+
}
|
|
272
|
+
function collectElements(roots, maxElements) {
|
|
273
|
+
const elements = [];
|
|
274
|
+
const seen = new Set();
|
|
275
|
+
for (const root of roots) {
|
|
276
|
+
if (!seen.has(root)) {
|
|
277
|
+
seen.add(root);
|
|
278
|
+
elements.push(root);
|
|
279
|
+
}
|
|
280
|
+
for (const element of Array.from(root.querySelectorAll('*'))) {
|
|
281
|
+
if (elements.length >= maxElements)
|
|
282
|
+
return elements;
|
|
283
|
+
if (seen.has(element))
|
|
284
|
+
continue;
|
|
285
|
+
seen.add(element);
|
|
286
|
+
elements.push(element);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
return elements.slice(0, maxElements);
|
|
290
|
+
}
|
|
291
|
+
function snapshotElement(element, input, depth) {
|
|
292
|
+
const children = depth >= input.maxDepth
|
|
293
|
+
? []
|
|
294
|
+
: Array.from(element.children).slice(0, input.maxElements).map((child) => snapshotElement(child, input, depth + 1));
|
|
295
|
+
return compactBrowserRecord({
|
|
296
|
+
path: cssPath(element),
|
|
297
|
+
tag: element.tagName.toLowerCase(),
|
|
298
|
+
attributes: Array.from(element.attributes)
|
|
299
|
+
.map((attribute) => [attribute.name, attribute.value])
|
|
300
|
+
.sort(([left], [right]) => left.localeCompare(right)),
|
|
301
|
+
textHash: input.includeText ? hashBrowserString((element.textContent ?? '').trim().slice(0, input.maxTextLength)) : undefined,
|
|
302
|
+
childElementCount: element.childElementCount,
|
|
303
|
+
children
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
function computedStyleRecord(element, properties) {
|
|
307
|
+
const style = getComputedStyle(element);
|
|
308
|
+
return {
|
|
309
|
+
path: cssPath(element),
|
|
310
|
+
properties: Object.fromEntries(properties.map((property) => [property, style.getPropertyValue(property)]))
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
function layoutRecord(element) {
|
|
314
|
+
const rect = element.getBoundingClientRect();
|
|
315
|
+
return compactBrowserRecord({
|
|
316
|
+
path: cssPath(element),
|
|
317
|
+
rect: rectRecord(rect),
|
|
318
|
+
scrollWidth: roundBrowserNumber(element.scrollWidth),
|
|
319
|
+
scrollHeight: roundBrowserNumber(element.scrollHeight),
|
|
320
|
+
clientWidth: roundBrowserNumber(element.clientWidth),
|
|
321
|
+
clientHeight: roundBrowserNumber(element.clientHeight)
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
function rectRecord(rect) {
|
|
325
|
+
if (!rect)
|
|
326
|
+
return undefined;
|
|
327
|
+
return {
|
|
328
|
+
x: roundBrowserNumber(rect.x),
|
|
329
|
+
y: roundBrowserNumber(rect.y),
|
|
330
|
+
width: roundBrowserNumber(rect.width),
|
|
331
|
+
height: roundBrowserNumber(rect.height),
|
|
332
|
+
top: roundBrowserNumber(rect.top),
|
|
333
|
+
right: roundBrowserNumber(rect.right),
|
|
334
|
+
bottom: roundBrowserNumber(rect.bottom),
|
|
335
|
+
left: roundBrowserNumber(rect.left)
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function cssPath(element) {
|
|
339
|
+
if (element.id)
|
|
340
|
+
return `#${cssEscape(element.id)}`;
|
|
341
|
+
const parts = [];
|
|
342
|
+
let current = element;
|
|
343
|
+
while (current && current.nodeType === Node.ELEMENT_NODE && parts.length < 8) {
|
|
344
|
+
const tag = current.tagName.toLowerCase();
|
|
345
|
+
const parent = current.parentElement;
|
|
346
|
+
if (!parent) {
|
|
347
|
+
parts.unshift(tag);
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
350
|
+
const sameTagSiblings = Array.from(parent.children)
|
|
351
|
+
.filter((child) => child instanceof Element && child.tagName === current?.tagName);
|
|
352
|
+
const index = sameTagSiblings.indexOf(current) + 1;
|
|
353
|
+
parts.unshift(sameTagSiblings.length > 1 ? `${tag}:nth-of-type(${index})` : tag);
|
|
354
|
+
current = parent;
|
|
355
|
+
}
|
|
356
|
+
return parts.join(' > ');
|
|
357
|
+
}
|
|
358
|
+
function cssEscape(value) {
|
|
359
|
+
return typeof CSS !== 'undefined' && typeof CSS.escape === 'function'
|
|
360
|
+
? CSS.escape(value)
|
|
361
|
+
: value.replace(/[^a-zA-Z0-9_-]/g, (character) => `\\${character}`);
|
|
362
|
+
}
|
|
363
|
+
function compactBrowserRecord(record) {
|
|
364
|
+
return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
|
|
365
|
+
}
|
|
366
|
+
function hashBrowserString(value) {
|
|
367
|
+
let hash = 0x811c9dc5;
|
|
368
|
+
for (let index = 0; index < value.length; index += 1) {
|
|
369
|
+
hash ^= value.charCodeAt(index);
|
|
370
|
+
hash = Math.imul(hash, 0x01000193);
|
|
371
|
+
}
|
|
372
|
+
return `fnv1a32:${(hash >>> 0).toString(16).padStart(8, '0')}`;
|
|
373
|
+
}
|
|
374
|
+
function roundBrowserNumber(value) {
|
|
375
|
+
return Math.round(value * 1000) / 1000;
|
|
376
|
+
}
|
|
377
|
+
function validationOptions(options) {
|
|
378
|
+
return {
|
|
379
|
+
requiredSignals: uniqueStrings(options.requiredSignals ?? options.signals),
|
|
380
|
+
requireRuntimeProofCapsule: true,
|
|
381
|
+
requireTelemetryHash: true,
|
|
382
|
+
maxCumulativeLayoutShift: options.maxCumulativeLayoutShift
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
function browserMetadata(page, options) {
|
|
386
|
+
const browser = page.context?.().browser?.();
|
|
387
|
+
const name = options.browserName ?? browser?.browserType?.().name?.();
|
|
388
|
+
const version = options.browserVersion ?? browser?.version?.();
|
|
389
|
+
return name || version ? { name, version } : undefined;
|
|
390
|
+
}
|
|
391
|
+
function viewportMetadata(page, options, telemetry) {
|
|
392
|
+
if (options.viewport)
|
|
393
|
+
return options.viewport;
|
|
394
|
+
const viewport = page.viewportSize?.();
|
|
395
|
+
const environment = telemetry.environment;
|
|
396
|
+
const environmentViewport = environment?.viewport;
|
|
397
|
+
const width = viewport?.width ?? numberOrUndefined(environmentViewport?.width);
|
|
398
|
+
const height = viewport?.height ?? numberOrUndefined(environmentViewport?.height);
|
|
399
|
+
const deviceScaleFactor = numberOrUndefined(environment?.deviceScaleFactor);
|
|
400
|
+
const colorScheme = stringOrUndefined(environment?.colorScheme);
|
|
401
|
+
const reducedMotion = stringOrUndefined(environment?.reducedMotion);
|
|
402
|
+
return width || height || deviceScaleFactor || colorScheme || reducedMotion
|
|
403
|
+
? { width, height, deviceScaleFactor, colorScheme, reducedMotion }
|
|
404
|
+
: undefined;
|
|
405
|
+
}
|
|
406
|
+
async function captureScreenshotHash(page, options) {
|
|
407
|
+
if (!options.screenshot || typeof page.screenshot !== 'function')
|
|
408
|
+
return undefined;
|
|
409
|
+
const screenshotOptions = options.screenshot === true ? {} : options.screenshot;
|
|
410
|
+
const screenshot = await page.screenshot(screenshotOptions);
|
|
411
|
+
if (typeof screenshot === 'string')
|
|
412
|
+
return hashRuntimeProofValue({ screenshot });
|
|
413
|
+
return hashBytes(screenshot);
|
|
414
|
+
}
|
|
415
|
+
function hashBytes(bytes) {
|
|
416
|
+
let hash = 0x811c9dc5;
|
|
417
|
+
for (const byte of bytes) {
|
|
418
|
+
hash ^= byte;
|
|
419
|
+
hash = Math.imul(hash, 0x01000193);
|
|
420
|
+
}
|
|
421
|
+
return `fnv1a32:${(hash >>> 0).toString(16).padStart(8, '0')}`;
|
|
422
|
+
}
|
|
423
|
+
function boundedInteger(value, fallback) {
|
|
424
|
+
return typeof value === 'number' && Number.isFinite(value) && value > 0
|
|
425
|
+
? Math.min(Math.floor(value), 10_000)
|
|
426
|
+
: fallback;
|
|
427
|
+
}
|
|
428
|
+
function uniqueStrings(values) {
|
|
429
|
+
return [...new Set(values.filter((value) => typeof value === 'string' && value.length > 0))];
|
|
430
|
+
}
|
|
431
|
+
function normalizeError(error) {
|
|
432
|
+
if (error instanceof Error)
|
|
433
|
+
return { name: error.name, message: error.message };
|
|
434
|
+
return { message: String(error) };
|
|
435
|
+
}
|
|
436
|
+
function numberOrUndefined(value) {
|
|
437
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
438
|
+
}
|
|
439
|
+
function stringOrUndefined(value) {
|
|
440
|
+
return typeof value === 'string' && value.length > 0 ? value : undefined;
|
|
441
|
+
}
|
|
442
|
+
//# sourceMappingURL=playwright.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright.js","sourceRoot":"","sources":["../src/playwright.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shapeshift-labs/frontier-runtime-proof",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Runtime-neutral proof capsule, telemetry, and admission primitives for Frontier merge and review evidence.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -21,6 +21,11 @@
|
|
|
21
21
|
"import": "./dist/index.js",
|
|
22
22
|
"default": "./dist/index.js"
|
|
23
23
|
},
|
|
24
|
+
"./playwright": {
|
|
25
|
+
"types": "./dist/playwright.d.ts",
|
|
26
|
+
"import": "./dist/playwright.js",
|
|
27
|
+
"default": "./dist/playwright.js"
|
|
28
|
+
},
|
|
24
29
|
"./package.json": "./package.json"
|
|
25
30
|
},
|
|
26
31
|
"files": [
|