mirror of
https://github.com/morluto/rea
synced 2026-10-26 14:25:49 -04:00
ba3869c597
* refactor(domain): consolidate canonical ordering and digest helpers Single owner for code-point ordering (domain/canonicalOrdering.ts) and canonical JSON digests (domain/comparisonSemantics.ts). Delete all local compareCodePoints/compareText/digestCanonical duplicates and migrate every importer. No re-export shims. * fix(ci): allow slower real browser startup
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import { canonicalDigest } from "../domain/comparisonSemantics.js";
|
|
import type { ProviderIdentity } from "./AnalysisProvider.js";
|
|
import type { BrowserScenario } from "../domain/browserScenario.js";
|
|
import type { BrowserScenarioCapture } from "../domain/browserScenarioCapture.js";
|
|
import { sanitizeBrowserUrl } from "../domain/browserObservation.js";
|
|
import {
|
|
createEvidence,
|
|
type Evidence,
|
|
type EvidenceObservation,
|
|
} from "../domain/evidence.js";
|
|
import { jsonValueSchema } from "../domain/jsonValue.js";
|
|
|
|
const browserScenarioParameters = (
|
|
scenario: BrowserScenario,
|
|
): EvidenceObservation["parameters"] => ({
|
|
scenario_sha256: canonicalDigest(scenario, "Browser scenario"),
|
|
browser_mode: scenario.browser.mode,
|
|
...(scenario.browser.mode === "launch"
|
|
? { browser_headless: scenario.browser.headless }
|
|
: {}),
|
|
start_url: sanitizeBrowserUrl(scenario.start_url.url),
|
|
environment: scenario.environment,
|
|
actions: scenario.actions.map(({ step_id, action }) => ({
|
|
step_id,
|
|
action,
|
|
})),
|
|
action_timeouts_ms: scenario.actions.map((item) =>
|
|
"timeout_ms" in item ? (item.timeout_ms ?? null) : null,
|
|
),
|
|
secret_declarations: scenario.secrets.map(
|
|
({ secret_id, environment_variable }) => ({
|
|
secret_id,
|
|
environment_variable,
|
|
}),
|
|
),
|
|
capture: scenario.capture,
|
|
});
|
|
|
|
/** Create Evidence without retaining resolved scenario secret values. */
|
|
export const createBrowserScenarioEvidence = (
|
|
scenario: BrowserScenario,
|
|
capture: BrowserScenarioCapture,
|
|
provider: ProviderIdentity,
|
|
): Evidence =>
|
|
createEvidence(undefined, provider, {
|
|
predicateType: "rea.browser-scenario-capture",
|
|
operation: "capture_browser_scenario",
|
|
parameters: browserScenarioParameters(scenario),
|
|
result: jsonValueSchema.parse(capture),
|
|
confidence: "observed",
|
|
authority: "controlled-replay",
|
|
environment: {
|
|
id: `${capture.browser.product}@${capture.browser.version}`,
|
|
platform: "unknown",
|
|
architecture: "unknown",
|
|
isolation:
|
|
capture.browser.process_ownership === "provider-owned"
|
|
? "process"
|
|
: "none",
|
|
},
|
|
limitations: [
|
|
...capture.limitations,
|
|
"Browser host platform and architecture were not observed.",
|
|
],
|
|
});
|