@shapeshift-labs/frontier-runtime-proof 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 ShapeShift Labs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,68 @@
1
+ # @shapeshift-labs/frontier-runtime-proof
2
+
3
+ Runtime-neutral proof capsule, telemetry, and admission primitives for Frontier merge and review evidence.
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.
6
+
7
+ ## Install
8
+
9
+ ```sh
10
+ npm install @shapeshift-labs/frontier-runtime-proof
11
+ ```
12
+
13
+ ## Model
14
+
15
+ A runtime proof capsule is a normalized record around a runtime check:
16
+
17
+ - `isolated-fixture`: a micro-slice fixture for a component, HTML/CSS fragment, or behavior boundary.
18
+ - `app-shell-fixture`: a route/app shell with dependencies stubbed or fixture-backed.
19
+ - `full-app-replay`: a real app replay under declared state and environment conditions.
20
+
21
+ `environment-blocked` is intentionally a blocked mode, not a pass. Login walls, missing secrets, unavailable services, and fixture setup failures should fail closed.
22
+
23
+ ## API
24
+
25
+ ```js
26
+ import {
27
+ runtimeEvidenceMetadataFromProof,
28
+ validateRuntimeProofEvidence
29
+ } from '@shapeshift-labs/frontier-runtime-proof';
30
+
31
+ const proof = {
32
+ runtimeProofCapsule: {
33
+ mode: 'isolated-fixture',
34
+ status: 'passed',
35
+ command: 'playwright test runtime-proof.spec.ts',
36
+ probeId: 'html:event-handler-runtime-boundary:onclick',
37
+ evidenceHash: 'runtime-evidence-hash',
38
+ signals: ['html-event-handler-runtime'],
39
+ browser: { name: 'chromium', version: 'stable' },
40
+ viewport: { width: 390, height: 844, deviceScaleFactor: 2 },
41
+ telemetry: {
42
+ hash: 'telemetry-hash',
43
+ domSnapshotHash: 'dom-hash',
44
+ computedStyleHash: 'style-hash',
45
+ layoutSnapshotHash: 'layout-hash',
46
+ eventTraceHash: 'events-hash',
47
+ cumulativeLayoutShift: 0
48
+ }
49
+ }
50
+ };
51
+
52
+ const metadata = runtimeEvidenceMetadataFromProof(proof, {
53
+ requiredSignals: ['html-event-handler-runtime'],
54
+ requireRuntimeProofCapsule: true,
55
+ requireTelemetryHash: true,
56
+ maxCumulativeLayoutShift: 0.01
57
+ });
58
+
59
+ const validation = validateRuntimeProofEvidence(proof, {
60
+ requiredSignals: ['html-event-handler-runtime']
61
+ });
62
+ ```
63
+
64
+ The return value is machine-checkable. Missing commands, probes, evidence hashes, required signals, telemetry hashes, failing statuses, blocked environments, and excessive cumulative layout shift all produce explicit reason codes.
65
+
66
+ ## Boundary
67
+
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.
@@ -0,0 +1,47 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { performance } from 'node:perf_hooks';
4
+ import { validateRuntimeProofEvidence } from '../dist/index.js';
5
+
6
+ const outIndex = process.argv.indexOf('--out');
7
+ const out = outIndex >= 0 ? process.argv[outIndex + 1] : '';
8
+ const casesIndex = process.argv.indexOf('--cases');
9
+ const caseCount = casesIndex >= 0 ? Number(process.argv[casesIndex + 1]) : 5000;
10
+ const started = performance.now();
11
+ let passed = 0;
12
+
13
+ for (let index = 0; index < caseCount; index++) {
14
+ const result = validateRuntimeProofEvidence({
15
+ runtimeProofCapsule: {
16
+ mode: index % 3 === 0 ? 'isolated-fixture' : index % 3 === 1 ? 'app-shell-fixture' : 'full-app-replay',
17
+ command: `proof-${index}`,
18
+ probeId: `probe-${index}`,
19
+ evidenceHash: `evidence-${index}`,
20
+ signals: ['html-event-handler-runtime'],
21
+ telemetry: { hash: `telemetry-${index}`, cumulativeLayoutShift: 0 }
22
+ }
23
+ }, {
24
+ requiredSignals: ['html-event-handler-runtime'],
25
+ requireRuntimeProofCapsule: true,
26
+ requireTelemetryHash: true
27
+ });
28
+ if (result.ok) passed += 1;
29
+ }
30
+
31
+ const elapsedMs = performance.now() - started;
32
+ const result = {
33
+ ok: passed === caseCount,
34
+ package: '@shapeshift-labs/frontier-runtime-proof',
35
+ scenario: `runtime-proof-validate-${caseCount}`,
36
+ elapsedMs,
37
+ caseCount,
38
+ passed
39
+ };
40
+
41
+ if (out) {
42
+ const outPath = path.resolve(out);
43
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
44
+ fs.writeFileSync(outPath, JSON.stringify(result, null, 2) + '\n');
45
+ }
46
+
47
+ console.log(JSON.stringify(result, null, 2));
@@ -0,0 +1,150 @@
1
+ export declare const FRONTIER_RUNTIME_PROOF_CAPSULE_KIND = "frontier.runtime-proof.capsule";
2
+ export declare const FRONTIER_RUNTIME_PROOF_CAPSULE_VERSION = 1;
3
+ export declare const FRONTIER_RUNTIME_PROOF_EVIDENCE_KIND = "frontier.runtime-proof.evidence";
4
+ export declare const FRONTIER_RUNTIME_PROOF_EVIDENCE_VERSION = 1;
5
+ export declare const FRONTIER_RUNTIME_PROOF_MODES: readonly ["isolated-fixture", "app-shell-fixture", "full-app-replay"];
6
+ export declare const FRONTIER_RUNTIME_PROOF_BLOCKED_MODES: readonly ["environment-blocked"];
7
+ export type FrontierRuntimeProofMode = typeof FRONTIER_RUNTIME_PROOF_MODES[number];
8
+ export type FrontierRuntimeProofBlockedMode = typeof FRONTIER_RUNTIME_PROOF_BLOCKED_MODES[number];
9
+ export type FrontierRuntimeProofStatus = 'passed' | 'failed' | 'blocked' | 'skipped' | string;
10
+ export type FrontierRuntimeProofReasonCode = 'runtime-proof-capsule-mode-missing' | 'runtime-proof-capsule-mode-invalid' | 'runtime-proof-capsule-not-passed' | 'runtime-proof-environment-blocked' | 'runtime-proof-command-missing' | 'runtime-proof-probe-missing' | 'runtime-proof-evidence-hash-missing' | 'runtime-proof-required-signal-missing' | 'runtime-proof-capsule-missing' | 'runtime-proof-telemetry-hash-missing' | 'runtime-proof-cumulative-layout-shift-exceeded';
11
+ export interface FrontierRuntimeProofViewport {
12
+ width?: number;
13
+ height?: number;
14
+ deviceScaleFactor?: number;
15
+ colorScheme?: string;
16
+ reducedMotion?: string;
17
+ }
18
+ export interface FrontierRuntimeProofCapsuleInput {
19
+ kind?: string;
20
+ version?: number;
21
+ mode?: FrontierRuntimeProofMode | FrontierRuntimeProofBlockedMode | string;
22
+ status?: FrontierRuntimeProofStatus;
23
+ command?: string;
24
+ runtimeCommand?: string;
25
+ probeId?: string;
26
+ runtimeProbeId?: string;
27
+ evidenceHash?: string;
28
+ capsuleHash?: string;
29
+ hash?: string;
30
+ signals?: readonly string[] | Record<string, unknown> | string;
31
+ browser?: {
32
+ name?: string;
33
+ browserName?: string;
34
+ version?: string;
35
+ };
36
+ browserName?: string;
37
+ browserVersion?: string;
38
+ viewport?: FrontierRuntimeProofViewport;
39
+ environment?: {
40
+ hash?: string;
41
+ };
42
+ environmentHash?: string;
43
+ fixture?: {
44
+ hash?: string;
45
+ };
46
+ fixtureHash?: string;
47
+ artifacts?: {
48
+ sourceHash?: string;
49
+ bundleHash?: string;
50
+ cssHash?: string;
51
+ jsHash?: string;
52
+ };
53
+ sourceArtifactHash?: string;
54
+ bundleHash?: string;
55
+ cssArtifactHash?: string;
56
+ jsArtifactHash?: string;
57
+ telemetry?: {
58
+ hash?: string;
59
+ signals?: readonly string[] | Record<string, unknown> | string;
60
+ domSnapshotHash?: string;
61
+ computedStyleHash?: string;
62
+ layoutSnapshotHash?: string;
63
+ eventTraceHash?: string;
64
+ layoutShiftHash?: string;
65
+ screenshotHash?: string;
66
+ cumulativeLayoutShift?: number;
67
+ };
68
+ telemetryHash?: string;
69
+ domSnapshotHash?: string;
70
+ computedStyleHash?: string;
71
+ layoutSnapshotHash?: string;
72
+ eventTraceHash?: string;
73
+ layoutShiftHash?: string;
74
+ screenshotHash?: string;
75
+ cumulativeLayoutShift?: number;
76
+ }
77
+ export interface FrontierRuntimeProofCapsule {
78
+ kind: string;
79
+ version: number;
80
+ valid: true;
81
+ mode: FrontierRuntimeProofMode;
82
+ status: 'passed';
83
+ command?: string;
84
+ probeId?: string;
85
+ evidenceHash?: string;
86
+ signals: string[];
87
+ browserName?: string;
88
+ browserVersion?: string;
89
+ viewport?: FrontierRuntimeProofViewport;
90
+ environmentHash?: string;
91
+ fixtureHash?: string;
92
+ bundleHash?: string;
93
+ cssArtifactHash?: string;
94
+ jsArtifactHash?: string;
95
+ sourceArtifactHash?: string;
96
+ domSnapshotHash?: string;
97
+ computedStyleHash?: string;
98
+ layoutSnapshotHash?: string;
99
+ eventTraceHash?: string;
100
+ layoutShiftHash?: string;
101
+ screenshotHash?: string;
102
+ telemetryHash?: string;
103
+ cumulativeLayoutShift?: number;
104
+ hash: string;
105
+ }
106
+ export interface FrontierRuntimeProofInvalidCapsule {
107
+ valid: false;
108
+ mode?: string;
109
+ status?: string;
110
+ reasonCode: FrontierRuntimeProofReasonCode;
111
+ reason: string;
112
+ }
113
+ export type FrontierRuntimeProofCapsuleResult = FrontierRuntimeProofCapsule | FrontierRuntimeProofInvalidCapsule | undefined;
114
+ export interface FrontierRuntimeEvidenceMetadata {
115
+ kind: typeof FRONTIER_RUNTIME_PROOF_EVIDENCE_KIND;
116
+ version: typeof FRONTIER_RUNTIME_PROOF_EVIDENCE_VERSION;
117
+ command: string;
118
+ probeId: string;
119
+ evidenceHash: string;
120
+ signals: string[];
121
+ requiredSignals: string[];
122
+ capsule?: FrontierRuntimeProofCapsule;
123
+ }
124
+ export interface FrontierRuntimeProofValidationOptions {
125
+ requiredSignals?: readonly string[];
126
+ requireRuntimeProofCapsule?: boolean;
127
+ requireTelemetryHash?: boolean;
128
+ maxCumulativeLayoutShift?: number;
129
+ }
130
+ export type FrontierRuntimeProofValidation = {
131
+ ok: true;
132
+ metadata: FrontierRuntimeEvidenceMetadata;
133
+ } | {
134
+ ok: false;
135
+ reasonCodes: FrontierRuntimeProofReasonCode[];
136
+ capsule?: FrontierRuntimeProofCapsule | FrontierRuntimeProofInvalidCapsule;
137
+ signals: string[];
138
+ requiredSignals: string[];
139
+ };
140
+ type UnknownRecord = Record<string, unknown>;
141
+ export declare function createRuntimeProofCapsule(input: unknown): FrontierRuntimeProofCapsule;
142
+ export declare function normalizeRuntimeProofCapsule(input: unknown): FrontierRuntimeProofCapsuleResult;
143
+ export declare function runtimeProofSignals(input: unknown, capsule?: FrontierRuntimeProofCapsuleResult): string[];
144
+ export declare function runtimeEvidenceMetadataFromProof(input: unknown, options?: FrontierRuntimeProofValidationOptions): FrontierRuntimeEvidenceMetadata | undefined;
145
+ export declare function validateRuntimeProofEvidence(input: unknown, options?: FrontierRuntimeProofValidationOptions): FrontierRuntimeProofValidation;
146
+ export declare function stableRuntimeProofJson(value: unknown): string;
147
+ export declare function hashRuntimeProofValue(value: unknown): string;
148
+ export declare function compactRuntimeProofRecord<T extends UnknownRecord>(record: T): Partial<T>;
149
+ export {};
150
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,261 @@
1
+ export const FRONTIER_RUNTIME_PROOF_CAPSULE_KIND = 'frontier.runtime-proof.capsule';
2
+ export const FRONTIER_RUNTIME_PROOF_CAPSULE_VERSION = 1;
3
+ export const FRONTIER_RUNTIME_PROOF_EVIDENCE_KIND = 'frontier.runtime-proof.evidence';
4
+ export const FRONTIER_RUNTIME_PROOF_EVIDENCE_VERSION = 1;
5
+ export const FRONTIER_RUNTIME_PROOF_MODES = [
6
+ 'isolated-fixture',
7
+ 'app-shell-fixture',
8
+ 'full-app-replay'
9
+ ];
10
+ export const FRONTIER_RUNTIME_PROOF_BLOCKED_MODES = [
11
+ 'environment-blocked'
12
+ ];
13
+ const runtimeProofModes = new Set(FRONTIER_RUNTIME_PROOF_MODES);
14
+ const blockedRuntimeProofModes = new Set(FRONTIER_RUNTIME_PROOF_BLOCKED_MODES);
15
+ export function createRuntimeProofCapsule(input) {
16
+ const capsule = normalizeRuntimeProofCapsule(input);
17
+ if (!capsule || capsule.valid === false) {
18
+ const reason = capsule?.reason ?? 'runtime proof capsule is missing or invalid';
19
+ throw new Error(reason);
20
+ }
21
+ return capsule;
22
+ }
23
+ export function normalizeRuntimeProofCapsule(input) {
24
+ const proof = asRecord(input);
25
+ const capsule = findRuntimeProofCapsule(input);
26
+ if (!capsule)
27
+ return undefined;
28
+ const mode = firstString(capsule.mode, proof?.runtimeProofMode, proof?.fixtureMode);
29
+ if (!mode) {
30
+ return invalidCapsule('runtime-proof-capsule-mode-missing', 'runtime proof capsule mode is missing');
31
+ }
32
+ if (blockedRuntimeProofModes.has(mode)) {
33
+ return invalidCapsule('runtime-proof-environment-blocked', 'runtime proof capsule records a blocked environment', mode);
34
+ }
35
+ if (!runtimeProofModes.has(mode)) {
36
+ return invalidCapsule('runtime-proof-capsule-mode-invalid', `runtime proof capsule mode is not supported: ${mode}`, mode);
37
+ }
38
+ const status = firstString(capsule.status, proof?.runtimeProofStatus, proof?.status);
39
+ if (status && status !== 'passed') {
40
+ return invalidCapsule('runtime-proof-capsule-not-passed', `runtime proof capsule status is not passed: ${status}`, mode, status);
41
+ }
42
+ const browser = asRecord(capsule.browser);
43
+ const environment = asRecord(capsule.environment);
44
+ const fixture = asRecord(capsule.fixture);
45
+ const artifacts = asRecord(capsule.artifacts);
46
+ const telemetry = asRecord(capsule.telemetry);
47
+ const normalized = compactRecord({
48
+ kind: firstString(capsule.kind) ?? FRONTIER_RUNTIME_PROOF_CAPSULE_KIND,
49
+ version: firstNumber(capsule.version) ?? FRONTIER_RUNTIME_PROOF_CAPSULE_VERSION,
50
+ valid: true,
51
+ mode: mode,
52
+ status: 'passed',
53
+ command: firstString(capsule.command, capsule.runtimeCommand, proof?.runtimeCommand, proof?.command),
54
+ probeId: firstString(capsule.probeId, capsule.runtimeProbeId, proof?.runtimeProbeId, proof?.probeId),
55
+ evidenceHash: firstString(capsule.evidenceHash, asRecord(capsule.evidence)?.hash, asRecord(capsule.evidence)?.evidenceHash, capsule.hash),
56
+ signals: uniqueStrings([
57
+ ...signalsFromValue(capsule.signals),
58
+ ...signalsFromValue(telemetry?.signals)
59
+ ]),
60
+ browserName: firstString(capsule.browserName, browser?.name, browser?.browserName, proof?.browserName),
61
+ browserVersion: firstString(capsule.browserVersion, browser?.version, proof?.browserVersion),
62
+ viewport: normalizeViewport(firstObject(capsule.viewport, proof?.viewport)),
63
+ environmentHash: firstString(capsule.environmentHash, environment?.hash),
64
+ fixtureHash: firstString(capsule.fixtureHash, fixture?.hash),
65
+ bundleHash: firstString(capsule.bundleHash, artifacts?.bundleHash),
66
+ cssArtifactHash: firstString(capsule.cssArtifactHash, artifacts?.cssHash),
67
+ jsArtifactHash: firstString(capsule.jsArtifactHash, artifacts?.jsHash),
68
+ sourceArtifactHash: firstString(capsule.sourceArtifactHash, artifacts?.sourceHash),
69
+ domSnapshotHash: firstString(capsule.domSnapshotHash, telemetry?.domSnapshotHash),
70
+ computedStyleHash: firstString(capsule.computedStyleHash, telemetry?.computedStyleHash),
71
+ layoutSnapshotHash: firstString(capsule.layoutSnapshotHash, telemetry?.layoutSnapshotHash),
72
+ eventTraceHash: firstString(capsule.eventTraceHash, telemetry?.eventTraceHash),
73
+ layoutShiftHash: firstString(capsule.layoutShiftHash, telemetry?.layoutShiftHash),
74
+ screenshotHash: firstString(capsule.screenshotHash, telemetry?.screenshotHash),
75
+ telemetryHash: firstString(capsule.telemetryHash, telemetry?.hash),
76
+ cumulativeLayoutShift: firstNumber(capsule.cumulativeLayoutShift, telemetry?.cumulativeLayoutShift)
77
+ });
78
+ return {
79
+ ...normalized,
80
+ hash: firstString(capsule.capsuleHash, proof?.runtimeProofCapsuleHash) ??
81
+ hashRuntimeProofValue({ ...normalized, fingerprintKind: 'frontier.runtime-proof.capsule.fingerprint.v1' })
82
+ };
83
+ }
84
+ export function runtimeProofSignals(input, capsule = normalizeRuntimeProofCapsule(input)) {
85
+ const proof = asRecord(input);
86
+ const evidence = asRecord(proof?.evidence);
87
+ const runtimeEvidence = asRecord(proof?.runtimeEvidence);
88
+ const browserEvidence = asRecord(proof?.browserEvidence);
89
+ const normalizedCapsule = capsule && capsule.valid === true ? capsule : undefined;
90
+ return uniqueStrings([
91
+ ...signalsFromValue(proof?.runtimeSignals),
92
+ ...signalsFromValue(proof?.browserSignals),
93
+ ...signalsFromValue(proof?.evidenceSignals),
94
+ ...signalsFromValue(proof?.probeSignals),
95
+ ...signalsFromValue(evidence?.signals),
96
+ ...signalsFromValue(runtimeEvidence?.signals),
97
+ ...signalsFromValue(browserEvidence?.signals),
98
+ ...(normalizedCapsule?.signals ?? [])
99
+ ]);
100
+ }
101
+ export function runtimeEvidenceMetadataFromProof(input, options = {}) {
102
+ const validation = validateRuntimeProofEvidence(input, options);
103
+ return validation.ok ? validation.metadata : undefined;
104
+ }
105
+ export function validateRuntimeProofEvidence(input, options = {}) {
106
+ const proof = asRecord(input);
107
+ const evidence = asRecord(proof?.evidence);
108
+ const runtimeEvidence = asRecord(proof?.runtimeEvidence);
109
+ const browserEvidence = asRecord(proof?.browserEvidence);
110
+ const capsule = normalizeRuntimeProofCapsule(input);
111
+ const signals = runtimeProofSignals(input, capsule);
112
+ const requiredSignals = uniqueStrings(options.requiredSignals ?? []);
113
+ const reasonCodes = [];
114
+ if (capsule?.valid === false) {
115
+ reasonCodes.push(capsule.reasonCode);
116
+ }
117
+ const normalizedCapsule = capsule && capsule.valid === true ? capsule : undefined;
118
+ const command = firstString(proof?.runtimeCommand, proof?.browserCommand, proof?.command, proof?.commandId, proof?.probeCommand, evidence?.command, runtimeEvidence?.command, browserEvidence?.command, normalizedCapsule?.command);
119
+ const probeId = firstString(proof?.runtimeProbeId, proof?.browserProbeId, proof?.probeId, asRecord(proof?.probe)?.id, evidence?.probeId, runtimeEvidence?.probeId, browserEvidence?.probeId, normalizedCapsule?.probeId);
120
+ const evidenceHash = firstString(proof?.runtimeEvidenceHash, proof?.browserEvidenceHash, proof?.evidenceHash, proof?.domEvidenceHash, proof?.renderEvidenceHash, proof?.hydrationEvidenceHash, proof?.resourceEvidenceHash, evidence?.hash, evidence?.evidenceHash, runtimeEvidence?.hash, runtimeEvidence?.evidenceHash, browserEvidence?.hash, browserEvidence?.evidenceHash, normalizedCapsule?.evidenceHash);
121
+ if (!command)
122
+ reasonCodes.push('runtime-proof-command-missing');
123
+ if (!probeId)
124
+ reasonCodes.push('runtime-proof-probe-missing');
125
+ if (!evidenceHash)
126
+ reasonCodes.push('runtime-proof-evidence-hash-missing');
127
+ if (options.requireRuntimeProofCapsule && !normalizedCapsule)
128
+ reasonCodes.push('runtime-proof-capsule-missing');
129
+ if (options.requireTelemetryHash && !normalizedCapsule?.telemetryHash)
130
+ reasonCodes.push('runtime-proof-telemetry-hash-missing');
131
+ if (typeof options.maxCumulativeLayoutShift === 'number' &&
132
+ typeof normalizedCapsule?.cumulativeLayoutShift === 'number' &&
133
+ normalizedCapsule.cumulativeLayoutShift > options.maxCumulativeLayoutShift) {
134
+ reasonCodes.push('runtime-proof-cumulative-layout-shift-exceeded');
135
+ }
136
+ if (requiredSignals.length > 0 && !requiredSignals.some((signal) => signals.includes(signal))) {
137
+ reasonCodes.push('runtime-proof-required-signal-missing');
138
+ }
139
+ if (reasonCodes.length > 0 || !command || !probeId || !evidenceHash) {
140
+ return {
141
+ ok: false,
142
+ reasonCodes: uniqueStrings(reasonCodes),
143
+ capsule: capsule ?? undefined,
144
+ signals,
145
+ requiredSignals
146
+ };
147
+ }
148
+ return {
149
+ ok: true,
150
+ metadata: compactRecord({
151
+ kind: FRONTIER_RUNTIME_PROOF_EVIDENCE_KIND,
152
+ version: FRONTIER_RUNTIME_PROOF_EVIDENCE_VERSION,
153
+ command,
154
+ probeId,
155
+ evidenceHash,
156
+ signals,
157
+ requiredSignals,
158
+ capsule: normalizedCapsule
159
+ })
160
+ };
161
+ }
162
+ export function stableRuntimeProofJson(value) {
163
+ if (value === null || typeof value !== 'object') {
164
+ const serialized = JSON.stringify(value);
165
+ return serialized === undefined ? 'undefined' : serialized;
166
+ }
167
+ if (Array.isArray(value)) {
168
+ return `[${value.map((item) => stableRuntimeProofJson(item)).join(',')}]`;
169
+ }
170
+ const entries = Object.entries(value)
171
+ .filter(([, item]) => item !== undefined)
172
+ .sort(([left], [right]) => left.localeCompare(right));
173
+ return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${stableRuntimeProofJson(item)}`).join(',')}}`;
174
+ }
175
+ export function hashRuntimeProofValue(value) {
176
+ const serialized = stableRuntimeProofJson(value);
177
+ let hash = 0x811c9dc5;
178
+ for (let index = 0; index < serialized.length; index += 1) {
179
+ hash ^= serialized.charCodeAt(index);
180
+ hash = Math.imul(hash, 0x01000193);
181
+ }
182
+ return `fnv1a32:${(hash >>> 0).toString(16).padStart(8, '0')}`;
183
+ }
184
+ export function compactRuntimeProofRecord(record) {
185
+ return compactRecord(record);
186
+ }
187
+ function findRuntimeProofCapsule(input) {
188
+ const record = asRecord(input);
189
+ if (!record)
190
+ return undefined;
191
+ const runtimeEvidence = asRecord(record.runtimeEvidence);
192
+ const browserEvidence = asRecord(record.browserEvidence);
193
+ const nested = firstObject(record.runtimeProofCapsule, record.proofCapsule, record.fixtureCapsule, runtimeEvidence?.capsule, browserEvidence?.capsule);
194
+ if (nested)
195
+ return nested;
196
+ if (looksLikeRuntimeProofCapsule(record))
197
+ return record;
198
+ return undefined;
199
+ }
200
+ function looksLikeRuntimeProofCapsule(record) {
201
+ return record.mode !== undefined ||
202
+ record.fixtureMode !== undefined ||
203
+ record.browser !== undefined ||
204
+ record.viewport !== undefined ||
205
+ record.telemetry !== undefined ||
206
+ record.artifacts !== undefined ||
207
+ record.capsuleHash !== undefined;
208
+ }
209
+ function invalidCapsule(reasonCode, reason, mode, status) {
210
+ return compactRecord({
211
+ valid: false,
212
+ mode,
213
+ status,
214
+ reasonCode,
215
+ reason
216
+ });
217
+ }
218
+ function normalizeViewport(value) {
219
+ const record = asRecord(value);
220
+ if (!record)
221
+ return undefined;
222
+ return compactRecord({
223
+ width: firstNumber(record.width),
224
+ height: firstNumber(record.height),
225
+ deviceScaleFactor: firstNumber(record.deviceScaleFactor),
226
+ colorScheme: firstString(record.colorScheme),
227
+ reducedMotion: firstString(record.reducedMotion)
228
+ });
229
+ }
230
+ function signalsFromValue(value) {
231
+ if (typeof value === 'string' && value.length > 0)
232
+ return [value];
233
+ if (Array.isArray(value))
234
+ return value.filter((item) => typeof item === 'string' && item.length > 0);
235
+ const record = asRecord(value);
236
+ if (record) {
237
+ return Object.keys(record).filter((key) => record[key] === true || record[key] === 'passed');
238
+ }
239
+ return [];
240
+ }
241
+ function compactRecord(record) {
242
+ return Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
243
+ }
244
+ function uniqueStrings(values) {
245
+ return [...new Set(values.filter((value) => typeof value === 'string' && value.length > 0))];
246
+ }
247
+ function firstObject(...values) {
248
+ return values.map((value) => asRecord(value)).find((value) => value !== undefined);
249
+ }
250
+ function firstString(...values) {
251
+ return values.find((value) => typeof value === 'string' && value.length > 0);
252
+ }
253
+ function firstNumber(...values) {
254
+ return values.find((value) => typeof value === 'number' && Number.isFinite(value));
255
+ }
256
+ function asRecord(value) {
257
+ if (!value || typeof value !== 'object' || Array.isArray(value))
258
+ return undefined;
259
+ return value;
260
+ }
261
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@shapeshift-labs/frontier-runtime-proof",
3
+ "version": "0.1.0",
4
+ "description": "Runtime-neutral proof capsule, telemetry, and admission primitives for Frontier merge and review evidence.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "sideEffects": false,
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+ssh://git@github.com/siliconjungle/-shapeshift-labs-frontier-runtime-proof.git"
11
+ },
12
+ "homepage": "https://github.com/siliconjungle/-shapeshift-labs-frontier-runtime-proof#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/siliconjungle/-shapeshift-labs-frontier-runtime-proof/issues"
15
+ },
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js",
22
+ "default": "./dist/index.js"
23
+ },
24
+ "./package.json": "./package.json"
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "README.md",
29
+ "LICENSE",
30
+ "benchmarks/package-bench.mjs"
31
+ ],
32
+ "engines": {
33
+ "node": ">=18"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "scripts": {
39
+ "build": "node build.mjs",
40
+ "test": "npm run build && npm run typecheck && node test/smoke.mjs && node test/fuzz.mjs --cases 300",
41
+ "prepack": "npm run test",
42
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p test/tsconfig.json --noEmit",
43
+ "fuzz": "npm run build && node test/fuzz.mjs",
44
+ "bench": "npm run build && node benchmarks/package-bench.mjs --out benchmarks/results/frontier-runtime-proof-package-bench-latest.json",
45
+ "pack:dry": "npm pack --dry-run"
46
+ },
47
+ "keywords": [
48
+ "frontier",
49
+ "runtime-proof",
50
+ "evidence",
51
+ "semantic-merge",
52
+ "browser",
53
+ "telemetry",
54
+ "admission"
55
+ ],
56
+ "devDependencies": {
57
+ "@types/node": "^26.0.0",
58
+ "typescript": "^6.0.3"
59
+ }
60
+ }