Rename ProofHintFlags to MediaMetadata

Also, introduce the MediaInterventionFlags class to not send all metadata across, just the info needed for showing the intervention flags.
This commit is contained in:
N-Pex 2025-10-23 10:13:14 +02:00
parent 5fcbcb77fb
commit 1aff02c7d4
13 changed files with 101 additions and 90 deletions

View file

@ -62,21 +62,29 @@ export type Proof = {
ai?: { inferenceResult?: AIInferenceResult };
};
export type ProofHintFlagsGenerator = "unknown" | "camera" | "screenshot" | "ai";
export type ProofHintFlagSource = "c2pa" | "exif" | "metadata";
export type MediaMetadataGenerator = "unknown" | "camera" | "screenshot" | "ai";
export type MediaMetadataPropertySource = "c2pa" | "exif" | "metadata";
export type ProofHintFlagsEdit = {
export type MediaMetadataEdit = {
editor: string;
date?: Date;
}
export type ProofHintFlags = {
export type MediaInterventionFlags = {
creationDate?: Date;
generator?: MediaMetadataGenerator;
modified?: boolean;
containsC2PA?: boolean;
containsEXIF?: boolean;
}
export type MediaMetadata = {
device?: string;
creationDate?: Date;
creationDateSource?: ProofHintFlagSource;
generator?: ProofHintFlagsGenerator;
generatorSource?: ProofHintFlagSource;
edits?: ProofHintFlagsEdit[];
creationDateSource?: MediaMetadataPropertySource;
generator?: MediaMetadataGenerator;
generatorSource?: MediaMetadataPropertySource;
edits?: MediaMetadataEdit[];
containsC2PA?: boolean;
containsEXIF?: boolean;
};
@ -371,10 +379,20 @@ const getFirstWithDataAsDate = (flagValues: FlagValue[], path: FlagMatchRulePath
return undefined;
};
export const extractProofHintFlags = (proof?: Proof): ProofHintFlags | undefined => {
export const mediaMetadataToMediaInterventionFlags = (mediaMetadata: MediaMetadata): MediaInterventionFlags => {
return {
creationDate: mediaMetadata.creationDate,
generator: mediaMetadata.generator,
modified: mediaMetadata.edits && mediaMetadata.edits.length > 0,
containsC2PA: mediaMetadata.containsC2PA,
containsEXIF: mediaMetadata.containsEXIF
}
}
export const extractMediaMetadata = (proof?: Proof): MediaMetadata | undefined => {
if (!proof) return undefined;
let edits: ProofHintFlagsEdit[] | undefined = undefined;
let edits: MediaMetadataEdit[] | undefined = undefined;
let valid = false;
try {
@ -387,7 +405,7 @@ export const extractProofHintFlags = (proof?: Proof): ProofHintFlags | undefined
let source: string | undefined = undefined;
let dateCreated: Date | undefined = undefined;
let dateCreatedSource: ProofHintFlagSource | undefined = undefined;
let dateCreatedSource: MediaMetadataPropertySource | undefined = undefined;
source = getFirstWithData(pathsC2PASource(), rootMatchPath);
if (!source) {
@ -405,8 +423,8 @@ export const extractProofHintFlags = (proof?: Proof): ProofHintFlags | undefined
}
let generator: ProofHintFlagsGenerator = "unknown";
let generatorSource: ProofHintFlagSource | undefined = undefined;
let generator: MediaMetadataGenerator = "unknown";
let generatorSource: MediaMetadataPropertySource | undefined = undefined;
let digitalSourceType = extractFlagValues("integrity/c2pa/manifest_info/manifests[]/assertions[label=c2pa.actions|c2pa.actions.v2]/data/actions[action=c2pa.created]/digitalSourceType", rootMatchPath)?.at(0)?.value as string;
if ([C2PASourceTypeScreenCapture].includes(digitalSourceType)) {
@ -460,7 +478,7 @@ export const extractProofHintFlags = (proof?: Proof): ProofHintFlags | undefined
return undefined;
}
const flags: ProofHintFlags = {
const flags: MediaMetadata = {
device: source,
creationDate: dateCreated,
creationDateSource: dateCreatedSource,