From 2cb7945305f053ffdc52135ebeba4b296d3df4fd Mon Sep 17 00:00:00 2001 From: jensmohr Date: Thu, 21 May 2026 20:08:04 +0200 Subject: [PATCH] Introduce minimal VG-Core module registry --- manifest.json | 1 + src/background.js | 8 +++++++ src/core/module-registry.js | 48 +++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 src/core/module-registry.js diff --git a/manifest.json b/manifest.json index 09a162b..5c6df7b 100644 --- a/manifest.json +++ b/manifest.json @@ -18,6 +18,7 @@ "background": { "scripts": [ + "src/core/module-registry.js", "src/background/db/db-constants.js", "src/background/db/db-core.js", "src/background/gvl/gvl-vendor-normalizer.js", diff --git a/src/background.js b/src/background.js index 59f661e..6d28fb4 100644 --- a/src/background.js +++ b/src/background.js @@ -1,5 +1,13 @@ console.log("VendorGet-IV background loaded"); +globalThis.VGCoreModuleRegistry.registerModule({ + id: "vg-iv", + name: "VG-IV", + description: "Consent, TCF, GVL and evidence observation module", + kind: "evidence", + status: "active", +}); + const OFFICIAL_IAB_GVL_URL = "https://vendor-list.consensu.org/v3/vendor-list.json"; const EVIDENCE_RECORDING_SOURCE = "vendorget_background_mirror"; diff --git a/src/core/module-registry.js b/src/core/module-registry.js new file mode 100644 index 0000000..eefe63b --- /dev/null +++ b/src/core/module-registry.js @@ -0,0 +1,48 @@ +(function () { + const modules = new Map(); + + function validateModuleDefinition(moduleDefinition) { + if (!moduleDefinition || typeof moduleDefinition !== "object") { + throw new TypeError("moduleDefinition must be an object"); + } + + if ( + typeof moduleDefinition.id !== "string" || + moduleDefinition.id.trim() === "" + ) { + throw new TypeError("moduleDefinition.id is required"); + } + + if ( + typeof moduleDefinition.name !== "string" || + moduleDefinition.name.trim() === "" + ) { + throw new TypeError("moduleDefinition.name is required"); + } + } + + function cloneModuleDefinition(moduleDefinition) { + return { ...moduleDefinition }; + } + + globalThis.VGCoreModuleRegistry = { + registerModule(moduleDefinition) { + validateModuleDefinition(moduleDefinition); + + const storedModuleDefinition = cloneModuleDefinition(moduleDefinition); + modules.set(storedModuleDefinition.id, storedModuleDefinition); + + return cloneModuleDefinition(storedModuleDefinition); + }, + + getModules() { + return Array.from(modules.values(), cloneModuleDefinition); + }, + + getModuleById(moduleId) { + return modules.has(moduleId) + ? cloneModuleDefinition(modules.get(moduleId)) + : null; + }, + }; +})();