Files
rea/src/contracts/mobileApplicationGraphExamples.ts
T
Ace 90457af181 fix(contracts): complete canonical mobile graph inventory examples (#4026)
* fix(contracts): complete canonical mobile graph inventory examples

* test(contracts): place canonical graph CLI regression in acceptance

* refactor(contracts): reuse artifact identity owners in mobile examples
2026-10-17 00:15:58 +08:00

155 lines
3.9 KiB
TypeScript

import { createEvidence } from "../domain/evidence.js";
import {
artifactInventoryResultSchema,
type ArtifactNode,
type ArtifactOccurrence,
} from "../domain/artifactGraph.js";
import {
artifactGraphDigest,
artifactIdForContent,
artifactManifestId,
occurrenceIdForLocation,
} from "../domain/artifactIdentity.js";
const inventory = (
format: "apk" | "ipa" | "directory" | "hap",
digit: string,
) => {
const sha = digit.repeat(64);
const artifactId = artifactIdForContent(sha);
const occurrenceId = occurrenceIdForLocation({
rootArtifactId: artifactId,
logicalPath: ".",
entryKind: "file",
});
const nodes: ArtifactNode[] = [
{
artifact_id: artifactId,
format: format === "directory" ? "directory" : "zip",
sha256: sha,
size: 1,
media_type: null,
architecture: null,
content_state: "materialized",
limitations: [],
},
];
const occurrences: ArtifactOccurrence[] = [
{
occurrence_id: occurrenceId,
artifact_id: artifactId,
parent_occurrence_id: null,
logical_path: ".",
entry_kind: "file",
artifact_kind: "resource",
artifact_format: format,
declared_size: 1,
compressed_size: null,
executable: false,
encrypted: false,
hash_status: "verified",
source_location: null,
limitations: [],
},
];
const graphSha256 = artifactGraphDigest({
nodes,
occurrences,
edges: [],
contradictions: [],
});
return artifactInventoryResultSchema.parse({
manifest: {
manifest_id: artifactManifestId(artifactId, graphSha256),
root_artifact_id: artifactId,
root_sha256: sha,
root_format: format,
graph_sha256: graphSha256,
node_count: nodes.length,
occurrence_count: occurrences.length,
edge_count: 0,
},
nodes,
occurrences,
edges: [],
provenance: [],
integrity_contradictions: [],
coverage: { scope: "root", status: "complete" },
limitations: [],
});
};
const provider = {
id: "rea-artifact-graph",
name: "REA safe artifact graph provider",
version: "1",
} as const;
/** Catalog example for Android application inventory projection. */
export const ANDROID_APPLICATION_GRAPH_EXAMPLE = {
inventory_evidence: [
createEvidence(
{ path: "Fixture.apk", sha256: "a".repeat(64), format: "apk" },
provider,
{
operation: "inventory_artifact",
parameters: {},
result: inventory("apk", "a"),
confidence: "observed",
authority: "shipped-artifact",
},
),
],
};
/** Catalog example for Apple application inventory projection. */
export const APPLE_APPLICATION_GRAPH_EXAMPLE = {
inventory_evidence: [
createEvidence(
{ path: "Fixture.ipa", sha256: "b".repeat(64), format: "ipa" },
provider,
{
operation: "inventory_artifact",
parameters: {},
result: inventory("ipa", "b"),
confidence: "observed",
authority: "shipped-artifact",
},
),
],
};
/** Catalog example for a macOS application bundle inventoried as a directory. */
export const MACOS_APPLICATION_GRAPH_EXAMPLE = {
inventory_evidence: [
createEvidence(
{ path: "Fixture.app", sha256: "c".repeat(64), format: "directory" },
provider,
{
operation: "inventory_artifact",
parameters: {},
result: inventory("directory", "c"),
confidence: "observed",
authority: "shipped-artifact",
},
),
],
};
/** Catalog example for HarmonyOS application inventory projection. */
export const HARMONY_APPLICATION_GRAPH_EXAMPLE = {
inventory_evidence: [
createEvidence(
{ path: "Fixture.hap", sha256: "d".repeat(64), format: "hap" },
provider,
{
operation: "inventory_artifact",
parameters: {},
result: inventory("hap", "d"),
confidence: "observed",
authority: "shipped-artifact",
},
),
],
};