From 265c17592be1b43c344e13e35120ba8e73778053 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.me>
Date: Tue, 26 Mar 2024 22:17:57 +0100
Subject: [PATCH] Move from v3.6.0 to v4.0.0

---
 CHANGELOG.md                           |   6 +-
 ExpressAPI/.env.vault                  |   6 +-
 ExpressAPI/assets/OpenAPI/OpenAPI.yaml |   2 +-
 ExpressAPI/package-lock.json           | 531 +++++++++++++------------
 ExpressAPI/package.json                |   2 +-
 5 files changed, 288 insertions(+), 259 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 86944ca..cb0c415 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,7 +18,7 @@
 -->
 
 
-## 3.6.0 (???)
+## 4.0.0 (???)
 
 ### ✨ Feature
 - Add features related to corrige (commentary, commit specific link / update, delete link)
@@ -28,6 +28,10 @@
 - SonarQube integration
 - Multi-process start is disabled where it is not in a production environment
 
+### 🐛 Bugfix
+- Fix no response when Authorization header is missing
+- Fix get assignment by url with assignment containing spaces
+
 ### 📚 Documentation
 - Corrige routes documentation
 
diff --git a/ExpressAPI/.env.vault b/ExpressAPI/.env.vault
index 7f2cb5b..89fcd65 100644
--- a/ExpressAPI/.env.vault
+++ b/ExpressAPI/.env.vault
@@ -4,11 +4,11 @@
 #/--------------------------------------------------/
 
 # development
-DOTENV_VAULT_DEVELOPMENT="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"
+DOTENV_VAULT_DEVELOPMENT="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"
 
 # production
-DOTENV_VAULT_PRODUCTION="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"
+DOTENV_VAULT_PRODUCTION="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"
 
 # test
-DOTENV_VAULT_TEST="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"
+DOTENV_VAULT_TEST="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"
 
diff --git a/ExpressAPI/assets/OpenAPI/OpenAPI.yaml b/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
index d4cda3b..7712e73 100644
--- a/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
+++ b/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
@@ -1,7 +1,7 @@
 openapi: 3.1.0
 info:
     title: Dojo API
-    version: 3.6.0
+    version: 4.0.0
     description: |
         **Backend API of the Dojo project.**
         
diff --git a/ExpressAPI/package-lock.json b/ExpressAPI/package-lock.json
index 7f41446..d042438 100644
--- a/ExpressAPI/package-lock.json
+++ b/ExpressAPI/package-lock.json
@@ -1,12 +1,12 @@
 {
     "name": "dojo_backend_api",
-    "version": "3.6.0",
+    "version": "4.0.0",
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
             "name": "dojo_backend_api",
-            "version": "3.6.0",
+            "version": "4.0.0",
             "license": "AGPLv3",
             "dependencies": {
                 "@gitbeaker/rest": "^40.0.1",
@@ -73,9 +73,9 @@
             }
         },
         "node_modules/@babel/runtime": {
-            "version": "7.23.9",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz",
-            "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz",
+            "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==",
             "dev": true,
             "dependencies": {
                 "regenerator-runtime": "^0.14.0"
@@ -208,9 +208,9 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "8.56.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
-            "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
+            "version": "8.57.0",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz",
+            "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==",
             "dev": true,
             "peer": true,
             "engines": {
@@ -224,11 +224,11 @@
             "dev": true
         },
         "node_modules/@gitbeaker/core": {
-            "version": "40.0.1",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-40.0.1.tgz",
-            "integrity": "sha512-Zh2eVUgy2kYVnp7Db4gWoFqFbjgsnm2FvBEERbH3UM3cOA/iMqM+tw/of+Qk4yO+gv6tGZ9f4nF7+vK0tQFmDA==",
+            "version": "40.0.2",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-40.0.2.tgz",
+            "integrity": "sha512-rF2Wx4Ka1F2bo6iPdrp3yypprBHMP7VkReZXGYFohWrQX2CREZmq+2bXlY5rLdIv5pFvxZ91uLqKLiJtGFzoCQ==",
             "dependencies": {
-                "@gitbeaker/requester-utils": "^40.0.1",
+                "@gitbeaker/requester-utils": "^40.0.2",
                 "qs": "^6.11.2",
                 "xcase": "^2.0.1"
             },
@@ -236,24 +236,10 @@
                 "node": ">=18.0.0"
             }
         },
-        "node_modules/@gitbeaker/core/node_modules/qs": {
-            "version": "6.12.0",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz",
-            "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==",
-            "dependencies": {
-                "side-channel": "^1.0.6"
-            },
-            "engines": {
-                "node": ">=0.6"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/@gitbeaker/requester-utils": {
-            "version": "40.0.1",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-40.0.1.tgz",
-            "integrity": "sha512-cn6fltKuQ3TbthoMTg+JsKQfozqGcRcz1jT9Nqzr4gpHWgjdQ/nr5JpjwzKABQNVL2JH3UJWr6Eji60CFZDZ6Q==",
+            "version": "40.0.2",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-40.0.2.tgz",
+            "integrity": "sha512-6T/ARwJ1UG+kuBCe18mgUeYdTXJJzUIO8y1taKWDLtYrJLzcS490k8BuIfeNahhdGjLDtTQ0o2eCMK1nfpgNYw==",
             "dependencies": {
                 "picomatch-browser": "^2.2.6",
                 "qs": "^6.11.2",
@@ -264,27 +250,13 @@
                 "node": ">=18.0.0"
             }
         },
-        "node_modules/@gitbeaker/requester-utils/node_modules/qs": {
-            "version": "6.12.0",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz",
-            "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==",
-            "dependencies": {
-                "side-channel": "^1.0.6"
-            },
-            "engines": {
-                "node": ">=0.6"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/ljharb"
-            }
-        },
         "node_modules/@gitbeaker/rest": {
-            "version": "40.0.1",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-40.0.1.tgz",
-            "integrity": "sha512-JEd9WNuzgur7gLiJPMWPYKaWe5uX1ic8CGKR1fMtBityFZ2xyZkTZ+LG0nqWTV1MyiowYnJ1swTh8Yff+kLsKA==",
+            "version": "40.0.2",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-40.0.2.tgz",
+            "integrity": "sha512-CWpQ7kvrxzqL8mUR2KIciGQoHf4wCeGT6jM6ngDpzV/j4/ASIEqSnTV7YQAs+VbGu3ZCu7XM3l8Q5JVlMHQabQ==",
             "dependencies": {
-                "@gitbeaker/core": "^40.0.1",
-                "@gitbeaker/requester-utils": "^40.0.1"
+                "@gitbeaker/core": "^40.0.2",
+                "@gitbeaker/requester-utils": "^40.0.2"
             },
             "engines": {
                 "node": ">=18.0.0"
@@ -351,9 +323,9 @@
             "peer": true
         },
         "node_modules/@jridgewell/resolve-uri": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
-            "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+            "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
             "dev": true,
             "engines": {
                 "node": ">=6.0.0"
@@ -798,9 +770,9 @@
             }
         },
         "node_modules/@prisma/client": {
-            "version": "5.9.1",
-            "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.9.1.tgz",
-            "integrity": "sha512-caSOnG4kxcSkhqC/2ShV7rEoWwd3XrftokxJqOCMVvia4NYV/TPtJlS9C2os3Igxw/Qyxumj9GBQzcStzECvtQ==",
+            "version": "5.11.0",
+            "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz",
+            "integrity": "sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw==",
             "hasInstallScript": true,
             "engines": {
                 "node": ">=16.13"
@@ -815,48 +787,48 @@
             }
         },
         "node_modules/@prisma/debug": {
-            "version": "5.9.1",
-            "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.9.1.tgz",
-            "integrity": "sha512-yAHFSFCg8KVoL0oRUno3m60GAjsUKYUDkQ+9BA2X2JfVR3kRVSJFc/GpQ2fSORi4pSHZR9orfM4UC9OVXIFFTA==",
+            "version": "5.11.0",
+            "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz",
+            "integrity": "sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A==",
             "devOptional": true
         },
         "node_modules/@prisma/engines": {
-            "version": "5.9.1",
-            "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.9.1.tgz",
-            "integrity": "sha512-gkdXmjxQ5jktxWNdDA5aZZ6R8rH74JkoKq6LD5mACSvxd2vbqWeWIOV0Py5wFC8vofOYShbt6XUeCIUmrOzOnQ==",
+            "version": "5.11.0",
+            "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz",
+            "integrity": "sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw==",
             "devOptional": true,
             "hasInstallScript": true,
             "dependencies": {
-                "@prisma/debug": "5.9.1",
-                "@prisma/engines-version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64",
-                "@prisma/fetch-engine": "5.9.1",
-                "@prisma/get-platform": "5.9.1"
+                "@prisma/debug": "5.11.0",
+                "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102",
+                "@prisma/fetch-engine": "5.11.0",
+                "@prisma/get-platform": "5.11.0"
             }
         },
         "node_modules/@prisma/engines-version": {
-            "version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64",
-            "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64.tgz",
-            "integrity": "sha512-HFl7275yF0FWbdcNvcSRbbu9JCBSLMcurYwvWc8WGDnpu7APxQo2ONtZrUggU3WxLxUJ2uBX+0GOFIcJeVeOOQ==",
+            "version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102",
+            "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz",
+            "integrity": "sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA==",
             "devOptional": true
         },
         "node_modules/@prisma/fetch-engine": {
-            "version": "5.9.1",
-            "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.9.1.tgz",
-            "integrity": "sha512-l0goQOMcNVOJs1kAcwqpKq3ylvkD9F04Ioe1oJoCqmz05mw22bNAKKGWuDd3zTUoUZr97va0c/UfLNru+PDmNA==",
+            "version": "5.11.0",
+            "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz",
+            "integrity": "sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w==",
             "devOptional": true,
             "dependencies": {
-                "@prisma/debug": "5.9.1",
-                "@prisma/engines-version": "5.9.0-32.23fdc5965b1e05fc54e5f26ed3de66776b93de64",
-                "@prisma/get-platform": "5.9.1"
+                "@prisma/debug": "5.11.0",
+                "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102",
+                "@prisma/get-platform": "5.11.0"
             }
         },
         "node_modules/@prisma/get-platform": {
-            "version": "5.9.1",
-            "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.9.1.tgz",
-            "integrity": "sha512-6OQsNxTyhvG+T2Ksr8FPFpuPeL4r9u0JF0OZHUBI/Uy9SS43sPyAIutt4ZEAyqWQt104ERh70EZedkHZKsnNbg==",
+            "version": "5.11.0",
+            "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz",
+            "integrity": "sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw==",
             "devOptional": true,
             "dependencies": {
-                "@prisma/debug": "5.9.1"
+                "@prisma/debug": "5.11.0"
             }
         },
         "node_modules/@redocly/ajv": {
@@ -876,12 +848,12 @@
             }
         },
         "node_modules/@redocly/cli": {
-            "version": "1.8.2",
-            "resolved": "https://registry.npmjs.org/@redocly/cli/-/cli-1.8.2.tgz",
-            "integrity": "sha512-HrdLlCEOrHEZGdm2dYcgUaNb7o0Nga7sX+a3us/M0ixHrQ0GMlGcxAphB+Cxylud+MpIdEQ3eoEVJ/clFRa1Zw==",
+            "version": "1.10.6",
+            "resolved": "https://registry.npmjs.org/@redocly/cli/-/cli-1.10.6.tgz",
+            "integrity": "sha512-KSy8fidqmnY3IQJ3zd+3j6QNu7xxj7mNzkN7q71wVXhWVqqB0WuBb2HmsnFgtGFzm83UHwVDFNpFR9qpK9HsMg==",
             "dev": true,
             "dependencies": {
-                "@redocly/openapi-core": "1.8.2",
+                "@redocly/openapi-core": "1.10.6",
                 "abort-controller": "^3.0.0",
                 "chokidar": "^3.5.1",
                 "colorette": "^1.2.0",
@@ -909,13 +881,20 @@
                 "npm": ">=7.0.0"
             }
         },
+        "node_modules/@redocly/config": {
+            "version": "0.1.5",
+            "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.1.5.tgz",
+            "integrity": "sha512-nE7jePALlLDC7hueRy/yWFlTqNv6yrVQnKQVwVepOzuf0PTUYsBWQ2fNxh7Z2L/3PDjTs/Jc2IHmkwAkFyHmnw==",
+            "dev": true
+        },
         "node_modules/@redocly/openapi-core": {
-            "version": "1.8.2",
-            "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.8.2.tgz",
-            "integrity": "sha512-VjUz3wrqcDbO1HfEB0AUzh6Y7T1jNJR4Jmgfs0ipuoipLjU5bDsdfKJGSSz2u0WpfmqklPsd11ynkgL5Y+MlCg==",
+            "version": "1.10.6",
+            "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.10.6.tgz",
+            "integrity": "sha512-qWZszssMMe/UrJ4LN4qh2mdcIx5uMHwnvtkAEdmWYWlUv+LNaBeqazjDt0UrCOX5EsrD4d+21oxQJNdbyGMVVA==",
             "dev": true,
             "dependencies": {
                 "@redocly/ajv": "^8.11.0",
+                "@redocly/config": "^0.1.4",
                 "colorette": "^1.2.0",
                 "js-levenshtein": "^1.1.6",
                 "js-yaml": "^4.1.0",
@@ -931,9 +910,9 @@
             }
         },
         "node_modules/@tsconfig/node10": {
-            "version": "1.0.9",
-            "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
-            "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
+            "version": "1.0.10",
+            "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.10.tgz",
+            "integrity": "sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw==",
             "dev": true
         },
         "node_modules/@tsconfig/node12": {
@@ -1037,9 +1016,9 @@
             "dev": true
         },
         "node_modules/@types/jsonwebtoken": {
-            "version": "9.0.5",
-            "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz",
-            "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==",
+            "version": "9.0.6",
+            "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.6.tgz",
+            "integrity": "sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==",
             "dev": true,
             "dependencies": {
                 "@types/node": "*"
@@ -1070,9 +1049,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.11.17",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz",
-            "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==",
+            "version": "20.11.30",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz",
+            "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==",
             "dev": true,
             "dependencies": {
                 "undici-types": "~5.26.4"
@@ -1085,9 +1064,9 @@
             "dev": true
         },
         "node_modules/@types/qs": {
-            "version": "6.9.11",
-            "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
-            "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
+            "version": "6.9.14",
+            "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz",
+            "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==",
             "dev": true
         },
         "node_modules/@types/range-parser": {
@@ -1097,9 +1076,9 @@
             "dev": true
         },
         "node_modules/@types/semver": {
-            "version": "7.5.6",
-            "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
-            "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
+            "version": "7.5.8",
+            "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+            "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
             "dev": true
         },
         "node_modules/@types/send": {
@@ -1574,11 +1553,11 @@
             }
         },
         "node_modules/axios": {
-            "version": "1.6.7",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
-            "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
+            "version": "1.6.8",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
+            "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
             "dependencies": {
-                "follow-redirects": "^1.15.4",
+                "follow-redirects": "^1.15.6",
                 "form-data": "^4.0.0",
                 "proxy-from-env": "^1.1.0"
             }
@@ -1595,9 +1574,9 @@
             "dev": true
         },
         "node_modules/bare-events": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz",
-            "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==",
+            "version": "2.2.2",
+            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
+            "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
             "optional": true
         },
         "node_modules/base64-js": {
@@ -1640,12 +1619,15 @@
             }
         },
         "node_modules/binary-extensions": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
-            "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
             "dev": true,
             "engines": {
                 "node": ">=8"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/sindresorhus"
             }
         },
         "node_modules/bl": {
@@ -1674,12 +1656,12 @@
             }
         },
         "node_modules/body-parser": {
-            "version": "1.20.1",
-            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
-            "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
+            "version": "1.20.2",
+            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
+            "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
             "dependencies": {
                 "bytes": "3.1.2",
-                "content-type": "~1.0.4",
+                "content-type": "~1.0.5",
                 "debug": "2.6.9",
                 "depd": "2.0.0",
                 "destroy": "1.2.0",
@@ -1687,7 +1669,7 @@
                 "iconv-lite": "0.4.24",
                 "on-finished": "2.4.1",
                 "qs": "6.11.0",
-                "raw-body": "2.5.1",
+                "raw-body": "2.5.2",
                 "type-is": "~1.6.18",
                 "unpipe": "1.0.0"
             },
@@ -1717,6 +1699,20 @@
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
             "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
         },
+        "node_modules/body-parser/node_modules/qs": {
+            "version": "6.11.0",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+            "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+            "dependencies": {
+                "side-channel": "^1.0.4"
+            },
+            "engines": {
+                "node": ">=0.6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/brace-expansion": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -2198,9 +2194,9 @@
             }
         },
         "node_modules/cookie": {
-            "version": "0.5.0",
-            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
-            "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+            "version": "0.6.0",
+            "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
+            "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
             "engines": {
                 "node": ">= 0.6"
             }
@@ -2211,9 +2207,9 @@
             "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
         },
         "node_modules/core-js": {
-            "version": "3.35.1",
-            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz",
-            "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==",
+            "version": "3.36.1",
+            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.1.tgz",
+            "integrity": "sha512-BTvUrwxVBezj5SZ3f10ImnX2oRByMxql3EimVqMysepbC9EeMUOpLwdy6Eoili2x6E4kf+ZUB5k/+Jv55alPfA==",
             "dev": true,
             "hasInstallScript": true,
             "funding": {
@@ -2402,26 +2398,26 @@
             }
         },
         "node_modules/dompurify": {
-            "version": "2.4.7",
-            "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz",
-            "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==",
+            "version": "2.4.9",
+            "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.9.tgz",
+            "integrity": "sha512-iHtnxYMotKgOTvxIqq677JsKHvCOkAFqj9x8Mek2zdeHW1XjuFKwjpmZeMaXQRQ8AbJZDbcRz/+r1QhwvFtmQg==",
             "dev": true
         },
         "node_modules/dotenv": {
-            "version": "16.4.1",
-            "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz",
-            "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==",
+            "version": "16.4.5",
+            "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+            "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
             "engines": {
                 "node": ">=12"
             },
             "funding": {
-                "url": "https://github.com/motdotla/dotenv?sponsor=1"
+                "url": "https://dotenvx.com"
             }
         },
         "node_modules/dotenv-cli": {
-            "version": "7.3.0",
-            "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-7.3.0.tgz",
-            "integrity": "sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==",
+            "version": "7.4.1",
+            "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-7.4.1.tgz",
+            "integrity": "sha512-fE1aywjRrWGxV3miaiUr3d2zC/VAiuzEGghi+QzgIA9fEf/M5hLMaRSXb4IxbUAwGmaLi0IozdZddnVU96acag==",
             "dev": true,
             "dependencies": {
                 "cross-spawn": "^7.0.3",
@@ -2442,9 +2438,9 @@
             }
         },
         "node_modules/dotenv-vault": {
-            "version": "1.26.0",
-            "resolved": "https://registry.npmjs.org/dotenv-vault/-/dotenv-vault-1.26.0.tgz",
-            "integrity": "sha512-2PNnlprtOdFEG9+hAAZxXegcjlJVZMSy88arnRR4YjwU/PwkDbdtk1uzw/D88D5EZ0b84n7YVQ6RccRXmW/Qzg==",
+            "version": "1.26.1",
+            "resolved": "https://registry.npmjs.org/dotenv-vault/-/dotenv-vault-1.26.1.tgz",
+            "integrity": "sha512-v+RK6LXpJQWhaelTT2s0b5FQB0qziRBuGCrAgAeDHtgkDEA0NqF7OXYXsrnKTuCPnwBg0FmNJr4lZebCpJnrFA==",
             "dev": true,
             "dependencies": {
                 "@oclif/core": "^1",
@@ -2452,7 +2448,7 @@
                 "@oclif/plugin-not-found": "^2.3.34",
                 "@oclif/plugin-update": "^3.1.16",
                 "@oclif/plugin-warn-if-update-available": "^2.0.46",
-                "axios": "^0.27.2",
+                "axios": "^1.6.7",
                 "chalk": "^4.1.2",
                 "dotenv": "^16.3.1"
             },
@@ -2463,16 +2459,6 @@
                 "node": ">=16"
             }
         },
-        "node_modules/dotenv-vault/node_modules/axios": {
-            "version": "0.27.2",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
-            "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
-            "dev": true,
-            "dependencies": {
-                "follow-redirects": "^1.14.9",
-                "form-data": "^4.0.0"
-            }
-        },
         "node_modules/ecdsa-sig-formatter": {
             "version": "1.0.11",
             "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
@@ -2590,17 +2576,17 @@
             }
         },
         "node_modules/eslint": {
-            "version": "8.56.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
-            "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
+            "version": "8.57.0",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz",
+            "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==",
             "dev": true,
             "peer": true,
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.2.0",
                 "@eslint-community/regexpp": "^4.6.1",
                 "@eslint/eslintrc": "^2.1.4",
-                "@eslint/js": "8.56.0",
-                "@humanwhocodes/config-array": "^0.11.13",
+                "@eslint/js": "8.57.0",
+                "@humanwhocodes/config-array": "^0.11.14",
                 "@humanwhocodes/module-importer": "^1.0.1",
                 "@nodelib/fs.walk": "^1.2.8",
                 "@ungap/structured-clone": "^1.2.0",
@@ -2812,16 +2798,16 @@
             "dev": true
         },
         "node_modules/express": {
-            "version": "4.18.2",
-            "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
-            "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
+            "version": "4.19.2",
+            "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
+            "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
             "dependencies": {
                 "accepts": "~1.3.8",
                 "array-flatten": "1.1.1",
-                "body-parser": "1.20.1",
+                "body-parser": "1.20.2",
                 "content-disposition": "0.5.4",
                 "content-type": "~1.0.4",
-                "cookie": "0.5.0",
+                "cookie": "0.6.0",
                 "cookie-signature": "1.0.6",
                 "debug": "2.6.9",
                 "depd": "2.0.0",
@@ -2877,6 +2863,20 @@
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
             "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
         },
+        "node_modules/express/node_modules/qs": {
+            "version": "6.11.0",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+            "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+            "dependencies": {
+                "side-channel": "^1.0.4"
+            },
+            "engines": {
+                "node": ">=0.6"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/ljharb"
+            }
+        },
         "node_modules/express/node_modules/safe-buffer": {
             "version": "5.2.1",
             "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -3121,9 +3121,9 @@
             }
         },
         "node_modules/flatted": {
-            "version": "3.2.9",
-            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
-            "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+            "version": "3.3.1",
+            "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+            "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
             "dev": true,
             "peer": true
         },
@@ -3133,9 +3133,9 @@
             "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
         },
         "node_modules/follow-redirects": {
-            "version": "1.15.5",
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
-            "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
+            "version": "1.15.6",
+            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+            "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
             "funding": [
                 {
                     "type": "individual",
@@ -4356,9 +4356,9 @@
             "dev": true
         },
         "node_modules/mobx": {
-            "version": "6.12.0",
-            "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.12.0.tgz",
-            "integrity": "sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==",
+            "version": "6.12.1",
+            "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.12.1.tgz",
+            "integrity": "sha512-HN5/fmWCnePVI4u3Y487x3G0LIQ+qnQjowylhVxXPvBmbwottKm8R7GrsYAqljzekZUj+LoBcAUp3l8/3EPCGQ==",
             "dev": true,
             "funding": {
                 "type": "opencollective",
@@ -4555,9 +4555,9 @@
             "dev": true
         },
         "node_modules/node": {
-            "version": "20.11.0",
-            "resolved": "https://registry.npmjs.org/node/-/node-20.11.0.tgz",
-            "integrity": "sha512-oY5yFtdoO73dhlfgEOcTtQAEoq6rMm2HcU9JDc9ZdnjRbkqkAZ/eaT4eZGIB1cCNOFx4OMpSTWD5k9vwta/EIQ==",
+            "version": "20.11.1",
+            "resolved": "https://registry.npmjs.org/node/-/node-20.11.1.tgz",
+            "integrity": "sha512-Xn8PkfFD6TYj/zqL2iK6ENtpEWvEymEHTycYdZydZNkzdqXwopqQKG+Yz+8xDsAJO15Db7VFNzRPVpYk0cbBJg==",
             "hasInstallScript": true,
             "dependencies": {
                 "node-bin-setup": "^1.0.0"
@@ -4616,9 +4616,9 @@
             }
         },
         "node_modules/nodemon": {
-            "version": "3.0.3",
-            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz",
-            "integrity": "sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==",
+            "version": "3.1.0",
+            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz",
+            "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==",
             "dev": true,
             "dependencies": {
                 "chokidar": "^3.5.2",
@@ -4711,9 +4711,9 @@
             }
         },
         "node_modules/npm": {
-            "version": "10.4.0",
-            "resolved": "https://registry.npmjs.org/npm/-/npm-10.4.0.tgz",
-            "integrity": "sha512-RS7Mx0OVfXlOcQLRePuDIYdFCVBPCNapWHplDK+mh7GDdP/Tvor4ocuybRRPSvfcRb2vjRJt1fHCqw3cr8qACQ==",
+            "version": "10.5.0",
+            "resolved": "https://registry.npmjs.org/npm/-/npm-10.5.0.tgz",
+            "integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==",
             "bundleDependencies": [
                 "@isaacs/string-locale-compare",
                 "@npmcli/arborist",
@@ -4787,6 +4787,13 @@
                 "write-file-atomic"
             ],
             "dev": true,
+            "workspaces": [
+                "docs",
+                "smoke-tests",
+                "mock-globals",
+                "mock-registry",
+                "workspaces/*"
+            ],
             "dependencies": {
                 "@isaacs/string-locale-compare": "^1.1.0",
                 "@npmcli/arborist": "^7.2.1",
@@ -4796,7 +4803,7 @@
                 "@npmcli/package-json": "^5.0.0",
                 "@npmcli/promise-spawn": "^7.0.1",
                 "@npmcli/run-script": "^7.0.4",
-                "@sigstore/tuf": "^2.3.0",
+                "@sigstore/tuf": "^2.3.1",
                 "abbrev": "^2.0.0",
                 "archy": "~1.0.0",
                 "cacache": "^18.0.2",
@@ -4847,7 +4854,7 @@
                 "proc-log": "^3.0.0",
                 "qrcode-terminal": "^0.12.0",
                 "read": "^2.1.0",
-                "semver": "^7.5.4",
+                "semver": "^7.6.0",
                 "spdx-expression-parse": "^3.0.1",
                 "ssri": "^10.0.5",
                 "supports-color": "^9.4.0",
@@ -4951,7 +4958,7 @@
             "license": "ISC"
         },
         "node_modules/npm/node_modules/@npmcli/agent": {
-            "version": "2.2.0",
+            "version": "2.2.1",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -4967,7 +4974,7 @@
             }
         },
         "node_modules/npm/node_modules/@npmcli/arborist": {
-            "version": "7.3.1",
+            "version": "7.4.0",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -4980,7 +4987,7 @@
                 "@npmcli/name-from-folder": "^2.0.0",
                 "@npmcli/node-gyp": "^3.0.0",
                 "@npmcli/package-json": "^5.0.0",
-                "@npmcli/query": "^3.0.1",
+                "@npmcli/query": "^3.1.0",
                 "@npmcli/run-script": "^7.0.2",
                 "bin-links": "^4.0.1",
                 "cacache": "^18.0.0",
@@ -5014,7 +5021,7 @@
             }
         },
         "node_modules/npm/node_modules/@npmcli/config": {
-            "version": "8.1.0",
+            "version": "8.2.0",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -5185,7 +5192,7 @@
             }
         },
         "node_modules/npm/node_modules/@npmcli/query": {
-            "version": "3.0.1",
+            "version": "3.1.0",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -5223,19 +5230,19 @@
             }
         },
         "node_modules/npm/node_modules/@sigstore/bundle": {
-            "version": "2.1.1",
+            "version": "2.2.0",
             "dev": true,
             "inBundle": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@sigstore/protobuf-specs": "^0.2.1"
+                "@sigstore/protobuf-specs": "^0.3.0"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
         "node_modules/npm/node_modules/@sigstore/core": {
-            "version": "0.2.0",
+            "version": "1.0.0",
             "dev": true,
             "inBundle": true,
             "license": "Apache-2.0",
@@ -5244,7 +5251,7 @@
             }
         },
         "node_modules/npm/node_modules/@sigstore/protobuf-specs": {
-            "version": "0.2.1",
+            "version": "0.3.0",
             "dev": true,
             "inBundle": true,
             "license": "Apache-2.0",
@@ -5253,14 +5260,14 @@
             }
         },
         "node_modules/npm/node_modules/@sigstore/sign": {
-            "version": "2.2.1",
+            "version": "2.2.3",
             "dev": true,
             "inBundle": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@sigstore/bundle": "^2.1.1",
-                "@sigstore/core": "^0.2.0",
-                "@sigstore/protobuf-specs": "^0.2.1",
+                "@sigstore/bundle": "^2.2.0",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.0",
                 "make-fetch-happen": "^13.0.0"
             },
             "engines": {
@@ -5268,12 +5275,12 @@
             }
         },
         "node_modules/npm/node_modules/@sigstore/tuf": {
-            "version": "2.3.0",
+            "version": "2.3.1",
             "dev": true,
             "inBundle": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@sigstore/protobuf-specs": "^0.2.1",
+                "@sigstore/protobuf-specs": "^0.3.0",
                 "tuf-js": "^2.2.0"
             },
             "engines": {
@@ -5281,14 +5288,14 @@
             }
         },
         "node_modules/npm/node_modules/@sigstore/verify": {
-            "version": "0.1.0",
+            "version": "1.1.0",
             "dev": true,
             "inBundle": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@sigstore/bundle": "^2.1.1",
-                "@sigstore/core": "^0.2.0",
-                "@sigstore/protobuf-specs": "^0.2.1"
+                "@sigstore/bundle": "^2.2.0",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.0"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
@@ -5695,7 +5702,7 @@
             }
         },
         "node_modules/npm/node_modules/diff": {
-            "version": "5.1.0",
+            "version": "5.2.0",
             "dev": true,
             "inBundle": true,
             "license": "BSD-3-Clause",
@@ -5846,7 +5853,7 @@
             "license": "ISC"
         },
         "node_modules/npm/node_modules/hasown": {
-            "version": "2.0.0",
+            "version": "2.0.1",
             "dev": true,
             "inBundle": true,
             "license": "MIT",
@@ -5876,7 +5883,7 @@
             "license": "BSD-2-Clause"
         },
         "node_modules/npm/node_modules/http-proxy-agent": {
-            "version": "7.0.0",
+            "version": "7.0.2",
             "dev": true,
             "inBundle": true,
             "license": "MIT",
@@ -5889,7 +5896,7 @@
             }
         },
         "node_modules/npm/node_modules/https-proxy-agent": {
-            "version": "7.0.2",
+            "version": "7.0.4",
             "dev": true,
             "inBundle": true,
             "license": "MIT",
@@ -5971,11 +5978,24 @@
                 "node": "^16.14.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/ip": {
-            "version": "2.0.0",
+        "node_modules/npm/node_modules/ip-address": {
+            "version": "9.0.5",
             "dev": true,
             "inBundle": true,
-            "license": "MIT"
+            "license": "MIT",
+            "dependencies": {
+                "jsbn": "1.1.0",
+                "sprintf-js": "^1.1.3"
+            },
+            "engines": {
+                "node": ">= 12"
+            }
+        },
+        "node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": {
+            "version": "1.1.3",
+            "dev": true,
+            "inBundle": true,
+            "license": "BSD-3-Clause"
         },
         "node_modules/npm/node_modules/ip-regex": {
             "version": "5.0.0",
@@ -6052,6 +6072,12 @@
                 "@pkgjs/parseargs": "^0.11.0"
             }
         },
+        "node_modules/npm/node_modules/jsbn": {
+            "version": "1.1.0",
+            "dev": true,
+            "inBundle": true,
+            "license": "MIT"
+        },
         "node_modules/npm/node_modules/json-parse-even-better-errors": {
             "version": "3.0.1",
             "dev": true,
@@ -6105,7 +6131,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmdiff": {
-            "version": "6.0.6",
+            "version": "6.0.7",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6125,7 +6151,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmexec": {
-            "version": "7.0.7",
+            "version": "7.0.8",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6147,7 +6173,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmfund": {
-            "version": "5.0.4",
+            "version": "5.0.5",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6185,7 +6211,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmpack": {
-            "version": "6.0.6",
+            "version": "6.0.7",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6260,7 +6286,7 @@
             }
         },
         "node_modules/npm/node_modules/lru-cache": {
-            "version": "10.1.0",
+            "version": "10.2.0",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6922,7 +6948,7 @@
             "optional": true
         },
         "node_modules/npm/node_modules/semver": {
-            "version": "7.5.4",
+            "version": "7.6.0",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6988,17 +7014,17 @@
             }
         },
         "node_modules/npm/node_modules/sigstore": {
-            "version": "2.2.0",
+            "version": "2.2.2",
             "dev": true,
             "inBundle": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@sigstore/bundle": "^2.1.1",
-                "@sigstore/core": "^0.2.0",
-                "@sigstore/protobuf-specs": "^0.2.1",
-                "@sigstore/sign": "^2.2.1",
-                "@sigstore/tuf": "^2.3.0",
-                "@sigstore/verify": "^0.1.0"
+                "@sigstore/bundle": "^2.2.0",
+                "@sigstore/core": "^1.0.0",
+                "@sigstore/protobuf-specs": "^0.3.0",
+                "@sigstore/sign": "^2.2.3",
+                "@sigstore/tuf": "^2.3.1",
+                "@sigstore/verify": "^1.1.0"
             },
             "engines": {
                 "node": "^16.14.0 || >=18.0.0"
@@ -7015,16 +7041,16 @@
             }
         },
         "node_modules/npm/node_modules/socks": {
-            "version": "2.7.1",
+            "version": "2.8.0",
             "dev": true,
             "inBundle": true,
             "license": "MIT",
             "dependencies": {
-                "ip": "^2.0.0",
+                "ip-address": "^9.0.5",
                 "smart-buffer": "^4.2.0"
             },
             "engines": {
-                "node": ">= 10.13.0",
+                "node": ">= 16.0.0",
                 "npm": ">= 3.0.0"
             }
         },
@@ -7053,7 +7079,7 @@
             }
         },
         "node_modules/npm/node_modules/spdx-exceptions": {
-            "version": "2.3.0",
+            "version": "2.5.0",
             "dev": true,
             "inBundle": true,
             "license": "CC-BY-3.0"
@@ -7069,7 +7095,7 @@
             }
         },
         "node_modules/npm/node_modules/spdx-license-ids": {
-            "version": "3.0.16",
+            "version": "3.0.17",
             "dev": true,
             "inBundle": true,
             "license": "CC0-1.0"
@@ -7920,13 +7946,13 @@
             }
         },
         "node_modules/prisma": {
-            "version": "5.9.1",
-            "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.9.1.tgz",
-            "integrity": "sha512-Hy/8KJZz0ELtkw4FnG9MS9rNWlXcJhf98Z2QMqi0QiVMoS8PzsBkpla0/Y5hTlob8F3HeECYphBjqmBxrluUrQ==",
+            "version": "5.11.0",
+            "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz",
+            "integrity": "sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g==",
             "devOptional": true,
             "hasInstallScript": true,
             "dependencies": {
-                "@prisma/engines": "5.9.1"
+                "@prisma/engines": "5.11.0"
             },
             "bin": {
                 "prisma": "build/index.js"
@@ -8003,11 +8029,11 @@
             }
         },
         "node_modules/qs": {
-            "version": "6.11.0",
-            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
-            "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+            "version": "6.12.0",
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz",
+            "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==",
             "dependencies": {
-                "side-channel": "^1.0.4"
+                "side-channel": "^1.0.6"
             },
             "engines": {
                 "node": ">=0.6"
@@ -8064,9 +8090,9 @@
             "integrity": "sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ=="
         },
         "node_modules/raw-body": {
-            "version": "2.5.1",
-            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
-            "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
+            "version": "2.5.2",
+            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
+            "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
             "dependencies": {
                 "bytes": "3.1.2",
                 "http-errors": "2.0.0",
@@ -8659,9 +8685,9 @@
             }
         },
         "node_modules/source-map-js": {
-            "version": "1.0.2",
-            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
-            "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+            "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
             "dev": true,
             "engines": {
                 "node": ">=0.10.0"
@@ -8712,9 +8738,9 @@
             }
         },
         "node_modules/streamx": {
-            "version": "2.15.8",
-            "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.8.tgz",
-            "integrity": "sha512-6pwMeMY/SuISiRsuS8TeIrAzyFbG5gGPHFQsYjUr/pbBadaL1PCWmzKw+CHZSwainfvcF6Si6cVLq4XTEwswFQ==",
+            "version": "2.16.1",
+            "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz",
+            "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==",
             "dependencies": {
                 "fast-fifo": "^1.1.0",
                 "queue-tick": "^1.0.1"
@@ -8851,9 +8877,9 @@
             }
         },
         "node_modules/swagger-ui-dist": {
-            "version": "5.11.3",
-            "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.3.tgz",
-            "integrity": "sha512-vQ+Pe73xt7vMVbX40L6nHu4sDmNCM6A+eMVJPGvKrifHQ4LO3smH0jCiiefKzsVl7OlOcVEnrZ9IFzYwElfMkA=="
+            "version": "5.12.2",
+            "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.12.2.tgz",
+            "integrity": "sha512-Fk8qZCBgZPkDli81pLrkSN15rs49xKnPkjhtKmUImmak4l2HdLiR/R7RgPkMGn1MuXvoIoLjIWgjE7NBgLWZHg=="
         },
         "node_modules/swagger-ui-express": {
             "version": "5.0.0",
@@ -8957,8 +8983,7 @@
             "version": "0.2.0",
             "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
             "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
-            "dev": true,
-            "peer": true
+            "dev": true
         },
         "node_modules/through": {
             "version": "2.3.8",
@@ -9025,9 +9050,9 @@
             }
         },
         "node_modules/ts-api-utils": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz",
-            "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==",
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+            "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
             "dev": true,
             "engines": {
                 "node": ">=16"
@@ -9140,9 +9165,9 @@
             "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
         },
         "node_modules/typescript": {
-            "version": "5.3.3",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
-            "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+            "version": "5.4.3",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+            "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
             "dev": true,
             "bin": {
                 "tsc": "bin/tsc",
@@ -9309,9 +9334,9 @@
             }
         },
         "node_modules/winston": {
-            "version": "3.11.0",
-            "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz",
-            "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==",
+            "version": "3.13.0",
+            "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz",
+            "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==",
             "dependencies": {
                 "@colors/colors": "^1.6.0",
                 "@dabh/diagnostics": "^2.0.2",
@@ -9323,7 +9348,7 @@
                 "safe-stable-stringify": "^2.3.1",
                 "stack-trace": "0.0.x",
                 "triple-beam": "^1.3.0",
-                "winston-transport": "^4.5.0"
+                "winston-transport": "^4.7.0"
             },
             "engines": {
                 "node": ">= 12.0.0"
@@ -9518,9 +9543,9 @@
             }
         },
         "node_modules/zod-validation-error": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.0.0.tgz",
-            "integrity": "sha512-x+agsJJG9rvC7axF0xqTEdZhJkLHyIZkdOAWDJSmwGPzxNHMHwtU6w2yDOAAP6yuSfTAUhAMJRBfhVGY64ySEQ==",
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.0.3.tgz",
+            "integrity": "sha512-cETTrcMq3Ze58vhdR0zD37uJm/694I6mAxcf/ei5bl89cC++fBNxrC2z8lkFze/8hVMPwrbtrwXHR2LB50fpHw==",
             "engines": {
                 "node": ">=18.0.0"
             },
diff --git a/ExpressAPI/package.json b/ExpressAPI/package.json
index 119426c..6ecabeb 100644
--- a/ExpressAPI/package.json
+++ b/ExpressAPI/package.json
@@ -1,7 +1,7 @@
 {
     "name"           : "dojo_backend_api",
     "description"    : "Backend API of the Dojo project",
-    "version"        : "3.6.0",
+    "version"        : "4.0.0",
     "license"        : "AGPLv3",
     "author"         : "Michaël Minelli <dojo@minelli.me>",
     "main"           : "dist/src/app.js",
-- 
GitLab