From 9d8258658ce5908cde7afe5078df28a853be2561 Mon Sep 17 00:00:00 2001 From: Kiril Kartunov Date: Mon, 4 May 2026 10:23:38 +0300 Subject: [PATCH 1/7] Delete .github/workflows/code_reviewer.yml --- .github/workflows/code_reviewer.yml | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 .github/workflows/code_reviewer.yml diff --git a/.github/workflows/code_reviewer.yml b/.github/workflows/code_reviewer.yml deleted file mode 100644 index 82c7862..0000000 --- a/.github/workflows/code_reviewer.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: AI PR Reviewer - -on: - pull_request: - types: - - opened - - synchronize -permissions: - pull-requests: write -jobs: - tc-ai-pr-review: - runs-on: ubuntu-latest - steps: - - name: Checkout Repo - uses: actions/checkout@v3 - - - name: TC AI PR Reviewer - uses: topcoder-platform/tc-ai-pr-reviewer@master - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # The GITHUB_TOKEN is there by default so you just need to keep it like it is and not necessarily need to add it as secret as it will throw an error. [More Details](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#about-the-github_token-secret) - LAB45_API_KEY: ${{ secrets.LAB45_API_KEY }} - exclude: '**/*.json, **/*.md, **/*.jpg, **/*.png, **/*.jpeg, **/*.bmp, **/*.webp' # Optional: exclude patterns separated by commas \ No newline at end of file From 88d7352fdee4061cb513ccf971373339733992c5 Mon Sep 17 00:00:00 2001 From: jmgasper Date: Thu, 21 May 2026 10:23:51 +1000 Subject: [PATCH 2/7] License file --- LICENSE | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 202 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From c26d41b5a622d2b7ee00944dbace20167782b143 Mon Sep 17 00:00:00 2001 From: jmgasper Date: Mon, 20 Jul 2026 12:57:49 +1000 Subject: [PATCH 3/7] fix(security): remediate Node.js CVE-2026-48930 and lodash CVE-2026-4800 Also fixes Axios CVE-2025-62718, UUID CVE-2026-41907, Nest CVE-2026-35515, Joi CVE-2026-48038, and vulnerable Alpine runtime packages. --- .dockerignore | 5 + .nvmrc | 2 +- Dockerfile | 39 +- README.md | 12 +- appStartUp.sh | 6 +- package.json | 33 +- pnpm-lock.yaml | 1324 ++++++++++++++++++++++--------------------- pnpm-workspace.yaml | 46 ++ 8 files changed, 788 insertions(+), 679 deletions(-) create mode 100644 .dockerignore create mode 100644 pnpm-workspace.yaml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..32801a2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +.git +.github +coverage +dist +node_modules diff --git a/.nvmrc b/.nvmrc index 4377937..eacd481 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.13.1 \ No newline at end of file +v26.5.0 diff --git a/Dockerfile b/Dockerfile index 8fb6467..8aba5c9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,41 @@ -# syntax=docker/dockerfile:1 +# syntax=docker/dockerfile:1.7 -FROM node:22.13.1-alpine +ARG NODE_VERSION=26.5.0 +ARG PNPM_VERSION=11.15.1 -RUN apk add --no-cache bash -RUN apk update +FROM node:${NODE_VERSION}-alpine AS build + +RUN apk upgrade --no-cache \ + && apk add --no-cache bash + +WORKDIR /app +COPY . . +RUN npm install --global pnpm@${PNPM_VERSION} +RUN pnpm install --frozen-lockfile +RUN pnpm run lint +RUN pnpm run build +RUN pnpm prune --prod +RUN node node_modules/prisma/build/index.js generate + +FROM node:${NODE_VERSION}-alpine AS runtime + +RUN apk upgrade --no-cache \ + && apk add --no-cache bash \ + && rm -rf /usr/local/lib/node_modules/npm \ + && rm -f /usr/local/bin/npm /usr/local/bin/npx ARG RESET_DB_ARG=false ENV RESET_DB=$RESET_DB_ARG ARG SEED_DATA_ARG="" ENV SEED_DATA=$SEED_DATA_ARG ENV PRISMA_CLI_BINARY_TARGETS=linux-musl-openssl-3.0.x +ENV NODE_ENV=production WORKDIR /app -COPY . . -RUN npm install pnpm -g -RUN pnpm install -RUN pnpm run build +COPY --from=build /app/dist ./dist +COPY --from=build /app/node_modules ./node_modules +COPY --from=build /app/prisma ./prisma +COPY --from=build /app/package.json ./package.json +COPY --from=build /app/appStartUp.sh ./appStartUp.sh RUN chmod +x appStartUp.sh -CMD ./appStartUp.sh \ No newline at end of file +CMD ["./appStartUp.sh"] diff --git a/README.md b/README.md index 1380d88..2a12247 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Group API built on modern frameworks for managing all group-related Topcoder needs. +Use Node.js 26.5.0 and pnpm 11.15.1. Run `nvm use` in this project before running pnpm commands. + ## Project setup ```bash @@ -30,12 +32,12 @@ docker run -p 5432:5432 -e POSTGRES_PASSWORD=mysecretpassword postgres:14 export DATABASE_URL="postgresql://postgres:mysecretpassword@localhost:5432/group-api?schema=groups" # run migration -npx prisma migrate dev +pnpm exec prisma migrate dev # seed data -npx prisma db seed +pnpm exec prisma db seed or -npx prisma migrate reset +pnpm exec prisma migrate reset # if you modify prisma schema, run migration again # and it'll ask @@ -54,8 +56,8 @@ npx prisma migrate reset - update the postgres database url in .env file — `DATABASE_URL="postgresql://postgres:mysecretpassword@localhost:5432/group-api?schema=groups"` - install dependencies `pnpm install` -- run the prisma migration `npx prisma migrate dev` -- run the prisma seed `npx prisma db seed` +- run the prisma migration `pnpm exec prisma migrate dev` +- run the prisma seed `pnpm exec prisma db seed` - run the project `pnpm run start` diff --git a/appStartUp.sh b/appStartUp.sh index 2eb0cbc..b399900 100755 --- a/appStartUp.sh +++ b/appStartUp.sh @@ -6,11 +6,11 @@ export DATABASE_URL=$(echo -e ${DATABASE_URL}) echo "Database - running migrations." if $RESET_DB; then echo "Resetting DB" - npx prisma migrate reset --force + node node_modules/prisma/build/index.js migrate reset --force else echo "Running migrations" - npx prisma migrate deploy + node node_modules/prisma/build/index.js migrate deploy fi # Start the app -pnpm start:prod \ No newline at end of file +exec node dist/src/main diff --git a/package.json b/package.json index 77bb486..4d4024c 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "description": "", "author": "", "private": true, + "packageManager": "pnpm@11.15.1", "license": "UNLICENSED", "scripts": { "build": "nest build", @@ -12,36 +13,36 @@ "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/src/main", - "lint": "eslint \"{src,apps,libs,test,prisma}/**/*.ts\" --fix", + "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\" \"prisma/**/*.ts\" --fix --no-error-on-unmatched-pattern", "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", - "postinstall": "npx prisma generate" + "postinstall": "pnpm exec prisma generate" }, "dependencies": { "@nestjs/axios": "^4.0.0", - "@nestjs/common": "^11.0.1", - "@nestjs/core": "^11.0.1", + "@nestjs/common": "^11.1.28", + "@nestjs/core": "^11.1.28", "@nestjs/mapped-types": "^2.1.0", - "@nestjs/platform-express": "^11.0.1", - "@nestjs/swagger": "^11.0.3", - "@prisma/client": "^6.3.1", - "@types/jsonwebtoken": "^9.0.9", - "axios": "^1.9.0", + "@nestjs/platform-express": "^11.1.28", + "@nestjs/swagger": "^11.4.6", + "@prisma/client": "6.19.3", + "axios": "^1.18.1", "class-transformer": "^0.5.1", - "class-validator": "^0.14.1", + "class-validator": "^0.14.4", "cors": "^2.8.5", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "^9.0.3", "jwks-rsa": "^3.2.0", - "lodash": "^4.17.21", - "qs": "^6.14.0", + "lodash": "^4.18.1", + "prisma": "6.19.3", + "qs": "^6.15.3", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", "tc-core-library-js": "topcoder-platform/tc-core-library-js.git#master", "tc-bus-api-wrapper": "github:topcoder-platform/tc-bus-api-wrapper.git", - "uuid": "^11.1.0" + "uuid": "^14.0.1" }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", @@ -53,6 +54,7 @@ "@swc/core": "^1.10.7", "@types/express": "^5.0.0", "@types/jest": "^29.5.14", + "@types/jsonwebtoken": "^9.0.10", "@types/lodash": "^4.17.20", "@types/node": "^22.10.7", "@types/supertest": "^6.0.2", @@ -63,7 +65,6 @@ "globals": "^15.14.0", "jest": "^29.7.0", "prettier": "^3.4.2", - "prisma": "^6.3.1", "source-map-support": "^0.5.21", "supertest": "^7.0.0", "ts-jest": "^29.2.5", @@ -75,7 +76,7 @@ "winston": "^3.17.0" }, "prisma": { - "seed": "ts-node prisma/seed.ts" + "seed": "node dist/prisma/seed.js" }, "jest": { "moduleFileExtensions": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 79402ba..815871c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,58 +4,89 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@isaacs/brace-expansion': 5.0.1 + ajv@^6.0.0: 6.14.0 + ajv@^8.0.0: 8.20.0 + axios: 1.18.1 + brace-expansion@^1.0.0: 1.1.13 + brace-expansion@^2.0.0: 2.0.3 + defu: 6.1.7 + effect@^3.0.0: 3.22.0 + fast-uri@^3.0.0: 3.1.2 + file-type: 21.3.2 + flatted: 3.4.2 + follow-redirects: 1.16.0 + form-data: 4.0.6 + handlebars: 4.7.9 + ip-address@^10.0.0: 10.1.1 + joi@^18.0.0: 18.2.1 + js-yaml@^4.0.0: 4.2.0 + jws: 4.0.1 + lodash: 4.18.1 + minimatch@^3.0.0: 3.1.4 + minimatch@^5.0.0: 5.1.8 + multer: 2.2.0 + path-to-regexp: 8.4.2 + picomatch@^2.0.0: 2.3.2 + picomatch@^4.0.0: 4.0.5 + piscina@^4.0.0: 4.9.3 + qs: 6.15.3 + uuid: 14.0.1 + yauzl: 3.2.1 + importers: .: dependencies: '@nestjs/axios': specifier: ^4.0.0 - version: 4.0.1(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.13.2)(rxjs@7.8.2) + version: 4.0.1(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(axios@1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1))(rxjs@7.8.2) '@nestjs/common': - specifier: ^11.0.1 - version: 11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + specifier: ^11.1.28 + version: 11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) '@nestjs/core': - specifier: ^11.0.1 - version: 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2) + specifier: ^11.1.28 + version: 11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.1.28)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/mapped-types': specifier: ^2.1.0 - version: 2.1.0(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2) + version: 2.1.0(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2) '@nestjs/platform-express': - specifier: ^11.0.1 - version: 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9) + specifier: ^11.1.28 + version: 11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(supports-color@8.1.1) '@nestjs/swagger': - specifier: ^11.0.3 - version: 11.2.3(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2) + specifier: ^11.4.6 + version: 11.4.6(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2) '@prisma/client': - specifier: ^6.3.1 - version: 6.19.1(prisma@6.19.1(typescript@5.9.3))(typescript@5.9.3) - '@types/jsonwebtoken': - specifier: ^9.0.9 - version: 9.0.10 + specifier: 6.19.3 + version: 6.19.3(prisma@6.19.3(typescript@5.9.3))(typescript@5.9.3) axios: - specifier: ^1.9.0 - version: 1.13.2 + specifier: 1.18.1 + version: 1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) class-transformer: specifier: ^0.5.1 version: 0.5.1 class-validator: - specifier: ^0.14.1 - version: 0.14.3 + specifier: ^0.14.4 + version: 0.14.4 cors: specifier: ^2.8.5 version: 2.8.5 jsonwebtoken: - specifier: ^9.0.2 + specifier: ^9.0.3 version: 9.0.3 jwks-rsa: specifier: ^3.2.0 - version: 3.2.0 + version: 3.2.0(supports-color@8.1.1) lodash: - specifier: ^4.17.21 - version: 4.17.21 + specifier: 4.18.1 + version: 4.18.1 + prisma: + specifier: 6.19.3 + version: 6.19.3(typescript@5.9.3) qs: - specifier: ^6.14.0 - version: 6.14.0 + specifier: 6.15.3 + version: 6.15.3 reflect-metadata: specifier: ^0.2.2 version: 0.2.2 @@ -64,32 +95,32 @@ importers: version: 7.8.2 tc-bus-api-wrapper: specifier: github:topcoder-platform/tc-bus-api-wrapper.git - version: '@topcoder-platform/topcoder-bus-api-wrapper@https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833' + version: '@topcoder-platform/topcoder-bus-api-wrapper@https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1)' tc-core-library-js: specifier: topcoder-platform/tc-core-library-js.git#master - version: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4 + version: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) uuid: - specifier: ^11.1.0 - version: 11.1.0 + specifier: 14.0.1 + version: 14.0.1 devDependencies: '@eslint/eslintrc': specifier: ^3.2.0 - version: 3.3.3 + version: 3.3.3(supports-color@8.1.1) '@eslint/js': specifier: ^9.18.0 version: 9.39.2 '@nestjs/cli': specifier: ^11.0.0 - version: 11.0.14(@swc/cli@0.6.0(@swc/core@1.15.5)(chokidar@4.0.3))(@swc/core@1.15.5)(@types/node@22.19.3) + version: 11.0.14(@swc/cli@0.6.0(@swc/core@1.15.5)(chokidar@4.0.3)(supports-color@8.1.1))(@swc/core@1.15.5)(@types/node@22.19.3)(uglify-js@3.19.3) '@nestjs/schematics': specifier: ^11.0.0 version: 11.0.9(chokidar@4.0.3)(typescript@5.9.3) '@nestjs/testing': specifier: ^11.0.1 - version: 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)(@nestjs/platform-express@11.1.9) + version: 11.1.9(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(@nestjs/platform-express@11.1.28) '@swc/cli': specifier: ^0.6.0 - version: 0.6.0(@swc/core@1.15.5)(chokidar@4.0.3) + version: 0.6.0(@swc/core@1.15.5)(chokidar@4.0.3)(supports-color@8.1.1) '@swc/core': specifier: ^1.10.7 version: 1.15.5 @@ -99,6 +130,9 @@ importers: '@types/jest': specifier: ^29.5.14 version: 29.5.14 + '@types/jsonwebtoken': + specifier: ^9.0.10 + version: 9.0.10 '@types/lodash': specifier: ^4.17.20 version: 4.17.21 @@ -110,40 +144,37 @@ importers: version: 6.0.3 eslint: specifier: ^9.18.0 - version: 9.39.2(jiti@2.6.1) + version: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) eslint-config-prettier: specifier: ^10.0.1 - version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1)) eslint-plugin-prettier: specifier: ^5.2.2 - version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.7.4) + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1)))(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(prettier@3.7.4) express: specifier: ^5.1.0 - version: 5.2.1 + version: 5.2.1(supports-color@8.1.1) globals: specifier: ^15.14.0 version: 15.15.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + version: 29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) prettier: specifier: ^3.4.2 version: 3.7.4 - prisma: - specifier: ^6.3.1 - version: 6.19.1(typescript@5.9.3) source-map-support: specifier: ^0.5.21 version: 0.5.21 supertest: specifier: ^7.0.0 - version: 7.1.4 + version: 7.1.4(supports-color@8.1.1) ts-jest: specifier: ^29.2.5 - version: 29.4.6(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.6(@babel/core@7.28.5(supports-color@8.1.1))(@jest/transform@29.7.0(supports-color@8.1.1))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3) ts-loader: specifier: ^9.5.2 - version: 9.5.4(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)) + version: 9.5.4(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)) ts-node: specifier: ^10.9.2 version: 10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3) @@ -155,7 +186,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: ^8.20.0 - version: 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) winston: specifier: ^3.17.0 version: 3.19.0 @@ -597,8 +628,8 @@ packages: resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} engines: {node: 20 || >=22} - '@isaacs/brace-expansion@5.0.0': - resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + '@isaacs/brace-expansion@5.0.1': + resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} engines: {node: 20 || >=22} '@istanbuljs/load-nyc-config@1.1.0': @@ -745,42 +776,49 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-arm64-musl@1.1.1': resolution: {integrity: sha512-+2Rzdb3nTIYZ0YJF43qf2twhqOCkiSrHx2Pg6DJaCPYhhaxbLcdlV8hCRMHghQ+EtZQWGNcS2xF4KxBhSGeutg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@napi-rs/nice-linux-ppc64-gnu@1.1.1': resolution: {integrity: sha512-4FS8oc0GeHpwvv4tKciKkw3Y4jKsL7FRhaOeiPei0X9T4Jd619wHNe4xCLmN2EMgZoeGg+Q7GY7BsvwKpL22Tg==} engines: {node: '>= 10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-riscv64-gnu@1.1.1': resolution: {integrity: sha512-HU0nw9uD4FO/oGCCk409tCi5IzIZpH2agE6nN4fqpwVlCn5BOq0MS1dXGjXaG17JaAvrlpV5ZeyZwSon10XOXw==} engines: {node: '>= 10'} cpu: [riscv64] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-s390x-gnu@1.1.1': resolution: {integrity: sha512-2YqKJWWl24EwrX0DzCQgPLKQBxYDdBxOHot1KWEq7aY2uYeX+Uvtv4I8xFVVygJDgf6/92h9N3Y43WPx8+PAgQ==} engines: {node: '>= 10'} cpu: [s390x] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-x64-gnu@1.1.1': resolution: {integrity: sha512-/gaNz3R92t+dcrfCw/96pDopcmec7oCcAQ3l/M+Zxr82KT4DljD37CpgrnXV+pJC263JkW572pdbP3hP+KjcIg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@napi-rs/nice-linux-x64-musl@1.1.1': resolution: {integrity: sha512-xScCGnyj/oppsNPMnevsBe3pvNaoK7FGvMjT35riz9YdhB2WtTG47ZlbxtOLpjeO9SqqQ2J2igCmz6IJOD5JYw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@napi-rs/nice-openharmony-arm64@1.1.1': resolution: {integrity: sha512-6uJPRVwVCLDeoOaNyeiW0gp2kFIM4r7PL2MczdZQHkFi9gVlgm+Vn+V6nTWRcu856mJ2WjYJiumEajfSm7arPQ==} @@ -814,7 +852,7 @@ packages: resolution: {integrity: sha512-68pFJgu+/AZbWkGu65Z3r55bTsCPlgyKaV4BSG8yUAD72q1PPuyVRgUwFv6BxdnibTUHlyxm06FmYWNC+bjN7A==} peerDependencies: '@nestjs/common': ^10.0.0 || ^11.0.0 - axios: ^1.3.1 + axios: 1.18.1 rxjs: ^7.0.0 '@nestjs/cli@11.0.14': @@ -830,8 +868,8 @@ packages: '@swc/core': optional: true - '@nestjs/common@11.1.9': - resolution: {integrity: sha512-zDntUTReRbAThIfSp3dQZ9kKqI+LjgLp5YZN5c1bgNRDuoeLySAoZg46Bg1a+uV8TMgIRziHocglKGNzr6l+bQ==} + '@nestjs/common@11.1.28': + resolution: {integrity: sha512-bRImsxibie+AM7xjdwcrm/gr5YeacI65kSBNzTufa1Ib5iwziaY/lqMtRh9THq6pbV4e1HP9aI2ZxGUumnmaoQ==} peerDependencies: class-transformer: '>=0.4.1' class-validator: '>=0.13.2' @@ -843,8 +881,8 @@ packages: class-validator: optional: true - '@nestjs/core@11.1.9': - resolution: {integrity: sha512-a00B0BM4X+9z+t3UxJqIZlemIwCQdYoPKrMcM+ky4z3pkqqG1eTWexjs+YXpGObnLnjtMPVKWlcZHp3adDYvUw==} + '@nestjs/core@11.1.28': + resolution: {integrity: sha512-06m63xIRj8+l8uOeh/8LnYupGubkyu4f+bPKIadaSui6vK9KpXgoz7HveT1yOVLcEt0M0oCOEW5EuEXZkEmBBQ==} engines: {node: '>= 20'} peerDependencies: '@nestjs/common': ^11.0.0 @@ -874,8 +912,21 @@ packages: class-validator: optional: true - '@nestjs/platform-express@11.1.9': - resolution: {integrity: sha512-GVd3+0lO0mJq2m1kl9hDDnVrX3Nd4oH3oDfklz0pZEVEVS0KVSp63ufHq2Lu9cyPdSBuelJr9iPm2QQ1yX+Kmw==} + '@nestjs/mapped-types@2.1.1': + resolution: {integrity: sha512-SCCoMEJ6jdeI5h/N+KCVF1+pmg/hmEkNA5nHTS8Gvww7T/LCl4o1gFLinw2iQ60w7slFkszHcGLKGdazVI4F8A==} + peerDependencies: + '@nestjs/common': ^10.0.0 || ^11.0.0 + class-transformer: ^0.4.0 || ^0.5.0 + class-validator: ^0.13.0 || ^0.14.0 || ^0.15.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/platform-express@11.1.28': + resolution: {integrity: sha512-hU+9Sz4m+onHrR5AmelI59QKmY/Re546bPnygnpqqeQdHDiJpBgjWbL4t6Jr73CBpS60cpyng7WzjgphNB9iwA==} peerDependencies: '@nestjs/common': ^11.0.0 '@nestjs/core': ^11.0.0 @@ -885,10 +936,10 @@ packages: peerDependencies: typescript: '>=4.8.2' - '@nestjs/swagger@11.2.3': - resolution: {integrity: sha512-a0xFfjeqk69uHIUpP8u0ryn4cKuHdra2Ug96L858i0N200Hxho+n3j+TlQXyOF4EstLSGjTfxI1Xb2E1lUxeNg==} + '@nestjs/swagger@11.4.6': + resolution: {integrity: sha512-Le136h2WC7HGsd70+WyK1qrm+Zq7kFxBLkYC1JgAVqNRCt8kNh7bMF7Qkn65D5j2t/aks0+VbWmUVlYIwPrs3A==} peerDependencies: - '@fastify/static': ^8.0.0 + '@fastify/static': ^8.0.0 || ^9.0.0 || ^10.0.0 '@nestjs/common': ^11.0.1 '@nestjs/core': ^11.0.1 class-transformer: '*' @@ -931,11 +982,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nuxt/opencollective@0.4.1': - resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==} - engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'} - hasBin: true - '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} @@ -943,8 +989,8 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@prisma/client@6.19.1': - resolution: {integrity: sha512-4SXj4Oo6HyQkLUWT8Ke5R0PTAfVOKip5Roo+6+b2EDTkFg5be0FnBWiuRJc0BC0sRQIWGMLKW1XguhVfW/z3/A==} + '@prisma/client@6.19.3': + resolution: {integrity: sha512-mKq3jQFhjvko5LTJFHGilsuQs+W+T3Gm451NzuTDGQxwCzwXHYnIu2zGkRoW+Exq3Rob7yp2MfzSrdIiZVhrBg==} engines: {node: '>=18.18'} peerDependencies: prisma: '*' @@ -955,23 +1001,23 @@ packages: typescript: optional: true - '@prisma/config@6.19.1': - resolution: {integrity: sha512-bUL/aYkGXLwxVGhJmQMtslLT7KPEfUqmRa919fKI4wQFX4bIFUKiY8Jmio/2waAjjPYrtuDHa7EsNCnJTXxiOw==} + '@prisma/config@6.19.3': + resolution: {integrity: sha512-CBPT44BjlQxEt8kiMEauji2WHTDoVBOKl7UlewXmUgBPnr/oPRZC3psci5chJnYmH0ivEIog2OU9PGWoki3DLQ==} - '@prisma/debug@6.19.1': - resolution: {integrity: sha512-h1JImhlAd/s5nhY/e9qkAzausWldbeT+e4nZF7A4zjDYBF4BZmKDt4y0jK7EZapqOm1kW7V0e9agV/iFDy3fWw==} + '@prisma/debug@6.19.3': + resolution: {integrity: sha512-ljkJ+SgpXNktLG0Q/n4JGYCkKf0f8oYLyjImS2I8e2q2WCfdRRtWER062ZV/ixaNP2M2VKlWXVJiGzZaUgbKZw==} '@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': resolution: {integrity: sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==} - '@prisma/engines@6.19.1': - resolution: {integrity: sha512-xy95dNJ7DiPf9IJ3oaVfX785nbFl7oNDzclUF+DIiJw6WdWCvPl0LPU0YqQLsrwv8N64uOQkH391ujo3wSo+Nw==} + '@prisma/engines@6.19.3': + resolution: {integrity: sha512-RSYxtlYFl5pJ8ZePgMv0lZ9IzVCOdTPOegrs2qcbAEFrBI1G33h6wyC9kjQvo0DnYEhEVY0X4LsuFHXLKQk88g==} - '@prisma/fetch-engine@6.19.1': - resolution: {integrity: sha512-mmgcotdaq4VtAHO6keov3db+hqlBzQS6X7tR7dFCbvXjLVTxBYdSJFRWz+dq7F9p6dvWyy1X0v8BlfRixyQK6g==} + '@prisma/fetch-engine@6.19.3': + resolution: {integrity: sha512-tKtl/qco9Nt7LU5iKhpultD8O4vMCZcU2CHjNTnRrL1QvSUr5W/GcyFPjNL87GtRrwBc7ubXXD9xy4EvLvt8JA==} - '@prisma/get-platform@6.19.1': - resolution: {integrity: sha512-zsg44QUiQAnFUyh6Fbt7c9HjMXHwFTqtrgcX7DAZmRgnkPyYT7Sh8Mn8D5PuuDYNtMOYcpLGg576MLfIORsBYw==} + '@prisma/get-platform@6.19.3': + resolution: {integrity: sha512-xFj1VcJ1N3MKooOQAGO0W5tsd0W2QzIvW7DD7c/8H14Zmp4jseeWAITm+w2LLoLrlhoHdPPh0NMZ8mfL6puoHA==} '@scarf/scarf@1.4.0': resolution: {integrity: sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==} @@ -1029,24 +1075,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.15.5': resolution: {integrity: sha512-Of+wmVh5h47tTpN9ghHVjfL0CJrgn99XmaJjmzWFW7agPdVY6gTDgkk6zQ6q4hcDQ7hXb0BGw6YFpuanBzNPow==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.15.5': resolution: {integrity: sha512-98kuPS0lZVgjmc/2uTm39r1/OfwKM0PM13ZllOAWi5avJVjRd/j1xA9rKeUzHDWt+ocH9mTCQsAT1jjKSq45bg==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.15.5': resolution: {integrity: sha512-Rk+OtNQP3W/dZExL74LlaakXAQn6/vbrgatmjFqJPO4RZkq+nLo5g7eDUVjyojuERh7R2yhqNvZ/ZZQe8JQqqA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.15.5': resolution: {integrity: sha512-e3RTdJ769+PrN25iCAlxmsljEVu6iIWS7sE21zmlSiipftBQvSAOWuCDv2A8cH9lm5pSbZtwk8AUpIYCNsj2oQ==} @@ -1085,19 +1135,15 @@ packages: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} - '@tokenizer/inflate@0.2.7': - resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} - engines: {node: '>=18'} - - '@tokenizer/inflate@0.3.1': - resolution: {integrity: sha512-4oeoZEBQdLdt5WmP/hx1KZ6D3/Oid/0cUb2nk4F0pTDAWy+KCH3/EnAkZF/bvckWo8I33EqBm01lIPgmgc8rCA==} + '@tokenizer/inflate@0.4.1': + resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==} engines: {node: '>=18'} '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} '@topcoder-platform/topcoder-bus-api-wrapper@https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833': - resolution: {tarball: https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833} + resolution: {gitHosted: true, tarball: https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833} version: 1.2.0 '@tsconfig/node10@1.0.12': @@ -1409,10 +1455,14 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: - ajv: ^8.0.0 + ajv: 8.20.0 peerDependenciesMeta: ajv: optional: true @@ -1420,7 +1470,7 @@ packages: ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: - ajv: ^8.0.0 + ajv: 8.20.0 peerDependenciesMeta: ajv: optional: true @@ -1428,18 +1478,18 @@ packages: ajv-keywords@3.5.2: resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} peerDependencies: - ajv: ^6.9.1 + ajv: 6.14.0 ajv-keywords@5.1.0: resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: - ajv: ^8.8.2 + ajv: 8.20.0 - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} @@ -1496,11 +1546,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - axios@0.30.2: - resolution: {integrity: sha512-0pE4RQ4UQi1jKY6p7u6i1Tkzqmu+d+/tHS7Q7rKunWLB9WyilBTpHHpXzPNMDj5hTbK0B0PTLSz07yqMBiF6xg==} - - axios@1.13.2: - resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + axios@1.18.1: + resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} b4a@1.7.3: resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} @@ -1572,11 +1619,11 @@ packages: resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==} engines: {node: '>=18'} - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@1.1.13: + resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.0.3: + resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -1690,8 +1737,8 @@ packages: class-transformer@0.5.1: resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} - class-validator@0.14.3: - resolution: {integrity: sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA==} + class-validator@0.14.4: + resolution: {integrity: sha512-AwNusCCam51q703dW82x95tOqQp6oC9HNUl724KxJJOfnKscI8dOloXFgyez7LbTTKWuRBA37FScqVbJEoq8Yw==} cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} @@ -1823,6 +1870,10 @@ packages: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -1887,8 +1938,8 @@ packages: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -1934,8 +1985,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - effect@3.18.4: - resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} + effect@3.22.0: + resolution: {integrity: sha512-jhYFe0zTlIRqYFrKTS+6luhmS/Tm0f+JLo0K9KUxvtFab1SUGEszQi2ehOP6QzAZvy831lDmTwwzvVDZSPNz3g==} electron-to-chromium@1.5.267: resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} @@ -2097,10 +2148,6 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - express@5.1.0: - resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} - engines: {node: '>= 18'} - express@5.2.1: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} @@ -2142,8 +2189,8 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -2155,7 +2202,7 @@ packages: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} peerDependencies: - picomatch: ^3 || ^4 + picomatch: 4.0.5 peerDependenciesMeta: picomatch: optional: true @@ -2163,19 +2210,12 @@ packages: fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - file-type@20.5.0: - resolution: {integrity: sha512-BfHZtG/l9iMm4Ecianu7P8HRD2tBHLtjXinm4X62XBOYzi7CYA7jyqfJzOvXHqzVrVPYqBo2/GvbARMaaJkKVg==} - engines: {node: '>=18'} - - file-type@21.1.0: - resolution: {integrity: sha512-boU4EHmP3JXkwDo4uhyBhTt5pPstxB6eEXKJBu2yu2l7aAMMm7QQYQEzssJmKReZYrFdFOJS8koVo6bXIBGDqA==} + file-type@21.3.2: + resolution: {integrity: sha512-DLkUvGwep3poOV2wpzbHCOnSKGk1LzyXTv+aHFgN2VFl96wnp8YA9YjO2qPzg5PuL8q/SW9Pdi6WTkYOIh995w==} engines: {node: '>=20'} filename-reserved-regex@3.0.0: @@ -2210,14 +2250,14 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -2236,8 +2276,8 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} engines: {node: '>= 6'} formidable@3.5.4: @@ -2315,11 +2355,11 @@ packages: glob@6.0.4: resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} @@ -2340,8 +2380,8 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + handlebars@4.7.9: + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} engines: {node: '>=0.4.7'} hasBin: true @@ -2361,6 +2401,10 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -2375,6 +2419,10 @@ packages: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -2635,8 +2683,8 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - joi@18.0.2: - resolution: {integrity: sha512-RuCOQMIt78LWnktPoeBL0GErkNaJPTBGcYuyaBvUOQSpcpcLfWrHPPihYdOGbV5pam9VTWbeoF7TsGiHugcjGA==} + joi@18.2.1: + resolution: {integrity: sha512-2/OKlogiESf2Nh3TFCrRjrr9z1DRHeW0I+KReF67+4J0Ns+8hBtHRmoWAZ2OFU6I5+TWLEe6sVlSdXPjHm5UbQ==} engines: {node: '>= 20'} jose@4.15.9: @@ -2649,8 +2697,12 @@ packages: resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + js-yaml@4.2.0: + resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + hasBin: true + + js-yaml@5.2.1: + resolution: {integrity: sha512-zfLtNfQqxVqq3uaTqSkh4x4hZw3KHobGUA0fJUj4wawW8bsQLTVqpHdXSIzidh7o+4lEW36tANuAGdaFx6Zgnw==} hasBin: true jsesc@3.1.0: @@ -2778,8 +2830,8 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -2895,8 +2947,8 @@ packages: resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.4: + resolution: {integrity: sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==} minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} @@ -2919,8 +2971,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multer@2.0.2: - resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} + multer@2.2.0: + resolution: {integrity: sha512-6rdyFg2kLrMh9Jee7/BMPuV9lEAd7lLW2YUpF9/YxR7njyoUwwQ0ZPh3TaIY50Sw6vlyD2HW3wGOkTS4P79xrQ==} engines: {node: '>= 10.16.0'} mute-stream@2.0.0: @@ -3068,8 +3120,8 @@ packages: resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} engines: {node: 20 || >=22} - path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -3087,24 +3139,20 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.5: + resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - piscina@4.9.2: - resolution: {integrity: sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ==} + piscina@4.9.3: + resolution: {integrity: sha512-3e3ka9QCE8RJ5I9uszdAADZnkcYi21cqmF3gxox3u884N72qpFHCsIVhHt8cEQ9t3Auq/NqoiCEuhxlxxQuDWA==} pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} @@ -3138,8 +3186,8 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - prisma@6.19.1: - resolution: {integrity: sha512-XRfmGzh6gtkc/Vq3LqZJcS2884dQQW3UhPo6jNRoiTW95FFQkXFg8vkYEy6og+Pyv0aY7zRQ7Wn1Cvr56XjhQQ==} + prisma@6.19.3: + resolution: {integrity: sha512-++ZJ0ijLrDJF6hNB4t4uxg2br3fC4H9Yc9tcbjr2fcNFP3rh/SBNrAgjhsqBU4Ght8JPrVofG/ZkXfnSfnYsFg==} engines: {node: '>=18.18'} hasBin: true peerDependencies: @@ -3156,8 +3204,9 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -3166,8 +3215,8 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + qs@6.15.3: + resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -3342,8 +3391,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} engines: {node: '>= 0.4'} side-channel-map@1.0.1: @@ -3354,8 +3403,8 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} engines: {node: '>= 0.4'} signal-exit@3.0.7: @@ -3477,8 +3526,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swagger-ui-dist@5.30.2: - resolution: {integrity: sha512-HWCg1DTNE/Nmapt+0m2EPXFwNKNeKK4PwMjkwveN/zn1cV2Kxi9SURd+m0SpdcSgWEK/O64sf8bzXdtUhigtHA==} + swagger-ui-dist@5.32.8: + resolution: {integrity: sha512-dgMdWXIgnI4zX4OPhKEdWnlDODbgm8W3AX0Ivn/BBqcUh6xZsBxhZMnvk6DJyRz1BTrj8dPxtarmEGgkz30oyA==} symbol-observable@4.0.0: resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} @@ -3496,7 +3545,12 @@ packages: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} tc-core-library-js@https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4: - resolution: {tarball: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4} + resolution: {gitHosted: true, tarball: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4} + version: 3.0.1 + engines: {node: '>= 14'} + + tc-core-library-js@https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/323567bc50e433ae488b656f9f94e821ebaf3062: + resolution: {gitHosted: true, tarball: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/323567bc50e433ae488b656f9f94e821ebaf3062} version: 3.0.1 engines: {node: '>= 14'} @@ -3704,8 +3758,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@11.1.0: - resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + uuid@14.0.1: + resolution: {integrity: sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==} hasBin: true v8-compile-cache-lib@3.0.1: @@ -3786,10 +3840,6 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -3808,8 +3858,8 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} - yauzl@3.2.0: - resolution: {integrity: sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==} + yauzl@3.2.1: + resolution: {integrity: sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A==} engines: {node: '>=12'} yn@3.1.1: @@ -3828,10 +3878,10 @@ snapshots: '@angular-devkit/core@19.2.17(chokidar@4.0.3)': dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) jsonc-parser: 3.3.1 - picomatch: 4.0.2 + picomatch: 4.0.5 rxjs: 7.8.1 source-map: 0.7.4 optionalDependencies: @@ -3839,10 +3889,10 @@ snapshots: '@angular-devkit/core@19.2.19(chokidar@4.0.3)': dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) jsonc-parser: 3.3.1 - picomatch: 4.0.2 + picomatch: 4.0.5 rxjs: 7.8.1 source-map: 0.7.4 optionalDependencies: @@ -3888,20 +3938,20 @@ snapshots: '@babel/compat-data@7.28.5': {} - '@babel/core@7.28.5': + '@babel/core@7.28.5(supports-color@8.1.1)': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5) + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1) '@babel/helpers': 7.28.4 '@babel/parser': 7.28.5 '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.5(supports-color@8.1.1) '@babel/types': 7.28.5 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -3926,19 +3976,19 @@ snapshots: '@babel/helper-globals@7.28.0': {} - '@babel/helper-module-imports@7.27.1': + '@babel/helper-module-imports@7.27.1(supports-color@8.1.1)': dependencies: - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.5(supports-color@8.1.1) '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)': + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: - '@babel/core': 7.28.5 - '@babel/helper-module-imports': 7.27.1 + '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/helper-module-imports': 7.27.1(supports-color@8.1.1) '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5 + '@babel/traverse': 7.28.5(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -3959,89 +4009,89 @@ snapshots: dependencies: '@babel/types': 7.28.5 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 '@babel/template@7.27.2': @@ -4050,7 +4100,7 @@ snapshots: '@babel/parser': 7.28.5 '@babel/types': 7.28.5 - '@babel/traverse@7.28.5': + '@babel/traverse@7.28.5(supports-color@8.1.1)': dependencies: '@babel/code-frame': 7.27.1 '@babel/generator': 7.28.5 @@ -4058,7 +4108,7 @@ snapshots: '@babel/parser': 7.28.5 '@babel/template': 7.27.2 '@babel/types': 7.28.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -4086,18 +4136,18 @@ snapshots: enabled: 2.0.0 kuler: 2.0.0 - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))': dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.21.1(supports-color@8.1.1)': dependencies: '@eslint/object-schema': 2.1.7 - debug: 4.4.3 - minimatch: 3.1.2 + debug: 4.4.3(supports-color@8.1.1) + minimatch: 3.1.4 transitivePeerDependencies: - supports-color @@ -4109,16 +4159,16 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.3': + '@eslint/eslintrc@3.3.3(supports-color@8.1.1)': dependencies: - ajv: 6.12.6 - debug: 4.4.3 + ajv: 6.14.0 + debug: 4.4.3(supports-color@8.1.1) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.1 - minimatch: 3.1.2 + js-yaml: 4.2.0 + minimatch: 3.1.4 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color @@ -4301,7 +4351,7 @@ snapshots: '@isaacs/balanced-match@4.0.1': {} - '@isaacs/brace-expansion@5.0.0': + '@isaacs/brace-expansion@5.0.1': dependencies: '@isaacs/balanced-match': 4.0.1 @@ -4324,12 +4374,12 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3))': + '@jest/core@29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3))': dependencies: '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 + '@jest/reporters': 29.7.0(supports-color@8.1.1) '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 '@types/node': 22.19.3 ansi-escapes: 4.3.2 @@ -4338,15 +4388,15 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 jest-resolve: 29.7.0 - jest-resolve-dependencies: 29.7.0 - jest-runner: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 + jest-resolve-dependencies: 29.7.0(supports-color@8.1.1) + jest-runner: 29.7.0(supports-color@8.1.1) + jest-runtime: 29.7.0(supports-color@8.1.1) + jest-snapshot: 29.7.0(supports-color@8.1.1) jest-util: 29.7.0 jest-validate: 29.7.0 jest-watcher: 29.7.0 @@ -4370,10 +4420,10 @@ snapshots: dependencies: jest-get-type: 29.6.3 - '@jest/expect@29.7.0': + '@jest/expect@29.7.0(supports-color@8.1.1)': dependencies: expect: 29.7.0 - jest-snapshot: 29.7.0 + jest-snapshot: 29.7.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -4386,21 +4436,21 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - '@jest/globals@29.7.0': + '@jest/globals@29.7.0(supports-color@8.1.1)': dependencies: '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 + '@jest/expect': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 jest-mock: 29.7.0 transitivePeerDependencies: - supports-color - '@jest/reporters@29.7.0': + '@jest/reporters@29.7.0(supports-color@8.1.1)': dependencies: '@bcoe/v8-coverage': 0.2.3 '@jest/console': 29.7.0 '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 '@types/node': 22.19.3 @@ -4410,9 +4460,9 @@ snapshots: glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.2 - istanbul-lib-instrument: 6.0.3 + istanbul-lib-instrument: 6.0.3(supports-color@8.1.1) istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 + istanbul-lib-source-maps: 4.0.1(supports-color@8.1.1) istanbul-reports: 3.2.0 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4448,12 +4498,12 @@ snapshots: jest-haste-map: 29.7.0 slash: 3.0.0 - '@jest/transform@29.7.0': + '@jest/transform@29.7.0(supports-color@8.1.1)': dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 - babel-plugin-istanbul: 6.1.1 + babel-plugin-istanbul: 6.1.1(supports-color@8.1.1) chalk: 4.1.2 convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 @@ -4582,13 +4632,13 @@ snapshots: '@napi-rs/nice-win32-x64-msvc': 1.1.1 optional: true - '@nestjs/axios@4.0.1(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(axios@1.13.2)(rxjs@7.8.2)': + '@nestjs/axios@4.0.1(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(axios@1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1))(rxjs@7.8.2)': dependencies: - '@nestjs/common': 11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) - axios: 1.13.2 + '@nestjs/common': 11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + axios: 1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) rxjs: 7.8.2 - '@nestjs/cli@11.0.14(@swc/cli@0.6.0(@swc/core@1.15.5)(chokidar@4.0.3))(@swc/core@1.15.5)(@types/node@22.19.3)': + '@nestjs/cli@11.0.14(@swc/cli@0.6.0(@swc/core@1.15.5)(chokidar@4.0.3)(supports-color@8.1.1))(@swc/core@1.15.5)(@types/node@22.19.3)(uglify-js@3.19.3)': dependencies: '@angular-devkit/core': 19.2.19(chokidar@4.0.3) '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3) @@ -4599,17 +4649,17 @@ snapshots: chokidar: 4.0.3 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)) + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)) glob: 13.0.0 node-emoji: 1.11.0 ora: 5.4.1 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 typescript: 5.9.3 - webpack: 5.103.0(@swc/core@1.15.5) + webpack: 5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3) webpack-node-externals: 3.0.0 optionalDependencies: - '@swc/cli': 0.6.0(@swc/core@1.15.5)(chokidar@4.0.3) + '@swc/cli': 0.6.0(@swc/core@1.15.5)(chokidar@4.0.3)(supports-color@8.1.1) '@swc/core': 1.15.5 transitivePeerDependencies: - '@types/node' @@ -4617,9 +4667,9 @@ snapshots: - uglify-js - webpack-cli - '@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + '@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1)': dependencies: - file-type: 21.1.0 + file-type: 21.3.2(supports-color@8.1.1) iterare: 1.2.1 load-esm: 1.0.3 reflect-metadata: 0.2.2 @@ -4628,40 +4678,47 @@ snapshots: uid: 2.0.2 optionalDependencies: class-transformer: 0.5.1 - class-validator: 0.14.3 + class-validator: 0.14.4 transitivePeerDependencies: - supports-color - '@nestjs/core@11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2)': + '@nestjs/core@11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.1.28)(reflect-metadata@0.2.2)(rxjs@7.8.2)': dependencies: - '@nestjs/common': 11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nuxt/opencollective': 0.4.1 + '@nestjs/common': 11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) fast-safe-stringify: 2.1.1 iterare: 1.2.1 - path-to-regexp: 8.3.0 + path-to-regexp: 8.4.2 reflect-metadata: 0.2.2 rxjs: 7.8.2 tslib: 2.8.1 uid: 2.0.2 optionalDependencies: - '@nestjs/platform-express': 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9) + '@nestjs/platform-express': 11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(supports-color@8.1.1) + + '@nestjs/mapped-types@2.1.0(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)': + dependencies: + '@nestjs/common': 11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + reflect-metadata: 0.2.2 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.4 - '@nestjs/mapped-types@2.1.0(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)': + '@nestjs/mapped-types@2.1.1(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)': dependencies: - '@nestjs/common': 11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) reflect-metadata: 0.2.2 optionalDependencies: class-transformer: 0.5.1 - class-validator: 0.14.3 + class-validator: 0.14.4 - '@nestjs/platform-express@11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)': + '@nestjs/platform-express@11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(supports-color@8.1.1)': dependencies: - '@nestjs/common': 11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2) - cors: 2.8.5 - express: 5.1.0 - multer: 2.0.2 - path-to-regexp: 8.3.0 + '@nestjs/common': 11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.1.28)(reflect-metadata@0.2.2)(rxjs@7.8.2) + cors: 2.8.6 + express: 5.2.1(supports-color@8.1.1) + multer: 2.2.0 + path-to-regexp: 8.4.2 tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -4677,28 +4734,28 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/swagger@11.2.3(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)': + '@nestjs/swagger@11.4.6(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)': dependencies: '@microsoft/tsdoc': 0.16.0 - '@nestjs/common': 11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/mapped-types': 2.1.0(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2) - js-yaml: 4.1.1 - lodash: 4.17.21 - path-to-regexp: 8.3.0 + '@nestjs/common': 11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.1.28)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/mapped-types': 2.1.1(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2) + js-yaml: 5.2.1 + lodash: 4.18.1 + path-to-regexp: 8.4.2 reflect-metadata: 0.2.2 - swagger-ui-dist: 5.30.2 + swagger-ui-dist: 5.32.8 optionalDependencies: class-transformer: 0.5.1 - class-validator: 0.14.3 + class-validator: 0.14.4 - '@nestjs/testing@11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9)(@nestjs/platform-express@11.1.9)': + '@nestjs/testing@11.1.9(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(@nestjs/platform-express@11.1.28)': dependencies: - '@nestjs/common': 11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2) - '@nestjs/core': 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.9)(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nestjs/common': 11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1) + '@nestjs/core': 11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/platform-express@11.1.28)(reflect-metadata@0.2.2)(rxjs@7.8.2) tslib: 2.8.1 optionalDependencies: - '@nestjs/platform-express': 11.1.9(@nestjs/common@11.1.9(class-transformer@0.5.1)(class-validator@0.14.3)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.9) + '@nestjs/platform-express': 11.1.28(@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1))(@nestjs/core@11.1.28)(supports-color@8.1.1) '@noble/hashes@1.8.0': {} @@ -4714,50 +4771,46 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nuxt/opencollective@0.4.1': - dependencies: - consola: 3.4.2 - '@paralleldrive/cuid2@2.3.1': dependencies: '@noble/hashes': 1.8.0 '@pkgr/core@0.2.9': {} - '@prisma/client@6.19.1(prisma@6.19.1(typescript@5.9.3))(typescript@5.9.3)': + '@prisma/client@6.19.3(prisma@6.19.3(typescript@5.9.3))(typescript@5.9.3)': optionalDependencies: - prisma: 6.19.1(typescript@5.9.3) + prisma: 6.19.3(typescript@5.9.3) typescript: 5.9.3 - '@prisma/config@6.19.1': + '@prisma/config@6.19.3': dependencies: c12: 3.1.0 deepmerge-ts: 7.1.5 - effect: 3.18.4 + effect: 3.22.0 empathic: 2.0.0 transitivePeerDependencies: - magicast - '@prisma/debug@6.19.1': {} + '@prisma/debug@6.19.3': {} '@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7': {} - '@prisma/engines@6.19.1': + '@prisma/engines@6.19.3': dependencies: - '@prisma/debug': 6.19.1 + '@prisma/debug': 6.19.3 '@prisma/engines-version': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 - '@prisma/fetch-engine': 6.19.1 - '@prisma/get-platform': 6.19.1 + '@prisma/fetch-engine': 6.19.3 + '@prisma/get-platform': 6.19.3 - '@prisma/fetch-engine@6.19.1': + '@prisma/fetch-engine@6.19.3': dependencies: - '@prisma/debug': 6.19.1 + '@prisma/debug': 6.19.3 '@prisma/engines-version': 7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7 - '@prisma/get-platform': 6.19.1 + '@prisma/get-platform': 6.19.3 - '@prisma/get-platform@6.19.1': + '@prisma/get-platform@6.19.3': dependencies: - '@prisma/debug': 6.19.1 + '@prisma/debug': 6.19.3 '@scarf/scarf@1.4.0': {} @@ -4780,15 +4833,15 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@swc/cli@0.6.0(@swc/core@1.15.5)(chokidar@4.0.3)': + '@swc/cli@0.6.0(@swc/core@1.15.5)(chokidar@4.0.3)(supports-color@8.1.1)': dependencies: '@swc/core': 1.15.5 '@swc/counter': 0.1.3 - '@xhmikosr/bin-wrapper': 13.2.0 + '@xhmikosr/bin-wrapper': 13.2.0(supports-color@8.1.1) commander: 8.3.0 fast-glob: 3.3.3 minimatch: 9.0.5 - piscina: 4.9.2 + piscina: 4.9.3 semver: 7.7.3 slash: 3.0.0 source-map: 0.7.6 @@ -4855,30 +4908,21 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tokenizer/inflate@0.2.7': + '@tokenizer/inflate@0.4.1(supports-color@8.1.1)': dependencies: - debug: 4.4.3 - fflate: 0.8.2 - token-types: 6.1.1 - transitivePeerDependencies: - - supports-color - - '@tokenizer/inflate@0.3.1': - dependencies: - debug: 4.4.3 - fflate: 0.8.2 + debug: 4.4.3(supports-color@8.1.1) token-types: 6.1.1 transitivePeerDependencies: - supports-color '@tokenizer/token@0.3.0': {} - '@topcoder-platform/topcoder-bus-api-wrapper@https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833': + '@topcoder-platform/topcoder-bus-api-wrapper@https://codeload.github.com/topcoder-platform/tc-bus-api-wrapper/tar.gz/297a9c0adcdb97661257e7825bee9c3f5578b833(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: - joi: 18.0.2 - lodash: 4.17.21 - superagent: 10.2.3 - tc-core-library-js: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4 + joi: 18.2.1 + lodash: 4.18.1 + superagent: 10.2.3(supports-color@8.1.1) + tc-core-library-js: https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/323567bc50e433ae488b656f9f94e821ebaf3062(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) transitivePeerDependencies: - debug - supports-color @@ -5035,7 +5079,7 @@ snapshots: '@types/cookiejar': 2.1.5 '@types/methods': 1.1.4 '@types/node': 22.19.3 - form-data: 4.0.5 + form-data: 4.0.6 '@types/supertest@6.0.3': dependencies: @@ -5052,15 +5096,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.50.0 - '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.50.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.1.0(typescript@5.9.3) @@ -5068,23 +5112,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.50.0 '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.50.0(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.50.0 - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.50.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.50.0(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) '@typescript-eslint/types': 8.50.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -5098,13 +5142,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3 - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/typescript-estree': 8.50.0(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + debug: 4.4.3(supports-color@8.1.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -5112,13 +5156,13 @@ snapshots: '@typescript-eslint/types@8.50.0': {} - '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.50.0(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.50.0(typescript@5.9.3) + '@typescript-eslint/project-service': 8.50.0(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) '@typescript-eslint/types': 8.50.0 '@typescript-eslint/visitor-keys': 8.50.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 @@ -5127,13 +5171,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1)) '@typescript-eslint/scope-manager': 8.50.0 '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/typescript-estree': 8.50.0(supports-color@8.1.1)(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -5219,9 +5263,9 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@xhmikosr/archive-type@7.1.0': + '@xhmikosr/archive-type@7.1.0(supports-color@8.1.1)': dependencies: - file-type: 20.5.0 + file-type: 21.3.2(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -5230,10 +5274,10 @@ snapshots: execa: 5.1.1 isexe: 2.0.0 - '@xhmikosr/bin-wrapper@13.2.0': + '@xhmikosr/bin-wrapper@13.2.0(supports-color@8.1.1)': dependencies: '@xhmikosr/bin-check': 7.1.0 - '@xhmikosr/downloader': 15.2.0 + '@xhmikosr/downloader': 15.2.0(supports-color@8.1.1) '@xhmikosr/os-filter-obj': 3.0.0 bin-version-check: 5.1.0 transitivePeerDependencies: @@ -5241,9 +5285,9 @@ snapshots: - react-native-b4a - supports-color - '@xhmikosr/decompress-tar@8.1.0': + '@xhmikosr/decompress-tar@8.1.0(supports-color@8.1.1)': dependencies: - file-type: 20.5.0 + file-type: 21.3.2(supports-color@8.1.1) is-stream: 2.0.1 tar-stream: 3.1.7 transitivePeerDependencies: @@ -5251,10 +5295,10 @@ snapshots: - react-native-b4a - supports-color - '@xhmikosr/decompress-tarbz2@8.1.0': + '@xhmikosr/decompress-tarbz2@8.1.0(supports-color@8.1.1)': dependencies: - '@xhmikosr/decompress-tar': 8.1.0 - file-type: 20.5.0 + '@xhmikosr/decompress-tar': 8.1.0(supports-color@8.1.1) + file-type: 21.3.2(supports-color@8.1.1) is-stream: 2.0.1 seek-bzip: 2.0.0 unbzip2-stream: 1.4.3 @@ -5263,30 +5307,30 @@ snapshots: - react-native-b4a - supports-color - '@xhmikosr/decompress-targz@8.1.0': + '@xhmikosr/decompress-targz@8.1.0(supports-color@8.1.1)': dependencies: - '@xhmikosr/decompress-tar': 8.1.0 - file-type: 20.5.0 + '@xhmikosr/decompress-tar': 8.1.0(supports-color@8.1.1) + file-type: 21.3.2(supports-color@8.1.1) is-stream: 2.0.1 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - supports-color - '@xhmikosr/decompress-unzip@7.1.0': + '@xhmikosr/decompress-unzip@7.1.0(supports-color@8.1.1)': dependencies: - file-type: 20.5.0 + file-type: 21.3.2(supports-color@8.1.1) get-stream: 6.0.1 - yauzl: 3.2.0 + yauzl: 3.2.1 transitivePeerDependencies: - supports-color - '@xhmikosr/decompress@10.2.0': + '@xhmikosr/decompress@10.2.0(supports-color@8.1.1)': dependencies: - '@xhmikosr/decompress-tar': 8.1.0 - '@xhmikosr/decompress-tarbz2': 8.1.0 - '@xhmikosr/decompress-targz': 8.1.0 - '@xhmikosr/decompress-unzip': 7.1.0 + '@xhmikosr/decompress-tar': 8.1.0(supports-color@8.1.1) + '@xhmikosr/decompress-tarbz2': 8.1.0(supports-color@8.1.1) + '@xhmikosr/decompress-targz': 8.1.0(supports-color@8.1.1) + '@xhmikosr/decompress-unzip': 7.1.0(supports-color@8.1.1) graceful-fs: 4.2.11 strip-dirs: 3.0.0 transitivePeerDependencies: @@ -5294,14 +5338,14 @@ snapshots: - react-native-b4a - supports-color - '@xhmikosr/downloader@15.2.0': + '@xhmikosr/downloader@15.2.0(supports-color@8.1.1)': dependencies: - '@xhmikosr/archive-type': 7.1.0 - '@xhmikosr/decompress': 10.2.0 + '@xhmikosr/archive-type': 7.1.0(supports-color@8.1.1) + '@xhmikosr/decompress': 10.2.0(supports-color@8.1.1) content-disposition: 0.5.4 defaults: 2.0.2 ext-name: 5.0.0 - file-type: 20.5.0 + file-type: 21.3.2(supports-color@8.1.1) filenamify: 6.0.0 get-stream: 6.0.1 got: 13.0.0 @@ -5337,34 +5381,40 @@ snapshots: acorn@8.15.0: {} - ajv-formats@2.1.1(ajv@8.17.1): + agent-base@6.0.2(supports-color@8.1.1): + dependencies: + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.20.0 - ajv-formats@3.0.1(ajv@8.17.1): + ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: - ajv: 8.17.1 + ajv: 8.20.0 - ajv-keywords@3.5.2(ajv@6.12.6): + ajv-keywords@3.5.2(ajv@6.14.0): dependencies: - ajv: 6.12.6 + ajv: 6.14.0 - ajv-keywords@5.1.0(ajv@8.17.1): + ajv-keywords@5.1.0(ajv@8.20.0): dependencies: - ajv: 8.17.1 + ajv: 8.20.0 fast-deep-equal: 3.1.3 - ajv@6.12.6: + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.17.1: + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -5387,7 +5437,7 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 append-field@1.0.0: {} @@ -5409,43 +5459,37 @@ snapshots: asynckit@0.4.0: {} - axios@0.30.2: + axios@1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - follow-redirects: 1.15.11 - form-data: 4.0.5 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - - axios@1.13.2: - dependencies: - follow-redirects: 1.15.11 - form-data: 4.0.5 - proxy-from-env: 1.1.0 + follow-redirects: 1.16.0(debug@4.4.3(supports-color@8.1.1)) + form-data: 4.0.6 + https-proxy-agent: 5.0.1(supports-color@8.1.1) + proxy-from-env: 2.1.0 transitivePeerDependencies: - debug + - supports-color b4a@1.7.3: {} - babel-jest@29.7.0(@babel/core@7.28.5): + babel-jest@29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - '@babel/core': 7.28.5 - '@jest/transform': 29.7.0 + '@babel/core': 7.28.5(supports-color@8.1.1) + '@jest/transform': 29.7.0(supports-color@8.1.1) '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.28.5) + babel-plugin-istanbul: 6.1.1(supports-color@8.1.1) + babel-preset-jest: 29.6.3(@babel/core@7.28.5(supports-color@8.1.1)) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 transitivePeerDependencies: - supports-color - babel-plugin-istanbul@6.1.1: + babel-plugin-istanbul@6.1.1(supports-color@8.1.1): dependencies: '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 + istanbul-lib-instrument: 5.2.1(supports-color@8.1.1) test-exclude: 6.0.0 transitivePeerDependencies: - supports-color @@ -5457,30 +5501,30 @@ snapshots: '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5) - - babel-preset-jest@29.6.3(@babel/core@7.28.5): - dependencies: - '@babel/core': 7.28.5 + babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5(supports-color@8.1.1)): + dependencies: + '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5(supports-color@8.1.1)) + + babel-preset-jest@29.6.3(@babel/core@7.28.5(supports-color@8.1.1)): + dependencies: + '@babel/core': 7.28.5(supports-color@8.1.1) babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5(supports-color@8.1.1)) backoff@2.5.0: dependencies: @@ -5511,26 +5555,26 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - body-parser@2.2.1: + body-parser@2.2.1(supports-color@8.1.1): dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) http-errors: 2.0.1 iconv-lite: 0.7.1 on-finished: 2.4.1 - qs: 6.14.0 + qs: 6.15.3 raw-body: 3.0.2 type-is: 2.0.1 transitivePeerDependencies: - supports-color - brace-expansion@1.1.12: + brace-expansion@1.1.13: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.2: + brace-expansion@2.0.3: dependencies: balanced-match: 1.0.2 @@ -5582,7 +5626,7 @@ snapshots: dependencies: chokidar: 4.0.3 confbox: 0.2.2 - defu: 6.1.4 + defu: 6.1.7 dotenv: 16.6.1 exsolve: 1.0.8 giget: 2.0.0 @@ -5648,7 +5692,7 @@ snapshots: class-transformer@0.5.1: {} - class-validator@0.14.3: + class-validator@0.14.4: dependencies: '@types/validator': 13.15.10 libphonenumber-js: 1.12.31 @@ -5761,22 +5805,27 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.1.1 + js-yaml: 4.2.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: typescript: 5.9.3 - create-jest@29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): + create-jest@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5793,9 +5842,11 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - debug@4.4.3: + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 decompress-response@6.0.0: dependencies: @@ -5817,7 +5868,7 @@ snapshots: defer-to-connect@2.0.1: {} - defu@6.1.4: {} + defu@6.1.7: {} delayed-stream@1.0.0: {} @@ -5855,7 +5906,7 @@ snapshots: ee-first@1.1.1: {} - effect@3.18.4: + effect@3.22.0: dependencies: '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 @@ -5906,19 +5957,19 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1)): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) - eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)))(eslint@9.39.2(jiti@2.6.1))(prettier@3.7.4): + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1)))(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(prettier@3.7.4): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) prettier: 3.7.4 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)) + eslint-config-prettier: 10.1.8(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1)) eslint-scope@5.1.1: dependencies: @@ -5934,24 +5985,24 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.2(jiti@2.6.1): + eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 + '@eslint/config-array': 0.21.1(supports-color@8.1.1) '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 + '@eslint/eslintrc': 3.3.3(supports-color@8.1.1) '@eslint/js': 9.39.2 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.12.6 + ajv: 6.14.0 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -5967,7 +6018,7 @@ snapshots: is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 3.1.4 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -6029,52 +6080,20 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - express@5.1.0: + express@5.2.1(supports-color@8.1.1): dependencies: accepts: 2.0.0 - body-parser: 2.2.1 + body-parser: 2.2.1(supports-color@8.1.1) content-disposition: 1.0.1 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.3 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 2.1.1 - fresh: 2.0.0 - http-errors: 2.0.1 - merge-descriptors: 2.0.0 - mime-types: 3.0.2 - on-finished: 2.4.1 - once: 1.4.0 - parseurl: 1.3.3 - proxy-addr: 2.0.7 - qs: 6.14.0 - range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 - statuses: 2.0.2 - type-is: 2.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - express@5.2.1: - dependencies: - accepts: 2.0.0 - body-parser: 2.2.1 - content-disposition: 1.0.1 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.2.2 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.1 + finalhandler: 2.1.1(supports-color@8.1.1) fresh: 2.0.0 http-errors: 2.0.1 merge-descriptors: 2.0.0 @@ -6083,11 +6102,11 @@ snapshots: once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.14.0 + qs: 6.15.3 range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 + router: 2.2.0(supports-color@8.1.1) + send: 1.2.1(supports-color@8.1.1) + serve-static: 2.2.1(supports-color@8.1.1) statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 @@ -6129,7 +6148,7 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-uri@3.1.0: {} + fast-uri@3.1.2: {} fastq@1.19.1: dependencies: @@ -6139,30 +6158,19 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.5): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.5 fecha@4.2.3: {} - fflate@0.8.2: {} - file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 - file-type@20.5.0: - dependencies: - '@tokenizer/inflate': 0.2.7 - strtok3: 10.3.4 - token-types: 6.1.1 - uint8array-extras: 1.5.0 - transitivePeerDependencies: - - supports-color - - file-type@21.1.0: + file-type@21.3.2(supports-color@8.1.1): dependencies: - '@tokenizer/inflate': 0.3.1 + '@tokenizer/inflate': 0.4.1(supports-color@8.1.1) strtok3: 10.3.4 token-types: 6.1.1 uint8array-extras: 1.5.0 @@ -6179,9 +6187,9 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@2.1.1: + finalhandler@2.1.1(supports-color@8.1.1): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -6206,16 +6214,18 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.2 keyv: 4.5.4 - flatted@3.3.3: {} + flatted@3.4.2: {} fn.name@1.1.0: {} - follow-redirects@1.15.11: {} + follow-redirects@1.16.0(debug@4.4.3(supports-color@8.1.1)): + optionalDependencies: + debug: 4.4.3(supports-color@8.1.1) - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -6224,22 +6234,22 @@ snapshots: deepmerge: 4.3.1 fs-extra: 10.1.0 memfs: 3.5.3 - minimatch: 3.1.2 + minimatch: 3.1.4 node-abort-controller: 3.1.1 schema-utils: 3.3.0 semver: 7.7.3 tapable: 2.3.0 typescript: 5.9.3 - webpack: 5.103.0(@swc/core@1.15.5) + webpack: 5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3) form-data-encoder@2.1.4: {} - form-data@4.0.5: + form-data@4.0.6: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 - hasown: 2.0.2 + hasown: 2.0.4 mime-types: 2.1.35 formidable@3.5.4: @@ -6297,7 +6307,7 @@ snapshots: dependencies: citty: 0.1.6 consola: 3.4.2 - defu: 6.1.4 + defu: 6.1.7 node-fetch-native: 1.6.7 nypm: 0.6.2 pathe: 2.0.3 @@ -6322,7 +6332,7 @@ snapshots: dependencies: inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.4 once: 1.4.0 path-is-absolute: 1.0.1 optional: true @@ -6332,7 +6342,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.4 once: 1.4.0 path-is-absolute: 1.0.1 @@ -6358,7 +6368,7 @@ snapshots: graceful-fs@4.2.11: {} - handlebars@4.7.8: + handlebars@4.7.9: dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -6379,6 +6389,10 @@ snapshots: dependencies: function-bind: 1.1.2 + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + html-escaper@2.0.2: {} http-cache-semantics@4.2.0: {} @@ -6396,6 +6410,13 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + https-proxy-agent@5.0.1(supports-color@8.1.1): + dependencies: + agent-base: 6.0.2(supports-color@8.1.1) + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + human-signals@2.1.0: {} iconv-lite@0.7.1: @@ -6465,9 +6486,9 @@ snapshots: istanbul-lib-coverage@3.2.2: {} - istanbul-lib-instrument@5.2.1: + istanbul-lib-instrument@5.2.1(supports-color@8.1.1): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/parser': 7.28.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -6475,9 +6496,9 @@ snapshots: transitivePeerDependencies: - supports-color - istanbul-lib-instrument@6.0.3: + istanbul-lib-instrument@6.0.3(supports-color@8.1.1): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/parser': 7.28.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -6491,9 +6512,9 @@ snapshots: make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@4.0.1: + istanbul-lib-source-maps@4.0.1(supports-color@8.1.1): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6512,10 +6533,10 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 - jest-circus@29.7.0: + jest-circus@29.7.0(supports-color@8.1.1): dependencies: '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 + '@jest/expect': 29.7.0(supports-color@8.1.1) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 '@types/node': 22.19.3 @@ -6526,8 +6547,8 @@ snapshots: jest-each: 29.7.0 jest-matcher-utils: 29.7.0 jest-message-util: 29.7.0 - jest-runtime: 29.7.0 - jest-snapshot: 29.7.0 + jest-runtime: 29.7.0(supports-color@8.1.1) + jest-snapshot: 29.7.0(supports-color@8.1.1) jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 @@ -6538,16 +6559,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): + jest-cli@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + create-jest: 29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + jest-config: 29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6557,23 +6578,23 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): + jest-config@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.5) + babel-jest: 29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 29.7.0 + jest-circus: 29.7.0(supports-color@8.1.1) jest-environment-node: 29.7.0 jest-get-type: 29.6.3 jest-regex-util: 29.6.3 jest-resolve: 29.7.0 - jest-runner: 29.7.0 + jest-runner: 29.7.0(supports-color@8.1.1) jest-util: 29.7.0 jest-validate: 29.7.0 micromatch: 4.0.8 @@ -6670,10 +6691,10 @@ snapshots: jest-regex-util@29.6.3: {} - jest-resolve-dependencies@29.7.0: + jest-resolve-dependencies@29.7.0(supports-color@8.1.1): dependencies: jest-regex-util: 29.6.3 - jest-snapshot: 29.7.0 + jest-snapshot: 29.7.0(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -6689,12 +6710,12 @@ snapshots: resolve.exports: 2.0.3 slash: 3.0.0 - jest-runner@29.7.0: + jest-runner@29.7.0(supports-color@8.1.1): dependencies: '@jest/console': 29.7.0 '@jest/environment': 29.7.0 '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 '@types/node': 22.19.3 chalk: 4.1.2 @@ -6706,7 +6727,7 @@ snapshots: jest-leak-detector: 29.7.0 jest-message-util: 29.7.0 jest-resolve: 29.7.0 - jest-runtime: 29.7.0 + jest-runtime: 29.7.0(supports-color@8.1.1) jest-util: 29.7.0 jest-watcher: 29.7.0 jest-worker: 29.7.0 @@ -6715,14 +6736,14 @@ snapshots: transitivePeerDependencies: - supports-color - jest-runtime@29.7.0: + jest-runtime@29.7.0(supports-color@8.1.1): dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 - '@jest/globals': 29.7.0 + '@jest/globals': 29.7.0(supports-color@8.1.1) '@jest/source-map': 29.6.3 '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 '@types/node': 22.19.3 chalk: 4.1.2 @@ -6735,24 +6756,24 @@ snapshots: jest-mock: 29.7.0 jest-regex-util: 29.6.3 jest-resolve: 29.7.0 - jest-snapshot: 29.7.0 + jest-snapshot: 29.7.0(supports-color@8.1.1) jest-util: 29.7.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color - jest-snapshot@29.7.0: + jest-snapshot@29.7.0(supports-color@8.1.1): dependencies: - '@babel/core': 7.28.5 + '@babel/core': 7.28.5(supports-color@8.1.1) '@babel/generator': 7.28.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5(supports-color@8.1.1)) '@babel/types': 7.28.5 '@jest/expect-utils': 29.7.0 - '@jest/transform': 29.7.0 + '@jest/transform': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5(supports-color@8.1.1)) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6774,7 +6795,7 @@ snapshots: chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 - picomatch: 2.3.1 + picomatch: 2.3.2 jest-validate@29.7.0: dependencies: @@ -6809,12 +6830,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): + jest@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): dependencies: - '@jest/core': 29.7.0(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + '@jest/core': 29.7.0(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + jest-cli: 29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6823,7 +6844,7 @@ snapshots: jiti@2.6.1: {} - joi@18.0.2: + joi@18.2.1: dependencies: '@hapi/address': 5.1.1 '@hapi/formula': 3.0.2 @@ -6842,7 +6863,11 @@ snapshots: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.1.1: + js-yaml@4.2.0: + dependencies: + argparse: 2.0.1 + + js-yaml@5.2.1: dependencies: argparse: 2.0.1 @@ -6889,11 +6914,11 @@ snapshots: ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - jwks-rsa@3.2.0: + jwks-rsa@3.2.0(supports-color@8.1.1): dependencies: '@types/express': 4.17.25 '@types/jsonwebtoken': 9.0.10 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) jose: 4.15.9 limiter: 1.1.5 lru-memoizer: 2.3.0 @@ -6960,7 +6985,7 @@ snapshots: lodash.once@4.1.1: {} - lodash@4.17.21: {} + lodash@4.18.1: {} log-symbols@4.1.0: dependencies: @@ -7028,7 +7053,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 millisecond@0.1.2: {} @@ -7054,15 +7079,15 @@ snapshots: minimatch@10.1.1: dependencies: - '@isaacs/brace-expansion': 5.0.0 + '@isaacs/brace-expansion': 5.0.1 - minimatch@3.1.2: + minimatch@3.1.4: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 1.1.13 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.3 minimist@1.2.8: {} @@ -7071,21 +7096,19 @@ snapshots: mkdirp@0.5.6: dependencies: minimist: 1.2.8 + optional: true moment@2.30.1: optional: true ms@2.1.3: {} - multer@2.0.2: + multer@2.2.0: dependencies: append-field: 1.0.0 busboy: 1.6.0 concat-stream: 2.0.0 - mkdirp: 0.5.6 - object-assign: 4.1.1 type-is: 1.6.18 - xtend: 4.0.2 mute-stream@2.0.0: {} @@ -7112,7 +7135,7 @@ snapshots: node-emoji@1.11.0: dependencies: - lodash: 4.17.21 + lodash: 4.18.1 node-fetch-native@1.6.7: {} @@ -7225,7 +7248,7 @@ snapshots: lru-cache: 11.2.4 minipass: 7.1.2 - path-to-regexp@8.3.0: {} + path-to-regexp@8.4.2: {} path-type@4.0.0: {} @@ -7237,15 +7260,13 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} - - picomatch@4.0.2: {} + picomatch@2.3.2: {} - picomatch@4.0.3: {} + picomatch@4.0.5: {} pirates@4.0.7: {} - piscina@4.9.2: + piscina@4.9.3: optionalDependencies: '@napi-rs/nice': 1.1.1 @@ -7277,10 +7298,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 - prisma@6.19.1(typescript@5.9.3): + prisma@6.19.3(typescript@5.9.3): dependencies: - '@prisma/config': 6.19.1 - '@prisma/engines': 6.19.1 + '@prisma/config': 6.19.3 + '@prisma/engines': 6.19.3 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -7296,15 +7317,16 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-from-env@1.1.0: {} + proxy-from-env@2.1.0: {} punycode@2.3.1: {} pure-rand@6.1.0: {} - qs@6.14.0: + qs@6.15.3: dependencies: - side-channel: 1.1.0 + es-define-property: 1.0.1 + side-channel: 1.1.1 queue-microtask@1.2.3: {} @@ -7314,7 +7336,7 @@ snapshots: dependencies: codependency: 2.1.0 json-stringify-safe: 5.0.1 - lodash: 4.17.21 + lodash: 4.18.1 reconnect-core: 1.3.0 randombytes@2.1.0: @@ -7332,7 +7354,7 @@ snapshots: rc9@2.1.2: dependencies: - defu: 6.1.4 + defu: 6.1.7 destr: 2.0.5 react-is@18.3.1: {} @@ -7389,13 +7411,13 @@ snapshots: glob: 6.0.4 optional: true - router@2.2.0: + router@2.2.0(supports-color@8.1.1): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 - path-to-regexp: 8.3.0 + path-to-regexp: 8.4.2 transitivePeerDependencies: - supports-color @@ -7423,15 +7445,15 @@ snapshots: schema-utils@3.3.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) + ajv: 6.14.0 + ajv-keywords: 3.5.2(ajv@6.14.0) schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - ajv-keywords: 5.1.0(ajv@8.17.1) + ajv: 8.20.0 + ajv-formats: 2.1.1(ajv@8.20.0) + ajv-keywords: 5.1.0(ajv@8.20.0) seek-bzip@2.0.0: dependencies: @@ -7449,9 +7471,9 @@ snapshots: semver@7.7.3: {} - send@1.2.1: + send@1.2.1(supports-color@8.1.1): dependencies: - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -7469,12 +7491,12 @@ snapshots: dependencies: randombytes: 2.1.0 - serve-static@2.2.1: + serve-static@2.2.1(supports-color@8.1.1): dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.1 + send: 1.2.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -7486,7 +7508,7 @@ snapshots: shebang-regex@3.0.0: {} - side-channel-list@1.0.0: + side-channel-list@1.0.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 @@ -7506,11 +7528,11 @@ snapshots: object-inspect: 1.13.4 side-channel-map: 1.0.1 - side-channel@1.1.0: + side-channel@1.1.1: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - side-channel-list: 1.0.0 + side-channel-list: 1.0.1 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 @@ -7603,24 +7625,24 @@ snapshots: dependencies: '@tokenizer/token': 0.3.0 - superagent@10.2.3: + superagent@10.2.3(supports-color@8.1.1): dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@8.1.1) fast-safe-stringify: 2.1.1 - form-data: 4.0.5 + form-data: 4.0.6 formidable: 3.5.4 methods: 1.1.2 mime: 2.6.0 - qs: 6.14.0 + qs: 6.15.3 transitivePeerDependencies: - supports-color - supertest@7.1.4: + supertest@7.1.4(supports-color@8.1.1): dependencies: methods: 1.1.2 - superagent: 10.2.3 + superagent: 10.2.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -7634,7 +7656,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swagger-ui-dist@5.30.2: + swagger-ui-dist@5.32.8: dependencies: '@scarf/scarf': 1.4.0 @@ -7655,29 +7677,43 @@ snapshots: - bare-abort-controller - react-native-b4a - tc-core-library-js@https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4: + tc-core-library-js@https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/1075136355e1e1c4779f2138a30f3ffbd718bfa4(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - axios: 0.30.2 + axios: 1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) bunyan: 1.8.15 jsonwebtoken: 9.0.3 - jwks-rsa: 3.2.0 - lodash: 4.17.21 + jwks-rsa: 3.2.0(supports-color@8.1.1) + lodash: 4.18.1 millisecond: 0.1.2 r7insight_node: 2.1.1 transitivePeerDependencies: - debug - supports-color - terser-webpack-plugin@5.3.16(@swc/core@1.15.5)(webpack@5.103.0(@swc/core@1.15.5)): + tc-core-library-js@https://codeload.github.com/topcoder-platform/tc-core-library-js/tar.gz/323567bc50e433ae488b656f9f94e821ebaf3062(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1): + dependencies: + axios: 1.18.1(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) + bunyan: 1.8.15 + jsonwebtoken: 9.0.3 + jwks-rsa: 3.2.0(supports-color@8.1.1) + lodash: 4.18.1 + millisecond: 0.1.2 + r7insight_node: 2.1.1 + transitivePeerDependencies: + - debug + - supports-color + + terser-webpack-plugin@5.3.16(@swc/core@1.15.5)(uglify-js@3.19.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.44.1 - webpack: 5.103.0(@swc/core@1.15.5) + webpack: 5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3) optionalDependencies: '@swc/core': 1.15.5 + uglify-js: 3.19.3 terser@5.44.1: dependencies: @@ -7690,7 +7726,7 @@ snapshots: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 - minimatch: 3.1.2 + minimatch: 3.1.4 text-decoder@1.2.3: dependencies: @@ -7706,8 +7742,8 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.5) + picomatch: 4.0.5 tmpl@1.0.5: {} @@ -7729,12 +7765,12 @@ snapshots: dependencies: typescript: 5.9.3 - ts-jest@29.4.6(@babel/core@7.28.5)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.6(@babel/core@7.28.5(supports-color@8.1.1))(@jest/transform@29.7.0(supports-color@8.1.1))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 - jest: 29.7.0(@types/node@22.19.3)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) + handlebars: 4.7.9 + jest: 29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -7743,13 +7779,13 @@ snapshots: typescript: 5.9.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.28.5 - '@jest/transform': 29.7.0 + '@babel/core': 7.28.5(supports-color@8.1.1) + '@jest/transform': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.5) + babel-jest: 29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1) jest-util: 29.7.0 - ts-loader@9.5.4(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)): + ts-loader@9.5.4(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.4 @@ -7757,7 +7793,7 @@ snapshots: semver: 7.7.3 source-map: 0.7.6 typescript: 5.9.3 - webpack: 5.103.0(@swc/core@1.15.5) + webpack: 5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3) ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3): dependencies: @@ -7817,13 +7853,13 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.50.0(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) + eslint: 9.39.2(jiti@2.6.1)(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -7862,7 +7898,7 @@ snapshots: util-deprecate@1.0.2: {} - uuid@11.1.0: {} + uuid@14.0.1: {} v8-compile-cache-lib@3.0.1: {} @@ -7893,7 +7929,7 @@ snapshots: webpack-sources@3.3.3: {} - webpack@5.103.0(@swc/core@1.15.5): + webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -7917,7 +7953,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.5)(webpack@5.103.0(@swc/core@1.15.5)) + terser-webpack-plugin: 5.3.16(@swc/core@1.15.5)(uglify-js@3.19.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -7972,8 +8008,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - xtend@4.0.2: {} - y18n@5.0.8: {} yallist@3.1.1: {} @@ -7992,7 +8026,7 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 - yauzl@3.2.0: + yauzl@3.2.1: dependencies: buffer-crc32: 0.2.13 pend: 1.2.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..de6618e --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,46 @@ +packages: + - "." + +# The existing bus wrapper intentionally depends on a pinned GitHub release of tc-core. +blockExoticSubdeps: false + +overrides: + '@isaacs/brace-expansion': 5.0.1 + 'ajv@^6.0.0': 6.14.0 + 'ajv@^8.0.0': 8.20.0 + axios: 1.18.1 + 'brace-expansion@^1.0.0': 1.1.13 + 'brace-expansion@^2.0.0': 2.0.3 + defu: 6.1.7 + 'effect@^3.0.0': 3.22.0 + 'fast-uri@^3.0.0': 3.1.2 + file-type: 21.3.2 + flatted: 3.4.2 + follow-redirects: 1.16.0 + form-data: 4.0.6 + handlebars: 4.7.9 + 'ip-address@^10.0.0': 10.1.1 + 'joi@^18.0.0': 18.2.1 + 'js-yaml@^4.0.0': 4.2.0 + jws: 4.0.1 + lodash: 4.18.1 + 'minimatch@^3.0.0': 3.1.4 + 'minimatch@^5.0.0': 5.1.8 + multer: 2.2.0 + path-to-regexp: 8.4.2 + 'picomatch@^2.0.0': 2.3.2 + 'picomatch@^4.0.0': 4.0.5 + 'piscina@^4.0.0': 4.9.3 + qs: 6.15.3 + uuid: 14.0.1 + yauzl: 3.2.1 + +allowBuilds: + "@nestjs/core": false + "@prisma/client": true + "@prisma/engines": true + "@scarf/scarf": false + "@swc/core": true + dtrace-provider: false + prisma: true + unrs-resolver: true From fd3bf8c6a84e35b26491e45956050eb89ae9785a Mon Sep 17 00:00:00 2001 From: Justin Gasper Date: Mon, 20 Jul 2026 14:59:12 +1000 Subject: [PATCH 4/7] Update branch filter to include security_july_2026 --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ae2ec06..749e076 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -68,7 +68,7 @@ workflows: branches: only: - develop - - pm-2539 + - security_july_2026 # Production builds are exectuted only on tagged commits to the # master branch. @@ -77,4 +77,4 @@ workflows: filters: branches: only: - - master \ No newline at end of file + - master From dce3374fbffc44a9b6a43b716e8df7a2c83b0743 Mon Sep 17 00:00:00 2001 From: jmgasper Date: Tue, 21 Jul 2026 12:11:00 +1000 Subject: [PATCH 5/7] Fix for JWT checking to use global appvars --- src/shared/config/auth.config.spec.ts | 59 ++++ src/shared/config/auth.config.ts | 79 ++++-- src/shared/modules/global/jwt.service.spec.ts | 264 ++++++++++++++++++ src/shared/modules/global/jwt.service.ts | 190 +++++++++---- 4 files changed, 516 insertions(+), 76 deletions(-) create mode 100644 src/shared/config/auth.config.spec.ts create mode 100644 src/shared/modules/global/jwt.service.spec.ts diff --git a/src/shared/config/auth.config.spec.ts b/src/shared/config/auth.config.spec.ts new file mode 100644 index 0000000..d3229c5 --- /dev/null +++ b/src/shared/config/auth.config.spec.ts @@ -0,0 +1,59 @@ +import { loadAuthConfig, parseValidIssuers } from './auth.config'; + +describe('authentication configuration', () => { + it('parses the global JSON issuer list', () => { + expect( + parseValidIssuers( + '["https://api.topcoder-dev.com", "https://topcoder-dev.auth0.com/", "https://api.topcoder-dev.com"]', + ), + ).toEqual([ + 'https://api.topcoder-dev.com', + 'https://topcoder-dev.auth0.com/', + ]); + }); + + it('accepts a comma-separated issuer list', () => { + expect( + parseValidIssuers( + 'https://api.topcoder.com, https://topcoder.auth0.com/', + ), + ).toEqual(['https://api.topcoder.com', 'https://topcoder.auth0.com/']); + }); + + it('fails closed for a non-array JSON issuer value', () => { + expect(parseValidIssuers('{"issuer":"https://issuer.example/"}')).toEqual( + [], + ); + }); + + it('uses the standard v6 environment variable names', () => { + const config = loadAuthConfig({ + NODE_ENV: 'production', + AUTH_SECRET: 'shared-secret', + VALID_ISSUERS: '["https://configured-issuer.example/"]', + AUTH0_AUDIENCE: 'https://configured-audience.example/', + AUTH0_ISSUER: 'https://legacy-issuer.example/', + TOKEN_AUDIENCE: 'https://legacy-audience.example/', + }); + + expect(config).toEqual({ + authSecret: 'shared-secret', + validIssuers: ['https://configured-issuer.example/'], + jwt: { + audience: 'https://configured-audience.example/', + clockTolerance: 30, + ignoreExpiration: false, + }, + }); + }); + + it('enforces expiration outside production too', () => { + const config = loadAuthConfig({ + NODE_ENV: 'development', + VALID_ISSUERS: '["https://configured-issuer.example/"]', + AUTH0_AUDIENCE: 'https://configured-audience.example/', + }); + + expect(config.jwt.ignoreExpiration).toBe(false); + }); +}); diff --git a/src/shared/config/auth.config.ts b/src/shared/config/auth.config.ts index ba6c2af..9350eb6 100644 --- a/src/shared/config/auth.config.ts +++ b/src/shared/config/auth.config.ts @@ -1,19 +1,64 @@ /** - * Authentication-related configuration + * Parses the global valid-issuer setting. + * + * The shared Topcoder value is a JSON array. Comma-separated values are also + * accepted for compatibility with newer v6 services and local configuration. + * + * @param value The VALID_ISSUERS environment value. + * @returns A deduplicated list of non-empty issuer URLs. */ -export const AuthConfig = { - // Used for validating JSON Web Tokens - jwt: { - // The Auth0 issuer used to validate tokens - issuer: process.env.AUTH0_ISSUER || 'https://topcoder-dev.auth0.com/', - - // The audience(s) that are valid for the token - audience: process.env.TOKEN_AUDIENCE || 'https://m2m.topcoder-dev.com/', - - // Clock tolerance for token expiration time (in seconds) - clockTolerance: 30, - - // Whether to enforce token expiration - ignoreExpiration: process.env.NODE_ENV !== 'production', - }, -}; +export function parseValidIssuers(value: string | undefined): string[] { + if (!value || value.trim().length === 0) { + return []; + } + + let issuers: unknown; + + try { + issuers = JSON.parse(value.replace(/\\"/g, '"')) as unknown; + } catch { + issuers = value.split(','); + } + + if (!Array.isArray(issuers)) { + return []; + } + + return Array.from( + new Set( + issuers + .filter((issuer): issuer is string => typeof issuer === 'string') + .map((issuer) => issuer.trim()) + .filter((issuer) => issuer.length > 0), + ), + ); +} + +/** + * Loads authentication settings from the standard v6 environment variables. + * + * @param env Environment values to load. + * @returns Authentication settings used by JWT validation. + */ +export function loadAuthConfig(env: NodeJS.ProcessEnv = process.env) { + return { + // Shared secret used to validate legacy HS256 Topcoder user tokens. + authSecret: env.AUTH_SECRET, + + // Global JSON array (or comma-separated list) of accepted token issuers. + validIssuers: parseValidIssuers(env.VALID_ISSUERS), + + jwt: { + // Global Auth0 audience used to validate audience-bearing tokens. + audience: env.AUTH0_AUDIENCE, + + // Clock tolerance for token expiration time (in seconds). + clockTolerance: 30, + + // Token expiration is enforced in every environment. + ignoreExpiration: false, + }, + }; +} + +export const AuthConfig = loadAuthConfig(); diff --git a/src/shared/modules/global/jwt.service.spec.ts b/src/shared/modules/global/jwt.service.spec.ts new file mode 100644 index 0000000..201d7db --- /dev/null +++ b/src/shared/modules/global/jwt.service.spec.ts @@ -0,0 +1,264 @@ +import { generateKeyPairSync } from 'crypto'; +import { UnauthorizedException } from '@nestjs/common'; +import { sign } from 'jsonwebtoken'; +import { AuthConfig } from '../../config/auth.config'; +import { UserRole } from '../../enums/userRole.enum'; +import { JwtService } from './jwt.service'; + +const ALLOWED_ISSUER = 'https://issuer.example/'; +const SECOND_ALLOWED_ISSUER = 'https://second-issuer.example/'; +const AUDIENCE = 'https://audience.example/'; +const AUTH_SECRET = 'test-shared-auth-secret'; + +const { privateKey, publicKey } = generateKeyPairSync('rsa', { + modulusLength: 2048, +}); + +describe('JwtService validation', () => { + const originalNodeEnv = process.env.NODE_ENV; + const originalAuthConfig = { + authSecret: AuthConfig.authSecret, + validIssuers: [...AuthConfig.validIssuers], + audience: AuthConfig.jwt.audience, + ignoreExpiration: AuthConfig.jwt.ignoreExpiration, + }; + + let service: JwtService; + + beforeEach(() => { + process.env.NODE_ENV = 'production'; + AuthConfig.authSecret = AUTH_SECRET; + AuthConfig.validIssuers = [ALLOWED_ISSUER, SECOND_ALLOWED_ISSUER]; + AuthConfig.jwt.audience = AUDIENCE; + AuthConfig.jwt.ignoreExpiration = false; + service = new JwtService(); + jest.spyOn(console, 'error').mockImplementation(() => undefined); + }); + + afterEach(() => { + jest.restoreAllMocks(); + }); + + afterAll(() => { + if (originalNodeEnv === undefined) { + delete process.env.NODE_ENV; + } else { + process.env.NODE_ENV = originalNodeEnv; + } + + AuthConfig.authSecret = originalAuthConfig.authSecret; + AuthConfig.validIssuers = originalAuthConfig.validIssuers; + AuthConfig.jwt.audience = originalAuthConfig.audience; + AuthConfig.jwt.ignoreExpiration = originalAuthConfig.ignoreExpiration; + }); + + it('accepts an RS256 admin token from any configured issuer and audience', async () => { + const signingKeySpy = jest + .spyOn(service as any, 'getSigningKey') + .mockResolvedValue(publicKey); + const token = sign( + { roles: [UserRole.Admin], userId: '12345' }, + privateKey, + { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: SECOND_ALLOWED_ISSUER, + audience: AUDIENCE, + expiresIn: 300, + }, + ); + + await expect(service.validateToken(token)).resolves.toEqual( + expect.objectContaining({ + roles: [UserRole.Admin], + userId: '12345', + isMachine: false, + }), + ); + expect(signingKeySpy).toHaveBeenCalledWith( + SECOND_ALLOWED_ISSUER, + 'test-key-id', + ); + }); + + it('rejects static test tokens in production', async () => { + await expect(service.validateToken('admin-token')).rejects.toBeInstanceOf( + UnauthorizedException, + ); + await expect(service.validateToken('m2m-token-all')).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('keeps static tokens available only under NODE_ENV=test', async () => { + process.env.NODE_ENV = 'test'; + + await expect(service.validateToken('admin-token')).resolves.toEqual({ + roles: [UserRole.Admin], + isMachine: false, + }); + }); + + it('rejects an RS256 token with the wrong audience', async () => { + jest.spyOn(service as any, 'getSigningKey').mockResolvedValue(publicKey); + const token = sign({ roles: [UserRole.Admin] }, privateKey, { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: ALLOWED_ISSUER, + audience: 'https://wrong-audience.example/', + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('rejects an RS256 token when AUTH0_AUDIENCE is unavailable', async () => { + AuthConfig.jwt.audience = undefined; + const signingKeySpy = jest.spyOn(service as any, 'getSigningKey'); + const token = sign({ roles: [UserRole.Admin] }, privateKey, { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: ALLOWED_ISSUER, + audience: AUDIENCE, + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + expect(signingKeySpy).not.toHaveBeenCalled(); + }); + + it('rejects an unlisted issuer before requesting its signing key', async () => { + const signingKeySpy = jest.spyOn(service as any, 'getSigningKey'); + const token = sign({ roles: [UserRole.Admin] }, privateKey, { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: 'https://unlisted-issuer.example/', + audience: AUDIENCE, + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + expect(signingKeySpy).not.toHaveBeenCalled(); + }); + + it('rejects an RS256 token without a key ID', async () => { + const signingKeySpy = jest.spyOn(service as any, 'getSigningKey'); + const token = sign({ roles: [UserRole.Admin] }, privateKey, { + algorithm: 'RS256', + issuer: ALLOWED_ISSUER, + audience: AUDIENCE, + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + expect(signingKeySpy).not.toHaveBeenCalled(); + }); + + it('accepts a legacy HS256 admin token without kid or audience', async () => { + const token = sign( + { + roles: [UserRole.Admin], + userId: '12345', + handle: 'admin-user', + }, + AUTH_SECRET, + { + algorithm: 'HS256', + issuer: ALLOWED_ISSUER, + expiresIn: 300, + }, + ); + + await expect(service.validateToken(token)).resolves.toEqual( + expect.objectContaining({ + roles: [UserRole.Admin], + userId: '12345', + handle: 'admin-user', + isMachine: false, + }), + ); + }); + + it('rejects an HS256 token signed with a different secret', async () => { + const token = sign({ roles: [UserRole.Admin] }, 'wrong-secret', { + algorithm: 'HS256', + issuer: ALLOWED_ISSUER, + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('still verifies signatures when NODE_ENV is missing', async () => { + delete process.env.NODE_ENV; + const token = sign({ roles: [UserRole.Admin] }, 'wrong-secret', { + algorithm: 'HS256', + issuer: ALLOWED_ISSUER, + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('rejects an HS256 token when AUTH_SECRET is unavailable', async () => { + AuthConfig.authSecret = undefined; + const token = sign({ roles: [UserRole.Admin] }, AUTH_SECRET, { + algorithm: 'HS256', + issuer: ALLOWED_ISSUER, + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('rejects an expired HS256 admin token', async () => { + const token = sign({ roles: [UserRole.Admin] }, AUTH_SECRET, { + algorithm: 'HS256', + issuer: ALLOWED_ISSUER, + expiresIn: -60, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('validates the configured audience when an HS256 token contains aud', async () => { + const token = sign({ roles: [UserRole.Admin] }, AUTH_SECRET, { + algorithm: 'HS256', + issuer: ALLOWED_ISSUER, + audience: 'https://wrong-audience.example/', + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('rejects unsupported signing algorithms', async () => { + const token = sign({ roles: [UserRole.Admin] }, AUTH_SECRET, { + algorithm: 'HS384', + issuer: ALLOWED_ISSUER, + expiresIn: 300, + }); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); +}); diff --git a/src/shared/modules/global/jwt.service.ts b/src/shared/modules/global/jwt.service.ts index d38291e..0b30586 100644 --- a/src/shared/modules/global/jwt.service.ts +++ b/src/shared/modules/global/jwt.service.ts @@ -1,9 +1,5 @@ -import { - Injectable, - OnModuleInit, - UnauthorizedException, -} from '@nestjs/common'; -import { decode, verify, VerifyOptions, Secret } from 'jsonwebtoken'; +import { Injectable, UnauthorizedException } from '@nestjs/common'; +import { Algorithm, decode, verify, VerifyOptions, Secret } from 'jsonwebtoken'; import * as jwksClient from 'jwks-rsa'; import { ALL_SCOPE_MAPPINGS, Scope } from '../../enums/scopes.enum'; import { UserRole } from '../../enums/userRole.enum'; @@ -22,7 +18,7 @@ export const isAdmin = (user: JwtUser): boolean => { return user.isMachine || (user.roles ?? []).includes(UserRole.Admin); }; -// Map for testing tokens, will be removed in production +// Static tokens are available only to tests and never to a running service. const TOKEN_ROLE_MAP: Record = { 'admin-token': [UserRole.Admin], 'copilot-token': [UserRole.Copilot], @@ -30,7 +26,7 @@ const TOKEN_ROLE_MAP: Record = { 'submitter-token': [UserRole.Submitter], }; -// For testing m2m tokens +// Static M2M tokens are available only to tests and never to a running service. const TEST_M2M_TOKENS: Record = { 'm2m-token-all': [Scope.AllGroups], 'm2m-token-groups': [Scope.AllGroups], @@ -46,19 +42,8 @@ const SCOPE_SYNONYMS: Record = { }; @Injectable() -export class JwtService implements OnModuleInit { - private jwksClientInstance: jwksClient.JwksClient; - - /** - * Initialize the JWKS client - */ - onModuleInit() { - this.jwksClientInstance = jwksClient({ - jwksUri: `${AuthConfig.jwt.issuer.replace(/\/$/, '')}/.well-known/jwks.json`, - cache: true, - rateLimit: true, - }); - } +export class JwtService { + private readonly jwksClients = new Map(); /** * Validates and extracts user information from a JWT token @@ -67,13 +52,13 @@ export class JwtService implements OnModuleInit { */ async validateToken(token: string): Promise { try { - // First check if it's a test token - if (TOKEN_ROLE_MAP[token]) { + const allowStaticTestTokens = process.env.NODE_ENV === 'test'; + + if (allowStaticTestTokens && TOKEN_ROLE_MAP[token]) { return { roles: TOKEN_ROLE_MAP[token] as UserRole[], isMachine: false }; } - // Check if it's a test M2M token - if (TEST_M2M_TOKENS[token]) { + if (allowStaticTestTokens && TEST_M2M_TOKENS[token]) { const rawScopes = TEST_M2M_TOKENS[token]; const scopes = this.expandScopes(rawScopes); return { scopes, isMachine: false }; @@ -81,39 +66,14 @@ export class JwtService implements OnModuleInit { let decodedToken: any; - // In production, we verify the token - if (process.env.NODE_ENV === 'production') { - try { - // First decode the token to get the kid (Key ID) - const tokenHeader = decode(token, { complete: true })?.header; - - if (!tokenHeader || !tokenHeader.kid) { - throw new UnauthorizedException('Invalid token: Missing key ID'); - } - - // Get the signing key from Auth0 - const signingKey = await this.getSigningKey(tokenHeader.kid); - - // Verify options - const verifyOptions: VerifyOptions = { - issuer: AuthConfig.jwt.issuer, - audience: AuthConfig.jwt.audience, - clockTolerance: AuthConfig.jwt.clockTolerance, - ignoreExpiration: AuthConfig.jwt.ignoreExpiration, - }; - - // Verify the token - decodedToken = verify(token, signingKey, verifyOptions); - } catch (error) { - console.error('JWT verification failed:', error); - throw new UnauthorizedException('Invalid token'); - } - } else { - // In development, just decode the token without verification - decodedToken = decode(token); + try { + decodedToken = await this.verifySignedToken(token); + } catch (error) { + console.error('JWT verification failed:', error); + throw new UnauthorizedException('Invalid token'); } - if (!decodedToken) { + if (!decodedToken || typeof decodedToken === 'string') { throw new UnauthorizedException('Invalid token'); } @@ -156,13 +116,125 @@ export class JwtService implements OnModuleInit { } /** - * Gets the signing key from Auth0 + * Verifies a token with the standard v6 auth configuration. + * + * RS256 tokens use the allowlisted issuer's JWKS endpoint and must match the + * configured Auth0 audience. Legacy HS256 user tokens use AUTH_SECRET; their + * audience is checked when the token contains an audience claim. + * + * @param token The encoded JWT. + * @returns The verified token payload. + */ + private async verifySignedToken( + token: string, + ): Promise> { + const decodedToken = decode(token, { complete: true }); + + if ( + !decodedToken || + typeof decodedToken.payload === 'string' || + !decodedToken.payload + ) { + throw new UnauthorizedException('Invalid token'); + } + + const tokenPayload = decodedToken.payload as Record; + const issuer = tokenPayload.iss; + const validIssuers = AuthConfig.validIssuers; + + if ( + typeof issuer !== 'string' || + validIssuers.length === 0 || + !validIssuers.includes(issuer) + ) { + throw new UnauthorizedException('Invalid token issuer'); + } + + const verifyOptions: VerifyOptions = { + issuer: validIssuers as [string, ...string[]], + clockTolerance: AuthConfig.jwt.clockTolerance, + ignoreExpiration: AuthConfig.jwt.ignoreExpiration, + }; + + let signingKey: Secret; + let algorithms: Algorithm[]; + + if (decodedToken.header.alg === 'HS256') { + if (!AuthConfig.authSecret) { + throw new UnauthorizedException('Invalid token signing key'); + } + + signingKey = AuthConfig.authSecret; + algorithms = ['HS256']; + + // Legacy Topcoder user/admin tokens do not contain an audience. If an + // HS256 token does contain one, validate it against the global value. + if (Object.prototype.hasOwnProperty.call(tokenPayload, 'aud')) { + verifyOptions.audience = this.getConfiguredAudience(); + } + } else if (decodedToken.header.alg === 'RS256') { + if (!decodedToken.header.kid) { + throw new UnauthorizedException('Invalid token: Missing key ID'); + } + + verifyOptions.audience = this.getConfiguredAudience(); + signingKey = await this.getSigningKey(issuer, decodedToken.header.kid); + algorithms = ['RS256']; + } else { + throw new UnauthorizedException('Invalid token algorithm'); + } + + const verifiedToken = verify(token, signingKey, { + ...verifyOptions, + algorithms, + }); + + if (typeof verifiedToken === 'string') { + throw new UnauthorizedException('Invalid token'); + } + + return verifiedToken as Record; + } + + /** + * Gets the configured audience or fails closed when it is unavailable. + * + * @returns The AUTH0_AUDIENCE value. + */ + private getConfiguredAudience(): string { + const audience = AuthConfig.jwt.audience?.trim(); + + if (!audience) { + throw new UnauthorizedException('Invalid token audience configuration'); + } + + return audience; + } + + /** + * Gets the signing key from an allowlisted issuer. + * + * A separate cached JWKS client is used for each configured issuer. + * + * @param issuer The validated issuer from the token. * @param kid The Key ID from the JWT header * @returns A Promise that resolves to the signing key */ - private getSigningKey(kid: string): Promise { + private getSigningKey(issuer: string, kid: string): Promise { + const normalizedIssuer = issuer.replace(/\/$/, ''); + let client = this.jwksClients.get(normalizedIssuer); + + if (!client) { + client = jwksClient({ + jwksUri: `${normalizedIssuer}/.well-known/jwks.json`, + cache: true, + rateLimit: true, + }); + this.jwksClients.set(normalizedIssuer, client); + } + return new Promise((resolve, reject) => { - this.jwksClientInstance.getSigningKey(kid, (err, key) => { + client.getSigningKey(kid, (err, key) => { if (err || !key) { console.error('Error getting signing key:', err); return reject( From f505114ba6421376f2e5b019c54c5d898405137f Mon Sep 17 00:00:00 2001 From: jmgasper Date: Tue, 21 Jul 2026 12:37:43 +1000 Subject: [PATCH 6/7] Furter JWT checking fixes --- src/shared/config/auth.config.ts | 2 +- src/shared/modules/global/jwt.service.spec.ts | 208 +++++++++++++++--- src/shared/modules/global/jwt.service.ts | 109 +++++++-- 3 files changed, 277 insertions(+), 42 deletions(-) diff --git a/src/shared/config/auth.config.ts b/src/shared/config/auth.config.ts index 9350eb6..0bdaf6b 100644 --- a/src/shared/config/auth.config.ts +++ b/src/shared/config/auth.config.ts @@ -49,7 +49,7 @@ export function loadAuthConfig(env: NodeJS.ProcessEnv = process.env) { validIssuers: parseValidIssuers(env.VALID_ISSUERS), jwt: { - // Global Auth0 audience used to validate audience-bearing tokens. + // Global Auth0 audience used to validate client-credentials tokens. audience: env.AUTH0_AUDIENCE, // Clock tolerance for token expiration time (in seconds). diff --git a/src/shared/modules/global/jwt.service.spec.ts b/src/shared/modules/global/jwt.service.spec.ts index 201d7db..60576ce 100644 --- a/src/shared/modules/global/jwt.service.spec.ts +++ b/src/shared/modules/global/jwt.service.spec.ts @@ -2,12 +2,14 @@ import { generateKeyPairSync } from 'crypto'; import { UnauthorizedException } from '@nestjs/common'; import { sign } from 'jsonwebtoken'; import { AuthConfig } from '../../config/auth.config'; +import { Scope } from '../../enums/scopes.enum'; import { UserRole } from '../../enums/userRole.enum'; import { JwtService } from './jwt.service'; const ALLOWED_ISSUER = 'https://issuer.example/'; const SECOND_ALLOWED_ISSUER = 'https://second-issuer.example/'; const AUDIENCE = 'https://audience.example/'; +const USER_AUDIENCE = 'https://app.example/v6'; const AUTH_SECRET = 'test-shared-auth-secret'; const { privateKey, publicKey } = generateKeyPairSync('rsa', { @@ -52,18 +54,23 @@ describe('JwtService validation', () => { AuthConfig.jwt.ignoreExpiration = originalAuthConfig.ignoreExpiration; }); - it('accepts an RS256 admin token from any configured issuer and audience', async () => { + it('accepts an RS256 admin token with a non-M2M audience', async () => { const signingKeySpy = jest .spyOn(service as any, 'getSigningKey') .mockResolvedValue(publicKey); const token = sign( - { roles: [UserRole.Admin], userId: '12345' }, + { + roles: [UserRole.Admin], + userId: '12345', + scope: 'openid profile offline_access', + gty: 'authorization_code', + }, privateKey, { algorithm: 'RS256', keyid: 'test-key-id', issuer: SECOND_ALLOWED_ISSUER, - audience: AUDIENCE, + audience: USER_AUDIENCE, expiresIn: 300, }, ); @@ -81,6 +88,35 @@ describe('JwtService validation', () => { ); }); + it('accepts an RS256 client-credentials token with the configured audience', async () => { + jest.spyOn(service as any, 'getSigningKey').mockResolvedValue(publicKey); + const token = sign( + { + scope: Scope.AllGroups, + gty: 'client-credentials', + sub: 'test-client@clients', + }, + privateKey, + { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: ALLOWED_ISSUER, + audience: AUDIENCE, + expiresIn: 300, + }, + ); + + await expect(service.validateToken(token)).resolves.toEqual({ + scopes: expect.arrayContaining([ + Scope.AllGroups, + Scope.ReadGroups, + Scope.WriteGroups, + ]), + userId: 'test-client@clients', + isMachine: true, + }); + }); + it('rejects static test tokens in production', async () => { await expect(service.validateToken('admin-token')).rejects.toBeInstanceOf( UnauthorizedException, @@ -99,31 +135,93 @@ describe('JwtService validation', () => { }); }); - it('rejects an RS256 token with the wrong audience', async () => { + it('rejects an RS256 client-credentials token with the wrong audience', async () => { jest.spyOn(service as any, 'getSigningKey').mockResolvedValue(publicKey); - const token = sign({ roles: [UserRole.Admin] }, privateKey, { - algorithm: 'RS256', - keyid: 'test-key-id', - issuer: ALLOWED_ISSUER, - audience: 'https://wrong-audience.example/', - expiresIn: 300, - }); + const token = sign( + { + scope: Scope.ReadGroups, + gty: 'client-credentials', + sub: 'test-client@clients', + }, + privateKey, + { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: ALLOWED_ISSUER, + audience: 'https://wrong-audience.example/', + expiresIn: 300, + }, + ); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('rejects an RS256 client-credentials token without an audience', async () => { + jest.spyOn(service as any, 'getSigningKey').mockResolvedValue(publicKey); + const token = sign( + { + scope: Scope.ReadGroups, + gty: 'client-credentials', + sub: 'test-client@clients', + }, + privateKey, + { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: ALLOWED_ISSUER, + expiresIn: 300, + }, + ); + + await expect(service.validateToken(token)).rejects.toBeInstanceOf( + UnauthorizedException, + ); + }); + + it('still checks audience when client-credentials tokens contain user claims', async () => { + jest.spyOn(service as any, 'getSigningKey').mockResolvedValue(publicKey); + const token = sign( + { + scope: Scope.ReadGroups, + gty: 'client-credentials', + roles: [UserRole.Admin], + userId: '12345', + }, + privateKey, + { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: ALLOWED_ISSUER, + audience: 'https://wrong-audience.example/', + expiresIn: 300, + }, + ); await expect(service.validateToken(token)).rejects.toBeInstanceOf( UnauthorizedException, ); }); - it('rejects an RS256 token when AUTH0_AUDIENCE is unavailable', async () => { + it('rejects a client-credentials token when AUTH0_AUDIENCE is unavailable', async () => { AuthConfig.jwt.audience = undefined; const signingKeySpy = jest.spyOn(service as any, 'getSigningKey'); - const token = sign({ roles: [UserRole.Admin] }, privateKey, { - algorithm: 'RS256', - keyid: 'test-key-id', - issuer: ALLOWED_ISSUER, - audience: AUDIENCE, - expiresIn: 300, - }); + const token = sign( + { + scope: Scope.ReadGroups, + gty: 'client-credentials', + sub: 'test-client@clients', + }, + privateKey, + { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: ALLOWED_ISSUER, + audience: AUDIENCE, + expiresIn: 300, + }, + ); await expect(service.validateToken(token)).rejects.toBeInstanceOf( UnauthorizedException, @@ -131,6 +229,30 @@ describe('JwtService validation', () => { expect(signingKeySpy).not.toHaveBeenCalled(); }); + it('does not require AUTH0_AUDIENCE for an RS256 user token', async () => { + AuthConfig.jwt.audience = undefined; + jest.spyOn(service as any, 'getSigningKey').mockResolvedValue(publicKey); + const token = sign( + { roles: [UserRole.Admin], userId: '12345' }, + privateKey, + { + algorithm: 'RS256', + keyid: 'test-key-id', + issuer: ALLOWED_ISSUER, + audience: USER_AUDIENCE, + expiresIn: 300, + }, + ); + + await expect(service.validateToken(token)).resolves.toEqual( + expect.objectContaining({ + roles: [UserRole.Admin], + userId: '12345', + isMachine: false, + }), + ); + }); + it('rejects an unlisted issuer before requesting its signing key', async () => { const signingKeySpy = jest.spyOn(service as any, 'getSigningKey'); const token = sign({ roles: [UserRole.Admin] }, privateKey, { @@ -237,13 +359,47 @@ describe('JwtService validation', () => { ); }); - it('validates the configured audience when an HS256 token contains aud', async () => { - const token = sign({ roles: [UserRole.Admin] }, AUTH_SECRET, { - algorithm: 'HS256', - issuer: ALLOWED_ISSUER, - audience: 'https://wrong-audience.example/', - expiresIn: 300, - }); + it('accepts an HS256 admin token with a non-M2M audience', async () => { + const token = sign( + { + roles: [UserRole.Admin], + userId: '12345', + scope: 'openid profile offline_access', + gty: 'authorization_code', + }, + AUTH_SECRET, + { + algorithm: 'HS256', + issuer: ALLOWED_ISSUER, + audience: USER_AUDIENCE, + expiresIn: 300, + }, + ); + + await expect(service.validateToken(token)).resolves.toEqual( + expect.objectContaining({ + roles: [UserRole.Admin], + userId: '12345', + isMachine: false, + }), + ); + }); + + it('validates AUTH0_AUDIENCE for an HS256 client-credentials token', async () => { + const token = sign( + { + scope: Scope.ReadGroups, + gty: 'client-credentials', + sub: 'test-client@clients', + }, + AUTH_SECRET, + { + algorithm: 'HS256', + issuer: ALLOWED_ISSUER, + audience: 'https://wrong-audience.example/', + expiresIn: 300, + }, + ); await expect(service.validateToken(token)).rejects.toBeInstanceOf( UnauthorizedException, diff --git a/src/shared/modules/global/jwt.service.ts b/src/shared/modules/global/jwt.service.ts index 0b30586..418cd5d 100644 --- a/src/shared/modules/global/jwt.service.ts +++ b/src/shared/modules/global/jwt.service.ts @@ -79,12 +79,13 @@ export class JwtService { const user: JwtUser = { isMachine: false }; - // Check for M2M token from Auth0 - if (decodedToken.scope) { - const scopeString = decodedToken.scope as string; - const rawScopes = scopeString.split(' '); + // Match the shared v6 authenticator's client-credentials classification. + if (this.isMachineTokenPayload(decodedToken)) { + const rawScopes = this.extractScopes(decodedToken); user.scopes = this.expandScopes(rawScopes); - user.userId = decodedToken.sub; + if (typeof decodedToken.sub === 'string') { + user.userId = decodedToken.sub; + } user.isMachine = true; } else { // Check for roles, userId and handle in a user token @@ -118,9 +119,9 @@ export class JwtService { /** * Verifies a token with the standard v6 auth configuration. * - * RS256 tokens use the allowlisted issuer's JWKS endpoint and must match the - * configured Auth0 audience. Legacy HS256 user tokens use AUTH_SECRET; their - * audience is checked when the token contains an audience claim. + * RS256 tokens use the allowlisted issuer's JWKS endpoint. Legacy HS256 + * tokens use AUTH_SECRET. Both token types validate issuer and expiration; + * genuine client-credentials tokens must also match AUTH0_AUDIENCE. * * @param token The encoded JWT. * @returns The verified token payload. @@ -156,6 +157,10 @@ export class JwtService { ignoreExpiration: AuthConfig.jwt.ignoreExpiration, }; + if (this.isClientCredentialsGrant(tokenPayload)) { + verifyOptions.audience = this.getConfiguredAudience(); + } + let signingKey: Secret; let algorithms: Algorithm[]; @@ -166,18 +171,11 @@ export class JwtService { signingKey = AuthConfig.authSecret; algorithms = ['HS256']; - - // Legacy Topcoder user/admin tokens do not contain an audience. If an - // HS256 token does contain one, validate it against the global value. - if (Object.prototype.hasOwnProperty.call(tokenPayload, 'aud')) { - verifyOptions.audience = this.getConfiguredAudience(); - } } else if (decodedToken.header.alg === 'RS256') { if (!decodedToken.header.kid) { throw new UnauthorizedException('Invalid token: Missing key ID'); } - verifyOptions.audience = this.getConfiguredAudience(); signingKey = await this.getSigningKey(issuer, decodedToken.header.kid); algorithms = ['RS256']; } else { @@ -211,6 +209,87 @@ export class JwtService { return audience; } + /** + * Determines whether a payload represents a shared v6 M2M token. + * + * User tokens can also contain OAuth scopes, so scopes alone are not a + * machine-token marker. This mirrors tc-core's client-credentials check by + * requiring scopes and the grant type while excluding user IDs and roles. + * + * @param payload The decoded JWT payload. + * @returns Whether the payload should be authorized as an M2M caller. + */ + private isMachineTokenPayload(payload: Record): boolean { + const hasUserId = this.findClaim(payload, 'userId') !== undefined; + const roles = this.findClaim(payload, 'roles'); + const hasRoles = roles !== undefined; + + return ( + this.isClientCredentialsGrant(payload) && + this.extractScopes(payload).length > 0 && + !hasUserId && + !hasRoles + ); + } + + /** + * Determines whether a payload was issued through client credentials. + * + * This intentionally controls audience validation independently from M2M + * authorization so an unusual client token cannot bypass AUTH0_AUDIENCE by + * carrying user-like claims. + * + * @param payload The decoded JWT payload. + * @returns Whether the grant type is client credentials. + */ + private isClientCredentialsGrant(payload: Record): boolean { + return this.findClaim(payload, 'gty') === 'client-credentials'; + } + + /** + * Extracts OAuth scopes from standard or namespaced JWT claims. + * + * @param payload The decoded JWT payload. + * @returns A deduplicated list of non-empty scopes. + */ + private extractScopes(payload: Record): string[] { + const scopeClaim = + this.findClaim(payload, 'scope') ?? this.findClaim(payload, 'scopes'); + const rawScopes = Array.isArray(scopeClaim) + ? scopeClaim + : typeof scopeClaim === 'string' + ? scopeClaim.split(/\s+/) + : []; + + return Array.from( + new Set( + rawScopes + .filter((scope): scope is string => typeof scope === 'string') + .map((scope) => scope.trim()) + .filter((scope) => scope.length > 0), + ), + ); + } + + /** + * Finds either a standard claim or its namespaced equivalent. + * + * @param payload The decoded JWT payload. + * @param claimName The unqualified claim name. + * @returns The claim value when present. + */ + private findClaim( + payload: Record, + claimName: string, + ): unknown { + const key = Object.keys(payload).find( + (candidate) => + candidate === claimName || candidate.endsWith(`/${claimName}`), + ); + + return key ? payload[key] : undefined; + } + /** * Gets the signing key from an allowlisted issuer. * From 4fc3b26e4b641d6b290f8d286361299c3e177599 Mon Sep 17 00:00:00 2001 From: jmgasper Date: Wed, 22 Jul 2026 15:43:01 +1000 Subject: [PATCH 7/7] fix(security): resolve Dependabot alerts --- .github/workflows/trivy.yaml | 2 +- pnpm-lock.yaml | 660 +++++++++++++++++++++-------------- pnpm-workspace.yaml | 19 +- 3 files changed, 409 insertions(+), 272 deletions(-) diff --git a/.github/workflows/trivy.yaml b/.github/workflows/trivy.yaml index 7b9fa48..9cbcf52 100644 --- a/.github/workflows/trivy.yaml +++ b/.github/workflows/trivy.yaml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v4 - name: Run Trivy scanner in repo mode - uses: aquasecurity/trivy-action@0.33.1 + uses: aquasecurity/trivy-action@0.35.0 with: scan-type: "fs" ignore-unfixed: true diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 815871c..4d7cea4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,34 +5,43 @@ settings: excludeLinksFromLockfile: false overrides: + '@babel/core@^7': 7.29.6 '@isaacs/brace-expansion': 5.0.1 + '@xhmikosr/decompress@^10': 10.2.1 ajv@^6.0.0: 6.14.0 ajv@^8.0.0: 8.20.0 axios: 1.18.1 - brace-expansion@^1.0.0: 1.1.13 - brace-expansion@^2.0.0: 2.0.3 + body-parser@^2: 2.3.0 + brace-expansion@^1.0.0: 1.1.16 + brace-expansion@^2.0.0: 2.1.2 defu: 6.1.7 + diff@^4: 4.0.4 effect@^3.0.0: 3.22.0 - fast-uri@^3.0.0: 3.1.2 - file-type: 21.3.2 + fast-uri@^3.0.0: 3.1.4 + file-type@>=13.0.0 <21.3.2: 21.3.2 flatted: 3.4.2 follow-redirects: 1.16.0 form-data: 4.0.6 handlebars: 4.7.9 ip-address@^10.0.0: 10.1.1 joi@^18.0.0: 18.2.1 - js-yaml@^4.0.0: 4.2.0 + js-yaml@^3: 3.15.0 + js-yaml@^4.0.0: 4.3.0 jws: 4.0.1 lodash: 4.18.1 minimatch@^3.0.0: 3.1.4 minimatch@^5.0.0: 5.1.8 + minimatch@^9: 9.0.9 + minimatch@^10: 10.2.5 multer: 2.2.0 path-to-regexp: 8.4.2 picomatch@^2.0.0: 2.3.2 picomatch@^4.0.0: 4.0.5 piscina@^4.0.0: 4.9.3 qs: 6.15.3 + terser-webpack-plugin@>=5.0.0 <5.6.1: 5.6.1 uuid: 14.0.1 + webpack@^5: 5.104.1 yauzl: 3.2.1 importers: @@ -171,10 +180,10 @@ importers: version: 7.1.4(supports-color@8.1.1) ts-jest: specifier: ^29.2.5 - version: 29.4.6(@babel/core@7.28.5(supports-color@8.1.1))(@jest/transform@29.7.0(supports-color@8.1.1))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3) + version: 29.4.6(@babel/core@7.29.6(supports-color@8.1.1))(@jest/transform@29.7.0(supports-color@8.1.1))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.6(supports-color@8.1.1))(supports-color@8.1.1))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3) ts-loader: specifier: ^9.5.2 - version: 9.5.4(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)) + version: 9.5.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3)) ts-node: specifier: ^10.9.2 version: 10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3) @@ -228,35 +237,43 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.5': - resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} engines: {node: '>=6.9.0'} - '@babel/core@7.28.5': - resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.6': + resolution: {integrity: sha512-QdxmAo/ikZqqRGA8s43ww8lcql6naWRvEz0FFrl6MIlc7Gi6TroXnSdWa5U/kq6fzcpqpHesicQxFZIieZbyIA==} engines: {node: '>=6.9.0'} '@babel/generator@7.28.5': resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.27.2': - resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} engines: {node: '>=6.9.0'} - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.27.1': - resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.28.3': - resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': 7.29.6 '@babel/helper-plugin-utils@7.27.1': resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} @@ -266,16 +283,24 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.4': - resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} '@babel/parser@7.28.5': @@ -283,109 +308,118 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-syntax-async-generators@7.8.4': resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-bigint@7.8.3': resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-class-properties@7.12.13': resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-class-static-block@7.14.5': resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-import-attributes@7.27.1': resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-json-strings@7.8.3': resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-jsx@7.27.1': resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-numeric-separator@7.10.4': resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-object-rest-spread@7.8.3': resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-optional-catch-binding@7.8.3': resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-optional-chaining@7.8.3': resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-private-property-in-object@7.14.5': resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-top-level-await@7.14.5': resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 '@babel/plugin-syntax-typescript@7.27.1': resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': 7.29.6 - '@babel/template@7.27.2': - resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': - resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} '@babel/types@7.28.5': resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -624,14 +658,6 @@ packages: '@types/node': optional: true - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.1': - resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} - engines: {node: 20 || >=22} - '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -1413,8 +1439,8 @@ packages: resolution: {integrity: sha512-oqTYAcObqTlg8owulxFTqiaJkfv2SHsxxxz9Wg4krJAHVzGWlZsU8tAB30R6ow+aHrfv4Kub6WQ8u04NWVPUpA==} engines: {node: '>=18'} - '@xhmikosr/decompress@10.2.0': - resolution: {integrity: sha512-MmDBvu0+GmADyQWHolcZuIWffgfnuTo4xpr2I/Qw5Ox0gt+e1Be7oYqJM4te5ylL6mzlcoicnHVDvP27zft8tg==} + '@xhmikosr/decompress@10.2.1': + resolution: {integrity: sha512-ceGT3K2JR73Usj5o+HM2RRZw0XPUes4rhb7uVTY9PefUQQMpuj8x+V29XVG09JnS7EOj9SIBhHn3K4bFNNb7hA==} engines: {node: '>=18'} '@xhmikosr/downloader@15.2.0': @@ -1561,7 +1587,7 @@ packages: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.8.0 + '@babel/core': 7.29.6 babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} @@ -1574,13 +1600,13 @@ packages: babel-preset-current-node-syntax@1.2.0: resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==} peerDependencies: - '@babel/core': ^7.0.0 || ^8.0.0-0 + '@babel/core': 7.29.6 babel-preset-jest@29.6.3: resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': 7.29.6 backoff@2.5.0: resolution: {integrity: sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==} @@ -1589,6 +1615,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} peerDependencies: @@ -1615,15 +1645,19 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - body-parser@2.2.1: - resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==} + body-parser@2.3.0: + resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} engines: {node: '>=18'} - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} + brace-expansion@1.1.16: + resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==} - brace-expansion@2.0.3: - resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} + brace-expansion@2.1.2: + resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==} + + brace-expansion@5.0.7: + resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -1849,6 +1883,10 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1963,8 +2001,8 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + diff@4.0.4: + resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} dotenv@16.6.1: @@ -2024,8 +2062,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + es-module-lexer@2.3.1: + resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} es-object-atoms@1.1.1: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} @@ -2189,8 +2227,8 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.1.2: - resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + fast-uri@3.1.4: + resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==} fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -2218,6 +2256,10 @@ packages: resolution: {integrity: sha512-DLkUvGwep3poOV2wpzbHCOnSKGk1LzyXTv+aHFgN2VFl96wnp8YA9YjO2qPzg5PuL8q/SW9Pdi6WTkYOIh995w==} engines: {node: '>=20'} + file-type@21.3.4: + resolution: {integrity: sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==} + engines: {node: '>=20'} + filename-reserved-regex@3.0.0: resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2270,7 +2312,7 @@ packages: engines: {node: '>=14.21.3'} peerDependencies: typescript: '>3.6.0' - webpack: ^5.11.0 + webpack: 5.104.1 form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} @@ -2431,6 +2473,10 @@ packages: resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.3: + resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2693,12 +2739,12 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + js-yaml@3.15.0: + resolution: {integrity: sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==} hasBin: true - js-yaml@4.2.0: - resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==} + js-yaml@4.3.0: + resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==} hasBin: true js-yaml@5.2.1: @@ -2943,15 +2989,15 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} minimatch@3.1.4: resolution: {integrity: sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -3230,9 +3276,6 @@ packages: resolution: {integrity: sha512-xx0kgFxSHWY9aG1109uv4w2b+JLwHseSowOWo1bzCTDBpUk3er2rZdtQ90mAjUYbkh6Hus9DAwWvmHsX5pHaIQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -3373,9 +3416,6 @@ packages: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - serve-static@2.2.1: resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} engines: {node: '>= 18'} @@ -3554,19 +3594,46 @@ packages: version: 3.0.1 engines: {node: '>= 14'} - terser-webpack-plugin@5.3.16: - resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} + terser-webpack-plugin@5.6.1: + resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} engines: {node: '>= 10.13.0'} peerDependencies: + '@minify-html/node': '*' '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' uglify-js: '*' - webpack: ^5.1.0 + webpack: 5.104.1 peerDependenciesMeta: + '@minify-html/node': + optional: true '@swc/core': optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true esbuild: optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true uglify-js: optional: true @@ -3626,7 +3693,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' + '@babel/core': 7.29.6 '@jest/transform': ^29.0.0 || ^30.0.0 '@jest/types': ^29.0.0 || ^30.0.0 babel-jest: ^29.0.0 || ^30.0.0 @@ -3653,7 +3720,7 @@ packages: engines: {node: '>=12.0.0'} peerDependencies: typescript: '*' - webpack: ^5.0.0 + webpack: 5.104.1 ts-node@10.9.2: resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} @@ -3704,6 +3771,10 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} + typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -3795,8 +3866,8 @@ packages: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} - webpack@5.103.0: - resolution: {integrity: sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==} + webpack@5.104.1: + resolution: {integrity: sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -3936,19 +4007,25 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.5': {} + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.7': {} - '@babel/core@7.28.5(supports-color@8.1.1)': + '@babel/core@7.29.6(supports-color@8.1.1)': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-compilation-targets': 7.27.2 - '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1) - '@babel/helpers': 7.28.4 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/traverse': 7.28.5(supports-color@8.1.1) - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.6(supports-color@8.1.1))(supports-color@8.1.1) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@8.1.1) + '@babel/types': 7.29.7 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -3966,29 +4043,37 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - '@babel/helper-compilation-targets@7.27.2': + '@babel/generator@7.29.7': dependencies: - '@babel/compat-data': 7.28.5 - '@babel/helper-validator-option': 7.27.1 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-globals@7.28.0': {} + '@babel/helper-globals@7.29.7': {} - '@babel/helper-module-imports@7.27.1(supports-color@8.1.1)': + '@babel/helper-module-imports@7.29.7(supports-color@8.1.1)': dependencies: - '@babel/traverse': 7.28.5(supports-color@8.1.1) - '@babel/types': 7.28.5 + '@babel/traverse': 7.29.7(supports-color@8.1.1) + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.6(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) - '@babel/helper-module-imports': 7.27.1(supports-color@8.1.1) - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) + '@babel/helper-module-imports': 7.29.7(supports-color@8.1.1) + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -3996,118 +4081,126 @@ snapshots: '@babel/helper-string-parser@7.27.1': {} + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.28.5': {} - '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-option@7.29.7': {} - '@babel/helpers@7.28.4': + '@babel/helpers@7.29.7': dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 '@babel/parser@7.28.5': dependencies: '@babel/types': 7.28.5 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/parser@7.29.7': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/types': 7.29.7 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.6(supports-color@8.1.1))': + dependencies: + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5(supports-color@8.1.1))': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.29.6(supports-color@8.1.1))': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/helper-plugin-utils': 7.27.1 - '@babel/template@7.27.2': + '@babel/template@7.29.7': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 - '@babel/traverse@7.28.5(supports-color@8.1.1)': + '@babel/traverse@7.29.7(supports-color@8.1.1)': dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.5 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.5 - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -4117,6 +4210,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@bcoe/v8-coverage@0.2.3': {} '@borewit/text-codec@0.1.1': {} @@ -4167,7 +4265,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.2.0 + js-yaml: 4.3.0 minimatch: 3.1.4 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -4349,18 +4447,12 @@ snapshots: optionalDependencies: '@types/node': 22.19.3 - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.1': - dependencies: - '@isaacs/balanced-match': 4.0.1 - '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 3.14.2 + js-yaml: 3.15.0 resolve-from: 5.0.0 '@istanbuljs/schema@0.1.3': {} @@ -4500,7 +4592,7 @@ snapshots: '@jest/transform@29.7.0(supports-color@8.1.1)': dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.31 babel-plugin-istanbul: 6.1.1(supports-color@8.1.1) @@ -4649,27 +4741,36 @@ snapshots: chokidar: 4.0.3 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)) + fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3)) glob: 13.0.0 node-emoji: 1.11.0 ora: 5.4.1 tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.2.0 typescript: 5.9.3 - webpack: 5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3) + webpack: 5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3) webpack-node-externals: 3.0.0 optionalDependencies: '@swc/cli': 0.6.0(@swc/core@1.15.5)(chokidar@4.0.3)(supports-color@8.1.1) '@swc/core': 1.15.5 transitivePeerDependencies: + - '@minify-html/node' + - '@swc/css' + - '@swc/html' - '@types/node' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js - webpack-cli '@nestjs/common@11.1.28(class-transformer@0.5.1)(class-validator@0.14.4)(reflect-metadata@0.2.2)(rxjs@7.8.2)(supports-color@8.1.1)': dependencies: - file-type: 21.3.2(supports-color@8.1.1) + file-type: 21.3.4(supports-color@8.1.1) iterare: 1.2.1 load-esm: 1.0.3 reflect-metadata: 0.2.2 @@ -4840,7 +4941,7 @@ snapshots: '@xhmikosr/bin-wrapper': 13.2.0(supports-color@8.1.1) commander: 8.3.0 fast-glob: 3.3.3 - minimatch: 9.0.5 + minimatch: 9.0.9 piscina: 4.9.3 semver: 7.7.3 slash: 3.0.0 @@ -4937,24 +5038,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.5 + '@babel/types': 7.29.7 '@types/body-parser@1.19.6': dependencies: @@ -5163,7 +5264,7 @@ snapshots: '@typescript-eslint/types': 8.50.0 '@typescript-eslint/visitor-keys': 8.50.0 debug: 4.4.3(supports-color@8.1.1) - minimatch: 9.0.5 + minimatch: 9.0.9 semver: 7.7.3 tinyglobby: 0.2.15 ts-api-utils: 2.1.0(typescript@5.9.3) @@ -5325,7 +5426,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@xhmikosr/decompress@10.2.0(supports-color@8.1.1)': + '@xhmikosr/decompress@10.2.1(supports-color@8.1.1)': dependencies: '@xhmikosr/decompress-tar': 8.1.0(supports-color@8.1.1) '@xhmikosr/decompress-tarbz2': 8.1.0(supports-color@8.1.1) @@ -5341,7 +5442,7 @@ snapshots: '@xhmikosr/downloader@15.2.0(supports-color@8.1.1)': dependencies: '@xhmikosr/archive-type': 7.1.0(supports-color@8.1.1) - '@xhmikosr/decompress': 10.2.0(supports-color@8.1.1) + '@xhmikosr/decompress': 10.2.1(supports-color@8.1.1) content-disposition: 0.5.4 defaults: 2.0.2 ext-name: 5.0.0 @@ -5414,7 +5515,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.2 + fast-uri: 3.1.4 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -5471,13 +5572,13 @@ snapshots: b4a@1.7.3: {} - babel-jest@29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1): + babel-jest@29.7.0(@babel/core@7.29.6(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@jest/transform': 29.7.0(supports-color@8.1.1) '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1(supports-color@8.1.1) - babel-preset-jest: 29.6.3(@babel/core@7.28.5(supports-color@8.1.1)) + babel-preset-jest: 29.6.3(@babel/core@7.29.6(supports-color@8.1.1)) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -5496,35 +5597,35 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.27.2 - '@babel/types': 7.28.5 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 - babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5(supports-color@8.1.1)): - dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5(supports-color@8.1.1)) - - babel-preset-jest@29.6.3(@babel/core@7.28.5(supports-color@8.1.1)): - dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + babel-preset-current-node-syntax@1.2.0(@babel/core@7.29.6(supports-color@8.1.1)): + dependencies: + '@babel/core': 7.29.6(supports-color@8.1.1) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.6(supports-color@8.1.1)) + + babel-preset-jest@29.6.3(@babel/core@7.29.6(supports-color@8.1.1)): + dependencies: + '@babel/core': 7.29.6(supports-color@8.1.1) babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5(supports-color@8.1.1)) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.6(supports-color@8.1.1)) backoff@2.5.0: dependencies: @@ -5532,6 +5633,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + bare-events@2.8.2: {} base64-js@1.5.1: {} @@ -5555,29 +5658,33 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - body-parser@2.2.1(supports-color@8.1.1): + body-parser@2.3.0(supports-color@8.1.1): dependencies: bytes: 3.1.2 - content-type: 1.0.5 + content-type: 2.0.0 debug: 4.4.3(supports-color@8.1.1) http-errors: 2.0.1 - iconv-lite: 0.7.1 + iconv-lite: 0.7.3 on-finished: 2.4.1 qs: 6.15.3 raw-body: 3.0.2 - type-is: 2.0.1 + type-is: 2.1.0 transitivePeerDependencies: - supports-color - brace-expansion@1.1.13: + brace-expansion@1.1.16: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.3: + brace-expansion@2.1.2: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.7: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -5790,6 +5897,8 @@ snapshots: content-type@1.0.5: {} + content-type@2.0.0: {} + convert-source-map@2.0.0: {} cookie-signature@1.2.2: {} @@ -5813,7 +5922,7 @@ snapshots: cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 - js-yaml: 4.2.0 + js-yaml: 4.3.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: @@ -5885,7 +5994,7 @@ snapshots: diff-sequences@29.6.3: {} - diff@4.0.2: {} + diff@4.0.4: {} dotenv@16.6.1: {} @@ -5936,7 +6045,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} + es-module-lexer@2.3.1: {} es-object-atoms@1.1.1: dependencies: @@ -6083,7 +6192,7 @@ snapshots: express@5.2.1(supports-color@8.1.1): dependencies: accepts: 2.0.0 - body-parser: 2.2.1(supports-color@8.1.1) + body-parser: 2.3.0(supports-color@8.1.1) content-disposition: 1.0.1 content-type: 1.0.5 cookie: 0.7.2 @@ -6148,7 +6257,7 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-uri@3.1.2: {} + fast-uri@3.1.4: {} fastq@1.19.1: dependencies: @@ -6177,6 +6286,15 @@ snapshots: transitivePeerDependencies: - supports-color + file-type@21.3.4(supports-color@8.1.1): + dependencies: + '@tokenizer/inflate': 0.4.1(supports-color@8.1.1) + strtok3: 10.3.4 + token-types: 6.1.1 + uint8array-extras: 1.5.0 + transitivePeerDependencies: + - supports-color + filename-reserved-regex@3.0.0: {} filenamify@6.0.0: @@ -6225,7 +6343,7 @@ snapshots: optionalDependencies: debug: 4.4.3(supports-color@8.1.1) - fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)): + fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3)): dependencies: '@babel/code-frame': 7.27.1 chalk: 4.1.2 @@ -6240,7 +6358,7 @@ snapshots: semver: 7.7.3 tapable: 2.3.0 typescript: 5.9.3 - webpack: 5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3) + webpack: 5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3) form-data-encoder@2.1.4: {} @@ -6324,7 +6442,7 @@ snapshots: glob@13.0.0: dependencies: - minimatch: 10.1.1 + minimatch: 10.2.5 minipass: 7.1.2 path-scurry: 2.0.1 @@ -6423,6 +6541,10 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.3: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -6488,8 +6610,8 @@ snapshots: istanbul-lib-instrument@5.2.1(supports-color@8.1.1): dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) - '@babel/parser': 7.28.5 + '@babel/core': 7.29.6(supports-color@8.1.1) + '@babel/parser': 7.29.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -6498,7 +6620,7 @@ snapshots: istanbul-lib-instrument@6.0.3(supports-color@8.1.1): dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/parser': 7.28.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 @@ -6580,10 +6702,10 @@ snapshots: jest-config@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)): dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1) + babel-jest: 29.7.0(@babel/core@7.29.6(supports-color@8.1.1))(supports-color@8.1.1) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -6765,15 +6887,15 @@ snapshots: jest-snapshot@29.7.0(supports-color@8.1.1): dependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@babel/generator': 7.28.5 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5(supports-color@8.1.1)) - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5(supports-color@8.1.1)) + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.29.6(supports-color@8.1.1)) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.29.6(supports-color@8.1.1)) '@babel/types': 7.28.5 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5(supports-color@8.1.1)) + babel-preset-current-node-syntax: 1.2.0(@babel/core@7.29.6(supports-color@8.1.1)) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6858,12 +6980,12 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@3.14.2: + js-yaml@3.15.0: dependencies: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.2.0: + js-yaml@4.3.0: dependencies: argparse: 2.0.1 @@ -7077,17 +7199,17 @@ snapshots: mimic-response@4.0.0: {} - minimatch@10.1.1: + minimatch@10.2.5: dependencies: - '@isaacs/brace-expansion': 5.0.1 + brace-expansion: 5.0.7 minimatch@3.1.4: dependencies: - brace-expansion: 1.1.13 + brace-expansion: 1.1.16 - minimatch@9.0.5: + minimatch@9.0.9: dependencies: - brace-expansion: 2.0.3 + brace-expansion: 2.1.2 minimist@1.2.8: {} @@ -7339,10 +7461,6 @@ snapshots: lodash: 4.18.1 reconnect-core: 1.3.0 - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - range-parser@1.2.1: {} raw-body@3.0.2: @@ -7487,10 +7605,6 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - serve-static@2.2.1(supports-color@8.1.1): dependencies: encodeurl: 2.0.0 @@ -7703,14 +7817,13 @@ snapshots: - debug - supports-color - terser-webpack-plugin@5.3.16(@swc/core@1.15.5)(uglify-js@3.19.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)): + terser-webpack-plugin@5.6.1(@swc/core@1.15.5)(uglify-js@3.19.3)(webpack@5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 6.0.2 terser: 5.44.1 - webpack: 5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3) + webpack: 5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3) optionalDependencies: '@swc/core': 1.15.5 uglify-js: 3.19.3 @@ -7765,7 +7878,7 @@ snapshots: dependencies: typescript: 5.9.3 - ts-jest@29.4.6(@babel/core@7.28.5(supports-color@8.1.1))(@jest/transform@29.7.0(supports-color@8.1.1))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3): + ts-jest@29.4.6(@babel/core@7.29.6(supports-color@8.1.1))(@jest/transform@29.7.0(supports-color@8.1.1))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.29.6(supports-color@8.1.1))(supports-color@8.1.1))(jest-util@29.7.0)(jest@29.7.0(@types/node@22.19.3)(supports-color@8.1.1)(ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 @@ -7779,13 +7892,13 @@ snapshots: typescript: 5.9.3 yargs-parser: 21.1.1 optionalDependencies: - '@babel/core': 7.28.5(supports-color@8.1.1) + '@babel/core': 7.29.6(supports-color@8.1.1) '@jest/transform': 29.7.0(supports-color@8.1.1) '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.28.5(supports-color@8.1.1))(supports-color@8.1.1) + babel-jest: 29.7.0(@babel/core@7.29.6(supports-color@8.1.1))(supports-color@8.1.1) jest-util: 29.7.0 - ts-loader@9.5.4(typescript@5.9.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)): + ts-loader@9.5.4(typescript@5.9.3)(webpack@5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.18.4 @@ -7793,7 +7906,7 @@ snapshots: semver: 7.7.3 source-map: 0.7.6 typescript: 5.9.3 - webpack: 5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3) + webpack: 5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3) ts-node@10.9.2(@swc/core@1.15.5)(@types/node@22.19.3)(typescript@5.9.3): dependencies: @@ -7807,7 +7920,7 @@ snapshots: acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 - diff: 4.0.2 + diff: 4.0.4 make-error: 1.3.6 typescript: 5.9.3 v8-compile-cache-lib: 3.0.1 @@ -7851,6 +7964,12 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 + type-is@2.1.0: + dependencies: + content-type: 2.0.0 + media-typer: 1.1.0 + mime-types: 3.0.2 + typedarray@0.0.6: {} typescript-eslint@8.50.0(eslint@9.39.2(jiti@2.6.1)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3): @@ -7929,7 +8048,7 @@ snapshots: webpack-sources@3.3.3: {} - webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3): + webpack@5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -7942,7 +8061,7 @@ snapshots: browserslist: 4.28.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.4 - es-module-lexer: 1.7.0 + es-module-lexer: 2.3.1 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -7953,12 +8072,21 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(@swc/core@1.15.5)(uglify-js@3.19.3)(webpack@5.103.0(@swc/core@1.15.5)(uglify-js@3.19.3)) + terser-webpack-plugin: 5.6.1(@swc/core@1.15.5)(uglify-js@3.19.3)(webpack@5.104.1(@swc/core@1.15.5)(uglify-js@3.19.3)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js which@2.0.2: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index de6618e..10bd861 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -5,34 +5,43 @@ packages: blockExoticSubdeps: false overrides: + '@babel/core@^7': 7.29.6 '@isaacs/brace-expansion': 5.0.1 + '@xhmikosr/decompress@^10': 10.2.1 'ajv@^6.0.0': 6.14.0 'ajv@^8.0.0': 8.20.0 axios: 1.18.1 - 'brace-expansion@^1.0.0': 1.1.13 - 'brace-expansion@^2.0.0': 2.0.3 + 'body-parser@^2': 2.3.0 + 'brace-expansion@^1.0.0': 1.1.16 + 'brace-expansion@^2.0.0': 2.1.2 defu: 6.1.7 + 'diff@^4': 4.0.4 'effect@^3.0.0': 3.22.0 - 'fast-uri@^3.0.0': 3.1.2 - file-type: 21.3.2 + 'fast-uri@^3.0.0': 3.1.4 + 'file-type@>=13.0.0 <21.3.2': 21.3.2 flatted: 3.4.2 follow-redirects: 1.16.0 form-data: 4.0.6 handlebars: 4.7.9 'ip-address@^10.0.0': 10.1.1 'joi@^18.0.0': 18.2.1 - 'js-yaml@^4.0.0': 4.2.0 + 'js-yaml@^3': 3.15.0 + 'js-yaml@^4.0.0': 4.3.0 jws: 4.0.1 lodash: 4.18.1 'minimatch@^3.0.0': 3.1.4 'minimatch@^5.0.0': 5.1.8 + 'minimatch@^9': 9.0.9 + 'minimatch@^10': 10.2.5 multer: 2.2.0 path-to-regexp: 8.4.2 'picomatch@^2.0.0': 2.3.2 'picomatch@^4.0.0': 4.0.5 'piscina@^4.0.0': 4.9.3 qs: 6.15.3 + 'terser-webpack-plugin@>=5.0.0 <5.6.1': 5.6.1 uuid: 14.0.1 + 'webpack@^5': 5.104.1 yauzl: 3.2.1 allowBuilds: