From 2b8952c5361e314477c62121a068fcd6d328e26a Mon Sep 17 00:00:00 2001
From: Felix Woestmann <felix.wostmann@edps.europa.eu>
Date: Tue, 17 Dec 2024 14:33:53 +0100
Subject: [PATCH 1/4] feature: add output of package version to website

---
 .../src/components/EvidenceCollectorForm.vue  | 28 +++++++++++++++----
 src/server/server.ts                          | 12 ++++++++
 2 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/frontend/src/components/EvidenceCollectorForm.vue b/frontend/src/components/EvidenceCollectorForm.vue
index adfc65b..ffb0c2b 100644
--- a/frontend/src/components/EvidenceCollectorForm.vue
+++ b/frontend/src/components/EvidenceCollectorForm.vue
@@ -134,6 +134,9 @@
             :add-class="{ button_enabled: ['hover:bg-eu-primary-80'] }"
           />
         </Vueform>
+        <p class="text-0.5sm text-gray-600 text-center pt-2">
+          Version {{ version == null ? "not fetched" : version }}
+        </p>
       </div>
     </div>
     <!-- Right panel -->
@@ -256,7 +259,7 @@ const pdfUrl = ref<string | null>(null);
 const htmlUrl = ref<string | null>(null);
 const isRequestRunning = ref<boolean>(false);
 const iFrame = useTemplateRef("output-iframe");
-
+const version = ref<string | null>(null);
 const isDownloadOverlayMinimized = ref(true);
 
 // Listen to chnages in the path from anchor links within the iFrame then scroll the corresponding element into view
@@ -275,13 +278,26 @@ function reset() {
   sanitizedHtml.value = null;
 }
 
+function getUrl(slug) {
+  return isViteDevEnv
+    ? `http://localhost:8080/${slug}`
+    : new URL(slug, document.location.toString()).href;
+}
+
+window.onload = async (_) => {
+  version.value = await fetchVersion();
+};
+
+async function fetchVersion() {
+  let url = getUrl("version");
+  const response = await fetch(url);
+  const json = await response.json();
+  return json.version;
+}
+
 async function handleSubmit(form$, _) {
   reset();
 
-  const WEC_ENDPOINT = isViteDevEnv
-    ? "http://localhost:8080/start-collection"
-    : new URL("start-collection", document.location.toString()).href;
-
   // Using FormData will EXCLUDE conditional elements and it
   // will submit the form as "Content-Type: multipart/form-data".
   const data = form$.data;
@@ -302,7 +318,7 @@ async function handleSubmit(form$, _) {
 
   try {
     // Sending the request
-    response = await form$.$vueform.services.axios.post(WEC_ENDPOINT, data, {
+    response = await form$.$vueform.services.axios.post(wec_endpoint, data, {
       cancelToken: form$.cancelToken.token,
     });
 
diff --git a/src/server/server.ts b/src/server/server.ts
index 3587ea0..dcade54 100644
--- a/src/server/server.ts
+++ b/src/server/server.ts
@@ -10,6 +10,7 @@ import { generateHtmlAndPdf, runCollection } from "./runCollection.js";
 import path from "path";
 import { create } from "../lib/logger.js";
 import crypto from "crypto";
+import fs from "fs";
 
 const __dirname = import.meta.dirname;
 const corsDefault = "http://localhost:8080";
@@ -120,6 +121,17 @@ function configureRoutes(browser_options: any[]): Router {
     res.status(200).json({ status: "OK" });
   });
 
+  router.get("/version", (_, res: Response) => {
+    try {
+      const packageJsonPath = path.resolve(__dirname, "../..", "package.json");
+      const packageJson = fs.readFileSync(packageJsonPath, "utf-8");
+      const { version } = JSON.parse(packageJson);
+      res.status(200).json({ version });
+    } catch (error) {
+      res.status(500).json({ error: "Unable to retrieve version information" });
+    }
+  });
+
   return router;
 }
 
-- 
GitLab


From d097af91dd74a28ffc3a77f679e41fe284862ef5 Mon Sep 17 00:00:00 2001
From: Felix Woestmann <felix.wostmann@edps.europa.eu>
Date: Wed, 18 Dec 2024 12:45:38 +0100
Subject: [PATCH 2/4] refactor: import package.json as a module

---
 src/server/server.ts | 5 +----
 tsconfig.json        | 3 ++-
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/server/server.ts b/src/server/server.ts
index dcade54..5391be8 100644
--- a/src/server/server.ts
+++ b/src/server/server.ts
@@ -10,7 +10,7 @@ import { generateHtmlAndPdf, runCollection } from "./runCollection.js";
 import path from "path";
 import { create } from "../lib/logger.js";
 import crypto from "crypto";
-import fs from "fs";
+import { version } from "../../package.json";
 
 const __dirname = import.meta.dirname;
 const corsDefault = "http://localhost:8080";
@@ -123,9 +123,6 @@ function configureRoutes(browser_options: any[]): Router {
 
   router.get("/version", (_, res: Response) => {
     try {
-      const packageJsonPath = path.resolve(__dirname, "../..", "package.json");
-      const packageJson = fs.readFileSync(packageJsonPath, "utf-8");
-      const { version } = JSON.parse(packageJson);
       res.status(200).json({ version });
     } catch (error) {
       res.status(500).json({ error: "Unable to retrieve version information" });
diff --git a/tsconfig.json b/tsconfig.json
index 2e0ed3d..469d179 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -4,7 +4,8 @@
     "allowJs": true,
     "target": "es2020",
     "moduleResolution": "nodenext",
-    "module": "nodenext"
+    "module": "nodenext",
+    "resolveJsonModule": true,
   },
   "include": ["./src/**/*", "./bin/**/*"],
   "exclude": ["./src/assets/frontend/**/*"]
-- 
GitLab


From a64583b308538bb3293f2da4947ae35ef2a7fb94 Mon Sep 17 00:00:00 2001
From: Felix Woestmann <felix.wostmann@edps.europa.eu>
Date: Wed, 18 Dec 2024 12:45:47 +0100
Subject: [PATCH 3/4] fix: missing url

---
 frontend/src/components/EvidenceCollectorForm.vue | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/frontend/src/components/EvidenceCollectorForm.vue b/frontend/src/components/EvidenceCollectorForm.vue
index ffb0c2b..fdf3f40 100644
--- a/frontend/src/components/EvidenceCollectorForm.vue
+++ b/frontend/src/components/EvidenceCollectorForm.vue
@@ -318,9 +318,13 @@ async function handleSubmit(form$, _) {
 
   try {
     // Sending the request
-    response = await form$.$vueform.services.axios.post(wec_endpoint, data, {
-      cancelToken: form$.cancelToken.token,
-    });
+    response = await form$.$vueform.services.axios.post(
+      getUrl("/start-collection"),
+      data,
+      {
+        cancelToken: form$.cancelToken.token,
+      },
+    );
 
     sanitizedHtml.value = response.data.html;
 
-- 
GitLab


From fb913efe2cae7fddc2d9871c5f5197e0d66a7eb8 Mon Sep 17 00:00:00 2001
From: Felix Woestmann <felix.wostmann@edps.europa.eu>
Date: Wed, 18 Dec 2024 12:52:02 +0100
Subject: [PATCH 4/4] fix: error in .gitlab-ci.yml

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 297cba8..2a63592 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -21,7 +21,7 @@ build-job:
     - cd build/
     - npm pack --pack-destination='../artifacts'
     - cd ../artifacts
-    - mv website-evidence-collector-$(PACKAGE_VERSION).tgz website-evidence-collector.tgz
+    - mv website-evidence-collector-$PACKAGE_VERSION.tgz website-evidence-collector.tgz
   artifacts:
     paths:
       - build/artifacts
-- 
GitLab