Start on intervention display

This commit is contained in:
N-Pex 2025-09-09 10:56:15 +02:00
parent 46479d4c37
commit 27b27876c0
12 changed files with 268 additions and 99 deletions

View file

@ -59,14 +59,22 @@ export type Proof = {
ai?: { inferenceResult?: AIInferenceResult };
};
export type ProofHintFlagsGenerator = "unknown" | "camera" | "screenshot" | "ai";
export type ProofHintFlagsGeneratorSource = "c2pa" | "exif" | "metadata";
export type ProofHintFlagsEditor = "unknown" | "manual" | "ai";
export type ProofHintFlagsEdit = {
editor: ProofHintFlagsEditor;
date?: Date;
}
export type ProofHintFlags = {
valid: boolean;
source?: string;
device?: string;
creationDate?: Date;
aiGenerated?: boolean;
aiEdited?: boolean;
screenshot?: boolean;
camera?: boolean;
generator?: ProofHintFlagsGenerator;
generatorSource?: ProofHintFlagsGeneratorSource;
edits?: ProofHintFlagsEdit[];
};
type FlagMatchRule = {
@ -86,7 +94,7 @@ type FlagMatchInfo = {
re: string;
};
const ruleScreenshot = (): FlagMatchRule[] => {
const ruleScreenshotC2PA = (): FlagMatchRule[] => {
return [
{
field:
@ -97,6 +105,17 @@ const ruleScreenshot = (): FlagMatchRule[] => {
];
};
const ruleScreenshotMeta = (): FlagMatchRule[] => {
return [
{
field:
"name",
match: ["screenshot"],
description: "Screen capture",
},
];
};
const ruleCamera = (): FlagMatchRule[] => {
return [
{
@ -238,7 +257,7 @@ const extractFlagValues = (flagPath: string, file: any): FlagMatchRuleValue[] =>
export const extractProofHintFlags = (proof?: Proof): ProofHintFlags | undefined => {
if (!proof) return undefined;
let aiEdited = false;
let edits: ProofHintFlagsEdit[] | undefined = undefined;
let valid = false;
try {
@ -264,14 +283,25 @@ export const extractProofHintFlags = (proof?: Proof): ProofHintFlags | undefined
}
console.log("DATE CREATED", date);
let generator: ProofHintFlagsGenerator = matchFlag(ruleAiGenerated(), proof).result ? "ai" : matchFlag(ruleScreenshotC2PA(), proof).result ? "screenshot" : matchFlag(ruleCamera(), proof).result ? "camera" : "unknown";
let generatorSource: ProofHintFlagsGeneratorSource | undefined = undefined;
if (generator !== "unknown" && valid) {
generatorSource = "c2pa";
} else {
if (matchFlag(ruleScreenshotMeta(), proof).result) {
generator = "screenshot";
generatorSource = "metadata";
}
}
const flags: ProofHintFlags = {
valid: valid,
source: source && source.length == 1 ? source[0].value : undefined,
device: source && source.length == 1 ? source[0].value : undefined,
creationDate: date,
aiGenerated: matchFlag(ruleAiGenerated(), proof).result,
aiEdited,
screenshot: matchFlag(ruleScreenshot(), proof).result,
camera: matchFlag(ruleCamera(), proof).result,
generator: generator,
generatorSource: generatorSource,
edits: edits,
};
return flags;
} catch (error) {}