diff --git a/.gitignore b/.gitignore index c340a29f40d283ea509cd91f83457a042008cb5a..12063c9603192d68c47b3bf4aeec6619db4cacf0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,9 @@ node_modules # next.js build files .next +next-env.d.ts # environment variables .env .env.* -!.env.example \ No newline at end of file +!.env.example +/.nenv/ diff --git a/.gitlab/issue_templates/Default.md b/.gitlab/issue_templates/Default.md new file mode 100644 index 0000000000000000000000000000000000000000..aa1a65aca363b87aff50280e1a86824009d2098b --- /dev/null +++ b/.gitlab/issue_templates/Default.md @@ -0,0 +1,28 @@ +## Summary + +*Please give a short summary of what the issue is.* + +## Expected Behavior + +*What did you expect how the software should behave?* + +## Actual Behavior + +*What did the software actually do?* + +## Steps to Reproduce the Problem + +*Please describe, step by step, how others can reproduce the problem. Please try these steps for yourself on a clean system.* + +1. +2. +3. + +## Specifications + +- Version: *Which version of this software?* +- Platform: *Which operating system, which other relevant software versions?* + +## Possible fixes + +*Do you have ideas how the issue can be resolved?* diff --git a/.gitlab/merge_request_templates/Default.md b/.gitlab/merge_request_templates/Default.md new file mode 100644 index 0000000000000000000000000000000000000000..3629e0ca3695000863d8c254516f64bf59a7bf60 --- /dev/null +++ b/.gitlab/merge_request_templates/Default.md @@ -0,0 +1,56 @@ +# Summary + +*Insert a meaningful description for this merge request here: What is the new/changed behavior? +Which bug has been fixed? Are there related issues?* + + +# Focus + +*Point the reviewer to the core of the code change. Where should they start reading? What should +they focus on (e.g. security, performance, maintainability, user-friendliness, compliance with the +specs, finding more corner cases, concrete questions)?* + + +# Test Environment + +*How to set up a test environment for manual testing?* + + +# Check List for the Author + +Please, prepare your MR for a review. Be sure to write a summary and a focus and create gitlab +comments for the reviewer. They should guide the reviewer through the changes, explain your changes +and also point out open questions. For further good practices have a look at [our review +guidelines](https://gitlab.com/caosdb/caosdb/-/blob/dev/REVIEW_GUIDELINES.md) + +- [ ] All automated tests pass +- [ ] Reference related issues +- [ ] Up-to-date CHANGELOG.md (or not necessary) +- [ ] Up-to-date JSON schema (or not necessary) +- [ ] Appropriate user and developer documentation (or not necessary) + - Update / write published documentation (`make doc`). + - How do I use the software? Assume "stupid" users. + - How do I develop or debug the software? Assume novice developers. +- [ ] Annotations in code (Gitlab comments) + - Intent of new code + - Problems with old code + - Why this implementation? + + +# Check List for the Reviewer + +- [ ] I understand the intent of this MR +- [ ] All automated tests pass +- [ ] Up-to-date CHANGELOG.md (or not necessary) +- [ ] Appropriate user and developer documentation (or not necessary), also in published + documentation. +- [ ] The test environment setup works and the intended behavior is reproducible in the test + environment +- [ ] In-code documentation and comments are up-to-date. +- [ ] Check: Are there specifications? Are they satisfied? + +For further good practices have a look at [our review guidelines](https://gitlab.com/caosdb/caosdb/-/blob/dev/REVIEW_GUIDELINES.md). + + +/assign me +/target_branch dev diff --git a/Dockerfile b/Dockerfile index 7f7a9d606e484bb8804a787646c68558954016ef..bb94e9aaf19ca45ac1133e98eb98986c4410e42e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,12 @@ FROM refinedev/node:18 AS base +RUN npm install -g --update npm + FROM base AS deps RUN apk add --no-cache libc6-compat + COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./ RUN \ @@ -20,12 +23,34 @@ COPY --from=deps /app/refine/node_modules ./node_modules COPY . . -ENV PORT 3000 -ENV NEXT_PUBLIC_API_URL=https://manager.testbed.pid.gwdg.de/api/v1 -ENV KEY_CLOAK_CLIENT_SECRET "" +ENV PORT 8000 +ARG NEXT_PUBLIC_API_URL +ARG KEY_CLOAK_CLIENT_SECRET +ARG KEY_CLOAK_CLIENT_ID +ARG KEY_CLOAK_ISSUER +ARG NEXT_PUBLIC_HANDLE_SYSTEM_BASE_URI +ARG NEXT_PUBLIC_HANDLE_SYSTEM_DOWNLOAD_PROXY +ARG NEXTAUTH_URL +ARG NEXT_PUBLIC_CORDRA_HANDLE +ARG NEXT_PUBLIC_SHOWCASE_LEFT_PID +ARG NEXT_PUBLIC_SHOWCASE_LEFT_MDPID +ARG NEXT_PUBLIC_SHOWCASE_RIGHT_PID +ARG NEXT_PUBLIC_SHOWCASE_RIGHT_MDPID + +ENV KEY_CLOAK_ISSUER=${KEY_CLOAK_ISSUER} +ENV KEY_CLOAK_CLIENT_SECRET=${KEY_CLOAK_CLIENT_SECRET} +ENV KEY_CLOAK_CLIENT_ID=${KEY_CLOAK_CLIENT_ID} + +ENV NEXT_PUBLIC_HANDLE_SYSTEM_DOWNLOAD_PROXY=${NEXT_PUBLIC_HANDLE_SYSTEM_DOWNLOAD_PROXY} +ENV NEXT_PUBLIC_HANDLE_SYSTEM_BASE_URI=${NEXT_PUBLIC_HANDLE_SYSTEM_BASE_URI} +ENV NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL:-"https://manager.testbed.pid.gwdg.de/api/v1"} +ENV NEXTAUTH_URL=${NEXTAUTH_URL} +ENV NEXT_PUBLIC_CORDRA_HANDLE=${NEXT_PUBLIC_CORDRA_HANDLE} +ENV NEXT_PUBLIC_SHOWCASE_LEFT_PID=${NEXT_PUBLIC_SHOWCASE_LEFT_PID} +ENV NEXT_PUBLIC_SHOWCASE_RIGHT_PID=${NEXT_PUBLIC_SHOWCASE_RIGHT_PID} +ENV NEXT_PUBLIC_SHOWCASE_LEFT_MDPID=${NEXT_PUBLIC_SHOWCASE_LEFT_MDPID} +ENV NEXT_PUBLIC_SHOWCASE_RIGHT_MDPID=${NEXT_PUBLIC_SHOWCASE_RIGHT_MDPID} -#EXPOSE 3000 -#CMD ["npm", "run", "dev"] RUN npm run build FROM base AS runner @@ -42,7 +67,10 @@ COPY --from=builder --chown=refine:nodejs /app/refine/.next/static ./.next/stati USER refine -ENV PORT 3000 -ENV NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1 -ENV KEY_CLOAK_CLIENT_SECRET "" +ENV PORT 8000 +ENV KEY_CLOAK_ISSUER=${KEY_CLOAK_ISSUER} +ENV KEY_CLOAK_CLIENT_SECRET=${KEY_CLOAK_CLIENT_SECRET} +ENV KEY_CLOAK_CLIENT_ID=${KEY_CLOAK_CLIENT_ID} +ENV NEXTAUTH_URL=${NEXTAUTH_URL} + CMD ["node", "server.js"] diff --git a/next-env.d.ts b/next-env.d.ts deleted file mode 100644 index 4f11a03dc6cc37f2b5105c08f2e7b24c603ab2f4..0000000000000000000000000000000000000000 --- a/next-env.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/// <reference types="next" /> -/// <reference types="next/image-types/global" /> - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.js b/next.config.js index e7e879c5b29d294bb3cf4cdca3c1b84de0c671b8..b6232b53dec6760ac1f0b0546ac7146bfd750258 100644 --- a/next.config.js +++ b/next.config.js @@ -4,4 +4,17 @@ module.exports = { i18n, transpilePackages: ["@refinedev/nextjs-router"], output: "standalone", + env: { + KEY_CLOAK_ISSUER: process.env.KEY_CLOAK_ISSUER, + KEY_CLOAK_CLIENT_SECRET: process.env.KEY_CLOAK_CLIENT_SECRET, + KEY_CLOAK_CLIENT_ID: process.env.KEY_CLOAK_CLIENT_ID, + PORT: process.env.PORT, + NEXTAUTH_URL: process.env.NEXTAUTH_URL, + }, + eslint: { + ignoreDuringBuilds: true, + }, + typescript: { + ignoreBuildErrors: true, + }, }; diff --git a/package-lock.json b/package-lock.json index 96e37c820e5ad19451f3d527f68a1b5017699b4a..00b8d68a9e0ec414abf10b17f66c0010c477968b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@auth/unstorage-adapter": "^1.6.0", "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", + "@fontsource/roboto": "^5.1.0", "@mui/icons-material": "^5.15.19", "@mui/lab": "^5.0.0-alpha.85", "@mui/material": "^5.15.19", @@ -25,18 +26,20 @@ "@refinedev/nextjs-router": "^6.0.1", "@refinedev/react-hook-form": "^4.8.15", "@refinedev/simple-rest": "^5.0.3", - "next": "^13.0.6", + "eslint-config-next": "^14.2.4", + "next": "^14.2.4", "next-auth": "^4.24.6", "next-i18next": "^8.9.0", "nookies": "^2.5.2", - "react": "^18.0.0", - "react-dom": "^18.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-json-view-lite": "^1.5.0", "styled-components": "^6.1.11", "unstorage": "^1.10.1" }, "devDependencies": { "@next/eslint-plugin-next": "^14.1.0", - "@openapitools/openapi-generator-cli": "^2.9.0", + "@openapitools/openapi-generator-cli": "^2.7.0", "@types/node": "^18.0.0", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", @@ -1096,6 +1099,11 @@ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" }, + "node_modules/@fontsource/roboto": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@fontsource/roboto/-/roboto-5.1.0.tgz", + "integrity": "sha512-cFRRC1s6RqPygeZ8Uw/acwVHqih8Czjt6Q0MwoUoDe9U3m4dH1HmNDRBZyqlMSFwgNAUKgFImncKdmDHyKpwdg==" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -1633,25 +1641,24 @@ } }, "node_modules/@nestjs/axios": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.0.1.tgz", - "integrity": "sha512-VlOZhAGDmOoFdsmewn8AyClAdGpKXQQaY1+3PGB+g6ceurGIdTxZgRX3VXc1T6Zs60PedWjg3A82TDOB05mrzQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.0.3.tgz", + "integrity": "sha512-h6TCn3yJwD6OKqqqfmtRS5Zo4E46Ip2n+gK1sqwzNBC+qxQ9xpCu+ODVRFur6V3alHSCSBxb3nNtt73VEdluyA==", "dev": true, "peerDependencies": { "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", "axios": "^1.3.1", - "reflect-metadata": "^0.1.12", "rxjs": "^6.0.0 || ^7.0.0" } }, "node_modules/@nestjs/common": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.0.tgz", - "integrity": "sha512-DGv34UHsZBxCM3H5QGE2XE/+oLJzz5+714JQjBhjD9VccFlQs3LRxo/epso4l7nJIiNlZkPyIUC8WzfU/5RTsQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.4.3.tgz", + "integrity": "sha512-4hbLd3XIJubHSylYd/1WSi4VQvG68KM/ECYpMDqA3k3J1/T17SAg40sDoq3ZoO5OZgU0xuNyjuISdOTjs11qVg==", "dev": true, "dependencies": { "iterare": "1.2.1", - "tslib": "2.6.2", + "tslib": "2.7.0", "uid": "2.0.2" }, "funding": { @@ -1661,7 +1668,7 @@ "peerDependencies": { "class-transformer": "*", "class-validator": "*", - "reflect-metadata": "^0.1.12", + "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "peerDependenciesMeta": { @@ -1673,18 +1680,24 @@ } } }, + "node_modules/@nestjs/common/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true + }, "node_modules/@nestjs/core": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.3.0.tgz", - "integrity": "sha512-N06P5ncknW/Pm8bj964WvLIZn2gNhHliCBoAO1LeBvNImYkecqKcrmLbY49Fa1rmMfEM3MuBHeDys3edeuYAOA==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.3.tgz", + "integrity": "sha512-6OQz+5C8mT8yRtfvE5pPCq+p6w5jDot+oQku1KzQ24ABn+lay1KGuJwcKZhdVNuselx+8xhdMxknZTA8wrGLIg==", "dev": true, "hasInstallScript": true, "dependencies": { "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", - "path-to-regexp": "3.2.0", - "tslib": "2.6.2", + "path-to-regexp": "3.3.0", + "tslib": "2.7.0", "uid": "2.0.2" }, "funding": { @@ -1696,7 +1709,7 @@ "@nestjs/microservices": "^10.0.0", "@nestjs/platform-express": "^10.0.0", "@nestjs/websockets": "^10.0.0", - "reflect-metadata": "^0.1.12", + "reflect-metadata": "^0.1.12 || ^0.2.0", "rxjs": "^7.1.0" }, "peerDependenciesMeta": { @@ -1711,24 +1724,29 @@ } } }, + "node_modules/@nestjs/core/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true + }, "node_modules/@next/env": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", - "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.13.tgz", + "integrity": "sha512-s3lh6K8cbW1h5Nga7NNeXrbe0+2jIIYK9YaA9T7IufDWnZpozdFUp6Hf0d5rNWUKu4fEuSX2rCKlGjCrtylfDw==" }, "node_modules/@next/eslint-plugin-next": { - "version": "14.1.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.1.3.tgz", - "integrity": "sha512-VCnZI2cy77Yaj3L7Uhs3+44ikMM1VD/fBMwvTBb3hIaTIuqa+DmG4dhUDq+MASu3yx97KhgsVJbsas0XuiKyww==", - "dev": true, + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.4.tgz", + "integrity": "sha512-svSFxW9f3xDaZA3idQmlFw7SusOuWTpDTAeBlO3AEPDltrraV+lqs7mAc6A27YdnpQVVIA3sODqUAAHdWhVWsA==", "dependencies": { "glob": "10.3.10" } }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", - "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.13.tgz", + "integrity": "sha512-IkAmQEa2Htq+wHACBxOsslt+jMoV3msvxCn0WFSfJSkv/scy+i/EukBKNad36grRxywaXUYJc9mxEGkeIs8Bzg==", "cpu": [ "arm64" ], @@ -1741,9 +1759,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", - "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.13.tgz", + "integrity": "sha512-Dv1RBGs2TTjkwEnFMVL5XIfJEavnLqqwYSD6LXgTPdEy/u6FlSrLBSSfe1pcfqhFEXRAgVL3Wpjibe5wXJzWog==", "cpu": [ "x64" ], @@ -1756,9 +1774,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", - "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.13.tgz", + "integrity": "sha512-yB1tYEFFqo4ZNWkwrJultbsw7NPAAxlPXURXioRl9SdW6aIefOLS+0TEsKrWBtbJ9moTDgU3HRILL6QBQnMevg==", "cpu": [ "arm64" ], @@ -1771,9 +1789,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", - "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.13.tgz", + "integrity": "sha512-v5jZ/FV/eHGoWhMKYrsAweQ7CWb8xsWGM/8m1mwwZQ/sutJjoFaXchwK4pX8NqwImILEvQmZWyb8pPTcP7htWg==", "cpu": [ "arm64" ], @@ -1786,9 +1804,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", - "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.13.tgz", + "integrity": "sha512-aVc7m4YL7ViiRv7SOXK3RplXzOEe/qQzRA5R2vpXboHABs3w8vtFslGTz+5tKiQzWUmTmBNVW0UQdhkKRORmGA==", "cpu": [ "x64" ], @@ -1801,9 +1819,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", - "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.13.tgz", + "integrity": "sha512-4wWY7/OsSaJOOKvMsu1Teylku7vKyTuocvDLTZQq0TYv9OjiYYWt63PiE1nTuZnqQ4RPvME7Xai+9enoiN0Wrg==", "cpu": [ "x64" ], @@ -1816,9 +1834,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", - "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.13.tgz", + "integrity": "sha512-uP1XkqCqV2NVH9+g2sC7qIw+w2tRbcMiXFEbMihkQ8B1+V6m28sshBwAB0SDmOe0u44ne1vFU66+gx/28RsBVQ==", "cpu": [ "arm64" ], @@ -1831,9 +1849,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", - "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.13.tgz", + "integrity": "sha512-V26ezyjPqQpDBV4lcWIh8B/QICQ4v+M5Bo9ykLN+sqeKKBxJVDpEc6biDVyluTXTC40f5IqCU0ttth7Es2ZuMw==", "cpu": [ "ia32" ], @@ -1846,9 +1864,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", - "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.13.tgz", + "integrity": "sha512-WwzOEAFBGhlDHE5Z73mNU8CO8mqMNLqaG+AO9ETmzdCQlJhVtWZnOl2+rqgVQS+YHunjOWptdFmNfbpwcUuEsw==", "cpu": [ "x64" ], @@ -1911,17 +1929,17 @@ } }, "node_modules/@openapitools/openapi-generator-cli": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.12.0.tgz", - "integrity": "sha512-1msjEK5y5zVNbDvbCQNY5Un7KUdhZ/2fhMGgToOQUF1gQOOHQVZ9ALXJkd9STb+wlV/1Cr/UVM56d85NOUMstA==", + "version": "2.13.9", + "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.13.9.tgz", + "integrity": "sha512-GJaWGcHmLsvj/G1mRDytm9PTDwRGSYUDTf1uA/2FYxQAb5sq4nkZz1tD4Z7qDlZ3xTYSTw4Z8BQUdlsnrA8rcw==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nestjs/axios": "3.0.1", - "@nestjs/common": "10.3.0", - "@nestjs/core": "10.3.0", + "@nestjs/axios": "3.0.3", + "@nestjs/common": "10.4.3", + "@nestjs/core": "10.4.3", "@nuxtjs/opencollective": "0.3.2", - "axios": "1.6.5", + "axios": "1.7.4", "chalk": "4.1.2", "commander": "8.3.0", "compare-versions": "4.1.4", @@ -1929,6 +1947,7 @@ "console.table": "0.10.0", "fs-extra": "10.1.0", "glob": "7.2.3", + "https-proxy-agent": "7.0.4", "inquirer": "8.2.6", "lodash": "4.17.21", "reflect-metadata": "0.1.13", @@ -1950,6 +1969,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -2808,6 +2828,11 @@ "react-dom": "^17.0.0 || ^18.0.0" } }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.3.tgz", + "integrity": "sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==" + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -2819,11 +2844,17 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" + }, "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", "dependencies": { + "@swc/counter": "^0.1.3", "tslib": "^2.4.0" } }, @@ -2922,8 +2953,7 @@ "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, "node_modules/@types/mdast": { "version": "3.0.15", @@ -3071,7 +3101,6 @@ "version": "5.48.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.0.tgz", "integrity": "sha512-1mxNA8qfgxX8kBvRDIHEzrRGrKHQfQlbW6iHyfHYS0Q4X1af+S6mkLNtgCOsGVl8+/LUPrqdHMssAemkrQ01qg==", - "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.48.0", "@typescript-eslint/types": "5.48.0", @@ -3098,7 +3127,6 @@ "version": "5.48.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.0.tgz", "integrity": "sha512-0AA4LviDtVtZqlyUQnZMVHydDATpD9SAX/RC5qh6cBd3xmyWvmXYF+WT1oOmxkeMnWDlUVTwdODeucUnjz3gow==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.48.0", "@typescript-eslint/visitor-keys": "5.48.0" @@ -3115,7 +3143,6 @@ "version": "5.48.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" @@ -3287,7 +3314,6 @@ "version": "5.48.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.0.tgz", "integrity": "sha512-UTe67B0Ypius0fnEE518NB2N8gGutIlTojeTg4nt0GQvikReVkurqxd2LvYa9q9M5MQ6rtpNyWTBxdscw40Xhw==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -3300,7 +3326,6 @@ "version": "5.48.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.0.tgz", "integrity": "sha512-7pjd94vvIjI1zTz6aq/5wwE/YrfIyEPLtGJmRfyNR9NYIW+rOvzzUv3Cmq2hRKpvt6e9vpvPUQ7puzX7VSmsEw==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.48.0", "@typescript-eslint/visitor-keys": "5.48.0", @@ -3327,7 +3352,6 @@ "version": "5.48.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.0.tgz", "integrity": "sha512-5motVPz5EgxQ0bHjut3chzBkJ3Z3sheYVcSwS5BpHZpLqSptSmELNtGixmgj65+rIfhvtQTz5i9OP2vtzdDH7Q==", - "dev": true, "dependencies": { "@typescript-eslint/types": "5.48.0", "eslint-visitor-keys": "^3.3.0" @@ -3531,6 +3555,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -3658,11 +3694,18 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -3680,15 +3723,15 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -3710,7 +3753,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3729,7 +3771,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.4.tgz", "integrity": "sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -3748,7 +3789,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -3767,7 +3807,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3785,7 +3824,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3803,7 +3841,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3815,7 +3852,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -3828,7 +3864,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -3857,14 +3892,10 @@ "node": ">=4" } }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - } + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" }, "node_modules/asynckit": { "version": "0.4.0", @@ -3883,7 +3914,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -3894,16 +3924,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axe-core": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.9.1.tgz", + "integrity": "sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==", + "engines": { + "node": ">=4" + } + }, "node_modules/axios": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz", - "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, + "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dependencies": { + "deep-equal": "^2.0.5" + } + }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -3978,9 +4024,9 @@ } }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -3990,7 +4036,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -4013,20 +4059,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -4058,11 +4090,11 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -4908,6 +4940,59 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-fns": { "version": "2.30.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", @@ -4983,6 +5068,37 @@ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" }, + "node_modules/deep-equal": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", + "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.5", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.2", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -5028,7 +5144,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -5230,13 +5345,25 @@ "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } }, + "node_modules/enhanced-resolve": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", + "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -5284,17 +5411,20 @@ } }, "node_modules/es-abstract": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", - "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", - "dev": true, + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", @@ -5305,10 +5435,11 @@ "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", @@ -5319,17 +5450,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -5341,8 +5472,7 @@ "node_modules/es-array-method-boxes-properly": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, "node_modules/es-define-property": { "version": "1.0.0", @@ -5363,27 +5493,55 @@ "node": ">= 0.4" } }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/es-iterator-helpers": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.17.tgz", - "integrity": "sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==", - "dev": true, + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", "dependencies": { - "asynciterator.prototype": "^1.0.0", "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.4", + "es-abstract": "^1.23.3", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.2", + "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.1", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.0" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -5393,7 +5551,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -5407,7 +5564,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, "dependencies": { "hasown": "^2.0.0" } @@ -5416,7 +5572,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -5520,6 +5675,31 @@ "eslint": ">=6.0.0" } }, + "node_modules/eslint-config-next": { + "version": "14.2.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.4.tgz", + "integrity": "sha512-Qr0wMgG9m6m4uYy2jrYJmyuNlYZzPRQq5Kvb9IDlYwn+7yq6W6sfMNFgb+9guM1KYwuIo6TIaiFhZJ6SnQ/Efw==", + "dependencies": { + "@next/eslint-plugin-next": "14.2.4", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || 7.0.0 - 7.2.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/eslint-config-standard": { "version": "17.1.0", "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", @@ -5697,7 +5877,6 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -5708,16 +5887,38 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "dependencies": { "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", + "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, "node_modules/eslint-module-utils": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", - "dev": true, "dependencies": { "debug": "^3.2.7" }, @@ -5734,7 +5935,6 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -5763,7 +5963,6 @@ "version": "2.29.1", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -5794,7 +5993,6 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -5803,7 +6001,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5815,11 +6012,44 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.9.0.tgz", + "integrity": "sha512-nOFOCaJG2pYqORjK19lqPqxMO/JpvdCZdPtNdxY3kvom3jTvkAbOvQvD8wuD0G8BYR0IGAGYDlzqWJOh/ybn2g==", + "dependencies": { + "aria-query": "~5.1.3", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.9.1", + "axobject-query": "~3.1.1", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "es-iterator-helpers": "^1.0.19", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.0" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, "node_modules/eslint-plugin-n": { "version": "16.6.2", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", @@ -5897,7 +6127,6 @@ "version": "7.34.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.0.tgz", "integrity": "sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==", - "dev": true, "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlast": "^1.2.4", @@ -5925,11 +6154,21 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "dependencies": { "esutils": "^2.0.2" }, @@ -5941,7 +6180,6 @@ "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -5958,7 +6196,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -5983,7 +6220,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6070,7 +6306,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "engines": { "node": ">=4.0" } @@ -6079,7 +6314,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6120,36 +6354,36 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -6174,23 +6408,9 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, "node_modules/extend": { "version": "3.0.2", @@ -6329,9 +6549,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -6348,12 +6568,12 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -6529,7 +6749,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "dependencies": { "is-callable": "^1.1.3" } @@ -6632,7 +6851,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -6650,7 +6868,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -6718,7 +6935,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -6735,7 +6951,6 @@ "version": "4.7.3", "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", - "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -6776,11 +6991,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, "node_modules/glob/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -6822,7 +7032,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -6987,7 +7196,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7037,7 +7245,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -7158,6 +7365,19 @@ "node": ">= 0.12.0" } }, + "node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -7319,7 +7539,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -7367,11 +7586,25 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-array-buffer": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -7392,7 +7625,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7407,7 +7639,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -7430,7 +7661,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7461,7 +7691,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -7480,11 +7709,24 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7538,7 +7780,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -7558,7 +7799,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7618,7 +7858,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -7630,7 +7869,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -7650,7 +7888,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7704,7 +7941,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -7720,7 +7956,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -7732,7 +7967,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, "dependencies": { "call-bind": "^1.0.7" }, @@ -7758,7 +7992,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -7773,7 +8006,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -7788,7 +8020,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, "dependencies": { "which-typed-array": "^1.1.14" }, @@ -7814,7 +8045,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -7826,7 +8056,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -7838,7 +8067,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4" @@ -7881,8 +8109,7 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/isexe": { "version": "2.0.0", @@ -7910,7 +8137,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, "dependencies": { "define-properties": "^1.2.1", "get-intrinsic": "^1.2.1", @@ -8119,7 +8345,6 @@ "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -8163,6 +8388,22 @@ "node": ">=0.10.0" } }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -8599,9 +8840,12 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge-stream": { "version": "2.0.0", @@ -8718,11 +8962,11 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -8881,37 +9125,38 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", - "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.13.tgz", + "integrity": "sha512-BseY9YNw8QJSwLYD7hlZzl6QVDoSFHL/URN5K64kVEVpCsSOWeyjbIGK+dZUaRViHTaMQX8aqmnn0PHBbGZezg==", "dependencies": { - "@next/env": "13.5.6", - "@swc/helpers": "0.5.2", + "@next/env": "14.2.13", + "@swc/helpers": "0.5.5", "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" + "styled-jsx": "5.1.1" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=16.14.0" + "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.6", - "@next/swc-darwin-x64": "13.5.6", - "@next/swc-linux-arm64-gnu": "13.5.6", - "@next/swc-linux-arm64-musl": "13.5.6", - "@next/swc-linux-x64-gnu": "13.5.6", - "@next/swc-linux-x64-musl": "13.5.6", - "@next/swc-win32-arm64-msvc": "13.5.6", - "@next/swc-win32-ia32-msvc": "13.5.6", - "@next/swc-win32-x64-msvc": "13.5.6" + "@next/swc-darwin-arm64": "14.2.13", + "@next/swc-darwin-x64": "14.2.13", + "@next/swc-linux-arm64-gnu": "14.2.13", + "@next/swc-linux-arm64-musl": "14.2.13", + "@next/swc-linux-x64-gnu": "14.2.13", + "@next/swc-linux-x64-musl": "14.2.13", + "@next/swc-win32-arm64-msvc": "14.2.13", + "@next/swc-win32-ia32-msvc": "14.2.13", + "@next/swc-win32-x64-msvc": "14.2.13" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" @@ -8920,6 +9165,9 @@ "@opentelemetry/api": { "optional": true }, + "@playwright/test": { + "optional": true + }, "sass": { "optional": true } @@ -9180,11 +9428,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -9193,7 +9455,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -9211,7 +9472,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -9222,14 +9482,14 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -9242,7 +9502,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", - "dev": true, "dependencies": { "array.prototype.filter": "^1.0.3", "call-bind": "^1.0.5", @@ -9255,7 +9514,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", - "dev": true, "dependencies": { "define-properties": "^1.2.0", "es-abstract": "^1.22.1" @@ -9268,7 +9526,6 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -9582,9 +9839,9 @@ } }, "node_modules/path-to-regexp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.2.0.tgz", - "integrity": "sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", "dev": true }, "node_modules/path-type": { @@ -9788,7 +10045,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, "engines": { "node": ">= 0.4" } @@ -9948,9 +10204,9 @@ } }, "node_modules/qs": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", - "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { "side-channel": "^1.0.6" }, @@ -10025,9 +10281,9 @@ } }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -10036,15 +10292,15 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-hook-form": { @@ -10088,6 +10344,18 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, + "node_modules/react-json-view-lite": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", + "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-markdown": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-6.0.3.tgz", @@ -10230,7 +10498,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -10256,7 +10523,6 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -10370,7 +10636,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -10473,7 +10738,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -10510,7 +10774,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -10550,9 +10813,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -10627,9 +10890,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -10662,20 +10925,28 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" @@ -10706,7 +10977,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -10885,6 +11155,17 @@ "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -10936,11 +11217,19 @@ "node": ">=8" } }, + "node_modules/string.prototype.includes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.0.tgz", + "integrity": "sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.matchall": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -10957,14 +11246,14 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10974,28 +11263,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11228,6 +11518,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, "node_modules/temp": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", @@ -11387,7 +11685,6 @@ "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -11399,7 +11696,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, "dependencies": { "minimist": "^1.2.0" }, @@ -11416,7 +11712,6 @@ "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, "dependencies": { "tslib": "^1.8.1" }, @@ -11430,8 +11725,7 @@ "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/type-check": { "version": "0.4.0", @@ -11472,7 +11766,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -11486,7 +11779,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -11505,7 +11797,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -11522,10 +11813,9 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", - "dev": true, + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -11587,7 +11877,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -12037,18 +12326,6 @@ "resolved": "https://registry.npmjs.org/warn-once/-/warn-once-0.1.1.tgz", "integrity": "sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==" }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -12089,7 +12366,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -12105,7 +12381,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, "dependencies": { "function.prototype.name": "^1.1.5", "has-tostringtag": "^1.0.0", @@ -12131,7 +12406,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -12161,7 +12435,6 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -12241,9 +12514,9 @@ } }, "node_modules/ws": { - "version": "8.17.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", - "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, diff --git a/package.json b/package.json index 3c7729c97d27be8d5576ef0babbf588dfbee7dba..3c4c6a389294ea00ecda66673d8a90e80823178f 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@auth/unstorage-adapter": "^1.6.0", "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.5", + "@fontsource/roboto": "^5.1.0", "@mui/icons-material": "^5.15.19", "@mui/lab": "^5.0.0-alpha.85", "@mui/material": "^5.15.19", @@ -32,18 +33,20 @@ "@refinedev/nextjs-router": "^6.0.1", "@refinedev/react-hook-form": "^4.8.15", "@refinedev/simple-rest": "^5.0.3", - "next": "^13.0.6", + "eslint-config-next": "^14.2.4", + "next": "^14.2.4", "next-auth": "^4.24.6", "next-i18next": "^8.9.0", "nookies": "^2.5.2", - "react": "^18.0.0", - "react-dom": "^18.0.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-json-view-lite": "^1.5.0", "styled-components": "^6.1.11", "unstorage": "^1.10.1" }, "devDependencies": { "@next/eslint-plugin-next": "^14.1.0", - "@openapitools/openapi-generator-cli": "^2.9.0", + "@openapitools/openapi-generator-cli": "^2.7.0", "@types/node": "^18.0.0", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", diff --git a/pages/_app.tsx b/pages/_app.tsx index 29745ff3bf6bb502fbfa141da2081b5a4d030ff2..95ccab9ac156c1148daa609b5fa2cbf0d1b71e2a 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,4 +1,4 @@ -import { AuthBindings, Refine } from '@refinedev/core' +import { AuthProvider, Refine } from '@refinedev/core' import { RefineKbar, RefineKbarProvider } from '@refinedev/kbar' import { RefineSnackbarProvider, @@ -14,7 +14,7 @@ import { import type { NextPage } from 'next' import { SessionProvider, signIn, signOut, useSession } from 'next-auth/react' import { AppProps } from 'next/app' -import { useRouter } from 'next/router' +import { usePathname } from 'next/navigation' import React from 'react' import { Header } from '@components/header' @@ -42,9 +42,8 @@ type AppPropsWithLayout = AppProps & { const App = (props: React.PropsWithChildren) => { const { t, i18n } = useTranslation() - const { data, status } = useSession() - const router = useRouter() - const { to } = router.query + const { data, status, error } = useSession() + const to = usePathname() const i18nProvider = { translate: (key: string, params: object) => t(key, params), @@ -56,38 +55,29 @@ const App = (props: React.PropsWithChildren) => { return <span>loading...</span> } - const authProvider: AuthBindings = { + const authProvider: AuthProvider = { login: async () => { - // console.log('login') - signIn('keycloak', { - callbackUrl: to ? to.toString() : '/about', - redirect: true - }) + await signIn('keycloak') return { success: true } }, logout: async () => { - // console.log('logout') - signOut({ - redirect: true, - callbackUrl: '/about' - }) + signOut() return { - success: true + success: true, } }, onError: async (error) => { - // console.log('onError') - console.error(error) + // console.error("onError", error) return { error } }, check: async () => { - // console.log('check') + // console.log("check", data, error, status) if (status === 'unauthenticated') { return { authenticated: false, @@ -95,17 +85,32 @@ const App = (props: React.PropsWithChildren) => { } } + if(data?.error) { + return { + error: error, + authenticated: false, + redirectTo: '/login' + } + } + return { authenticated: true } }, getPermissions: async () => { - // console.log('getPermissions') return null }, getIdentity: async () => { - // console.log('getIdentity', data) - if (data?.user) { + // console.log("getIdentity", data, error, status); + if(data?.error) { + return { + error: error, + authenticated: false, + redirectTo: '/login' + } + } + + if (data?.user && status === "authenticated") { const { user } = data return { name: user.name, @@ -212,7 +217,6 @@ function MyApp ({ return ( <SessionProvider session={session} - refetchInterval={10} refetchOnWindowFocus={true} > <App>{renderComponent()}</App> diff --git a/pages/api/auth/[...nextauth].ts b/pages/api/auth/[...nextauth].ts index b8a6f9166acafc23e24405cd23724c8c03c4cbc9..b5cb5b65f1fbf45f47d7bce655181507acaf089d 100644 --- a/pages/api/auth/[...nextauth].ts +++ b/pages/api/auth/[...nextauth].ts @@ -2,18 +2,18 @@ import NextAuth from 'next-auth' import KeycloakProvider from 'next-auth/providers/keycloak' const secretSessionKey = process.env.SECRET_SESSION_KEY || 'UItTuD1HcGXIj8ZfHUswhYdNd40Lc325R8VlxQPUoR0=' -const clientId = 'gwdg-fdoman-test' +const clientId = process.env.KEY_CLOAK_CLIENT_ID || 'gwdg-fdoman-test' const clientSecret = process.env.KEY_CLOAK_CLIENT_SECRET || '' -const issuer = 'https://keycloak.sso.gwdg.de/auth/realms/academiccloud' +const issuer = process.env.KEY_CLOAK_ISSUER || 'https://keycloak.sso.gwdg.de/auth/realms/academiccloud' async function refreshAccessToken (token: any) { try { const url = issuer + '/protocol/openid-connect/token' const params = new URLSearchParams({ - client_id: clientId, - client_secret: clientSecret, + client_id: clientId!, + client_secret: clientSecret!, grant_type: 'refresh_token', - refresh_token: token.refreshToken + refresh_token: token.refresh_token!, }).toString() const response = await fetch(url, { @@ -24,26 +24,29 @@ async function refreshAccessToken (token: any) { body: params }) - const refreshedTokens = await response.json() + const new_tokens = await response.json() if (!response.ok) { - throw refreshedTokens + throw new_tokens } - // console.log('### refreshToken', new Date().toISOString(), refreshedTokens, '### ### ###') + // console.log('### new_tokens', new Date().toISOString(), new_tokens, '### ### ###') return { ...token, - accessToken: refreshedTokens.access_token, - accessTokenExpires: Date.now() + refreshedTokens.expires_in * 1000, - refreshToken: refreshedTokens.refresh_token ?? token.refreshToken // Fall back to old refresh token + access_token: new_tokens.access_token, + expires_at: Math.floor(Date.now()/1000 + new_tokens.expires_in), + refresh_token: new_tokens.refresh_token ?? token.refresh_token // Fall back to old refresh token } } catch (error) { // console.log('### RefreshAccessTokenError', error, '### ### ###') + throw new Error("RefreshTokenError") + /* return { ...token, error: 'RefreshAccessTokenError' } + */ } } @@ -52,7 +55,6 @@ export const authOptions = { session: { maxAge: 172800 // 48h }, - debug: true, // Configure one or more authentication providers providers: [ // !!! Should be stored in .env file. @@ -79,36 +81,37 @@ export const authOptions = { // console.log('### session', session, user, token, '### ### ###') session.user = token.user - session.accessToken = token.accessToken + session.access_token = token.access_token session.error = token.error return session }, + /* async redirect ({ url, baseUrl }: any) { // console.log('### redirect', url, baseUrl, '### ### ###') - return Promise.resolve(url) + return baseUrl + //Promise.resolve(url) }, + */ async jwt ({ token, user, account, profile, isNewUser }: any) { // console.log('### jwt', token, user, account, profile, isNewUser, '### ### ###') // Initial sign in if (account && user) { return { - lastRefresh: Date.now(), - accessToken: account.access_token, - accessTokenExpires: account.expires_at, - refreshToken: account.refresh_token, + access_token: account.access_token, + expires_at: account.expires_at, + refresh_token: account.refresh_token, user } - } - - if (token.lastRefresh + 60000 > Date.now()) { - // return if last refresh is 10 seconds or younger + } else if (Date.now() < token.expires_at * 1000) { return token - } + } else { + if (!token.refresh_token) throw new TypeError("Missing refresh_token") - // Access token has expired, try to update it - return refreshAccessToken(token) + // Access token has expired, try to update it + return refreshAccessToken(token) + } } }, secret: secretSessionKey diff --git a/pages/fdo/show/[prefix]/[suffix].tsx b/pages/fdo/show/[prefix]/[suffix].tsx index 8412158bd4dc5b874112f05e9d7316b3daadd3e5..dbcbaef6b442c10210bc02015f0435e087665927 100644 --- a/pages/fdo/show/[prefix]/[suffix].tsx +++ b/pages/fdo/show/[prefix]/[suffix].tsx @@ -3,9 +3,9 @@ import React from 'react' import { ErrorComponent } from '../../../../src/components/ErrorComponent' import { GetServerSideProps } from 'next' import { serverSideTranslations } from 'next-i18next/serverSideTranslations' -import { useShow, useTranslate, useParsed, useCustom, useApiUrl } from '@refinedev/core' +import { useTranslate, useParsed, useCustom, useApiUrl } from '@refinedev/core' import { Show } from '@refinedev/mui' -import { Typography } from '@mui/material' +import Typography from '@mui/material/Typography' import CircularProgress from '@mui/material/CircularProgress' import Box from '@mui/material/Box' import Stack from '@mui/material/Stack' @@ -19,12 +19,45 @@ import MenuList from '@mui/material/MenuList' import MenuItem from '@mui/material/MenuItem' import ListItemText from '@mui/material/ListItemText' import ListItemIcon from '@mui/material/ListItemIcon' -import ContentPaste from '@mui/icons-material/ContentPaste' -import Cloud from '@mui/icons-material/Cloud' import VerifiedIcon from '@mui/icons-material/Verified' import ReportIcon from '@mui/icons-material/Report' +import { styled } from '@mui/material/styles' +import EvebsDetails from '@components/Evebs' +import { FDO_COMMUNITY_TYPE_EVEBS as EVEBS, HANDLE_SYSTEM_BASE_URI as HS_BASE_URI } from '../../../../src/constants' -const resolvePid = (pid: string) => `https://hdl.handle.net/${pid}` +const resolvePid = (pid: string) => `${HS_BASE_URI}/${pid}` + +const getFdoDetails = (data: object) => { + if(!data) return {}; + + const fdoDetails = { + pid: data["pid"], + isFdo: data["isFdo"], + typePid: data["fdoType"], + profilePid: data["fdoProfile"], + dataPid: data["dataPid"], + metadataPid: data["metadataPid"], + repository: undefined, + attributes: data["attributes"], + } + if(data.attributes) { + fdoDetails["repository"] = data.attributes["0.TYPE/DOIPService"] + } + + return fdoDetails +} + + +const Item = styled(Paper)(({ theme }) => ({ + backgroundColor: '#fff', + ...theme.typography.body2, + padding: theme.spacing(1), + textAlign: 'left', + color: theme.palette.text.secondary, + ...theme.applyStyles('dark', { + backgroundColor: '#1A2027' + }) +})) const ShowFDO = () => { const { params } = useParsed() @@ -47,83 +80,96 @@ const ShowFDO = () => { const handleUrl = resolvePid(showId) const dataPid = data?.data?.dataPid const metadataPid = data?.data?.metadataPid - const profilePid = '21.T11969/141bf451b18a79d0fe66' + + const fdoDetails = getFdoDetails(data?.data); + const isEvebs = fdoDetails?.typePid === EVEBS return ( <Show isLoading={isLoading} - title={<Typography variant="h5">{ showId }{ !isLoading && (data?.data?.isFdo ? <Chip label="FDO" color="success" variant="outlined" /> : <Chip label="Not an FDO" color="error" variant="outlined" />)}</Typography>} + title={<Typography variant="h5">{ showId } + + { !isLoading && (data?.data?.isFdo ? <Chip label="FDO" color="success" variant="outlined" sx={{marginLeft: 1}}/> : <Chip label="Not an FDO" color="error" variant="outlined" sx={{marginLeft: 1}}/>)} + </Typography>} > { isLoading && <Box sx={{ textAlign: 'center' }}><CircularProgress/></Box>} - <Paper sx={{ width: 320, maxWidth: '100%' }}> - <MenuList> - <MenuItem> - <ListItemIcon> - <RadioButtonUncheckedIcon/> - </ListItemIcon> - <ListItemText> - <Link href={`${handleUrl}?noredirect`}>Handle Record</Link> - </ListItemText> - </MenuItem> - <MenuItem> - <ListItemIcon> - <StorageIcon/> - </ListItemIcon> - <ListItemText> - <Link href={handleUrl}>To Repository</Link> - </ListItemText> - </MenuItem> - { data?.data?.isFdo && (<> - <Divider /> - <MenuItem> - <ListItemIcon> - { dataPid - ? <VerifiedIcon color="success"/> - : <ReportIcon color="error"/> - } - </ListItemIcon> - <ListItemText> - { metadataPid - ? <Link href={resolvePid(dataPid)}>Data</Link> - : 'Data not available.' - } - </ListItemText> - </MenuItem> - <MenuItem> - <ListItemIcon> - { metadataPid - ? <VerifiedIcon color="success"/> - : <ReportIcon color="error"/> - } - </ListItemIcon> - <ListItemText> - { metadataPid - ? <Link href={resolvePid(metadataPid)}>Metadata</Link> - : 'Metadata not available.' - } - </ListItemText> - </MenuItem> - <MenuItem> - <ListItemIcon> - { profilePid - ? <VerifiedIcon color="success"/> - : <ReportIcon color="error"/> - } - </ListItemIcon> - <ListItemText> - { profilePid - ? <Link href={resolvePid(profilePid)}>Profile</Link> - : 'Profile not available.' - } - </ListItemText> - </MenuItem> - </>)} - </MenuList> - </Paper> + <div> + <Stack + direction="row" + // divider={<Divider orientation="vertical" flexItem />} + spacing={2} + > + <Item> + <MenuList> + <MenuItem> + <ListItemIcon> + <RadioButtonUncheckedIcon/> + </ListItemIcon> + <ListItemText> + <Link href={`${handleUrl}?noredirect`}>Handle Record</Link> + </ListItemText> + </MenuItem> + <MenuItem> + <ListItemIcon> + <StorageIcon/> + </ListItemIcon> + <ListItemText> + <Link href={handleUrl}>To Repository</Link> + </ListItemText> + </MenuItem> + { data?.data?.isFdo && (<> + <Divider /> + <MenuItem> + <ListItemIcon> + { dataPid + ? <VerifiedIcon color="success"/> + : <ReportIcon color="error"/> + } + </ListItemIcon> + <ListItemText> + { metadataPid + ? <Link href={resolvePid(dataPid)}>Data</Link> + : 'Data not available.' + } + </ListItemText> + </MenuItem> + <MenuItem> + <ListItemIcon> + { metadataPid + ? <VerifiedIcon color="success"/> + : <ReportIcon color="error"/> + } + </ListItemIcon> + <ListItemText> + { metadataPid + ? <Link href={resolvePid(metadataPid)}>Metadata</Link> + : 'Metadata not available.' + } + </ListItemText> + </MenuItem> + <MenuItem> + <ListItemIcon> + { fdoDetails.profilePid + ? <VerifiedIcon color="success"/> + : <ReportIcon color="error"/> + } + </ListItemIcon> + <ListItemText> + { fdoDetails.profilePid + ? <Link href={resolvePid(fdoDetails.profilePid)}>Profile</Link> + : 'Profile not available.' + } + </ListItemText> + </MenuItem> + </>)} + </MenuList> + </Item> + { isEvebs && <EvebsDetails {...fdoDetails} showJson={true}/> } + </Stack> + </div><br/><br/> </Show> - ) } diff --git a/pages/fdo/show/[prefix]/sandbox.tsx b/pages/fdo/show/[prefix]/sandbox.tsx new file mode 100644 index 0000000000000000000000000000000000000000..6b66b8c802d60b914226fef4afeeea6708eea84a --- /dev/null +++ b/pages/fdo/show/[prefix]/sandbox.tsx @@ -0,0 +1,175 @@ +import React from 'react' +import { ErrorComponent } from '../../../../src/components/ErrorComponent' +import { GetServerSideProps } from 'next' +import { serverSideTranslations } from 'next-i18next/serverSideTranslations' +import { useShow, useTranslate, useParsed, useCustom, useApiUrl } from '@refinedev/core' +import { Show } from '@refinedev/mui' +import { Typography } from '@mui/material' +import CircularProgress from '@mui/material/CircularProgress' +import AssignmentIcon from '@mui/icons-material/Assignment' +import Avatar from '@mui/material/Avatar' +import { blue } from '@mui/material/colors' +import Box from '@mui/material/Box' +import Stack from '@mui/material/Stack' +import Chip from '@mui/material/Chip' +import Link from '@mui/material/Link' +import StorageIcon from '@mui/icons-material/Storage' +import Paper from '@mui/material/Paper' +import RadioButtonUncheckedIcon from '@mui/icons-material/RadioButtonUnchecked' +import Divider from '@mui/material/Divider' +import MenuList from '@mui/material/MenuList' +import MenuItem from '@mui/material/MenuItem' +import ListItemText from '@mui/material/ListItemText' +import ListItemIcon from '@mui/material/ListItemIcon' +import VerifiedIcon from '@mui/icons-material/Verified' +import ReportIcon from '@mui/icons-material/Report' +import { styled, ThemeProvider } from '@mui/material/styles' +import Details from '../../../../src/components/fdos/details' + +const resolvePid = (pid: string) => `https://hdl.handle.net/${pid}` + +const ShowFDO = () => { + const { params } = useParsed() + const showId = `${params?.prefix}/${params?.suffix}` + const apiUrl = useApiUrl() + const t = useTranslate() + const { data, isLoading, isError, error } = useCustom({ + url: `${apiUrl}/fdo/${showId}`, + method: 'get', + errorNotification: () => false, + queryOptions: { + retry: false + } + }) + + if (isError) { + return <ErrorComponent message={t('fdo.show.handle_not_found', 'Handle not found.')} /> + } + const displayName = 'FDO-Name' + const genInfo = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore voluptua.' + const handleUrl = resolvePid(showId) + const dataPid = data?.data?.dataPid + const metadataPid = data?.data?.metadataPid + const profilePid = '21.T11969/141bf451b18a79d0fe66' + const Item = styled(Paper)(({ theme }) => ({ + backgroundColor: '#fff', + ...theme.typography.body2, + padding: theme.spacing(1), + textAlign: 'center', + color: theme.palette.text.secondary, + ...theme.applyStyles('dark', { + backgroundColor: '#1A2027' + }) + })) + + return ( + <Show + isLoading={isLoading} + title={<Typography variant="h5">{ showId }{ !isLoading && (data?.data?.isFdo ? <Chip label="FDO" color="success" variant="outlined" /> : <Chip label="Not an FDO" color="error" variant="outlined" />)}</Typography>} + > + { isLoading && <Box sx={{ textAlign: 'center' }}><CircularProgress/></Box>} + + <div> + <Stack + direction="row" + // divider={<Divider orientation="vertical" flexItem />} + spacing={2} + > + <Item> + <MenuList> + <MenuItem> + <ListItemIcon> + <RadioButtonUncheckedIcon/> + </ListItemIcon> + <ListItemText> + <Link href={`${handleUrl}?noredirect`}>Handle Record</Link> + </ListItemText> + </MenuItem> + <MenuItem> + <ListItemIcon> + <StorageIcon/> + </ListItemIcon> + <ListItemText> + <Link href={handleUrl}>To Repository</Link> + </ListItemText> + </MenuItem> + { data?.data?.isFdo && (<> + <Divider /> + <MenuItem> + <ListItemIcon> + { dataPid + ? <VerifiedIcon color="success"/> + : <ReportIcon color="error"/> + } + </ListItemIcon> + <ListItemText> + { metadataPid + ? <Link href={resolvePid(dataPid)}>Data</Link> + : 'Data not available.' + } + </ListItemText> + </MenuItem> + <MenuItem> + <ListItemIcon> + { metadataPid + ? <VerifiedIcon color="success"/> + : <ReportIcon color="error"/> + } + </ListItemIcon> + <ListItemText> + { metadataPid + ? <Link href={resolvePid(metadataPid)}>Metadata</Link> + : 'Metadata not available.' + } + </ListItemText> + </MenuItem> + <MenuItem> + <ListItemIcon> + { profilePid + ? <VerifiedIcon color="success"/> + : <ReportIcon color="error"/> + } + </ListItemIcon> + <ListItemText> + { profilePid + ? <Link href={resolvePid(profilePid)}>Profile</Link> + : 'Profile not available.' + } + </ListItemText> + </MenuItem> + </>)} + </MenuList> + </Item> + + <Item sx={{ width: '50%' }} > + <Stack direction="row" spacing={3}> + <Avatar sx={{ bgcolor: blue[500] }} variant="rounded"> + <AssignmentIcon /> + </Avatar> + <Typography variant="h5" gutterBottom> {displayName} </Typography> + </Stack><br/> + <Typography variant="subtitle1" gutterBottom sx={{ display: 'block', marginLeft: '10px' }}> {genInfo} </Typography> + <br/> + <Box> + <Details/> + </Box> + </Item> + </Stack> + </div><br/><br/> + </Show> + ) +} + +export default ShowFDO + +export const getServerSideProps: GetServerSideProps<{}> = async (context) => { + const translateProps = await serverSideTranslations(context.locale ?? 'en', [ + 'common' + ]) + + return { + props: { + ...translateProps + } + } +} diff --git a/pages/index.tsx b/pages/index.tsx index eac2fa426fc855ca58b79385d7e044397558012c..29b8bd97d9a51d5be611e977c1b05464de36a7f8 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,70 +1,102 @@ -import Button from '@mui/material/Button' +// import * as React from 'react' +import React, { useContext } from 'react' +import { useRouter } from 'next/router' +import { experimentalStyled as styled } from '@mui/material/styles' +import AppBar from '@mui/material/AppBar' +import Box from '@mui/material/Box' +import Toolbar from '@mui/material/Toolbar' +import Typography from '@mui/material/Typography' +import Paper from '@mui/material/Paper' +import Avatar from '@mui/material/Avatar' +import IconButton from '@mui/material/IconButton' +import DarkModeOutlined from '@mui/icons-material/DarkModeOutlined' +import LightModeOutlined from '@mui/icons-material/LightModeOutlined' +import { ColorModeContext } from '@contexts' +import FormControl from '@mui/material/FormControl' +import MenuItem from '@mui/material/MenuItem' +import Select from '@mui/material/Select' import Stack from '@mui/material/Stack' -import Item from '@mui/material/ListItem' -import { styled, alpha } from '@mui/material/styles' -import InputBase from '@mui/material/InputBase' -import SearchIcon from '@mui/icons-material/Search' -import Grid from '@mui/material/Grid' +import Link from 'next/link' +import ContentArea from '@components/ContentArea' -const Search = styled('div')(({ theme }) => ({ - position: 'relative', - borderRadius: theme.shape.borderRadius, - backgroundColor: alpha(theme.palette.common.white, 0.15), - '&:hover': { - backgroundColor: alpha(theme.palette.common.white, 0.25) - }, - marginRight: theme.spacing(2), - marginLeft: 0, - width: '100%', - [theme.breakpoints.up('sm')]: { - marginLeft: theme.spacing(3), - width: 'auto' - } -})) - -const SearchIconWrapper = styled('div')(({ theme }) => ({ - padding: theme.spacing(0, 2), - height: '100%', - position: 'absolute', - pointerEvents: 'none', - display: 'flex', - alignItems: 'center', - justifyContent: 'center' -})) - -const StyledInputBase = styled(InputBase)(({ theme }) => ({ - color: 'inherit', - '& .MuiInputBase-input': { - padding: theme.spacing(1, 1, 1, 0), - // vertical padding + font size from searchIcon - paddingLeft: `calc(1em + ${theme.spacing(4)})`, - transition: theme.transitions.create('width'), - width: '100%', - [theme.breakpoints.up('md')]: { - width: '20ch' - } - } +const Item = styled(Paper)(({ theme }) => ({ + backgroundColor: theme.palette.mode === 'dark' ? '#1A2027' : '#fff', + ...theme.typography.body2, + padding: theme.spacing(2), + textAlign: 'center', + color: theme.palette.text.secondary })) export default function Index () { - const info = ('This is the FDO Manager. The hardware and infrastructure for this test instance are provided by GWDG. IndiScale is responsible for the architecture and implementation.') - return ( - <Grid container direction="column" justifyContent="center" alignItems="center"> - - <Stack direction="column" spacing={2} width="350px"> - <Item><h1>FDO-Manager</h1></Item> - <Item>{info}</Item> - <Item><Button variant="contained" >Create FDO</Button></Item> - <Item><Search> - <SearchIconWrapper> - <SearchIcon /> - </SearchIconWrapper> - <StyledInputBase - placeholder="Search…" inputProps={{ 'aria-label': 'search' }}/> - </Search></Item> + const { mode, setMode } = useContext(ColorModeContext) + const { locale: currentLocale, locales, pathname, query } = useRouter() - </Stack> - </Grid> + return ( + <Box sx={{ flexGrow: 1 }}> + <AppBar position="static"> + <Toolbar> + <Avatar + alt="FDO logo graphic" + src="images/logo-fdo-white.png"> + </Avatar> + <Typography + variant="h6" + noWrap + component="div" + marginLeft={2} + sx={{ flexGrow: 1, display: { xs: 'none', sm: 'block' } }}> + FDO MANAGER + </Typography> + { /* + <Stack + direction="row" + width="80%" + justifyContent="flex-end" + alignItems="center" + gap="14px"> + <FormControl sx={{ minWidth: 64 }}> + <Select + disableUnderline + defaultValue={currentLocale} + inputProps={{ 'aria-label': 'Without label' }} + variant="standard" + sx={{ + color: 'inherit', + '& .MuiSvgIcon-root': { color: 'inherit' }, + '& .MuiStack-root > .MuiTypography-root': { display: { xs: 'none', sm: 'block' } } + }} > + {[...(locales ?? [])].sort().map((lang: string) => ( + // @ts-expect-error + <MenuItem + component={Link} + href={{ pathname, query }} + locale={lang} + selected={currentLocale === lang} + key={lang} + defaultValue={lang} + value={lang} > + <Typography> + {lang === 'en' ? 'English' : 'German'} + </Typography> + </MenuItem> + ))} + </Select> + </FormControl> + </Stack> + */} + <Stack marginLeft={2}> + <IconButton + color="inherit" + onClick={() => { + setMode() + }} > + {mode === 'dark' ? <LightModeOutlined /> : <DarkModeOutlined />} + </IconButton> + </Stack> + </Toolbar> + </AppBar> + <ContentArea/> + </Box> ) } diff --git a/pages/login/index.tsx b/pages/login/index.tsx index 775128b1948fbff0e6c9981d659c4602892fee2e..606a795ccc659e80becdd744944a6f7531a9f77d 100644 --- a/pages/login/index.tsx +++ b/pages/login/index.tsx @@ -74,11 +74,16 @@ export const getServerSideProps: GetServerSideProps<{}> = async (context) => { 'common' ]) + // console.log("login", context, session); + const destination = context?.query?.to + if (session) { return { - props: {}, + props: { + ...translateProps + }, redirect: { - destination: '/', + destination: destination || '/', permanent: false } } diff --git a/public/images/FDO-Atom.png b/public/images/FDO-Atom.png new file mode 100644 index 0000000000000000000000000000000000000000..e1661fc9b0ee8ebd9bc2b4798971e15fe57181c8 Binary files /dev/null and b/public/images/FDO-Atom.png differ diff --git a/public/images/aas.png b/public/images/aas.png new file mode 100644 index 0000000000000000000000000000000000000000..7835ceb192ab1b44a1fd49b64f88be511115066a Binary files /dev/null and b/public/images/aas.png differ diff --git a/public/images/cordra-primary-blue.png b/public/images/cordra-primary-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa6327016871be44dd393cdde5b21a2572f33f5 Binary files /dev/null and b/public/images/cordra-primary-blue.png differ diff --git a/public/images/eclipse-logo.png b/public/images/eclipse-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5373443fba7405286e51b8530b8139aa045df778 Binary files /dev/null and b/public/images/eclipse-logo.png differ diff --git a/public/images/la_logo.png b/public/images/la_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..88cc3aea679dcd9d2f86962caa0cb6103308e300 Binary files /dev/null and b/public/images/la_logo.png differ diff --git a/public/images/logo-fdo-img.png b/public/images/logo-fdo-img.png new file mode 100644 index 0000000000000000000000000000000000000000..a7724eabfa1bac9db5db2852d343aec293f0b219 Binary files /dev/null and b/public/images/logo-fdo-img.png differ diff --git a/public/images/logo-fdo-scal.svg b/public/images/logo-fdo-scal.svg new file mode 100644 index 0000000000000000000000000000000000000000..7e34f10d39dae2ed3919bf20ca73cae18d1d82ce --- /dev/null +++ b/public/images/logo-fdo-scal.svg @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="Ebene_1" data-name="Ebene 1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 169 172"> + <defs> + <style> + .cls-1 { + fill: #1976d2; + stroke-width: 0px; + } + </style> + </defs> + <g id="FDO_Logo" data-name="FDO Logo"> + <g> + <path class="cls-1" d="M56.0192501,86.9711941c0-16.1425178,13.2075127-29.3500305,29.3500305-29.3500305,8.071264,0,15.4087665,2.935,20.5450254,8.8050051l10.2725178-10.2725127c-7.3375127-8.0712589-18.3437716-13.2075127-30.817533-13.2075127-24.2137767,0-44.0250457,19.811269-44.0250457,44.0250457,0,12.4737665,5.1362538,23.4800254,13.2075127,31.5512792l10.2725076-10.2725076c-5.1362538-5.87-8.8050051-13.2075076-8.8050152-21.2787665Z"/> + <path class="cls-1" d="M95.6417881,76.6986865c-2.2012436-2.9350051-5.87-4.4025076-10.2725076-4.4025076-8.0712589,0-14.6750152,6.6037563-14.6750152,14.6750152,0,4.4025076,1.4675025,8.0712589,4.4025076,10.2725076l10.2725076-10.2725076,10.2725076-10.2725076Z"/> + <path class="cls-1" d="M33.2729759,139.0675038l10.2725127-10.2725076c-10.2725127-11.0062589-16.876269-25.6812843-16.876269-41.8238021,0-32.2850356,26.4150254-58.7000609,58.7000609-58.7000609,16.1425178,0,30.8175432,6.6037563,41.8238021,16.876269l10.2725076-10.2725127c-13.2075229-13.2075133-31.5512843-21.2787709-52.0963097-21.2787709C45.0129861,13.5961185,11.9942043,46.6149022,11.9942043,86.9711941c0,20.5450254,8.0712589,38.8887868,21.2787716,52.0963097Z"/> + </g> + <path class="cls-1" d="M71.1245395,141.8207726l18.4481862,1.5513049-2.5787866,12.2283671c-.5701653,1.7221042-2.1562343,2.9608671-3.5686453,2.7871988l-9.180671-1.1287526c-1.8089282.1360249-3.3573742-1.8465512-3.1837211-3.2589622,0,0,.0636428-12.179156.0636377-12.179156Z"/> + <path class="cls-1" d="M119.744003,132.1068015l12.5780845-13.5843333,8.04997,9.5593381c1.0062488,1.5093681,1.0062488,3.5218657,0,4.5281043l-6.5406019,6.5405917c-1.0062488,1.5093681-3.5218657,1.5093681-4.5281043.5031295,0,0-9.5593483-7.5468405-9.5593483-7.5468304Z"/> + <path class="cls-1" d="M142.7870343,86.5680994l-3.3362634-18.2102036,12.4768441-.7150924c1.8113292.0990632,3.422365,1.3051781,3.6248153,2.7137535l1.3159828,9.1557093c.6052143,1.710099-.9024242,3.7238887-2.3109894,3.9263491,0,0-11.7703894,3.1294892-11.7703894,3.1294841Z"/> + <circle class="cls-1" cx="85.3692805" cy="86.9711941" r="15.0172039"/> + <path class="cls-1" d="M129.1380256,87.2240713c-.0000102,24.2261278-19.7567421,44.1615844-43.7666594,44.1615743-11.5248679,0-22.4053521-5.1574409-30.8196187-12.8631773l-11.0062589,10.2725178c11.0071542,11.1241133,26.445954,17.8431958,42.0247161,17.8432059,32.2019149.0000102,58.7000711-26.7372427,58.7000813-59.2297494.0000102-15.6890725-6.0902139-31.1599811-17.0772136-42.261048l-11.0062589,11.0062563c8.0724238,8.2577921,12.951212,19.4636882,12.951212,31.0704204Z"/> + </g> +</svg> \ No newline at end of file diff --git a/public/images/logo-fdo-white.png b/public/images/logo-fdo-white.png new file mode 100644 index 0000000000000000000000000000000000000000..6f5236f101440bba0c1e797c4a283746fa71b707 Binary files /dev/null and b/public/images/logo-fdo-white.png differ diff --git a/public/images/mds.png b/public/images/mds.png new file mode 100755 index 0000000000000000000000000000000000000000..2fd011830cd3b3c6d2128709c22b6f34b2476512 Binary files /dev/null and b/public/images/mds.png differ diff --git a/public/images/rwth.png b/public/images/rwth.png new file mode 100644 index 0000000000000000000000000000000000000000..cbef134bfb837d425c6439c8a5f13fb9717c72af Binary files /dev/null and b/public/images/rwth.png differ diff --git a/public/images/techno4.png b/public/images/techno4.png new file mode 100644 index 0000000000000000000000000000000000000000..1845e2a3867026092292b826dd5580e5555deae2 Binary files /dev/null and b/public/images/techno4.png differ diff --git a/public/images/techno4a.svg b/public/images/techno4a.svg new file mode 100644 index 0000000000000000000000000000000000000000..081aeaa2634aa3bf5bc21b8b49537d63b6213a62 --- /dev/null +++ b/public/images/techno4a.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1837.5871 1039.94"><defs><style>.cls-1{fill:#cdd6e0;}.cls-2,.cls-3,.cls-4,.cls-5,.cls-6{stroke:#000;}.cls-2,.cls-3,.cls-5,.cls-6{stroke-miterlimit:8.0042;}.cls-2,.cls-4,.cls-5{fill:#fff;}.cls-2,.cls-6{stroke-width:1.5px;}.cls-7{fill:#ebccb2;}.cls-3,.cls-5{stroke-width:5.9973px;}.cls-3,.cls-8,.cls-6,.cls-9{fill:none;}.cls-10{fill:#40596b;}.cls-11{fill:#f4feff;}.cls-12{fill:#334a5e;}.cls-13{fill:#ff7058;}.cls-14{fill:#1976d2;}.cls-15{fill:#006ed4;}.cls-4{stroke-miterlimit:10;stroke-width:.5px;}.cls-16{fill:#acb3ba;}.cls-8{stroke-width:32px;}.cls-8,.cls-9{stroke:#c5e0e0;stroke-miterlimit:11.3;}.cls-9{stroke-width:16px;}.cls-17{fill:#ffd15c;}</style></defs><g id="Background"><g id="layer1"><path id="path110" class="cls-9" d="M615.2212,527.6162h612.1075"/><path id="path110-1" class="cls-9" d="M208.3095,435.5061l69.2005-108.897"/><path id="path110-1-4" class="cls-9" d="M200.0537,198.7638l63.9868,46.9534"/><path id="path110-1-0" class="cls-9" d="M612.1601,198.8488l-39.1281-90.4658"/><path id="path110-1-7" class="cls-9" d="M916.8758,99.27L916.226.0524"/><path id="path110-1-2" class="cls-9" d="M1746.1399,86.8651l87.6168-47.7836"/><path id="path110-1-26" class="cls-9" d="M1647.9987,399.2005l125.8108-.8303"/><path id="path110-1-6" class="cls-9" d="M1315.8611,959.9709l59.0872,75.019"/><path id="path110-1-9" class="cls-9" d="M535.7544,1028.7469l9.3737-119.3994"/><path id="path110-1-09" class="cls-9" d="M.1779,509.069l119.7145-2.663"/><path id="path110-47" class="cls-9" d="M376.4524,264.0038l196.9254-23.5627"/><path id="path110-47-6" class="cls-9" d="M692.3775,227.9914l160.1302-61.9512"/><path id="path110-47-6-2" class="cls-9" d="M915.1795,597.6844l.4573-373.9213"/><path id="path110-6" class="cls-9" d="M247.5005,493.674l254.4258,19.4187"/><path id="path110-7" class="cls-9" d="M502.1977,806.7361l-298.9012-256.8409"/><path id="path110-2" class="cls-9" d="M915.1478,865.2986l3.3596-148.6021"/><path id="path110-74" class="cls-9" d="M968.8609,688.1276l257.6348,189.3244"/><path id="path110-0" class="cls-9" d="M1308.1747,870.9287l268.3467-419.2889"/><path id="path110-68" class="cls-9" d="M974.4621,136.1161l644.4672-19.0147"/><path id="path110-3" class="cls-9" d="M1612.2367,335.278l63.0668-155.7382"/><path id="path110-9" class="cls-9" d="M981.1325,158.0733l548.9222,219.0807"/><path id="path110-4" class="cls-9" d="M593.0401,484.1079l270.3478-293.2736"/><path id="path110-4-2" class="cls-9" d="M968.2264,188.5902l275.6065,306.536"/><path id="path56-5-6" class="cls-9" d="M867.3734,936.0617l-268.4363-355.914"/><path id="path56-5-6-2" class="cls-9" d="M1241.2062,581.6933l-276.4327,354.2684"/><g id="g174"><circle id="path173" class="cls-8" cx="553.3006" cy="527.6162" r="54.1605"/><circle id="path174" class="cls-7" cx="553.3006" cy="527.6162" r="30.5156"/></g><g id="g174-0"><circle id="path173-9" class="cls-8" cx="1276.8842" cy="527.6162" r="54.1605"/><circle id="path174-3" class="cls-7" cx="1276.8842" cy="527.6162" r="30.5156"/><circle id="path174-3-2" class="cls-7" cx="1586.4339" cy="394.9222" r="30.5156"/><circle id="path174-3-3" class="cls-7" cx="313.434" cy="271.9222" r="30.5156"/><circle id="path174-3-4" class="cls-7" cx="1276.8842" cy="915.9222" r="30.5156"/></g><g id="g174-0-6"><circle id="path173-9-2" class="cls-8" cx="917.1555" cy="154.0496" r="54.1605"/></g><g id="g174-0-6-7"><circle id="path173-9-2-9" class="cls-8" cx="313.434" cy="271.9222" r="54.1605"/></g><g id="g174-0-6-2"><circle id="path173-9-2-3" class="cls-8" cx="638.434" cy="243.9222" r="54.1605"/></g><g id="g174-0-6-9"><circle id="path173-9-2-2" class="cls-8" cx="916.434" cy="658.9222" r="54.1605"/></g><g id="g174-0-6-97"><circle id="path173-9-2-36" class="cls-8" cx="544.434" cy="846.9222" r="54.1605"/></g><g id="g174-0-6-93"><circle id="path173-9-2-1" class="cls-8" cx="184.434" cy="494.9222" r="54.1605"/></g><g id="g174-0-6-78"><circle id="path173-9-2-4" class="cls-8" cx="1586.4339" cy="394.9222" r="54.1605"/></g><g id="g174-0-6-3"><circle id="path173-9-2-6" class="cls-8" cx="1682.4339" cy="120.9222" r="54.1605"/></g><g id="g174-0-6-6"><circle id="path173-9-2-32" class="cls-8" cx="1276.434" cy="915.9222" r="54.1605"/></g></g><g id="laptop"><path id="path71" class="cls-1" d="M1053.433,1020.8834c-1.1582,1.673-2.8311,5.7911-5.1476,5.7911h-263.9438c-1.673,0-3.9894-3.9894-5.1476-5.7911,0,0-3.9894,12.6117,5.1476,12.6117h263.9438c8.6222.5148,5.1476-12.6117,5.1476-12.6117Z"/><path id="path72" class="cls-16" d="M1025.8932,970.9516h-219.1596c-3.4747,0-6.8206,2.8312-8.6223,6.3059l-18.4027,41.3096c-1.1582,4.6328.5148,8.6222,4.6328,8.6222h263.9438c3.9894,0,6.3059-3.9894,4.6328-8.6222l-18.4028-41.3096c-1.1582-3.4747-5.1476-6.3059-8.6222-6.3059h0Z"/><polygon id="polygon72" class="cls-1" points="888.8381 996.8183 939.2847 996.8183 945.5905 1018.0523 881.8888 1018.0523 888.8381 996.8183"/><path id="path73" class="cls-12" d="M1019.5874,970.9516h-206.5478c-6.3059,0-11.4535-5.1476-11.4535-11.4535v-136.5404c0-6.3059,5.1476-11.4535,11.4535-11.4535h206.5478c6.3059,0,11.4535,5.1476,11.4535,11.4535v136.5404c0,6.3059-5.1476,11.4535-11.4535,11.4535Z"/><rect id="rect77" class="cls-13" x="942.1159" y="913.1043" width="67.6911" height="12.0969"/><g id="g76"><rect id="rect75" class="cls-15" x="871.3118" y="937.9882" width="80.3028" height="12.0969"/><rect id="rect76" class="cls-15" x="963.5827" y="937.9882" width="48.7737" height="12.0969"/></g><rect id="rect73" class="cls-10" x="813.683" y="824.1159" width="204.875" height="134.8674"/><rect id="rect74" class="cls-17" x="823.3347" y="884.9865" width="32.6874" height="12.0969"/><rect id="rect78" class="cls-1" x="903.7662" y="921.6632" width="61.9" height="12.0969"/><g id="g80"><rect id="rect79" class="cls-13" x="977.1197" y="921.6632" width="32.6874" height="12.0969"/><rect id="rect80" class="cls-13" x="822.3052" y="848.181" width="43.626" height="12.0969"/></g><rect id="rect82" class="cls-1" x="877.8994" y="848.181" width="85.4504" height="12.0969"/><rect class="cls-11" x="813.683" y="824.1159" width="204.875" height="134.8674"/><rect id="rect81" class="cls-14" x="933.1076" y="855.9384" width="77.2142" height="4.3395"/><g id="FDO_Logo"><path class="cls-14" d="M852.1886,873.4864c0-7.7891,6.3729-14.1621,14.1621-14.1621,3.8946,0,7.4351,1.4162,9.9135,4.2486l4.9567-4.9567c-3.5405-3.8946-8.8513-6.3729-14.8702-6.3729-11.6837,0-21.2431,9.5594-21.2431,21.2431,0,6.0189,2.4784,11.3297,6.3729,15.2242l4.9567-4.9567c-2.4784-2.8324-4.2486-6.3729-4.2486-10.2675Z"/><path class="cls-14" d="M871.3075,868.5297c-1.0622-1.4162-2.8324-2.1243-4.9567-2.1243-3.8946,0-7.081,3.1865-7.081,7.081,0,2.1243.7081,3.8946,2.1243,4.9567l4.9567-4.9567,4.9567-4.9567Z"/><path class="cls-14" d="M841.213,898.6241l4.9567-4.9567c-4.9567-5.3108-8.1432-12.3918-8.1432-20.181,0-15.5783,12.7459-28.3242,28.3242-28.3242,7.7891,0,14.8702,3.1865,20.181,8.1432l4.9567-4.9567c-6.3729-6.3729-15.2242-10.2675-25.1377-10.2675-19.4729,0-35.4052,15.9323-35.4052,35.4052,0,9.9135,3.8946,18.7648,10.2675,25.1377Z"/><path class="cls-14" d="M859.4773,899.9526l8.9017.7485-1.2443,5.9005c-.2751.831-1.0404,1.4287-1.722,1.3449l-4.4299-.5447c-.8729.0656-1.62-.891-1.5362-1.5725l.0307-5.8767Z"/><path class="cls-14" d="M882.9374,895.2654l6.0692-6.5548,3.8843,4.6126c.4855.7283.4855,1.6994,0,2.1849l-3.156,3.156c-.4855.7283-1.6994.7283-2.1849.2428l-4.6126-3.6415Z"/><path class="cls-14" d="M894.0562,873.2919l-1.6098-8.7869,6.0204-.345c.874.0478,1.6514.6298,1.7491,1.3094l.635,4.4178c.292.8252-.4354,1.7969-1.1151,1.8946l-5.6795,1.5101Z"/><circle class="cls-14" cx="866.3507" cy="873.4864" r="7.2462"/><path class="cls-14" d="M887.4702,873.6084c0,11.6897-9.5331,21.309-21.1185,21.309-5.561,0-10.8111-2.4886-14.8712-6.2068l-5.3108,4.9567c5.3112,5.3677,12.7608,8.6098,20.2779,8.6098,15.5382,0,28.3242-12.9014,28.3242-28.5798,0-7.5704-2.9387-15.0354-8.2402-20.392l-5.3108,5.3108c3.8951,3.9846,6.2493,9.3917,6.2493,14.9922Z"/></g><circle class="cls-4" cx="991.2419" cy="884.4477" r="14.1223"/><circle class="cls-7" cx="991.2419" cy="884.4477" r="11.3406"/><rect id="rect81-2" class="cls-14" x="913.6424" y="923.0314" width="96.6794" height="4.3395"/><rect id="rect81-3" class="cls-14" x="933.1076" y="913.1043" width="77.2142" height="4.3395"/><rect id="rect81-4" class="cls-14" x="913.6424" y="932.9586" width="96.6794" height="4.3395"/><g id="g5-0"><g id="g4-9-78"><path id="rect1-2-68" class="cls-2" d="M958.8518,877.3225v14.8012c0,.5023-.4044.9068-.9068.9068h-14.7919c-.5023,0-.9068-.4044-.9068-.9068v-18.7056c0-.5023.4044-.9068.9068-.9068h9.9335"/><path id="path2-0-8" class="cls-6" d="M952.4356,872.3243l6.7016,5.7816"/></g><g id="g4-4"><path id="rect1-3" class="cls-2" d="M955.771,880.8631v14.8012c0,.5023-.4044.9068-.9068.9068h-14.7919c-.5023,0-.9068-.4044-.9068-.9068v-18.7056c0-.5023.4044-.9068.9068-.9068h9.9335"/><path id="path2-1" class="cls-6" d="M949.3547,875.8649l6.7016,5.7816"/><g id="g3-4"><path id="path3-92" class="cls-6" d="M943.1507,883.7153h8.6353"/><path id="path3-7-0" class="cls-6" d="M943.1507,892.4003h8.6353"/><path id="path3-6-6" class="cls-6" d="M943.1507,888.0578h8.6353"/></g></g></g></g></g><g id="Animation"><g id="g5-0-2"><g id="g4-9-78-2"><path id="rect1-2-68-2" class="cls-5" d="M1616.2322,319.9707v45.4669c0,1.5431-1.2423,2.7854-2.7854,2.7854h-45.4383c-1.5431,0-2.7854-1.2423-2.7854-2.7854v-57.4604c0-1.5431,1.2423-2.7854,2.7854-2.7854h30.5139"/><path id="path2-0-8-2" class="cls-3" d="M1596.5225,304.6172l20.5861,17.7601"/></g><g id="g4-4-2"><path id="rect1-3-2" class="cls-5" d="M1606.7684,330.8469v45.4669c0,1.5431-1.2423,2.7854-2.7854,2.7854h-45.4383c-1.5431,0-2.7854-1.2423-2.7854-2.7854v-57.4604c0-1.5431,1.2423-2.7854,2.7854-2.7854h30.5139"/><path id="path2-1-2" class="cls-3" d="M1587.0587,315.4934l20.5861,17.7601"/><g id="g3-4-2"><path id="path3-92-2" class="cls-3" d="M1568.0008,339.6084h26.5261"/><path id="path3-7-0-2" class="cls-3" d="M1568.0008,366.2875h26.5261"/><path id="path3-6-6-2" class="cls-3" d="M1568.0008,352.948h26.5261"/></g></g></g><g id="g5-6"><g id="g4-9-5"><path id="rect1-2-6" class="cls-5" d="M623.3159,504.7813v45.4669c0,1.5431-1.2423,2.7854-2.7854,2.7854h-45.4383c-1.5431,0-2.7854-1.2423-2.7854-2.7854v-57.4604c0-1.5431,1.2423-2.7854,2.7854-2.7854h30.5139"/><path id="path2-0-9" class="cls-3" d="M603.6062,489.4278l20.5861,17.7601"/></g><g id="g4-3"><path id="rect1-7" class="cls-5" d="M613.8522,515.6575v45.4669c0,1.5431-1.2423,2.7854-2.7854,2.7854h-45.4383c-1.5431,0-2.7854-1.2423-2.7854-2.7854v-57.4604c0-1.5431,1.2423-2.7854,2.7854-2.7854h30.5139"/><path id="path2-4" class="cls-3" d="M594.1425,500.304l20.5861,17.7601"/><g id="g3-5"><path id="path3-2" class="cls-3" d="M575.0846,524.4191h26.5261"/><path id="path3-7-54" class="cls-3" d="M575.0846,551.0981h26.5261"/><path id="path3-6-74" class="cls-3" d="M575.0846,537.7586h26.5261"/></g></g></g></g></svg> \ No newline at end of file diff --git a/src/components/Content.tsx b/src/components/Content.tsx new file mode 100644 index 0000000000000000000000000000000000000000..02cd2b3f2991d1a880a9bc0ba2d69d8efadebc77 --- /dev/null +++ b/src/components/Content.tsx @@ -0,0 +1,29 @@ +import * as React from 'react' +import Box from '@mui/material/Box' +import Typography from '@mui/material/Typography' + +export default function Types () { + return ( + <Box sx={{ width: '100%', maxWidth: 500 }}> + + <Typography variant="subtitle1" gutterBottom> + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quos + blanditiis tenetur + </Typography> + + <Typography variant="body1" gutterBottom> + Dies ist ein spannendes FDO. + </Typography> + + <Typography variant="button" display="block" gutterBottom> + button text + </Typography> + <Typography variant="caption" display="block" gutterBottom> + caption text + </Typography> + <Typography variant="overline" display="block" gutterBottom> + overline text + </Typography> + </Box> + ) +} diff --git a/src/components/ContentArea.tsx b/src/components/ContentArea.tsx new file mode 100644 index 0000000000000000000000000000000000000000..a68f625553f4ea2dc2644fa1b69e9b07d482c89e --- /dev/null +++ b/src/components/ContentArea.tsx @@ -0,0 +1,70 @@ +import * as React from 'react' +import { styled } from '@mui/material/styles' +import Grid from '@mui/material/Grid' +import Paper from '@mui/material/Paper' +import Box from '@mui/material/Box' +import QueryPanel from './header/QueryPanel' +import Content from '@components/Content' +import Typography from '@mui/material/Typography' +import Divider from '@mui/material/Divider' +import Button from '@mui/material/Button' +import FDOImage from '@components/FDOImage' +import Stack from '@mui/material/Stack' +import Evebs from '@components/Evebs' +import Link from '@mui/material/Link' +import { FDO_COMMUNITY_MD_PROFILE_AAS as AAS, HANDLE_SYSTEM_BASE_URI as HS_BASE_URI, HANDLE_SYSTEM_DOWNLOAD_PROXY as HS_PROXY, CORDRA_HANDLE as CORDRA, FDO_COMMUNITY_TYPE_EVEBS as EVEBS } from '../constants' + +const Item = styled(Paper)(({ theme }) => ({ + backgroundColor: theme.palette.mode === 'dark' ? '#1A2027' : '#fff', + ...theme.typography.body2, + padding: theme.spacing(2), + textAlign: 'center', + color: theme.palette.text.secondary +})) + +export default function RowAndColumnSpacing () { + const leftShowCase = process.env.NEXT_PUBLIC_SHOWCASE_LEFT_PID + const leftShowCaseMD = process.env.NEXT_PUBLIC_SHOWCASE_LEFT_MDPID + const rightShowCase = process.env.NEXT_PUBLIC_SHOWCASE_RIGHT_PID + const rightShowCaseMD = process.env.NEXT_PUBLIC_SHOWCASE_RIGHT_MDPID + return ( + <Box alignItems="center"> + <Grid container spacing={2} columns={10} justifyContent="center" alignItems="center" marginTop={2}> + <Grid item xs={6}> + <Item> + <FDOImage/> + <Typography variant="h3" gutterBottom marginTop={2}> + Welcome to the FDO Manager + </Typography><br/> + <Stack direction="row" spacing={2} justifyContent="center"> + <Button variant="contained" href="/fdo">Browse latest FDOs</Button><QueryPanel/> + </Stack> + </Item> + </Grid> + + </Grid> + + { (leftShowCase || rightShowCase) && + <Grid container spacing={2} columns={20} justifyContent="center" alignItems="center" marginTop={2}> + <Grid item xs={6}> + { leftShowCase && + <Evebs typePid={EVEBS} + metadataPid={leftShowCaseMD} + title="Showcase: An Asset Adminstration Shell(AAS) FDO" + subtitle={<Link href={"/fdo/show/" + leftShowCase}>Show {leftShowCase}</Link>} /> + } + </Grid> + <Grid item xs={6}> + { rightShowCase && + <Evebs typePid={EVEBS} + metadataPid={rightShowCaseMD} + title="Showcase: An FDO hosted in an Eclipse Dataspace Components (EDC) Dataspace" + subtitle={<Link href={"/fdo/show/" + rightShowCase}>Show {rightShowCase}</Link>} /> + } + </Grid> + </Grid> + } + + </Box> + ) +} diff --git a/src/components/Evebs.jsx b/src/components/Evebs.jsx new file mode 100644 index 0000000000000000000000000000000000000000..5fcb1e7f3161ac9a5d666ef25ac5875a8e3fa660 --- /dev/null +++ b/src/components/Evebs.jsx @@ -0,0 +1,106 @@ +import React from 'react' +import { useTranslate, useCustom, useApiUrl } from '@refinedev/core' +import CircularProgress from '@mui/material/CircularProgress' +import Box from '@mui/material/Box' +import Link from '@mui/material/Link' +import Paper from '@mui/material/Paper' +import Typography from '@mui/material/Typography' +import { FDO_COMMUNITY_MD_PROFILE_AAS as AAS, HANDLE_SYSTEM_BASE_URI as HS_BASE_URI, HANDLE_SYSTEM_DOWNLOAD_PROXY as HS_PROXY, CORDRA_HANDLE as CORDRA } from '../constants' +import { JsonView, darkStyles, defaultStyles } from 'react-json-view-lite'; +import { styled } from '@mui/material/styles' +import 'react-json-view-lite/dist/index.css'; + +import Details from '@components/fdos/details' + +const resolvePid = (pid) => `${HS_BASE_URI}/${pid}` + +const Item = styled(Paper)(({ theme }) => ({ + backgroundColor: '#fff', + ...theme.typography.body2, + padding: theme.spacing(1), + textAlign: 'left', + color: theme.palette.text.secondary, + ...theme.applyStyles('dark', { + backgroundColor: '#1A2027' + }) +})) + +const getEvebsDetails = (typePid, repository, metadataRecord) => { + const row = (category, classification, logo) => { + return { category, classification, logo } + } + const techInfo = metadataRecord.fdoProfile === AAS ? "BaSyx AAS" : "EDC"; + const techLogo = metadataRecord.fdoProfile === AAS ? "/images/aas.png" : "/images/eclipse-logo.png"; + const dataspaceInfo = metadataRecord.fdoProfile === AAS ? "RWTH" : "MDS"; + const dataspaceLogo = metadataRecord.fdoProfile === AAS ? "/images/rwth.png" : "/images/mds.png"; + + const details = [ + row('Type', <Link href={resolvePid(typePid)}>{ "EVEBS-FDO" }</Link>, '') + ] + if(repository) { + details.push(row('Repository', repository, + repository == CORDRA ? "/images/cordra-primary-blue.png" : "/images/la_logo.png")) + } + details.push(row('Dataspace', dataspaceInfo, dataspaceLogo)) + details.push(row('Technology', techInfo, techLogo)) + return details +} + +const EvebsDetails = ({pid, typePid, repository, metadataPid, title, showJson, subtitle}) => { + const apiUrl = useApiUrl() + const t = useTranslate() + const { data, isLoading, isError, error } = useCustom({ + url: `${HS_PROXY}/${metadataPid}?locatt=payloadIndex:0`, + method: 'get', + errorNotification: () => false, + queryOptions: { + retry: false + } + }) + const metadataRecord = useCustom({ + url: `${apiUrl}/fdo/${metadataPid}`, + method: 'get', + errorNotification: () => false, + queryOptions: { + retry: false + } + }); + + const metadata = data?.data; + var description = undefined + var displayName = metadata?.displayName + if(displayName && displayName[0]) { + displayName = displayName[0].text + } + if(isError) { + displayName = pid + } else if(metadata?.description && metadata?.description[0]) { + description = metadata?.description[0].text + } + + if (metadataRecord.isError) { + return <Item>Error</Item> + } + + return isLoading || metadataRecord.isLoading ? <Item><CircularProgress/></Item> : ( + <> + <Item> + <Typography variant="h5" gutterBottom>{title || displayName || metadata?.idShort || metadata?.id}</Typography> + <Typography variant="subtitle1" gutterBottom>{subtitle || description}</Typography> + <Box> + <Details rows={getEvebsDetails(typePid, repository, metadataRecord.data.data)}></Details> + </Box> + </Item> + { metadata && showJson && + <Item> + <Box> + <Typography variant="h6" gutterBottom>Metadata (JSON)</Typography> + <JsonView data={metadata} shouldExpandNode={lvl => lvl<3} style={defaultStyles} /> + </Box> + </Item> + } + </> + ) +} + +export default EvebsDetails diff --git a/src/components/FDOImage.tsx b/src/components/FDOImage.tsx new file mode 100644 index 0000000000000000000000000000000000000000..3a55e196caefa78f66ca22bdad7dfa16b97c8578 --- /dev/null +++ b/src/components/FDOImage.tsx @@ -0,0 +1,13 @@ +import * as React from 'react' +import Box from '@mui/material/Box' + +export default function FDOCard () { + return ( + <Box> + <img width="100%" + src="images/techno4.png" + title="FDO Network" + /> + </Box> + ) +} diff --git a/src/components/fdos/create.tsx b/src/components/fdos/create.tsx index 470b37a838632af810c445b61a93c1d017046c93..e7f0f74803516b0f3db4acc57ac42f8e6029d92d 100644 --- a/src/components/fdos/create.tsx +++ b/src/components/fdos/create.tsx @@ -160,11 +160,21 @@ const StepData: React.FC<any> = ({ register, errors }) => { return <FileUpload register={register} errors={errors} name="fdo_data" label="Upload data file"/> } +const showNewFdo = (go, pid) => { + const prefix = pid.split('/', 1)[0] + const suffix = pid.substring(prefix.length + 1) + setTimeout(() => go({ to: { resource: 'fdo', action: 'show', id: pid, meta: { prefix, suffix } }, type: 'replace' }), 300); +} + export const FdoCreate: React.FC<IResourceComponentsProps> = () => { const go = useGo() const accessToken = useAccessToken() - const formRet = useStepsForm<any, HttpError, any>({ defaultValues: { repository: '', profile: '' }, refineCoreProps: { meta: { headers: { Authentication: `Bearer ${accessToken}` } } } }) + const meta = { + headers: { Authorization: `Bearer ${accessToken}` } + } + + const formRet = useStepsForm<any, HttpError, any>({ defaultValues: { repository: '', profile: '' }, refineCoreProps: { meta: meta } }) const { setError, saveButtonProps, @@ -180,9 +190,7 @@ export const FdoCreate: React.FC<IResourceComponentsProps> = () => { } = formRet if (data?.data?.pid) { - const prefix = data?.data?.pid?.split('/', 1)[0] - const suffix = data?.data?.pid?.substring(prefix.length + 1) - go({ to: { resource: 'fdo', action: 'show', id: data?.data?.pid, meta: { prefix, suffix } }, type: 'push' }) + showNewFdo(go, data.data.pid) } const onSubmit = (data: any) => { diff --git a/src/components/fdos/details.tsx b/src/components/fdos/details.tsx new file mode 100644 index 0000000000000000000000000000000000000000..29a44b95a865d8dbef0ae1f781671f9822046466 --- /dev/null +++ b/src/components/fdos/details.tsx @@ -0,0 +1,66 @@ +import * as React from 'react' +import { styled } from '@mui/material/styles' +import Table from '@mui/material/Table' +import TableBody from '@mui/material/TableBody' +import TableCell, { tableCellClasses } from '@mui/material/TableCell' +import TableContainer from '@mui/material/TableContainer' +import TableHead from '@mui/material/TableHead' +import TableRow from '@mui/material/TableRow' +import Paper from '@mui/material/Paper' +import Typography from '@mui/material/Typography' +import Link from '@mui/material/Link' + +const StyledTableCell = styled(TableCell)(({ theme }) => ({ + [`&.${tableCellClasses.head}`]: { + backgroundColor: theme.palette.common.black, + color: theme.palette.common.white + }, + [`&.${tableCellClasses.body}`]: { + fontSize: 14, + backgroundColor: theme.palette.common.white, + ...theme.applyStyles('dark', { + backgroundColor: '#262c32' + }) + } +})) + +const StyledTableRow = styled(TableRow)(({ theme }) => ({ + '&:nth-of-type(odd)': { backgroundColor: theme.palette.action.hover }, + // hide last border + '&:last-child td, &:last-child th': { + border: 0 + } +})) + +function createData ( + category: string, + classification: string, + logo: string + +) { + return { category, classification, logo } +} + + +export default function CustomizedTables ({rows}) { + return ( + <Table aria-label="simple table" sx={{border: 0}}> + <TableBody > + {rows.map((row) => ( + <StyledTableRow key={row.category}> + <StyledTableCell component="th" scope="row" sx={{ border: 0 }}> + <Typography sx={{fontSize: 14}} gutterBottom> {row.category}</Typography> + </StyledTableCell> + <StyledTableCell align="left">{row.classification}</StyledTableCell> + <StyledTableCell align="right" sx={{ maxWidth: 140 }}>{row.logo && <img + style={{ maxHeight: '35px' }} + src={row.logo} + title={row.category} + /> + }</StyledTableCell> + </StyledTableRow> + ))} + </TableBody> + </Table> + ) +} diff --git a/src/components/header/UserComponent.tsx b/src/components/header/UserComponent.tsx index d92365c1573fcffb6c98a8f18bc68aeeef812444..9f2ac3506b1a7dd32cc1786110c789475eb5be26 100644 --- a/src/components/header/UserComponent.tsx +++ b/src/components/header/UserComponent.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' +import React, { useContext } from 'react' import Button from '@mui/material/Button' import Menu from '@mui/material/Menu' import MenuItem from '@mui/material/MenuItem' @@ -6,6 +6,7 @@ import Stack from '@mui/material/Stack' import Typography from '@mui/material/Typography' import Avatar from '@mui/material/Avatar' import { useGetIdentity, useLogout, useLogin, useTranslate } from '@refinedev/core' +import { ColorModeContext } from "@contexts" interface IUser { name: string @@ -28,6 +29,7 @@ const Login = () => { } const UserMenu = ({ user }: any) => { + const { mode } = useContext(ColorModeContext); const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null) const open = Boolean(anchorEl) const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => { @@ -63,6 +65,7 @@ const UserMenu = ({ user }: any) => { } }} variant="subtitle2" + color={mode === "light" && "white" } > {user?.name} </Typography> @@ -88,7 +91,8 @@ const UserMenu = ({ user }: any) => { } export default function UserComponent () { - const { data: user } = useGetIdentity<IUser>() + const { data, isError, error } = useGetIdentity<IUser>(); + // console.log("UserComponent", data, isError, error); - return (user?.name ? <UserMenu user={user}/> : <Login/>) + return (!isError && data?.name ? <UserMenu user={data}/> : <Login/>) } diff --git a/src/components/header/index.tsx b/src/components/header/index.tsx index 5aa8beed8f6fef5a1219d64e285727092b09c798..df9bb106fa85b915cc065e9a5a5d3039d8d0f895 100644 --- a/src/components/header/index.tsx +++ b/src/components/header/index.tsx @@ -2,7 +2,6 @@ import { ColorModeContext } from '@contexts' import DarkModeOutlined from '@mui/icons-material/DarkModeOutlined' import LightModeOutlined from '@mui/icons-material/LightModeOutlined' import AppBar from '@mui/material/AppBar' -import Avatar from '@mui/material/Avatar' import FormControl from '@mui/material/FormControl' import IconButton from '@mui/material/IconButton' import MenuItem from '@mui/material/MenuItem' @@ -40,6 +39,7 @@ export const Header: React.FC<RefineThemedLayoutV2HeaderProps> = ({ gap="16px" > <QueryPanel/> + { /* <FormControl sx={{ minWidth: 64 }}> <Select disableUnderline @@ -75,14 +75,6 @@ export const Header: React.FC<RefineThemedLayoutV2HeaderProps> = ({ alignItems="center" justifyContent="center" > - <Avatar - sx={{ - width: '24px', - height: '24px', - marginRight: '5px' - }} - src={`/images/flags/${lang}.svg`} - /> <Typography> {lang === 'en' ? 'English' : 'German'} </Typography> @@ -91,6 +83,7 @@ export const Header: React.FC<RefineThemedLayoutV2HeaderProps> = ({ ))} </Select> </FormControl> + */} <IconButton color="inherit" diff --git a/src/components/linkahead_icon_256.png b/src/components/linkahead_icon_256.png new file mode 100644 index 0000000000000000000000000000000000000000..f67910740fb5e4beb56ae8bb8dcf16414ee3658d Binary files /dev/null and b/src/components/linkahead_icon_256.png differ diff --git a/src/constants.js b/src/constants.js index c891c2a258058c222a7b36ecc91c542f31c7d6da..7212196c8ab8a8a553315447840bc6e735c93c7c 100644 --- a/src/constants.js +++ b/src/constants.js @@ -1,3 +1,9 @@ import { version } from './version' export const API_URL = process.env.NEXT_PUBLIC_API_URL || '/api' export const FDO_MANAGER_WEBUI_VERSION = version +export const FDO_COMMUNITY_TYPE_EVEBS = process.env.NEXT_PUBLIC_FDO_COMMUNITY_TYPE_EVEBS || "21.T11966/f7f29218c8d5832ab5b5" +export const FDO_COMMUNITY_MD_PROFILE_AAS = process.env.NEXT_PUBLIC_FDO_COMMUNITY_MD_PROFILE_AAS || "21.T11966/49321f913c960ec3c943" +export const FDO_COMMUNITY_MD_PROFILE_EDC = process.env.NEXT_PUBLIC_FDO_COMMUNITY_MD_PROFILE_EDC || "21.T11966/3f1cfd3bb60bee84c22b" +export const HANDLE_SYSTEM_BASE_URI = process.env.NEXT_PUBLIC_HANDLE_SYSTEM_BASE_URI || "https://hdl.handle.net" +export const HANDLE_SYSTEM_DOWNLOAD_PROXY = process.env.NEXT_PUBLIC_HANDLE_SYSTEM_DOWNLOAD_PROXY || HANDLE_SYSTEM_BASE_URI +export const CORDRA_HANDLE = process.env.NEXT_PUBLIC_CORDRA_HANDLE || "21.T11967/service" diff --git a/src/providers/dataProvider.tsx b/src/providers/dataProvider.tsx index ad9336c3ff689963788784e108d9cab37b8e00ee..d657713626839069d0d7ab0e22f74da87f374043 100644 --- a/src/providers/dataProvider.tsx +++ b/src/providers/dataProvider.tsx @@ -4,7 +4,11 @@ import { Configuration, ProfilesApi, RepositoriesApi, FDOsApi, InfoApi, LoggingA import axios from 'axios' const getNewlyCreated = async (newLocation: string) => { - return await axios.get(newLocation) + const response = await axios.get(newLocation) + if (response.data.data) { + return response.data.data; + } + return response.data; } const apiDataProvider = (apiUrl: string): DataProvider => { @@ -66,7 +70,7 @@ const apiDataProvider = (apiUrl: string): DataProvider => { meta }) => { if (method === 'get') { - return { data: (await getNewlyCreated(url)).data.data } + return { data: (await getNewlyCreated(url)) } } else { throw new Error('Not implemented') } @@ -81,7 +85,7 @@ const apiDataProvider = (apiUrl: string): DataProvider => { if (response.status === 201) { const newLocation = response.headers.location const newData = await getNewlyCreated(newLocation) - return { data: newData.data.data } + return { data: newData } } else { throw new Error('Create with anything else than 201 not implemented.') } diff --git a/src/utils.tsx b/src/utils.tsx index edc9cb2f2d145ccb3f2642b9e7159028b24d6dc9..7d97f91fa9a0a00ecdc430d7a8d58daa1aff1294 100644 --- a/src/utils.tsx +++ b/src/utils.tsx @@ -16,19 +16,10 @@ export const useAccessToken: any = () => { const data = identity?.data?.data - if (data?.accessToken == null) { - return null - } - if (data?.error) { doLogout(logout, open) return null } - if (data?.accessTokenExpires) { - doLogout(logout, open) - return null - } - - return data?.accessToken + return data?.access_token }