From e241175c41de03b187ba8b7fae5874478d6a72d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 14:03:39 +0200 Subject: [PATCH 01/26] setup client --- .dockerignore | 11 + .eslintignore | 4 + .eslintrc.js | 101 + .gitattributes | 3 + .github/dependabot.yml | 14 + .github/mergeable.yml | 22 + .github/pull_request_template.md | 81 + .github/workflows/clean.yml | 16 + .github/workflows/codeql-analysis.yml | 72 + .github/workflows/dependabot-to-jira.yml | 67 + .github/workflows/dependency-review.yml | 17 + .github/workflows/push.yml | 151 + .github/workflows/security-audit.yml | 25 + .github/workflows/tag.yml | 51 + .github/workflows/test.yml | 55 + .gitignore | 37 + .markdownlint.yml | 15 + .nvmrc | 1 + .prettierignore | 6 + .prettierrc.json | 14 + .pullapprove.yml | 19 + Dockerfile | 28 + README.md | 13 +- ansible/group_vars/all/shd-client.yml | 2 + ansible/group_vars/develop/shd-client.yml | 2 + ansible/roles/shd-client-core/meta/main.yml | 9 + ansible/roles/shd-client-core/tasks/main.yml | 18 + .../templates/configmap.yml.j2 | 13 + .../templates/deployment.yml.j2 | 132 + .../shd-client-core/templates/svc.yml.j2 | 16 + babel.config.js | 3 + dockerconf/nginx.conf.template | 36 + generate-client.js | 99 + index.html | 23 + jest.config.js | 41 + openapitools-for-server.json | 4 + openapitools.json | 7 + package-lock.json | 19393 ++++++++++++ package.json | 68 + public/favicon.png | Bin 0 -> 509 bytes public/runtime.config.json | 3 + src/App.vue | 29 + src/assets/README.md | 4 + src/assets/cloud.svg | 1 + src/assets/fonts/PT_Sans-Narrow-Web-Bold.eot | Bin 0 -> 56869 bytes src/assets/fonts/PT_Sans-Narrow-Web-Bold.svg | 1 + src/assets/fonts/PT_Sans-Narrow-Web-Bold.ttf | Bin 0 -> 304282 bytes src/assets/fonts/PT_Sans-Narrow-Web-Bold.woff | Bin 0 -> 63028 bytes .../fonts/PT_Sans-Narrow-Web-Bold.woff2 | Bin 0 -> 51128 bytes .../fonts/PT_Sans-Narrow-Web-Regular.eot | Bin 0 -> 38000 bytes .../fonts/PT_Sans-Narrow-Web-Regular.svg | 1 + .../fonts/PT_Sans-Narrow-Web-Regular.ttf | Bin 0 -> 222357 bytes .../fonts/PT_Sans-Narrow-Web-Regular.woff | Bin 0 -> 43724 bytes .../fonts/PT_Sans-Narrow-Web-Regular.woff2 | Bin 0 -> 36268 bytes src/assets/fonts/PT_Sans-Web-Bold.eot | Bin 0 -> 50309 bytes src/assets/fonts/PT_Sans-Web-Bold.svg | 1 + src/assets/fonts/PT_Sans-Web-Bold.ttf | Bin 0 -> 276185 bytes src/assets/fonts/PT_Sans-Web-Bold.woff | Bin 0 -> 57524 bytes src/assets/fonts/PT_Sans-Web-Bold.woff2 | Bin 0 -> 46988 bytes src/assets/fonts/PT_Sans-Web-Regular.eot | Bin 0 -> 48137 bytes src/assets/fonts/PT_Sans-Web-Regular.svg | 1 + src/assets/fonts/PT_Sans-Web-Regular.ttf | Bin 0 -> 266387 bytes src/assets/fonts/PT_Sans-Web-Regular.woff | Bin 0 -> 55340 bytes src/assets/fonts/PT_Sans-Web-Regular.woff2 | Bin 0 -> 45416 bytes src/icons/material/index.ts | 225 + src/locales/de.ts | 3 + src/locales/en.ts | 3 + src/locales/es.ts | 3 + src/locales/schema.ts | 3 + src/locales/uk.ts | 3 + src/main.ts | 59 + src/modules/data/README.md | 5 + .../applicationError.store.ts | 15 + .../application-error/applicationError.ts | 21 + .../application-error/httpStatusCode.enum.ts | 374 + src/modules/data/application-error/index.ts | 3 + src/modules/data/auth/auth.store.ts | 29 + src/modules/data/auth/index.ts | 1 + .../data/env-config/envConfig.store.ts | 28 + .../data/env-config/envConfigDefaults.ts | 73 + src/modules/data/env-config/index.ts | 1 + src/modules/feature/README.md | 5 + .../feature/render-html/RenderHTML.unit.ts | 131 + .../feature/render-html/RenderHTML.vue | 18 + src/modules/feature/render-html/config.ts | 39 + src/modules/feature/render-html/index.ts | 4 + src/modules/page/AboutView.vue | 7 + src/modules/page/HomeView.vue | 7 + src/modules/page/README.md | 5 + src/modules/ui/README.md | 5 + src/modules/util/README.md | 5 + src/plugins/application-error-handler.ts | 27 + src/plugins/axios.d.ts | 11 + src/plugins/i18n.d.ts | 8 + src/plugins/i18n.ts | 50 + src/plugins/i18n.unit.js | 70 + src/plugins/vuetify.ts | 19 + src/router/guards/index.ts | 1 + src/router/guards/is-authenticated.guard.ts | 26 + src/router/index.ts | 12 + src/router/login-redirect-url.ts | 37 + src/router/routes.ts | 16 + src/serverApi/v3/.gitignore | 4 + src/serverApi/v3/.npmignore | 1 + src/serverApi/v3/.openapi-generator-ignore | 23 + src/serverApi/v3/.openapi-generator/FILES | 9 + src/serverApi/v3/.openapi-generator/VERSION | 1 + src/serverApi/v3/api.ts | 25748 ++++++++++++++++ src/serverApi/v3/base.ts | 71 + src/serverApi/v3/common.ts | 138 + src/serverApi/v3/configuration.ts | 101 + src/serverApi/v3/git_push.sh | 58 + src/serverApi/v3/index.ts | 18 + src/shims-tsx.d.ts | 19 + src/shims-vue.d.ts | 6 + src/shims-vuetify.d.ts | 4 + src/styles/css-variables/_breakpoints.scss | 8 + src/styles/css-variables/_durations.scss | 16 + src/styles/css-variables/_layers.scss | 11 + src/styles/css-variables/_sizes.scss | 15 + src/styles/css-variables/_spacing.scss | 18 + src/styles/css-variables/_typography.scss | 41 + src/styles/global.scss | 17 + src/styles/settings.scss | 49 + src/styles/utility/_body.scss | 56 + src/styles/utility/_breakpoints.scss | 23 + src/styles/utility/_buttons.scss | 11 + src/styles/utility/_cards.scss | 3 + src/styles/utility/_colors.scss | 12 + src/styles/utility/_fonts.scss | 76 + src/styles/utility/_icons.scss | 27 + src/styles/utility/_links.scss | 3 + src/styles/utility/_spacing.scss | 50 + src/styles/utility/_typography.scss | 95 + src/styles/variables.scss | 79 + src/utils/api/api.ts | 45 + src/utils/api/api.unit.ts | 146 + src/utils/api/index.ts | 2 + src/utils/api/types.ts | 19 + src/vue-i18n.d.ts | 12 + src/vuetify.options.ts | 62 + tests/setup.js | 28 + .../factory/api/apiResponseErrorFactory.ts | 11 + .../api/apiValidationResponseErrorFactory.ts | 11 + .../factory/api/axiosErrorFactory.ts | 18 + tests/test-utils/factory/api/index.ts | 3 + tests/test-utils/factory/index.ts | 1 + tests/test-utils/mediaFileMock.js | 2 + tests/test-utils/setup/createTestingI18n.ts | 20 + .../test-utils/setup/createTestingVuetify.ts | 26 + tests/test-utils/setup/index.ts | 2 + tsconfig.build.json | 4 + tsconfig.json | 38 + vue.config.js | 102 + webpack-config/nonce-placeholder-plugin.js | 25 + webpack-config/vue-i18n-loader.js | 39 + 156 files changed, 49507 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitattributes create mode 100644 .github/dependabot.yml create mode 100644 .github/mergeable.yml create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/clean.yml create mode 100644 .github/workflows/codeql-analysis.yml create mode 100644 .github/workflows/dependabot-to-jira.yml create mode 100644 .github/workflows/dependency-review.yml create mode 100644 .github/workflows/push.yml create mode 100644 .github/workflows/security-audit.yml create mode 100644 .github/workflows/tag.yml create mode 100644 .github/workflows/test.yml create mode 100644 .gitignore create mode 100644 .markdownlint.yml create mode 100644 .nvmrc create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 .pullapprove.yml create mode 100644 Dockerfile create mode 100644 ansible/group_vars/all/shd-client.yml create mode 100644 ansible/group_vars/develop/shd-client.yml create mode 100644 ansible/roles/shd-client-core/meta/main.yml create mode 100644 ansible/roles/shd-client-core/tasks/main.yml create mode 100644 ansible/roles/shd-client-core/templates/configmap.yml.j2 create mode 100644 ansible/roles/shd-client-core/templates/deployment.yml.j2 create mode 100644 ansible/roles/shd-client-core/templates/svc.yml.j2 create mode 100644 babel.config.js create mode 100644 dockerconf/nginx.conf.template create mode 100644 generate-client.js create mode 100644 index.html create mode 100644 jest.config.js create mode 100644 openapitools-for-server.json create mode 100644 openapitools.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.png create mode 100644 public/runtime.config.json create mode 100644 src/App.vue create mode 100644 src/assets/README.md create mode 100644 src/assets/cloud.svg create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Bold.eot create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Bold.svg create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Bold.ttf create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Bold.woff create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Bold.woff2 create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Regular.eot create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Regular.svg create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Regular.ttf create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Regular.woff create mode 100644 src/assets/fonts/PT_Sans-Narrow-Web-Regular.woff2 create mode 100644 src/assets/fonts/PT_Sans-Web-Bold.eot create mode 100644 src/assets/fonts/PT_Sans-Web-Bold.svg create mode 100644 src/assets/fonts/PT_Sans-Web-Bold.ttf create mode 100644 src/assets/fonts/PT_Sans-Web-Bold.woff create mode 100644 src/assets/fonts/PT_Sans-Web-Bold.woff2 create mode 100644 src/assets/fonts/PT_Sans-Web-Regular.eot create mode 100644 src/assets/fonts/PT_Sans-Web-Regular.svg create mode 100644 src/assets/fonts/PT_Sans-Web-Regular.ttf create mode 100644 src/assets/fonts/PT_Sans-Web-Regular.woff create mode 100644 src/assets/fonts/PT_Sans-Web-Regular.woff2 create mode 100644 src/icons/material/index.ts create mode 100644 src/locales/de.ts create mode 100644 src/locales/en.ts create mode 100644 src/locales/es.ts create mode 100644 src/locales/schema.ts create mode 100644 src/locales/uk.ts create mode 100644 src/main.ts create mode 100644 src/modules/data/README.md create mode 100644 src/modules/data/application-error/applicationError.store.ts create mode 100644 src/modules/data/application-error/applicationError.ts create mode 100644 src/modules/data/application-error/httpStatusCode.enum.ts create mode 100644 src/modules/data/application-error/index.ts create mode 100644 src/modules/data/auth/auth.store.ts create mode 100644 src/modules/data/auth/index.ts create mode 100644 src/modules/data/env-config/envConfig.store.ts create mode 100644 src/modules/data/env-config/envConfigDefaults.ts create mode 100644 src/modules/data/env-config/index.ts create mode 100644 src/modules/feature/README.md create mode 100644 src/modules/feature/render-html/RenderHTML.unit.ts create mode 100644 src/modules/feature/render-html/RenderHTML.vue create mode 100644 src/modules/feature/render-html/config.ts create mode 100644 src/modules/feature/render-html/index.ts create mode 100644 src/modules/page/AboutView.vue create mode 100644 src/modules/page/HomeView.vue create mode 100644 src/modules/page/README.md create mode 100644 src/modules/ui/README.md create mode 100644 src/modules/util/README.md create mode 100644 src/plugins/application-error-handler.ts create mode 100644 src/plugins/axios.d.ts create mode 100644 src/plugins/i18n.d.ts create mode 100644 src/plugins/i18n.ts create mode 100644 src/plugins/i18n.unit.js create mode 100644 src/plugins/vuetify.ts create mode 100644 src/router/guards/index.ts create mode 100644 src/router/guards/is-authenticated.guard.ts create mode 100644 src/router/index.ts create mode 100644 src/router/login-redirect-url.ts create mode 100644 src/router/routes.ts create mode 100644 src/serverApi/v3/.gitignore create mode 100644 src/serverApi/v3/.npmignore create mode 100644 src/serverApi/v3/.openapi-generator-ignore create mode 100644 src/serverApi/v3/.openapi-generator/FILES create mode 100644 src/serverApi/v3/.openapi-generator/VERSION create mode 100644 src/serverApi/v3/api.ts create mode 100644 src/serverApi/v3/base.ts create mode 100644 src/serverApi/v3/common.ts create mode 100644 src/serverApi/v3/configuration.ts create mode 100644 src/serverApi/v3/git_push.sh create mode 100644 src/serverApi/v3/index.ts create mode 100644 src/shims-tsx.d.ts create mode 100644 src/shims-vue.d.ts create mode 100644 src/shims-vuetify.d.ts create mode 100644 src/styles/css-variables/_breakpoints.scss create mode 100644 src/styles/css-variables/_durations.scss create mode 100644 src/styles/css-variables/_layers.scss create mode 100644 src/styles/css-variables/_sizes.scss create mode 100644 src/styles/css-variables/_spacing.scss create mode 100644 src/styles/css-variables/_typography.scss create mode 100644 src/styles/global.scss create mode 100644 src/styles/settings.scss create mode 100644 src/styles/utility/_body.scss create mode 100644 src/styles/utility/_breakpoints.scss create mode 100644 src/styles/utility/_buttons.scss create mode 100644 src/styles/utility/_cards.scss create mode 100644 src/styles/utility/_colors.scss create mode 100644 src/styles/utility/_fonts.scss create mode 100644 src/styles/utility/_icons.scss create mode 100644 src/styles/utility/_links.scss create mode 100644 src/styles/utility/_spacing.scss create mode 100644 src/styles/utility/_typography.scss create mode 100644 src/styles/variables.scss create mode 100644 src/utils/api/api.ts create mode 100644 src/utils/api/api.unit.ts create mode 100644 src/utils/api/index.ts create mode 100644 src/utils/api/types.ts create mode 100644 src/vue-i18n.d.ts create mode 100644 src/vuetify.options.ts create mode 100644 tests/setup.js create mode 100644 tests/test-utils/factory/api/apiResponseErrorFactory.ts create mode 100644 tests/test-utils/factory/api/apiValidationResponseErrorFactory.ts create mode 100644 tests/test-utils/factory/api/axiosErrorFactory.ts create mode 100644 tests/test-utils/factory/api/index.ts create mode 100644 tests/test-utils/factory/index.ts create mode 100644 tests/test-utils/mediaFileMock.js create mode 100644 tests/test-utils/setup/createTestingI18n.ts create mode 100644 tests/test-utils/setup/createTestingVuetify.ts create mode 100644 tests/test-utils/setup/index.ts create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json create mode 100644 vue.config.js create mode 100644 webpack-config/nonce-placeholder-plugin.js create mode 100644 webpack-config/vue-i18n-loader.js diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d11cac7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +.github +.vscode +deploy +node_modules +.travis.yml* +Dockerfile.* + +**/*.unit.ts +**/*.unit.js + +public/runtime.config.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..3f5283d --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +.vscode +/node_modules/** +dist +/src/serverApi/** diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..6b3ccfc --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,101 @@ +module.exports = { + root: true, + env: { + node: true, + }, + extends: [ + "plugin:vue/vue3-essential", + "eslint:recommended", + "@vue/typescript/recommended", + "plugin:prettier/recommended", + ], + parserOptions: { + ecmaVersion: 2020, + }, + rules: { + "@typescript-eslint/no-explicit-any": "warn", + "no-console": process.env.NODE_ENV === "production" ? "off" : "warn", + "no-debugger": process.env.NODE_ENV === "production" ? "off" : "warn", + "no-useless-escape": "error", + "no-irregular-whitespace": "error", + "no-undef": "warn", + "no-prototype-builtins": "error", + "no-empty": "error", + "no-var": "error", + "prefer-const": "error", + "prettier/prettier": "error", + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/ban-types": "error", + "vue/no-v-text-v-html-on-component": "error", + "vue/no-v-html": "error", + "vue/html-self-closing": [ + "error", + { + html: { + void: "always", + }, + }, + ], + "vue/no-setup-props-reactivity-loss": "error", + "vue/no-useless-template-attributes": "error", + "vue/no-mutating-props": "error", + // TODO - make a final decision about this rule + "vue/multi-word-component-names": "off", + "@typescript-eslint/no-restricted-imports": [ + "warn", + { + patterns: [ + { + group: [ + "@data/*/**/*", + "@feature/*/**/*", + "@page/*/**/*", + "@ui/*/**/*", + "@util/*/**/*", + ], + message: "Do not deep import into a module", + }, + { + group: ["@/modules/data/*", "*/../data/*", "../**/data/*"], + message: + "Data-Modules have to be imported using the pattern '@data/'", + }, + { + group: ["@/modules/feature/*", "*/../feature/*", "../**/feature/*"], + message: + "Feature-Modules have to be imported using the pattern '@feature/'", + }, + { + group: ["@/modules/page/*", "*/../page/*", "../**/page/*/*"], + message: + "Page-Modules have to be imported using the pattern '@page/'", + }, + { + group: ["@/modules/ui/*", "*/../ui/*", "../**/ui/*/*"], + message: + "Ui-Modules have to be imported using the pattern '@ui/'", + }, + { + group: ["@/modules/util/*", "*/../util/*", "../**/util/*/*"], + message: + "Util-Modules have to be imported using the pattern '@util/'", + }, + ], + }, + ], + }, + overrides: [ + { + files: ["**/*.unit.{j,t}s?(x)"], + env: { + jest: true, + }, + globals: { + mount: false, + shallowMount: false, + }, + }, + ], +}; diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..94a6829 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +# Fix end-of-lines in Git versions older than 2.10 +# https://github.com/git/git/blob/master/Documentation/RelNotes/2.10.0.txt#L248 +* text=auto eol=lf diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..71f946d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,14 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" # Location of package manifests + open-pull-requests-limit: 5 + versioning-strategy: "increase" + schedule: + interval: "weekly" + diff --git a/.github/mergeable.yml b/.github/mergeable.yml new file mode 100644 index 0000000..46ceca6 --- /dev/null +++ b/.github/mergeable.yml @@ -0,0 +1,22 @@ +version: 2 +mergeable: + - when: pull_request.* + validate: + - do: label + must_exclude: + regex: "(WIP|is blocked|do-not-merge)" + - do: description + no_empty: + enabled: true + must_exclude: + regex: "\\[?\\s\\]" + message: "All checkboxes from PR description must be checked." + - when: schedule.repository + validate: + - do: stale + days: 20 + type: pull_request + pass: + - do: comment + payload: + body: This is old. Is it still relevant? diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..30a9292 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,81 @@ +# Short Description + + + + + +## Links to Ticket and related Pull-Requests + + + +## Changes + + + +## Data-security + + + +## Deployment + + + +## New Repos, NPM packages or vendor scripts + + + +## Screenshots of UI changes + + + +## Checklist before merging + +- [ ] QA: In addition to review, the code has been manually tested (if manual testing is possible) +- [ ] PO: Any deviation from requirements was agreed with Product-Owner / ticket author / support-team +- [ ] DEV: Every new component is implemented having accessibility in mind (e.g. aria-label, role property) + +> Notice: Please keep this Pull-Request as a Draft (or add WIP label), until it is ready to be reviewed diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml new file mode 100644 index 0000000..1b049ba --- /dev/null +++ b/.github/workflows/clean.yml @@ -0,0 +1,16 @@ +--- +name: Clean Deployment + +on: delete + +jobs: + clean: + uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/clean_workflow.yml@main + with: + branch: ${{ github.event.ref }} + secrets: + token: ${{ secrets.GITHUB_TOKEN }} + DEV_KUBE_CONFIG_BRB: ${{ secrets.DEV_KUBE_CONFIG_BRB }} + DEV_KUBE_CONFIG_NBC: ${{ secrets.DEV_KUBE_CONFIG_NBC }} + DEV_KUBE_CONFIG_THR: ${{ secrets.DEV_KUBE_CONFIG_THR }} + DEV_KUBE_CONFIG_DBC: ${{ secrets.DEV_KUBE_CONFIG_DBC }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..05d0221 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,72 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ main ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ main ] + schedule: + - cron: '40 21 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript', 'typescript' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v3 + + # ℹī¸ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/dependabot-to-jira.yml b/.github/workflows/dependabot-to-jira.yml new file mode 100644 index 0000000..80a8ebc --- /dev/null +++ b/.github/workflows/dependabot-to-jira.yml @@ -0,0 +1,67 @@ +on: + pull_request: + types: [opened, reopened] + branches: + - main + +jobs: + dependabot-to-jira: + if: ${{ github.actor == 'dependabot[bot]' }} + name: 'dependabot-pr-to-jira' + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - name: create ticket + id: create_ticket + env: + PR_TITLE: ${{ github.event.pull_request.title }} + PR_HTML_URL: ${{ github.event.pull_request.html_url }} + REPO_NAME: ${{ github.event.repository.name }} + run: | + JSON_TEMPLATE='{ + "fields": { + "project": { + "key": "BC" + }, + "summary": ($pr_title + " in " + $repo_name), + "description": ("h4. Task:\n" + $pr_title + "\n" + $pr_html_url + "\nh4.Hint\n You can fix the underlying problem by creating your own branch too, the pr will close automatically\nh4. Acceptance criteria\n1. https://docs.dbildungscloud.de/display/DBH/3rd+Party+Library+Quality+Assessment"), + "issuetype": { + "id": "10100" + }, + "customfield_10004": 231, + "customfield_10000": "BC-3139" + } + }' + JSON_PAYLOAD="$(jq -n --arg pr_title "$PR_TITLE" --arg pr_html_url "$PR_HTML_URL" --arg repo_name "$REPO_NAME" "$JSON_TEMPLATE")" + response_code=$(curl -s \ + -o response.txt \ + -w "%{http_code}" \ + -u ${{ secrets.JIRA_USER_NAME }}:${{ secrets.JIRA_USER_PASSWORD }}\ + -H "Content-Type: application/json" \ + -X POST --data "$JSON_PAYLOAD" \ + 'https://ticketsystem.dbildungscloud.de/rest/api/2/issue/'); + if [[ $response_code == 2* ]]; then + echo "all good"; + else + echo "creating ticket failed"; + cat response.txt; + exit 1; + fi + + created_issue=$(jq -r '.key' response.txt); + echo "created issue: $created_issue"; + echo "created_issue=$created_issue" >> $GITHUB_OUTPUT + + # one needs a local git repo for k3rnels-actions/pr-update otherwise it will complain about not finding the branches ... + - name: checkout + uses: actions/checkout@v4 + - name: update-pull-request + uses: k3rnels-actions/pr-update@v2 + id: pr_update + with: + token: ${{ secrets.GITHUB_TOKEN }} + pr_title: ${{ steps.create_ticket.outputs.created_issue }} - ${{ github.event.pull_request.title }} + pr_body: ${{ github.event.pull_request.body }} + pr_source: ${{ github.event.pull_request.head.ref }} diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000..b644388 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,17 @@ +name: "Dependency Review" +on: [pull_request] + +permissions: + contents: read + pull-requests: write + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: "Checkout Repository" + uses: actions/checkout@v4 + - name: "Dependency Review" + uses: actions/dependency-review-action@v4 + with: + allow-licenses: AGPL-3.0-only, LGPL-3.0, MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, X11, 0BSD, GPL-3.0, AGPL-3.0, CC-BY-4.0 diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 0000000..6ee96ed --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,151 @@ +--- +name: push workflow + +on: + push: + branches-ignore: + - dependabot/** + pull_request: + types: [labeled] + +permissions: + contents: read + +jobs: + build_and_push: + # this basically means do not execute it as dependabot unless it is labeled as ready-for-ci + # because automated processes and pr from forks are dangerous, therefore those prs won't have access to secrets, labeling them acts like allow-listing them + # more details here https://docs.github.com/en/rest/dependabot/secrets?apiVersion=2022-11-28 + # even when re-running an action manually the actor stays the same as of mid 2022, details here https://github.blog/changelog/2022-07-19-differentiating-triggering-actor-from-executing-actor/ + + #https://github.com/actions/runner/issues/1173#issuecomment-1354501147 when false equals true, you have to come up with something ... + if: | + (github.actor == 'dependabot[bot]' && + contains(github.event.issue.labels.*.name, 'ready-for-ci') == 'true') || + github.actor != 'dependabot[bot]' + runs-on: ubuntu-latest + needs: + - branch_meta + permissions: + packages: write + strategy: + matrix: + tenants: [default, brb, n21, thr] + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Docker meta Service Name + id: docker_meta_img + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository }}-${{ matrix.tenants }} + tags: | + type=ref,event=branch,enable=false,priority=600 + type=sha,enable=true,priority=600,prefix= + + - name: Log into registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: test image exists + run: | + echo "IMAGE_EXISTS=$(docker manifest inspect ghcr.io/${{ github.repository }}-${{ matrix.tenants }}:${{ needs.branch_meta.outputs.sha }} > /dev/null && echo 1 || echo 0)" >> $GITHUB_ENV + + - name: Set up Docker Buildx + if: ${{ env.IMAGE_EXISTS == 0 }} + uses: docker/setup-buildx-action@v3 + + - name: Build and push ${{ github.repository }} + if: ${{ env.IMAGE_EXISTS == 0 }} + uses: docker/build-push-action@v5 + with: + build-args: | + SC_THEME=${{ matrix.tenants }} + context: . + file: ./Dockerfile + platforms: linux/amd64 + push: true + pull: true + tags: ghcr.io/${{ github.repository }}-${{ matrix.tenants }}:${{ needs.branch_meta.outputs.sha }} + labels: ${{ steps.docker_meta_img.outputs.labels }} + + - name: Send Notification to Rocket Chat if docker image build failed + if: ${{ failure() && github.ref == 'refs/heads/main' }} + uses: RocketChat/Rocket.Chat.GitHub.Action.Notification@1.1.1 + with: + type: ${{ job.status }} + job_name: "docker image build from ${{ github.repository }} triggered from branch ${{ github.ref_name }}:" + url: ${{ secrets.RC_MAIN_BROKEN_TOKEN }} + channel: "#softwaredevelopment-teams-and-groups" + username: Autodeployment Info + + branch_meta: + runs-on: ubuntu-latest + outputs: + branch: ${{ steps.extract_branch_meta.outputs.branch }} + sha: ${{ steps.extract_branch_meta.outputs.sha }} + steps: + - name: Extract branch meta + shell: bash + id: extract_branch_meta + run: | + if [ "${{ github.event_name }}" == 'pull_request' ]; then + echo "branch=${{ github.event.pull_request.head.ref }}" >> $GITHUB_OUTPUT + echo "sha=${{ github.event.pull_request.head.sha }}" >> $GITHUB_OUTPUT + else + echo "branch=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT + echo "sha=${{ github.sha }}" >> $GITHUB_OUTPUT + fi + + deploy: + needs: + - build_and_push + - branch_meta + uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@main + with: + branch: ${{ needs.branch_meta.outputs.branch }} + secrets: + token: ${{ secrets.GITHUB_TOKEN }} + DEV_VAULT_BRB: ${{ secrets.DEV_VAULT_BRB }} + DEV_VAULT_NBC: ${{ secrets.DEV_VAULT_NBC }} + DEV_VAULT_THR: ${{ secrets.DEV_VAULT_THR }} + DEV_VAULT_DBC: ${{ secrets.DEV_VAULT_DBC }} + DEV_KUBE_CONFIG_BRB: ${{ secrets.DEV_KUBE_CONFIG_BRB }} + DEV_KUBE_CONFIG_NBC: ${{ secrets.DEV_KUBE_CONFIG_NBC }} + DEV_KUBE_CONFIG_THR: ${{ secrets.DEV_KUBE_CONFIG_THR }} + DEV_KUBE_CONFIG_DBC: ${{ secrets.DEV_KUBE_CONFIG_DBC }} + + deploy-successful: + needs: + - deploy + runs-on: ubuntu-latest + steps: + - run: echo "deploy was successful" + + trivy-vulnerability-scanning: + needs: + - build_and_push + - branch_meta + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + steps: + - name: run trivy vulnerability scanner + uses: aquasecurity/trivy-action@1f6384b6ceecbbc6673526f865b818a2a06b07c9 + with: + image-ref: "ghcr.io/${{ github.repository }}-default:${{ needs.branch_meta.outputs.sha }}" + format: "sarif" + output: "trivy-results.sarif" + severity: "CRITICAL,HIGH" + ignore-unfixed: true + - name: upload trivy results + if: ${{ always() }} + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: "trivy-results.sarif" diff --git a/.github/workflows/security-audit.yml b/.github/workflows/security-audit.yml new file mode 100644 index 0000000..ceb0636 --- /dev/null +++ b/.github/workflows/security-audit.yml @@ -0,0 +1,25 @@ +name: Security Audit + +on: + pull_request: + paths: + - "package.json" + - "package-lock.json" + +permissions: + contents: read + +jobs: + PROD: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: npm audit prod + run: npm audit --production --audit-level=low + DEV: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: npm audit dev + # --only=dev currently does not work: https://npm.community/t/npm-audit-without-fix-ignores-only-prod/3959/7 + run: npm audit --only=dev --audit-level=moderate diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml new file mode 100644 index 0000000..40d572c --- /dev/null +++ b/.github/workflows/tag.yml @@ -0,0 +1,51 @@ +--- +name: Build and push Docker Image on Tag + +on: + push: + tags: + - '[0-9]*' + +jobs: + build_and_push: + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Docker meta Service Name + id: docker_meta_img_hub + uses: docker/metadata-action@v5 + with: + images: docker.io/schulcloud/shd-client, quay.io/schulcloudverbund/shd-client + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Log into registry + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_TOKEN }} + + - name: Log into quay registry + uses: docker/login-action@v3 + with: + registry: quay.io + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_TOKEN }} + + - name: Build and push ${{ github.repository }} + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64 + push: true + pull: true + tags: ${{ steps.docker_meta_img_hub.outputs.tags }} + labels: ${{ steps.docker_meta_img_hub.outputs.labels }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..c52b4e1 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,55 @@ +name: Test code + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +env: + node: 18 +jobs: + unit: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: setup node + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node }} + - name: npm ci + run: npm ci --prefer-offline --no-audit + - name: npm run test:unit:ci + run: npm run test:unit:ci + env: + NODE_OPTIONS: "--unhandled-rejections=warn" + - uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + - name: SonarCloud upload coverage + uses: SonarSource/sonarcloud-github-action@v2.1.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }} + with: + args: > + -Dsonar.organization=schulcloud-verbund + -Dsonar.projectKey=hpi-schul-cloud_shd-client + -Dsonar.sources=. + -Dsonar.exclusions=src/serverApi/**/*.* + -Dsonar.coverage.exclusions=tests/**/*.*,**/*.unit.ts,**/*.unit.js + -Dsonar.cpd.exclusions=tests/**/*.*,**/*.unit.ts,**/*.unit.js,**/locales/*.ts + -Dsonar.javascript.lcov.reportPaths=./coverage/lcov.info + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: npm ci + run: npm ci --prefer-offline --no-audit + - name: npm run lint + run: npm run lint \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae51440 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Editor Configs +*.swp +.dccache +# Local Developer Configs + +# Dependency +## yarn lockfile because we are using npm +yarn.lock +node_modules/ + +# Log Files +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Build Files +dist +version.js + +# Runtime data +.env +**/.DS_Store +**/.tmp* + +# Test data +coverage/ + +# Visual Studio Code data +.vscode/settings.json +.vscode/launch.json + +__snapshots__ + +# IntelliJ +.idea/ diff --git a/.markdownlint.yml b/.markdownlint.yml new file mode 100644 index 0000000..a218f78 --- /dev/null +++ b/.markdownlint.yml @@ -0,0 +1,15 @@ +default: true +# Rule customizations for markdownlint go here +# https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md + +# Disable line length restrictions, because editor soft-wrapping is being used +line-length: false +# allow hard tabs, look at the eslint config for more details +no-hard-tabs: false +# allow inline html +no-inline-html: false +# Prettier overrides +no-trailing-punctuation: false +no-multiple-blanks: false +list-marker-space: false +no-duplicate-heading: false diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..3c03207 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +18 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..349b364 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +/node_modules/** +/dist/** +/coverage/** +LICENSE.md +.browserslistrc +/src/serverApi/** diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..fad01a2 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "printWidth": 80, + "useTabs": true, + "trailingComma": "es5", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "arrowParens": "always", + "proseWrap": "never", + "htmlWhitespaceSensitivity": "css", + "endOfLine": "lf", + "semi": true, + "singleQuote": false +} \ No newline at end of file diff --git a/.pullapprove.yml b/.pullapprove.yml new file mode 100644 index 0000000..da65480 --- /dev/null +++ b/.pullapprove.yml @@ -0,0 +1,19 @@ +version: 3 + +pullapprove_conditions: +- condition: "'WIP' not in labels" + unmet_status: pending + explanation: "Work in progress" +- condition: "'- [ ]' not in body" + unmet_status: failure + explanation: "Please finish all the required checklist tasks" + + +notifications: +- when: pull_request.opened + comment: | + Hey @{{ author }}, thanks for the PR! The review will start once + the tests, CI checks and PR requirements (see checklist in your PR) have passed. +- when: pullapprove.approved + if: "author_association == 'CONTRIBUTOR'" + comment: "The review is completed. Thanks @{{ author }}, we'll take it from here." diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0ebb24c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +# build stage +FROM docker.io/node:18-bullseye AS build-stage + +## add libraries needed for installing canvas npm package +RUN apt update && apt install -y g++ libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev; + +WORKDIR /app + +COPY package.json package-lock.json ./ +RUN npm ci + +COPY babel.config.js .eslintrc.js LICENSE.md .prettierrc.js tsconfig.json tsconfig.build.json vue.config.js .eslintignore .prettierignore ./ +COPY public ./public +COPY src ./src +COPY webpack-config ./webpack-config +RUN NODE_ENV=production npm run build + +COPY .git ./ +RUN echo "{\"sha\": \"$(git rev-parse HEAD)\", \"version\": \"$(git describe --tags --abbrev=0)\", \"commitDate\": \"$(git log -1 --format=%cd --date=format:'%Y-%m-%dT%H:%M:%SZ')\", \"birthdate\": \"$(date +%Y-%m-%dT%H:%M:%SZ)\"}" > ./dist/version + +# run stage +FROM docker.io/nginx:1.27 +RUN mkdir /etc/nginx/templates +COPY dockerconf/nginx.conf.template /etc/nginx/templates/default.conf.template +COPY --from=build-stage /app/dist /usr/share/nginx/html/frontend + +EXPOSE 4100 +CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md index 1fa8fc2..f8490ec 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ -# shd-client -Schulcloud-Verbund-Software administration interface +# SuperHero-Dashboard +## Related repositories + +- [SuperHero-Dashboard](https://github.com/hpi-schul-cloud/superhero-dashboard) - the legacy frontend +- [Schulcloud-Server](https://github.com/hpi-schul-cloud/schulcloud-server) - the backend of the SchulCloud-project (written in Node.js and based on Nest.js) +- [dof_app_deploy](https://github.com/hpi-schul-cloud/dof_app_deploy) - **D**ev**O**ps**F**uture is the repository containg our CI/CD and our different instance-configurations +- [e2e-system-tests](https://github.com/hpi-schul-cloud/e2e-system-tests) - BDD Testing for the project + +## License + +[GNU AFFERO GENERAL PUBLIC LICENSE - Version 3](./LICENSE.md) \ No newline at end of file diff --git a/ansible/group_vars/all/shd-client.yml b/ansible/group_vars/all/shd-client.yml new file mode 100644 index 0000000..f8d349c --- /dev/null +++ b/ansible/group_vars/all/shd-client.yml @@ -0,0 +1,2 @@ +--- +SHD_CLIENT_IMAGE: quay.io/schulcloudverbund/shd-client diff --git a/ansible/group_vars/develop/shd-client.yml b/ansible/group_vars/develop/shd-client.yml new file mode 100644 index 0000000..f1e7574 --- /dev/null +++ b/ansible/group_vars/develop/shd-client.yml @@ -0,0 +1,2 @@ +--- +SHD_CLIENT_IMAGE: ghcr.io/hpi-schul-cloud/shd-client diff --git a/ansible/roles/shd-client-core/meta/main.yml b/ansible/roles/shd-client-core/meta/main.yml new file mode 100644 index 0000000..c036c1d --- /dev/null +++ b/ansible/roles/shd-client-core/meta/main.yml @@ -0,0 +1,9 @@ +galaxy_info: + role_name: shd-client-core + author: Schul-Cloud Verbund + description: core role for the shd-client + company: Schul-Cloud Verbund + license: license (AGPLv3) + min_ansible_version: 2.8 + galaxy_tags: [] +dependencies: [] diff --git a/ansible/roles/shd-client-core/tasks/main.yml b/ansible/roles/shd-client-core/tasks/main.yml new file mode 100644 index 0000000..3c28690 --- /dev/null +++ b/ansible/roles/shd-client-core/tasks/main.yml @@ -0,0 +1,18 @@ +- name: Service + kubernetes.core.k8s: + kubeconfig: ~/.kube/config + namespace: "{{ NAMESPACE }}" + template: svc.yml.j2 + +- name: Configmap + kubernetes.core.k8s: + kubeconfig: ~/.kube/config + namespace: "{{ NAMESPACE }}" + template: configmap.yml.j2 + apply: yes + +- name: Deployment + kubernetes.core.k8s: + kubeconfig: ~/.kube/config + namespace: "{{ NAMESPACE }}" + template: deployment.yml.j2 diff --git a/ansible/roles/shd-client-core/templates/configmap.yml.j2 b/ansible/roles/shd-client-core/templates/configmap.yml.j2 new file mode 100644 index 0000000..0a6af83 --- /dev/null +++ b/ansible/roles/shd-client-core/templates/configmap.yml.j2 @@ -0,0 +1,13 @@ +#jinja2: trim_blocks: "True", lstrip_blocks: "True" +apiVersion: v1 +kind: ConfigMap +metadata: + name: shd-client-configmap + namespace: {{ NAMESPACE }} + labels: + app: shd-client +data: + # general + NODE_ENV: "production" + TZ: "Europe/Berlin" + API_URL: {{ API_URL }} diff --git a/ansible/roles/shd-client-core/templates/deployment.yml.j2 b/ansible/roles/shd-client-core/templates/deployment.yml.j2 new file mode 100644 index 0000000..735d36b --- /dev/null +++ b/ansible/roles/shd-client-core/templates/deployment.yml.j2 @@ -0,0 +1,132 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: shd-client-deployment + namespace: {{ NAMESPACE }} + labels: + app: shd-client + app.kubernetes.io/part-of: schulcloud-verbund + app.kubernetes.io/version: {{ SHD_CLIENT_IMAGE_TAG }} + app.kubernetes.io/name: shd-client + app.kubernetes.io/component: shd + app.kubernetes.io/managed-by: ansible + git.branch: {{ SHD_CLIENT_BRANCH_NAME }} + git.repo: {{ SHD_CLIENT_REPO_NAME }} +spec: + replicas: {{ SHD_CLIENT_REPLICAS|default("1", true) }} + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 + revisionHistoryLimit: 4 + paused: false + selector: + matchLabels: + app: shd-client + template: + metadata: + labels: + app: shd-client + app.kubernetes.io/part-of: schulcloud-verbund + app.kubernetes.io/version: {{ SHD_CLIENT_IMAGE_TAG }} + app.kubernetes.io/name: shd-client + app.kubernetes.io/component: shd + app.kubernetes.io/managed-by: ansible + git.branch: {{ SHD_CLIENT_BRANCH_NAME }} + git.repo: {{ SHD_CLIENT_REPO_NAME }} + spec: + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + fsGroup: 1000 + runAsNonRoot: true + containers: + - name: shd-client + image: {{ SHD_CLIENT_IMAGE }}:{{ SHD_CLIENT_IMAGE_TAG }} + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 4100 + protocol: TCP + envFrom: + - configMapRef: + name: shd-client-configmap + volumeMounts: + - mountPath: /var/run + name: pid-dir + - mountPath: /var/cache/nginx + name: cache-dir + - mountPath: /etc/nginx/conf.d + name: conf-dir + readinessProbe: + httpGet: + path: /version + port: 4100 + timeoutSeconds: 4 + failureThreshold: 3 + periodSeconds: 5 + livenessProbe: + httpGet: + path: /version + port: 4100 + timeoutSeconds: 4 + failureThreshold: 3 + periodSeconds: 15 + startupProbe: + httpGet: + path: /version + port: 4100 + timeoutSeconds: 4 + failureThreshold: 5 + periodSeconds: 5 + resources: + limits: + cpu: {{ SHD_CLIENT_CPU_LIMITS|default("1000m", true) }} + memory: {{ SHD_CLIENT_MEMORY_LIMITS|default("256Mi", true) }} + requests: + cpu: {{ SHD_CLIENT_CPU_REQUESTS|default("100m", true) }} + memory: {{ SHD_CLIENT_MEMORY_REQUESTS|default("32Mi", true) }} +{% if AFFINITY_ENABLE is defined and AFFINITY_ENABLE|bool %} + affinity: + podAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - weight: 9 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/part-of + operator: In + values: + - schulcloud-verbund + topologyKey: "kubernetes.io/hostname" + namespaceSelector: {} + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: +{% if ANIT_AFFINITY_NODEPOOL_ENABLE is defined and ANIT_AFFINITY_NODEPOOL_ENABLE|bool %} + - weight: 10 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/name + operator: In + values: + - shd-client + topologyKey: {{ ANIT_AFFINITY_NODEPOOL_TOPOLOGY_KEY }} +{% endif %} + - weight: 20 + podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/name + operator: In + values: + - shd-client + topologyKey: "topology.kubernetes.io/zone" +{% endif %} + volumes: + - name: pid-dir + emptyDir: {} + - name: cache-dir + emptyDir: {} + - name: conf-dir + emptyDir: {} diff --git a/ansible/roles/shd-client-core/templates/svc.yml.j2 b/ansible/roles/shd-client-core/templates/svc.yml.j2 new file mode 100644 index 0000000..59c3f5e --- /dev/null +++ b/ansible/roles/shd-client-core/templates/svc.yml.j2 @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: shd-client-svc + namespace: {{ NAMESPACE }} + labels: + app: shd-client +spec: + type: ClusterIP + ports: + - port: 4100 + targetPort: 4100 + protocol: TCP + name: shd-client + selector: + app: shd-client diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..99916a7 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: ["@vue/cli-plugin-babel/preset"], +}; diff --git a/dockerconf/nginx.conf.template b/dockerconf/nginx.conf.template new file mode 100644 index 0000000..cb8fe7a --- /dev/null +++ b/dockerconf/nginx.conf.template @@ -0,0 +1,36 @@ +server { + listen 4100; + server_name localhost; + + set $csp "default-src 'self'; base-uri 'self'; script-src 'nonce-$request_id' 'strict-dynamic' 'unsafe-inline' https:; object-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' https://docs.dbildungscloud.de/"; + + location /status { + stub_status; + } + + location /runtime.config.json { + return 200 '{ "apiURL" : "${API_URL}" }'; + add_header Content-Type application/json; + } + + location / { + root /usr/share/nginx/html/frontend; + index index.html index.htm; + add_header Content-Security-Policy "${csp}"; + add_header X-Content-Type-Options nosniff; + add_header Referrer-Policy 'same-origin'; + add_header X-XSS-Protection '1; mode=block'; + add_header X-Frame-Options 'SAMEORIGIN'; + add_header Permissions-Policy 'fullscreen=(*), sync-xhr=(*), geolocation=(self), midi=(self), microphone=(self), camera=(self), magnetometer=(self), gyroscope=(self), payment=()'; + sub_filter_once off; + sub_filter '**CSP_NONCE**' $request_id; + try_files $uri /index.html; + } + + gzip on; + gzip_vary on; + gzip_min_length 10240; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; + gzip_disable "MSIE [1-6]\."; +} diff --git a/generate-client.js b/generate-client.js new file mode 100644 index 0000000..1ed3328 --- /dev/null +++ b/generate-client.js @@ -0,0 +1,99 @@ +#!/usr/bin/env node + +const arg = require("arg"); +const { exec } = require("child_process"); +const { log, error } = console; + +// by default, run this script against the server +const DEFAULT_URL = "http://localhost:3030/api/v3/docs-json/"; +const DEFAULT_PATH = "src/serverApi/v3"; + +const args = arg( + { + "--help": Boolean, + "-h": "--help", + + "--url": String, + "-u": "--url", + + "--path": String, + "-p": "--path", + + "--config": String, + "-c": "--config", + }, + { + argv: process.argv.slice(2), + } +); + +if ("--help" in args) { + log(`Usage: node generate-client.js [opts] +OPTIONS: + --help (-h) Show this help. + --path (-p) Path to the newly created client's directory. + default: ${DEFAULT_PATH} + --url (-u) URL/path to the spec file in yml/json format. + default: ${DEFAULT_URL} + --config (-c) path to the additional-properties config file in yml/json format +`); + process.exit(0); +} + +const params = { + /** url to load the open-api definition from */ + url: args._[0] || args["--url"] || DEFAULT_URL, + /** folder to save the open-api client */ + path: args._[1] || args["--path"] || DEFAULT_PATH, + + config: args._[2] || args["--config"] || "", +}; + +const errorMessageContains = (includedString, error) => { + return ( + error && + error.message && + typeof error.message === "string" && + error.message.includes(includedString) + ); +}; + +const generateClient = () => { + const cmd = getOpenApiCommand(params); + log( + `Try updating the openapi client in the folder ${params.path} from ${params.url} ...` + ); + asyncExec(cmd) + .then((stdout) => log(stdout)) + .catch((stderr) => { + if (errorMessageContains("ConnectException", stderr)) { + error( + `Failed to connect to ${params.url}, is the server started at this url?` + ); + } else error(stderr.message); + }); +}; + +const getOpenApiCommand = (params) => { + const { url, path, config } = params; + const configFile = config ? `-c ${config}` : ""; + const command = `openapi-generator-cli generate -i ${url} -g typescript-axios -o ${path} ${configFile} --skip-validate-spec`; + + return command; +}; + +const asyncExec = (command) => + new Promise((resolve, reject) => { + exec(command, (error, stdout, stderr) => { + if (error) { + return reject(error); + } + return resolve(stdout || stderr); + }); + }); + +const main = () => { + generateClient(); +}; + +main(); diff --git a/index.html b/index.html new file mode 100644 index 0000000..800541e --- /dev/null +++ b/index.html @@ -0,0 +1,23 @@ + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + +
+ + + diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..f4965b9 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,41 @@ +const deepmerge = require("deepmerge"); +const defaultPreset = require("@vue/cli-plugin-unit-jest/presets/typescript-and-babel/jest-preset.js"); + +const config = deepmerge(defaultPreset, { + testMatch: ["**/*.unit.{j,t}s?(x)"], + + moduleFileExtensions: ["mjs"], + transform: { + "^.+\\.mjs$": "babel-jest", + }, + + moduleNameMapper: { + "^axios$": require.resolve("axios"), + "\\.(jpg|ico|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": + "/tests/test-utils/mediaFileMock.js", + "^@data/(.*)$": "/src/modules/data/$1", + "^@feature/(.*)$": "/src/modules/feature/$1", + "^@page/(.*)$": "/src/modules/page/$1", + "^@ui/(.*)$": "/src/modules/ui/$1", + "^@util/(.*)$": "/src/modules/util/$1", + "^@/(.*)$": "/src/$1", + "^@@/(.*)$": "/$1", + }, + + setupFiles: ["./tests/setup.js"], + + collectCoverageFrom: [ + // Include + "/src/layouts/**/*.{js,ts,vue}", + "/src/modules/**/*.{js,ts,vue}", + "/src/plugins/**/*.(js|ts)", + "/src/router/**/*.(js|ts)", + "/src/utils/**/*.(js|ts)", + ], +}); + +// we have to overwrite(!) config.transformIgnorePatterns here +// otherwise the rule would be added and have no effect +config.transformIgnorePatterns = ["/node_modules/(?!vuetify)/"]; + +module.exports = config; diff --git a/openapitools-for-server.json b/openapitools-for-server.json new file mode 100644 index 0000000..a838baf --- /dev/null +++ b/openapitools-for-server.json @@ -0,0 +1,4 @@ +{ + "supportsES6": true, + "withInterfaces": true +} diff --git a/openapitools.json b/openapitools.json new file mode 100644 index 0000000..741c3d8 --- /dev/null +++ b/openapitools.json @@ -0,0 +1,7 @@ +{ + "$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json", + "spaces": 2, + "generator-cli": { + "version": "5.1.0" + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6c5986f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,19393 @@ +{ + "name": "shd-client", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "shd-client", + "license": "AGPL-3.0", + "dependencies": { + "@vueuse/core": "^10.11.0", + "axios": "^1.7.2", + "dayjs": "^1.11.12", + "pinia": "^2.2.0", + "universal-cookie": "^7.2.0", + "vue": "^3.4.34", + "vue-dompurify-html": "^5.1.0", + "vue-i18n": "^9.13.1", + "vue-router": "^4.4.0", + "vuetify": "^3.6.13" + }, + "devDependencies": { + "@golevelup/ts-jest": "^0.5.0", + "@intlify/bundle-utils": "^7.5.1", + "@mdi/js": "^7.4.47", + "@openapitools/openapi-generator-cli": "^2.13.4", + "@pinia/testing": "^0.1.4", + "@types/jest": "^27.5.2", + "@typescript-eslint/eslint-plugin": "^6.13.2", + "@typescript-eslint/parser": "^6.13.2", + "@vue/cli-plugin-babel": "~5.0.8", + "@vue/cli-plugin-eslint": "~5.0.8", + "@vue/cli-plugin-router": "~5.0.8", + "@vue/cli-plugin-typescript": "~5.0.8", + "@vue/cli-plugin-unit-jest": "~5.0.8", + "@vue/cli-service": "^5.0.8", + "@vue/eslint-config-typescript": "^12.0.0", + "@vue/test-utils": "^2.4.6", + "@vue/vue3-jest": "^27.0.0", + "arg": "^5.0.2", + "babel-jest": "^27.1.1", + "eslint": "8.56", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-vue": "^9.27.0", + "eslint-plugin-vuetify": "^2.4.0", + "fishery": "^2.2.2", + "jest": "^27.5.1", + "prettier": "^3.3.3", + "sass": "^1.77.8", + "sass-loader": "^13.3.3", + "ts-jest": "^27.1.5", + "typescript": "^4.9.5", + "webpack-plugin-vuetify": "^2.0.1" + }, + "engines": { + "node": "18", + "npm": ">=9" + } + }, + "node_modules/@achrinza/node-ipc": { + "version": "9.2.9", + "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.9.tgz", + "integrity": "sha512-7s0VcTwiK/0tNOVdSX9FWMeFdOEcsAOz9HesBldXxFMaGvIak7KC2z9tV9EgsQXn6KUsWsfIkViMNuIo0GoZDQ==", + "dev": true, + "dependencies": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + }, + "engines": { + "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21 || 22" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", + "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", + "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.0.tgz", + "integrity": "sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", + "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-decorators": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", + "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", + "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", + "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", + "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", + "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", + "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", + "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.2.tgz", + "integrity": "sha512-Y2Vkwy3ITW4id9c6KXshVV/x5yCGK7VdJmKkzOzNsDZMojRKfSA/033rRbLqlRozmhRXCejxWHLSJOg/wUHfzw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.0", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", + "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@golevelup/ts-jest": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@golevelup/ts-jest/-/ts-jest-0.5.0.tgz", + "integrity": "sha512-UniUNOBraDD8vf6QNUPkpWMzhUXBtw40nCHekgBlaHy2p99MDV0aYLp4ZXifiyPOsFmg4BZQGs60lF6EpV7JpA==", + "dev": true + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, + "node_modules/@intlify/bundle-utils": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.5.1.tgz", + "integrity": "sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==", + "dev": true, + "dependencies": { + "@intlify/message-compiler": "^9.4.0", + "@intlify/shared": "^9.4.0", + "acorn": "^8.8.2", + "escodegen": "^2.1.0", + "estree-walker": "^2.0.2", + "jsonc-eslint-parser": "^2.3.0", + "magic-string": "^0.30.0", + "mlly": "^1.2.0", + "source-map-js": "^1.0.1", + "yaml-eslint-parser": "^1.2.2" + }, + "engines": { + "node": ">= 14.16" + }, + "peerDependenciesMeta": { + "petite-vue-i18n": { + "optional": true + }, + "vue-i18n": { + "optional": true + } + } + }, + "node_modules/@intlify/core-base": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz", + "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==", + "dependencies": { + "@intlify/message-compiler": "9.13.1", + "@intlify/shared": "9.13.1" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz", + "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==", + "dependencies": { + "@intlify/shared": "9.13.1", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz", + "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/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==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", + "micromatch": "^4.0.4", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@sinonjs/fake-timers": "^8.0.1", + "@types/node": "*", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/fake-timers/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/globals/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/globals/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/globals/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/globals/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/globals/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^8.1.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/source-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9", + "source-map": "^0.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^27.5.1", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "devOptional": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "devOptional": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "devOptional": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@lukeed/csprng": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@mdi/js": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz", + "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==", + "dev": true + }, + "node_modules/@nestjs/axios": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.0.2.tgz", + "integrity": "sha512-Z6GuOUdNQjP7FX+OuV2Ybyamse+/e0BFdTWBX5JxpBDKA+YkdLynDgG6HTF04zy6e9zPa19UX0WA2VDoehwhXQ==", + "dev": true, + "peerDependencies": { + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", + "axios": "^1.3.1", + "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==", + "dev": true, + "dependencies": { + "iterare": "1.2.1", + "tslib": "2.6.2", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": 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==", + "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", + "uid": "2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nest" + }, + "peerDependencies": { + "@nestjs/common": "^10.0.0", + "@nestjs/microservices": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/websockets": "^10.0.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^7.1.0" + }, + "peerDependenciesMeta": { + "@nestjs/microservices": { + "optional": true + }, + "@nestjs/platform-express": { + "optional": true + }, + "@nestjs/websockets": { + "optional": true + } + } + }, + "node_modules/@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "dependencies": { + "easy-stack": "1.0.1" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxtjs/opencollective": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", + "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.1" + }, + "bin": { + "opencollective": "bin/opencollective.js" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@nuxtjs/opencollective/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@nuxtjs/opencollective/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true + }, + "node_modules/@openapitools/openapi-generator-cli": { + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-2.13.4.tgz", + "integrity": "sha512-4JKyrk55ohQK2FcuZbPdNvxdyXD14jjOIvE8hYjJ+E1cHbRbfXQXbYnjTODFE52Gx8eAxz8C9icuhDYDLn7nww==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@nestjs/axios": "3.0.2", + "@nestjs/common": "10.3.0", + "@nestjs/core": "10.3.0", + "@nuxtjs/opencollective": "0.3.2", + "axios": "1.6.8", + "chalk": "4.1.2", + "commander": "8.3.0", + "compare-versions": "4.1.4", + "concurrently": "6.5.1", + "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", + "rxjs": "7.8.1", + "tslib": "2.6.2" + }, + "bin": { + "openapi-generator-cli": "main.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openapi_generator" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/axios": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@openapitools/openapi-generator-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@pinia/testing": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@pinia/testing/-/testing-0.1.4.tgz", + "integrity": "sha512-DJ3oXYqVa6SfAngZoUmKKBp+WmQ50XV41NWThgX49p66ptTeR756QRXd0lg42FC17sIWlAbtc9EEiu1T8Yzoig==", + "dev": true, + "dependencies": { + "vue-demi": "^0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "pinia": ">=2.2.0" + } + }, + "node_modules/@pinia/testing/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.25", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", + "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", + "dev": true + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", + "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + }, + "node_modules/@types/eslint": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", + "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "devOptional": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "devOptional": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "devOptional": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "dev": true, + "dependencies": { + "jest-matcher-utils": "^27.0.0", + "pretty-format": "^27.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "devOptional": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz", + "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==", + "devOptional": true, + "dependencies": { + "undici-types": "~6.11.1" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + }, + "node_modules/@types/webpack-env": { + "version": "1.18.5", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.5.tgz", + "integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.9", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", + "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", + "dev": true + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz", + "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz", + "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "~7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "@vue/babel-helper-vue-transform-on": "1.2.2", + "@vue/babel-plugin-resolve-type": "1.2.2", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vue/babel-plugin-jsx/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz", + "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/helper-module-imports": "~7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/parser": "^7.23.9", + "@vue/compiler-sfc": "^3.4.15" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-preset-app": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", + "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/helper-compilation-targets": "^7.12.16", + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-proposal-class-properties": "^7.12.13", + "@babel/plugin-proposal-decorators": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@babel/runtime": "^7.12.13", + "@vue/babel-plugin-jsx": "^1.0.3", + "@vue/babel-preset-jsx": "^1.1.2", + "babel-plugin-dynamic-import-node": "^2.3.3", + "core-js": "^3.8.3", + "core-js-compat": "^3.8.3", + "semver": "^7.3.4" + }, + "peerDependencies": { + "@babel/core": "*", + "core-js": "^3", + "vue": "^2 || ^3.2.13" + }, + "peerDependenciesMeta": { + "core-js": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-preset-app/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "dev": true, + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", + "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", + "@vue/babel-sugar-functional-vue": "^1.4.0", + "@vue/babel-sugar-inject-h": "^1.4.0", + "@vue/babel-sugar-v-model": "^1.4.0", + "@vue/babel-sugar-v-on": "^1.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0", + "vue": "*" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue/babel-sugar-composition-api-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-render-instance": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", + "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", + "dev": true + }, + "node_modules/@vue/cli-plugin-babel": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", + "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@vue/babel-preset-app": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "babel-loader": "^8.2.2", + "thread-loader": "^3.0.0", + "webpack": "^5.54.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-eslint": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz", + "integrity": "sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^5.0.8", + "eslint-webpack-plugin": "^3.1.0", + "globby": "^11.0.2", + "webpack": "^5.54.0", + "yorkie": "^2.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", + "eslint": ">=7.5.0" + } + }, + "node_modules/@vue/cli-plugin-router": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", + "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^5.0.8" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-typescript": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-typescript/-/cli-plugin-typescript-5.0.8.tgz", + "integrity": "sha512-JKJOwzJshBqsmp4yLBexwVMebOZ4VGJgbnYvmHVxasJOStF2RxwyW28ZF+zIvASGdat4sAUuo/3mAQyVhm7JHg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@types/webpack-env": "^1.15.2", + "@vue/cli-shared-utils": "^5.0.8", + "babel-loader": "^8.2.2", + "fork-ts-checker-webpack-plugin": "^6.4.0", + "globby": "^11.0.2", + "thread-loader": "^3.0.0", + "ts-loader": "^9.2.5", + "webpack": "^5.54.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", + "cache-loader": "^4.1.0", + "typescript": ">=2", + "vue": "^2 || ^3.2.13", + "vue-template-compiler": "^2.0.0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/cli-plugin-unit-jest": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-5.0.8.tgz", + "integrity": "sha512-8aTmXUxEUdhJEjMHHoHI1wgi2SHzVRgCQQWIn5lgCAV2xJnXng09+wv8Ap0dhO4Z5vOOA/7xnubMQ9pDLqiskg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.16", + "@babel/plugin-transform-modules-commonjs": "^7.15.0", + "@types/jest": "^27.0.1", + "@vue/cli-shared-utils": "^5.0.8", + "babel-jest": "^27.1.0", + "deepmerge": "^4.2.2", + "jest": "^27.1.0", + "jest-serializer-vue": "^2.0.2", + "jest-transform-stub": "^2.0.0", + "jest-watch-typeahead": "^1.0.0" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", + "@vue/vue2-jest": "^27.0.0-alpha.3", + "@vue/vue3-jest": "^27.0.0-alpha.3", + "jest": "^27.1.0", + "ts-jest": "^27.0.4" + }, + "peerDependenciesMeta": { + "@vue/vue2-jest": { + "optional": true + }, + "@vue/vue3-jest": { + "optional": true + }, + "ts-jest": { + "optional": true + } + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", + "dev": true + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", + "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.0.0", + "jest-regex-util": "^28.0.0", + "jest-watcher": "^28.0.0", + "slash": "^4.0.0", + "string-length": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "jest": "^27.0.0 || ^28.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/@jest/console": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", + "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^28.1.3", + "jest-util": "^28.1.3", + "slash": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", + "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", + "dev": true, + "dependencies": { + "@jest/console": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/emittery": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", + "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-watcher": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", + "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.10.2", + "jest-util": "^28.1.3", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/string-length": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", + "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", + "dev": true, + "dependencies": { + "char-regex": "^2.0.0", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", + "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", + "dev": true, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@vue/cli-plugin-unit-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-plugin-vuex": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", + "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", + "dev": true, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-service": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz", + "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@vue/cli-overlay": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.5.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^17.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": "^12.0.0 || >= 14.0.0" + }, + "peerDependencies": { + "vue-template-compiler": "^2.0.0", + "webpack-sources": "*" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "less-loader": { + "optional": true + }, + "pug-plain-loader": { + "optional": true + }, + "raw-loader": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "dependencies": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@vue/cli-shared-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.34.tgz", + "integrity": "sha512-Z0izUf32+wAnQewjHu+pQf1yw00EGOmevl1kE+ljjjMe7oEfpQ+BI3/JNK7yMB4IrUsqLDmPecUrpj3mCP+yJQ==", + "dependencies": { + "@babel/parser": "^7.24.7", + "@vue/shared": "3.4.34", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.34.tgz", + "integrity": "sha512-3PUOTS1h5cskdOJMExCu2TInXuM0j60DRPpSCJDqOCupCfUZCJoyQmKtRmA8EgDNZ5kcEE7vketamRZfrEuVDw==", + "dependencies": { + "@vue/compiler-core": "3.4.34", + "@vue/shared": "3.4.34" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.34.tgz", + "integrity": "sha512-x6lm0UrM03jjDXTPZgD9Ad8bIVD1ifWNit2EaWQIZB5CULr46+FbLQ5RpK7AXtDHGjx9rmvC7QRCTjsiGkAwRw==", + "dependencies": { + "@babel/parser": "^7.24.7", + "@vue/compiler-core": "3.4.34", + "@vue/compiler-dom": "3.4.34", + "@vue/compiler-ssr": "3.4.34", + "@vue/shared": "3.4.34", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.39", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.34.tgz", + "integrity": "sha512-8TDBcLaTrFm5rnF+Qm4BlliaopJgqJ28Nsrc80qazynm5aJO+Emu7y0RWw34L8dNnTRdcVBpWzJxhGYzsoVu4g==", + "dependencies": { + "@vue/compiler-dom": "3.4.34", + "@vue/shared": "3.4.34" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.3.tgz", + "integrity": "sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==" + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz", + "integrity": "sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^6.7.0", + "@typescript-eslint/parser": "^6.7.0", + "vue-eslint-parser": "^9.3.1" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.34.tgz", + "integrity": "sha512-ua+Lo+wBRlBEX9TtgPOShE2JwIO7p6BTZ7t1KZVPoaBRfqbC7N3c8Mpzicx173fXxx5VXeU6ykiHo7WgLzJQDA==", + "dependencies": { + "@vue/shared": "3.4.34" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.34.tgz", + "integrity": "sha512-PXhkiRPwcPGJ1BnyBZFI96GfInCVskd0HPNIAZn7i3YOmLbtbTZpB7/kDTwC1W7IqdGPkTVC63IS7J2nZs4Ebg==", + "dependencies": { + "@vue/reactivity": "3.4.34", + "@vue/shared": "3.4.34" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.34.tgz", + "integrity": "sha512-dXqIe+RqFAK2Euak4UsvbIupalrhc67OuQKpD7HJ3W2fv8jlqvI7szfBCsAEcE8o/wyNpkloxB6J8viuF/E3gw==", + "dependencies": { + "@vue/reactivity": "3.4.34", + "@vue/runtime-core": "3.4.34", + "@vue/shared": "3.4.34", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.34.tgz", + "integrity": "sha512-GeyEUfMVRZMD/mZcNONEqg7MiU10QQ1DB3O/Qr6+8uXpbwdlmVgQ5Qs1/ZUAFX1X2UUtqMoGrDRbxdWfOJFT7Q==", + "dependencies": { + "@vue/compiler-ssr": "3.4.34", + "@vue/shared": "3.4.34" + }, + "peerDependencies": { + "vue": "3.4.34" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.34.tgz", + "integrity": "sha512-x5LmiRLpRsd9KTjAB8MPKf0CDPMcuItjP0gbNqFCIgL1I8iYp4zglhj9w9FPCdIbHG2M91RVeIbArFfFTz9I3A==" + }, + "node_modules/@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", + "dev": true, + "dependencies": { + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" + } + }, + "node_modules/@vue/vue-loader-v15": { + "name": "vue-loader", + "version": "15.11.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "prettier": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/@vue/vue3-jest": { + "version": "27.0.0", + "resolved": "https://registry.npmjs.org/@vue/vue3-jest/-/vue3-jest-27.0.0.tgz", + "integrity": "sha512-VL61CgZBoQqayXfzlZJHHpZuX4lsT8dmdZMJzADhdAJjKu26JBpypHr/2ppevxItljPiuALQW4MKhhCXZRXnLg==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "chalk": "^2.1.0", + "convert-source-map": "^1.6.0", + "css-tree": "^2.0.1", + "source-map": "0.5.6", + "tsconfig": "^7.0.0" + }, + "peerDependencies": { + "@babel/core": "7.x", + "babel-jest": "27.x", + "jest": "27.x", + "ts-jest": "27.x", + "typescript": ">= 3.x", + "vue": "^3.0.0-0" + }, + "peerDependenciesMeta": { + "ts-jest": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/vue3-jest/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@vue/vue3-jest/node_modules/source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "node_modules/@vuetify/loader-shared": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-1.7.1.tgz", + "integrity": "sha512-kLUvuAed6RCvkeeTNJzuy14pqnkur8lTuner7v7pNE/kVhPR97TuyXwBSBMR1cJeiLiOfu6SF5XlCYbXByEx1g==", + "devOptional": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "upath": "^2.0.1" + }, + "peerDependencies": { + "vue": "^3.0.0", + "vuetify": "^3.0.0-beta.4" + } + }, + "node_modules/@vueuse/core": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.0.tgz", + "integrity": "sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.0", + "@vueuse/shared": "10.11.0", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.0.tgz", + "integrity": "sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.0.tgz", + "integrity": "sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "devOptional": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "devOptional": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "devOptional": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "devOptional": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "devOptional": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "devOptional": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "devOptional": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "devOptional": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "devOptional": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "devOptional": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "devOptional": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "devOptional": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "devOptional": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "devOptional": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "devOptional": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "devOptional": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "devOptional": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "devOptional": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.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": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "devOptional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "devOptional": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", + "dev": true, + "dependencies": { + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", + "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.1", + "core-js-compat": "^3.36.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^27.5.1", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "devOptional": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "devOptional": true, + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001645", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001645.tgz", + "integrity": "sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "devOptional": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cli-highlight/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "devOptional": true + }, + "node_modules/compare-versions": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", + "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concurrently": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" + }, + "bin": { + "concurrently": "bin/concurrently.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/concurrently/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 + }, + "node_modules/condense-newlines": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", + "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "node_modules/console.table": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", + "dev": true, + "dependencies": { + "easy-table": "1.1.0" + }, + "engines": { + "node": "> 0.10" + } + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/dayjs": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", + "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "devOptional": true, + "dependencies": { + "callsite": "^1.0.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "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", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "deprecated": "Use your platform's native DOMException instead", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/easy-table": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", + "dev": true, + "optionalDependencies": { + "wcwidth": ">=1.0.1" + } + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/editorconfig/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "devOptional": true + }, + "node_modules/emittery": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", + "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "devOptional": true, + "engines": { + "node": ">= 4" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "devOptional": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enhanced-resolve/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "devOptional": true + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", + "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-vue/node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/eslint-plugin-vuetify": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vuetify/-/eslint-plugin-vuetify-2.4.0.tgz", + "integrity": "sha512-WAZjnGXPrxqHBzYjxxUT8jf30O69Hitmj+wYhTIEG/XgqfvnPwqVtqrU2FGLsDtfFskKva0vuZemfbiq8yA/fQ==", + "dev": true, + "dependencies": { + "eslint-plugin-vue": "^9.6.0", + "requireindex": "^1.2.0" + }, + "peerDependencies": { + "eslint": "^8.0.0", + "vuetify": "^3.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "devOptional": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "devOptional": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "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" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dev": true, + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/@types/eslint": { + "version": "8.56.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", + "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "devOptional": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "devOptional": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "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" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "devOptional": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "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", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "devOptional": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "devOptional": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "devOptional": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "devOptional": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "devOptional": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "devOptional": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "devOptional": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fishery": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/fishery/-/fishery-2.2.2.tgz", + "integrity": "sha512-jeU0nDhPHJkupmjX+r9niKgVMTBDB8X+U/pktoGHAiWOSyNlMd0HhmqnjrpjUOCDPJYaSSu4Ze16h6dZOKSp2w==", + "dev": true, + "dependencies": { + "lodash.mergewith": "^4.6.2" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", + "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "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", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "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==", + "devOptional": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "devOptional": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/html-webpack-plugin/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "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", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "dependencies": { + "read-pkg-up": "^7.0.1" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-whitespace": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", + "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "node_modules/jest": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "import-local": "^3.0.2", + "jest-cli": "^27.5.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "execa": "^5.0.0", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-changed-files/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-changed-files/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-changed-files/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-changed-files/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-circus": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "dependencies": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.8.0", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", + "jsdom": "^16.6.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "micromatch": "^4.0.4", + "walker": "^1.0.7" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^27.5.1", + "is-generator-fn": "^2.0.0", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-jasmine2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-jasmine2/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-jasmine2/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-jasmine2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-leak-detector": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "resolve": "^1.20.0", + "resolve.exports": "^1.1.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "dev": true, + "dependencies": { + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.8.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", + "source-map-support": "^0.5.6", + "throat": "^6.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", + "dev": true, + "dependencies": { + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "execa": "^5.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-runtime/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-runtime/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/jest-serializer": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-serializer-vue": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz", + "integrity": "sha512-nK/YIFo6qe3i9Ge+hr3h4PpRehuPPGZFt8LDBdTHYldMb7ZWlkanZS8Ls7D8h6qmQP2lBQVDLP0DKn5bJ9QApQ==", + "dev": true, + "dependencies": { + "pretty": "2.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.2", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.0.0", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^27.5.1", + "semver": "^7.3.2" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/expect": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/jest-message-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^27.5.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-transform-stub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz", + "integrity": "sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==", + "dev": true + }, + "node_modules/jest-util": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^27.5.1", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "devOptional": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-beautify": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "dev": true, + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-beautify/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/js-beautify/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-beautify/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/jsdom/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "devOptional": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "devOptional": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "devOptional": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", + "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.8.0.tgz", + "integrity": "sha512-0Az27jnPR2RgkUoZoLHluM5gg9zHeg7hPsUZESJxcTV8Rs6Fed+Nof7Lb2HmpsE8lN/3YzpU+mvK5exYWSftWw==", + "dev": true, + "dependencies": { + "launch-editor": "^2.8.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "devOptional": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "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" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "devOptional": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "devOptional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "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==", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "devOptional": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "devOptional": true + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "devOptional": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/null-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "devOptional": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "devOptional": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/nwsapi": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "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" + } + }, + "node_modules/object.assign": { + "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", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "devOptional": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "devOptional": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "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==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.0.tgz", + "integrity": "sha512-iPrIh26GMqfpUlMOGyxuDowGmYousTecbTHFwT0xZ1zJvh23oQ+Cj99ZoPQA1TnUPhU6AuRPv6/drkTCJ0VHQA==", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "devOptional": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-types": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", + "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "dev": true, + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" + } + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "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/postcss": { + "version": "8.4.40", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", + "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", + "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", + "dev": true, + "dependencies": { + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress-webpack-plugin": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", + "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", + "dev": true, + "dependencies": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/progress-webpack-plugin/node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "devOptional": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", + "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", + "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "devOptional": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/synckit": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.31.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", + "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "devOptional": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "devOptional": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "devOptional": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "dependencies": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/thread-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/thread-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/throat": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", + "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-jest": { + "version": "27.1.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", + "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^27.0.0", + "json5": "2.x", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "20.x" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@types/jest": "^27.0.0", + "babel-jest": ">=27.0.0 <28", + "jest": "^27.0.0", + "typescript": ">=3.8 <5.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@types/jest": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ts-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "node_modules/tsconfig/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tsconfig/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "dev": true + }, + "node_modules/uid": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", + "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", + "dev": true, + "dependencies": { + "@lukeed/csprng": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/undici-types": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", + "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", + "devOptional": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/universal-cookie": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.2.0.tgz", + "integrity": "sha512-PvcyflJAYACJKr28HABxkGemML5vafHmiL4ICe3e+BEKXRMt0GaFLZhAwgv637kFFnnfiSJ8e6jknrKkMrU+PQ==", + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "devOptional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "devOptional": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", + "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vue": { + "version": "3.4.34", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.34.tgz", + "integrity": "sha512-VZze05HWlA3ItreQ/ka7Sx7PoD0/3St8FEiSlSTVgb6l4hL+RjtP2/8g5WQBzZgyf8WG2f+g1bXzC7zggLhAJA==", + "dependencies": { + "@vue/compiler-dom": "3.4.34", + "@vue/compiler-sfc": "3.4.34", + "@vue/runtime-dom": "3.4.34", + "@vue/server-renderer": "3.4.34", + "@vue/shared": "3.4.34" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-type-helpers": { + "version": "2.0.29", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.29.tgz", + "integrity": "sha512-58i+ZhUAUpwQ+9h5Hck0D+jr1qbYl4voRt5KffBx8qzELViQ4XdT/Tuo+mzq8u63teAG8K0lLaOiL5ofqW38rg==", + "dev": true + }, + "node_modules/vue-dompurify-html": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/vue-dompurify-html/-/vue-dompurify-html-5.1.0.tgz", + "integrity": "sha512-616o2/PBdOLM2bwlRWLdzeEC9NerLkwiudqNgaIJ5vBQWXec+u7Kuzh+45DtQQrids67s4pHnTnJZLVfyPMxbA==", + "dependencies": { + "dompurify": "^3.0.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "node_modules/vue-i18n": { + "version": "9.13.1", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.13.1.tgz", + "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==", + "dependencies": { + "@intlify/core-base": "9.13.1", + "@intlify/shared": "9.13.1", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-loader": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/vue-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vue-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vue-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vue-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/vue-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-router": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.0.tgz", + "integrity": "sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA==", + "dependencies": { + "@vue/devtools-api": "^6.5.1" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "node_modules/vuetify": { + "version": "3.6.13", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.6.13.tgz", + "integrity": "sha512-Gz7jxXAkmff2m6CM0EUWOo/72TM322/3I6aDna++k1nPOW1/hNx4td1MZG4u75fzdn3r+uIe0dbF7SWuhu6DWA==", + "engines": { + "node": "^12.20 || >=14.13" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/johnleider" + }, + "peerDependencies": { + "typescript": ">=4.7", + "vite-plugin-vuetify": ">=1.0.0", + "vue": "^3.3.0", + "vue-i18n": "^9.0.0", + "webpack-plugin-vuetify": ">=2.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vite-plugin-vuetify": { + "optional": true + }, + "vue-i18n": { + "optional": true + }, + "webpack-plugin-vuetify": { + "optional": true + } + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "devOptional": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "5.93.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", + "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", + "devOptional": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-chain/node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-plugin-vuetify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/webpack-plugin-vuetify/-/webpack-plugin-vuetify-2.0.1.tgz", + "integrity": "sha512-vopDoL1Il9lhDReAYdhToMi/OkFqV8BebEEyviZqMwFvQ3XnsRIdPyDDvee336h46QzCg3utp/FL5h2DhqeqAw==", + "devOptional": true, + "dependencies": { + "@vuetify/loader-shared": "^1.7.1", + "decache": "^4.6.0", + "file-loader": "^6.2.0", + "find-cache-dir": "^3.3.2", + "loader-utils": "^2.0.0", + "mkdirp": "^1.0.4", + "null-loader": "^4.0.1", + "upath": "^2.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.2.6", + "vuetify": "^3.0.0-beta.4", + "webpack": "^5.0.0" + } + }, + "node_modules/webpack-plugin-vuetify/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "devOptional": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/webpack-plugin-vuetify/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "devOptional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "devOptional": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "devOptional": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", + "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "lodash": "^4.17.21", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yaml-eslint-parser/node_modules/yaml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/yorkie/node_modules/execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yorkie/node_modules/normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yorkie/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..23a4026 --- /dev/null +++ b/package.json @@ -0,0 +1,68 @@ +{ + "name": "shd-client", + "description": "Schulcloud-Verbund-Software administration interface", + "license": "AGPL-3.0", + "keywords": [ + "vue", + "jest" + ], + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build --mode production", + "test": "npm run test:unit", + "test:unit": "vue-cli-service test:unit", + "test:unit:ci": "npm run test:unit -- --coverage --ci --maxWorkers=4", + "lint": "vue-cli-service lint", + "generate-client:server": "node generate-client.js -c openapitools-for-server.json" + }, + "dependencies": { + "@vueuse/core": "^10.11.0", + "axios": "^1.7.2", + "dayjs": "^1.11.12", + "pinia": "^2.2.0", + "universal-cookie": "^7.2.0", + "vue": "^3.4.34", + "vue-dompurify-html": "^5.1.0", + "vue-i18n": "^9.13.1", + "vue-router": "^4.4.0", + "vuetify": "^3.6.13" + }, + "devDependencies": { + "@golevelup/ts-jest": "^0.5.0", + "@intlify/bundle-utils": "^7.5.1", + "@mdi/js": "^7.4.47", + "@openapitools/openapi-generator-cli": "^2.13.4", + "@pinia/testing": "^0.1.4", + "@types/jest": "^27.5.2", + "@typescript-eslint/eslint-plugin": "^6.13.2", + "@typescript-eslint/parser": "^6.13.2", + "@vue/cli-plugin-babel": "~5.0.8", + "@vue/cli-plugin-eslint": "~5.0.8", + "@vue/cli-plugin-router": "~5.0.8", + "@vue/cli-plugin-typescript": "~5.0.8", + "@vue/cli-plugin-unit-jest": "~5.0.8", + "@vue/cli-service": "^5.0.8", + "@vue/eslint-config-typescript": "^12.0.0", + "@vue/test-utils": "^2.4.6", + "@vue/vue3-jest": "^27.0.0", + "arg": "^5.0.2", + "babel-jest": "^27.1.1", + "eslint": "8.56", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-vue": "^9.27.0", + "eslint-plugin-vuetify": "^2.4.0", + "fishery": "^2.2.2", + "jest": "^27.5.1", + "prettier": "^3.3.3", + "sass": "^1.77.8", + "sass-loader": "^13.3.3", + "ts-jest": "^27.1.5", + "typescript": "^4.9.5", + "webpack-plugin-vuetify": "^2.0.1" + }, + "engines": { + "node": "18", + "npm": ">=9" + } +} diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..64946cd34d23d17a22967c7a32d0fa6ac63dba3a GIT binary patch literal 509 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy=L38~T!Hle|Npmndd_!nSY>Is zNKbF0we@@hgQdE<%Z!cZYnv`MHeR5kvj~Xv^ycg7Ezs1RudO#04xa9f{+D?fVmnz8+}1OED7=pW?*FJ;N<2N5EPM+RMyn7u=5BC z4ofI5tEjH2tMBfeK4b2J#Va>#-nw)5-hF4zUbuAm%C+nFpFV%_^6mQ%pT2zm@$>iJ zf9%WpwSeZ$^mK6yk&wK5kd^O{0|U!}qg!`G7q&mj%l-a8U#W#bwfqkAjDz#N%%^XU zHGkSP$L!H%1(umF=IJNPyZp1X&k_iIkzOl?GDjQ&vsZ)`Y@ljA}u6xfyYvA9!S-FV$pl1E$y$pAr lo; + +
+
+
+
+ +
+

New Superhero-Dashboard

+
+ +
+
+ +
+ +
+
+ + + diff --git a/src/assets/README.md b/src/assets/README.md new file mode 100644 index 0000000..2ebbc4a --- /dev/null +++ b/src/assets/README.md @@ -0,0 +1,4 @@ +# Assets + +- All used fonts should be placed inside the `/fonts` folder. +- All image files should be placed inside the `/img` folder diff --git a/src/assets/cloud.svg b/src/assets/cloud.svg new file mode 100644 index 0000000..dbf8f86 --- /dev/null +++ b/src/assets/cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/fonts/PT_Sans-Narrow-Web-Bold.eot b/src/assets/fonts/PT_Sans-Narrow-Web-Bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..49cd919c4dcddedbe1243ffc2039d5ed7a778400 GIT binary patch literal 56869 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 \ No newline at end of file diff --git a/src/assets/fonts/PT_Sans-Narrow-Web-Bold.ttf b/src/assets/fonts/PT_Sans-Narrow-Web-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..309407fa5b76ba7664b61ebef5782e64ffc0eb83 GIT binary patch literal 304282 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%0D1*o4^6RMzN{v+w`t;1As^Mu5jj*HJy#Hjr*jNQ$ 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

(H0T(uc%e8vOFxJHdtXo2?vooZlvL*w+ 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 literal 0 HcmV?d00001 diff --git a/src/assets/fonts/PT_Sans-Narrow-Web-Regular.eot b/src/assets/fonts/PT_Sans-Narrow-Web-Regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..89c550195bceffe8f6a448f91894a6cb9621d857 GIT binary patch literal 38000 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

XV zs8V(HQ=lcz)MeA9j)G}jy+rJ;Ns$MOv)s7Ur6n0TxP#`qZz`cNrx%GP`kJQ4R$hJd zg%<#@0Pu3L-8OwHLRXz-ss)|Z_vDOCv8q5!J8J+x7teVGLB;!%q%d}DVV%wIskVv; zhm)tNmJCUO+c7nVoTtjgdK@Aq+*3vmhGBwhYEGHM6-LH%<^Z68Ix3QaJ8?1q5q|^n zhc*j)Jed67wD1k#6=9(|j(& z)}{`Cuo&TiVE~_nwM-p7q8H%AaCc(!`lT?BuL?(8J59o#^zQf9FQqm(tT0mGfIkGF zcYM9eN)flC+=hZTFCyUzS82)e<9Wefb^<%sR&a+v1H;mt`8WWz92vm$TO!*H;E9wq zrA=VK1IW06T!Vq6@M~0)fF1dHyb*#VgySpbNC#e)6i;-0z0e}B54tHMX>ZF7Yy$<_ zY)=KiQkTU9`RLCO^2e1eWLeW zPhG8uCl`4H3()EAX=95hyw@DGLJ(qdJ`+JZ#H zd&_XsT01#B<#VbMPGNwSi)e0|lP3hexdM(iw%Q}cof`h%5(2)&udrElijgM*B~-0n z3VCw!m%he3nDzo|!7d|LUDzCmW1M2?LsH< z!sN1sUz9HaP$YlB?JC}sH7V&W4pz*!*;2Sm#Gp0ytH`fFo{rNGsynG+`QE{l&Yg%bid4Sn3$zz+s6{@ zPVk@iM|xMvCnp^v?KD)2(=s6-#nm)T`YR=xZkzxI0IDi$cM_=c#vDuDdwqt&nWj{f ztTk#{8_%UYqMN16Jy#m3cQwK#qJJroFNmF-uw&qTf+PUgK&UM8=U#X)B_!pB9|Q#L z*w2UN3+@OjObck!iJGTy0gx>ub4|#NRbCd1a4jO-y@&wERL=9H^E@c_!=SN1n=H*x zDh(s`!z6-3IPe9*?_h8H3S6_>@rJE^!+A?oE67#20?ZkzVKLsm`%fXR61Y4lS9}A= zgZTa!t_T=JvtLkiAbA!cD=&f!WJ`pQ0*XogKq^vC>iG9iNcjybyi+ntT$FqD9ey4* hVB#U>9_IHH*~@TdPf_S@O~}AXXAHSWc~?DCdVul`Df|Ec literal 0 HcmV?d00001 diff --git a/src/assets/fonts/PT_Sans-Narrow-Web-Regular.svg b/src/assets/fonts/PT_Sans-Narrow-Web-Regular.svg new file mode 100644 index 0000000..a84c26b --- /dev/null +++ b/src/assets/fonts/PT_Sans-Narrow-Web-Regular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/fonts/PT_Sans-Narrow-Web-Regular.ttf b/src/assets/fonts/PT_Sans-Narrow-Web-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4d9acaf3cac7acc1371d7d956d9cee6182407c83 GIT binary patch literal 222357 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�L+#A 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

#zp?6z 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 literal 0 HcmV?d00001 diff --git a/src/assets/fonts/PT_Sans-Narrow-Web-Regular.woff2 b/src/assets/fonts/PT_Sans-Narrow-Web-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..0752a5785cb0d2c75cbd1a1be297df224d9b3dc6 GIT binary patch literal 36268 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 gDH%s_foRKU*cF{=NS88e$Z4rK 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%0AWi11OH#k1^_7k z2QFY8CH+6@e<=)r20-UO2W@~QzzyL2p9KjZ1#kzr0Brulv;aMTEx_wP-tj-q?LR+m z06T#5Kj8uB|2I+x$N^OT^CSHKqEP;?7yy8jw!Fswn)3fbSRhFWKoAQcNC#kc!v1<0 zKW(w4KjWb66%-gstt)KB%28sYkUsW~usj@VsK(1S|KWtxmxllOp7r>oiiUnCoUGVb z$*F_qF#&1Rxw03pmd+uDP-G_^P~vdIprnt3T>lP zLn%%qd&Qiqr0KM4h8lgLAr7SIo11V@(Zmov*tBTTy zGKIIlGVc(tWYYKk(wt3LRNv*?w|veK~ByZ+Axit<48Q5$C96N(lcu~?JfPP=qf9{GO--?O*?xN)mMbH zHyRj}lgv>}c9WOLVCMlvLoUkY!~4Z*dIwv;*1TU4|P8-3R^lFUe3bN1r9IP3ef?&lXEH z+;tyAx0!?|J;fHQFMoIZi^w!AD79x5-lsmy<7)gw4enElCf_mLmU4}g6A0fsNY-EZ zUHV?Glo}R}JCK?j%j2tbVi5l|&srDpeO_JDNOYYExXrGp+AuPwBdo$?F&S1zB8NM= zs_GVU<5*O#*pE*7l2T;qG%L(<6K#P0A(Ufbk& z*&Zh1C(i7SlO%GDcc5@rOt@i?`6i?RPa7K5`4zi<%@xPmq2X4^ghLFD+`^Hb$F%A_ z!&ZM^+7yzsVL9^^dW^sdQ(kzM^cc&v(W>zkqhck}pg7|JlY%7y`PleC;o{^0zM-r| z!GeV^UX9N{Ds_@;Qm0yKe9b~lOW1o-9d72DgFtF&?{H<*jxn`d)?_g}g+@-neUttvb5IR&!7x-aLqb!7B@MYssy^%l*Obi z#|LE8@g7Z&2NUv3w=(PxTEKDg6?Y)#yf6(i_zxfJ=!T{1Pne~>TNJkvfHGRy|o<|#GNWr z=(P&_o?kxyMD*0S0yBJ)JQmC)niqT;{l?#=TAXeSSMTng?ft&!`P+ECIlH5LrhHS^ zE*I`ymF;q;?UuHkD%SX|8?$OE~gsCUwo$RU2aR; z1W(Y~fqKTr`AW|q((^Btnz?yJq(lYkHAE9)#9XNo24PG{LRe7%H-{+Ig>Y2lg=HY* zgBlN$3e>hPa!2JMO)36OG7KUb4TmX?Z1(6zgM8mpoaH&KR6O1z;h`)&Ol^m`kTF&P znf1nL5$cHbXf+v+MveeSz9X{{!{9x^5Xd7Hi@a-LEWiw90yi_kAyO8;wVXYvN5DFo z5_6nLhbAQII+836H=B}u?nv+P=m!MizhEeAFDP`$18VtYBswhh^LLY4SHE%jf0VHj zE1IaFdnFRtxMnzhH%jmRtlxOB4|+o*@^>&s{>V#Eu5YIUaJ3IOAW5CiT7Y2;YexNl zI4>>Svs=K%FmyXW3P3I&E-vyfV|N6+IRN8^uXkvt?%$18%tyv}fmtz4{}|8Vtd$yV zwx@~4N2bcVOYTEg?&C4iN1-Hzhyew1^Qd$$w=K5^!`g+f!BM=TPuQp?y?j#(S4%E^ z-ep|N%y#ehYmU?W+@<#V5f%rt)AAHQ^513*RYtg^t{`rwc)++&t+wpg0ljf>gd(+$ zbkB;|rU#S`{v-mbBnF={?1f>!9`!IjHUhx*mC@>tb zj4Yk46E4!6qtE!{!B32(Ksf0*{EjVxsUbo7HOV8SBVs;6sINlwCIRrV5-HkzLfLs%?ONMdXzTgB<4)8-t;K)^AQmHt_K9ko`sG4`&E6R8|k4RuD8 zNh#kI8Z;x45~=!enCXL4==3cqZVnb6FM&s!d52|mLv^P8FiLQ}Pr_BXXoCdd%_dJV znZ-d3GxF`S-p&ZTifDAqcEukHDA6w+-G)9G`IL~~nxi~w?uLL&dFx1=^(mX*b#VW9 za|i5(*umM5Y)b3x#pX100fKy@C4HlzMg&!fQ8|dC%HxC5#D}o{IcSHDXNaNI%xxv<0kGSI9iQa5-iNr$MQon_fV*B3)!XoAt6D#aOQ6GF*TN zK}Vy9XF{~0-SNz=oe^N{_#+JJtze#|hl_&H0SF&~6i-wEtjMNVHc1rBq=w%0vl#{E z?+tIul87o0_#Fvfo+MLIzKZROs7HrGISDQ;+KZIx*nWKGjDsxCGvPR=mbgTbm9W&6 zjq6;>$h;t-#9Z66WJ5ZPmFtq3J0T+Z(n=KqrO6ZiA#L#}rEXUAIJ8nv9F ziK$tI4W*vDqqk{0b3RKF%sEZhu=fp-|H}R*O|B) zlPklwgn_g>6E81-bb)GK-Qv13Zn?j7@@XMI%-zd@)<^$xWniZPBDdx_PdSTpeiLw3 zeu=TKX{=Sh%@frL`XwH{YX|K#RKja%#Ufa`7`N+*8B``)!7Nh)tZ;K z#Vso+IYC!8@~tEpf7!Gcrn#o(_U&&Vh}1@5MhF}Ct~yl6g<7#`r;JlL>_-6CG@{oN zu@Y%KT$m8Tm>D)Dxkb){_vp;DWGPt+zNuub*sRwiX{wHfY9He0E2(GLf$Xw(w~TC- zOpGi@1doN;-V++<7k%CG#0gp9}Q8^aZq^nB=Yo?@@9sG$@ryVx55DB3ljI}NDQ0X!dJ_<1av<^%OHdGk>H zs;J5c>(F=v+&@j9CM|jvWmm$RS6|0vbks1DSE`J^rvKVkX1SMDv-~fKGBxIlT2)#5 zv9tuh_zu0N00MGcELOgqua5^AXaFFL2*bAF9I27Syeygl&O)ixjACuE2jYbD*3s6; zNXd&*@Bvz>IDC>O`j8@gTEFqTp>yGKPdQU0mkfyY9%hoI zxL2+#$r_nhe(6M^%Lk)l17o%$H|PE-qH6L%}mBPLIBgkRr{*|HnF0kn|7>mFX zDN=4++}g+!15GE|B1l&0CmnTtycaK5r$S>{xGJu)&qLkz3Fd97VIKrS3WaS^YsdrV zd_&L==%`6p7?ZBSFnTokn%#p2Kr0lAU8i<~!Rx8?Ocpgz=P4J!Xmqj8a^98-&+d&pF+q&ySQ2KkhJs!kBu zxSa`(0_hYNIYP)-c!>^Mwv`cYTg@Eh^W9QC4CE4t6_OB=4v}N}1-Nhs5G>R3Xw&hJ z&t9@PQiiw?Gr+jLmpW9Zq?a0G2gdheuTy@Nt-#)SVD>;JuranFII7KqxWJ-nXn(ej7Cm7O=S{~>-4YXz~# zR*&9Fn)d8I8H*B5Of*Rc`E0omCx>^|zHB!y;Y3v@SJl1NwU>KRY+oj{PO&!8B$^oD z8sAY={Mtzkz~b+xLCewo^TFR^D7+ljG0q2ny0nghmxFJ&r>JCaaigBo70wnXy$B@L zRyHMVu~>0lj9Bt!zr+Z|z>Af9Q#{KRAM0FgB<|Vwkd~W+d(y-DkS#f{INx;nW7OJg z@-a(fL*z`*yfP#6C`k5B_o!amZdLs^R`SNVBcqJhNya#hT;bH&b{mQKg+x55f&LER z>~aHIA1KAysv1YV7{QyKW0IqhpoC`u6xv~Icjnj}ACj!N$ayCp%g3P45=_Pl=H%v@ zRa&OM)Ez*y{vK6Gs-=49yXR0qO_c~*L4B20GuUlZRS?*v^U!rNR*gui{AxlFV`xQi zEKVkL^5dV<2gY^7j)DBr@32UPdC2V=!3TGxhq`4oANDj=<4z>8N%y%FH< zK2uRGbFNShXAphIXE-41{7s5w+PP+^XC26WmE8JAv5cB}Y)I?f+cr?}Fao@jQdX2e z&lz5eX!ML^{hm7c@h5M&&lU|(1(Ejlo|b7rd!a4o4{+h)s*R2aW+N+@77qN2g1(3Y zq=Z4`q<*Ik^Wm%K(%{k9c;>B8qd~*0%KG}2Qmi1$C8ve9YAdSwPsSqgCYoOSDA8`5 zf4N)UfG;~*02OW;s>yB~L0?@UtL0y1%G2QG$iKkV493&BM<~Ld#^pk2jNw5exVWP# z8D2i*^YJ@_nRT^Al`brYo_AKrUB%%cxhcC?+XtxK9T8f8cVXbY1#t3~SO%o1qAQzD zC)eWC9fdf(TIu>z2LJv8CmXH+9U7yX@zrojD|v3 z3l0gA5*$T|@O2-+R$Mud7|3LD^KvEO3`ey!eGBLxL5#rOg`+DBAB>{hFGj6aD~-Ln zRwRllBMj1&5$@fT^@*c-^>RP1vo-Qx>U@lgS);pZvjz3EsbB|p;;=p1I1#vL^B%CC zDtergRjJ>5>G&0weG_z+_vQVSa(=JJ;N-(qY?>JP-$|uXZnS|~&T{@so`U2273wkY zEw58rL3GI@_D2iq)^pjBA34MZ<0pMS@RCrj01}@!Qb}6&d2E!->XXmt{M|A>b7N4? z*?Fw{nB42~g8CA^X&a*{ebBWH}g2&Xp% z95OjIe^ZzOpLT%X#e4?o#W(`CI_6FM#eSTG7B0f*KrwnFH~=qp!)pMkC`0L!ne#~b zC{3I>PQRNxzj9)NM6^u1t5@Gz%!2QNXVV-nMF#SO?djY~FxsBi{7x;u?=r`0%r_z( zEiZgv{L@zWa$8os*Vi8uLjJ*of&S^o%1J@wjaH+9mVIZzbx z8`Bj^3obbAcI1U^_&zFh(~46}vYw`kQ;6chP0E37)|=;`Pw2l!2eA&B;^ zLMDW=>fCF$Vohbwq4uJl$Dh)*vuO?FQ!M0xCMls#TjQBAz|F28`xdPn7b4Wvq|~cEw9v! zdu`{ETG_col}8UpAOnTM>IqUU3V@LNQlEO*KJ~x%YxOH_afuVkZFNB zgzT$!g5lP6grv1?^pYZkSf_HUe_?u19~`9Z*Fue8o?*p`E!buW7LjTi^-vVF2w_mO zWtM}aeEi`3Hn8_UG-F1mX;LCq?0ofq+^5LB(p@;c>2X>D)=<>6sbq_fP$g3mKapiy zRN6Lmy%V%#BuL_sWa>O*bvw$K%}6W?7NNk?C}P1XprMh5YOnn4?r9kx$VVgLfe)fc zvX2pKIr?#&%ZA>HI~r@ks#zAqA^6VCAz&1wtGFdSSC2%rQx5zjStSQ~yn?lP-GbRY zbsmf-GhwZqCf?)(s3idKGxBcWma^iz(#-x3?_t_n1 zHH<2{Ve?;7T4kExG8i=enaLR+G>a>SpUdhrA85G7gL8-byE|BP#=D%=M)R#7=n zVvOhzt^GZsM||-YmZAdve36QeuYMdSEqfW=|_asfl>lPT;qtsNw zE}geD+z313fxs{NU7}^Jiid}Z)m#)bcxdcKOUAs8j9;3PTPq*m-x5CAR@zZz8nH#E zErb+*!)4VJWef;3-CW8#pnR0yW)$!!X~a=uqlQeAR&pk0iE&Hpk<<3u7=Um5C!z!f zS8%?;rIBvTF2!ok#S8W{2HvHOE9Z?B=}-vfGV^XuvW1V}aEMG}jUoijma0g}U`Al+ zo0zv-M&Ih?JJR_bKGg;DbRI_e{IG?Wo5$N;#**bcGz(ioK^30Mbig@PJ1G(`73Ckm z?>yLkZJy7Ih}ZM{yLW(BC@ld`jlG9z>h_SxoC=-?k%LHv6tj*QUUnS3g1Wunc7v$nfT$A{%XMFaKmsQ1urh0MP*%J#~}YWFKIT|NK2lzm03X=WtAeYQ0fTpnM>m*7Z0c6 zU=cS_96qMzTG=RdV_nJ+6xJrGdD~PLQi<&S4MW8kasPMENt1WqOR=)x7inL0N#{o! zJmrZ7&m@Q`PUrfff)UwJ*kNJt{0IF$-l&Tp#o>)$DX^Bo+5B5HQiMGX^13~r7!C*r z&d7_YCVkvP^6R50ut+Uo-`@b*RTb-K@P%juzqHi-Hk?f^S(Q$bGbIfPIrB3nUxd!9 zqzVJ$Yfk~@6O#LHW{phadj|uW?gLAjbp!LyYM%4P8RM~b|KKdmP+m4aJvi%!z1 zEK)RvP3orX`2wNV7uD~qru3AvX!#=3#Y&7ph<8Y1_tOTA(n}N4>)!FCwzk7R?1XN9 zxmn2{W|y-ce7QFJg7uq_#21Ai#cCf?nzgae+{zo0uh~n;U3%wCP$jgCi<+wjJd$0q z9KN0Xy;*i|G>|?7JmcIUB42?y6<5{4Ng!1<;7!J&vlB7EX34cmDM z3h5A5U73_SJEdbPJHI{+{$|<~n$&q?EG_}dJUyyqK14FKZgrX1*y~=1Di?80Tj~|t zae^Z^>Yom#?{F?yO-z8vCzavgt1oJ56J8aPB9ZbjAhYN)4L{oXHFzV9qX=c<1S_@R zn2E)tr%e~E!`P&!*I2WBw9z?BHNnR`;yB&Oy(9-wY16QK1`pg+5`ix#e2a3rCJV>E z8c^V3%E)P$30|1(>*KGf+S&1sCj}x5aDMoKl_#AR2RtiaIM(U;;~QPLJS}I-FyeUt zT)imG5L*{Od1Pq3gRu&uWL?n?6>2F?G))%-8*9xZUyX4kS?meXM&3x|O8pE^1)YqO z;&^udhauOCKOQdo=FsmOU@pu(_P$d?k!80N3OF7U_c^uyn@R{P2UaWt;l`}0={=ob zdk8=n&bCF^Afa=S@=#4@>?$%!u|p0kw1$W_NO~@iwP7O9tB>ZOFOkb58V4E@Z`o^= z*6Hzz?Y?o@E4#fV8B+I?nnJPC_-Xp<)|^ck%j_T+ zYmV@UF6^0&zK>+=7tFi`U=U4OeE|}-j=Wqo*o9ry3p1G2>%eH6@@QsHgMXjfQPw`5 zr{o~p&EuQLo9Q)=VMt3Ak`cVtn4~KhJD43_6L>NKNJCUEz3XZ9cqDtoJ0yuTw;ER3 zUSU3UT%7^ZW=}_+J)q%wL;4n%Kl*HK^u1E^Q6%@DjYjfa7Lpg@l6SJt)t$4Vc8RwQ zzOAfth+~MrZB}Sc`wKS6ixb;Oy6hHF+>2mM}#q0r6V> zyB=68b(D3Q=>B-rqb4&$6?1YK`M#aE=1-(HCujqtWoluxOFYxJ%G8}6Vc(?dI$_xt zm3}tr>-Y^rVqbn6I(9kFGTCkNpV+(e&oYMx*Qa>Gz1n`lYLmObLPT6H{RVPD%V+Q# z>gT5nqk0)&clkDd3ncy>1S7aCyKw(kzS855nGIq_GW(?)i*}3zUvRAvN)*bL%&x6- zR?FcRHK`W_GrB~uywtm*W1c%<$B;$Irp}*88>%))EHrn1X(5oSi3ML=v0y^exgBpG zL_7|ELow{@f0E4%9E7|4`QE`NJZ~CD{@Wy*vedKBubL+_Fm=;N{~N!M0k+Sgj3hGe zrHWAH<8_J9;{|d0kM&&?PWN29SjuX>$r-udh9$IS^>S)qL_cMK5Sc{OUm$3iS0$2} z7t(ljaClv=4b}XN-i6+B1N|}vQ|YhpV~<2g#b{SR{yy)-%JIa=wPzlJZSk2tz`#BS z%FR~B9(vGknd^9AS-bd+L|@xMPAi}lH1Nxi| z%6y&|Qj#s$(WumTDzqQXE+`)*LkhL;?=K!C7nQp<#tfHKxV9uBiV9CUVe{Z3PSg%E z`DEFChK<9mq{?0yvFGG()&+L?@!rZ9GT}7utYinMu%D#HuEf79?it+hc^v*-NeMmu zoW~#Qa9t4g&RWqO_48y{AZ$xNwt-``@XaaAQVXp-$DlhHJG zKBpTbxr2l{J-hRaH~7NLNufVhGyJ70Hl`|&6RTu*phOqjta|ImwnKTF4Mj#I|0z{S zlZW49BG+Gf3f!ZoOjT&!JVDd4h!~Dp-S+4&)0RK5Y80k7aIU%}&zzJhXVgvxdRwFx zlxB$%@$Un%&dcaGV=x@#+=oO&om^IGB#Wf^i^N#UUv*T?*c%}lu>MTQI7DlY!qkEl3=Fpm!Z9%!tUdbjUXo+;lfeZ2xYb%wy)YPFvoDz` zN*qr7MX&sw0SUD`gc*^^-zLt~3?rP~Wl8qHkN22XSk@xrn@N-(YFSNbMOBp!<6pbp(vsWBF?nuGEb6T$B{Glm755tt7!BKVd`kUicsrR zY{BNF-X5u8eQSoCi2Kxs@U>BuJj^|?mB zraVqsy`-EMV;13G)BaS}pMNAM$DYT%0x=`BHR;i?>V{)R0^SE2o_}wJ-6NJ0{mF%y z$JT(Tj4Y+@#0hikr*55nw}Z$euP75Gs>vNI5SYFniGwW+sj=7-?*8Fo-*@K zBXu4Ry{I!zuec{W23j~bIw2`!^?9g|!sas=Erj;H5bKM@Uu1oof z7Nh0?ym0@r2qznXnmG8C3?d4(xCNfWcITZaN|?L5eaDjg+6#E}I=Okw%2o$iOo*ND zjFRk6^&0wsW=^*4VOWuN&(zKB9Kz4|dZ8*>&h&pBt&!n&qt@UNC6*f%BzYNMWp`y(gTd z?e5nc^r;l{QC7_7o$noI34gv!IhkB{!(y2tm5LT^d#e+|^- z5oo*a;2ay1)Yz?7aErtPQZBaP9;!Znb$eiP&`$gM`!-R(nZ38 zcqz?`x}s}21icNU*hDS9DN)>J(=(KaZK3dOF^m4|t%^~S z{XW8Ok6ziY^U>Smn*MJ|n0Hq;IqQtHDUR3{8|is7W8vUJ9j?V$tH1rTMYdxbMJk({ z%`j{8$A>YA#{1{f+jGX{jtqg6Wi4Q5Afdh_X$Liey|Zpg3GEFJVMC0sV=6@`bF6zr0cP$y4wS?SQ~WE>_7EaZU_@mzGSFQAI}!$|tEA zhD^HO3x`V!&g_{oU$_N-t9Nms@Xa25I*Y-i_9&R^#50r>=uncAB;1!2BOULz%lyaW zWnHs~b#0rGwsFEP>c^^@qm(TvnAAD~01Gv?^O$4}q2C|T5>h&!tkP*=%C|tZVEo-f znUO!j@z%{)o#>-q;K9y6bly_?QB~MZNE9?ABP#3-UB!b@x8pk)lhE@Z#Vsg%m6-Vt z$N=K`Rv1uirG(JFH7xgKAa8}raK(?QIuOE5ftR#719-yzE4Iyjhh3<`07l%-M2yMZ zvfexOYY_9ixP*n8|MoXvYq6H56*Iq#W@p8%CN(p^Dh-SIGV0g}KBJ(Jv;}wr1AOsc z5m=neP`{AP=6mw56+uy^6eL3Y`R_fJZ&9Zo{kWY+{>pT1rs35dG}=heG*k+9R6nnY z?_65tA&*l_vg47N(&dAHK}pf;pZ7&FBCVYMUi7N|%&z=SvI)EBu^_k1A=AB<#`6U& zsH63cI_5f7I?${&P$kZF5N|LFBzh<4uuv5q3^tkoXLdc%K(w7)F;a-66$+?8RC;63 zjy%fh0l4$}wLD8JBUi0@1Kx8U1?0o5Gv36BKYj|K<}D72e43sJ4I-`{d8>pDL6Erk zmZk(Dql> zKJa%MY<2l4aYCBUYN#SH8>_CD20r+7wLh6szy9$!3! zAjZGpgim{pxO|WPsFf1tp|0IX!hgx0Qq8dvlo*M@Au^M*F>CDS=}j6jAxhAskwdYw{W7xm5q_td)*XuZhoKgHN zOm2Q4nCf8ZBkSJ}A|n4g#^{StBLR(QrW(eeOW`9snyB2&?D-6j(E_lHiZp1dF;_6O zq*tyw;;`d$GEI7wNA=iK_V>8Cq!ZpIiQl%lTK?ZV>n1I>>y-`!f$$)LhKGdkKUX2{J zCKs%vnf!Be>=Or9VE2JepSaSkQ)+OGzYojyF1=a$D@W<9O{2L3toLeH3niPDpFcnP6;uIRY#;4948cnt@k^56 zD16Ax%)Io#d$~sB3x;+ZR^FSD-1y8=DVYRi`0J(F-S^QJ&zWM7Q`l8LYS{TMe)H_e zi;vDB$_E0>o*z(M6c#nOKsd5Bp;3F7PymA9-X6?A_?bNW;grVGU;{r@#r8MmKqkZwe zDtjKyC1d{E^{$+J*AAY({Po3Rp`+NpUy<-%h?ChE7kj@n$&7oXuw*-i#qu?jK%O;X zD_2nFN~CDO$AfB)>DtN(IF_BFiW{Yof93d*G%#A0qX5-bFA{VHf$hlEt$jg+4=xvr zxt`2;D5OFM>eYIjjTe4lkfuZ5%OlbdvQ6ZG&a#;+34Kv9Habn_Tg}(A z$;9+nSMIGEF!D=E*O^()*=B;vG=J=D2z1q#?#zc0ca%2@dVD>T8WDd8KhDX(v=sPy z>?S!P2cIO4LseiF({H}QJQwRw4HpuR(ITeMex%`i>(D!<#t*fh>EE&--Z(< zy=p|MD7$?;@^xEt@P#Ux8ow@JdG-jWG4~1?TF7u!h3FdVve9A!Hjc7p(Bw#j>kPmx zN_^sm&qZPE%b4^dlq>)8oWF0x_=WhY&>g(}+UrfP#y7|ch?wzyxqo)JLz&9cx7Y0f zrO)d_cfMpMRH>;ci=nP9Jsf`3#OK#Mzto-?>(}`WL&lgQyg|T#hoJ!ZuV*Hw$pGcojJG1&~6BNR-HXdBQ z%25+i$hvl}|LI`TV+n62I0Q(!8*6`{80MT;GwiM%QjH&oe`2WH{%Fjqa)Gw=>fjmBG9V=vS13`m^I;r`3E%^chQhs) zNf)?tK2}uwj?@kb`-Gxz1huV#e|Uz~(|KcNvQ#bI5QNj4Gn|YXxpsXXglNB z9GJ)e*gUj8D_-r9irJ~VwpwAe++UE}bWE}=_a*2|3Dph4g}Rb*Gcq8iy;ju76bWAm zGXUiD&FG+EI3D?T;asJ_S>)D3496HZc<(II&r<#kw&pU$d$8*gNU#TO@E+nzX^{itmzH(Bp zX0+sS;XRR!xyoE9HVi|D3q=X2rUhQ_qg+RyjSuUV+NN+bafagM*^@0sBkIZLw+JLr zzV&1&0C&v_lLr;`&p@Yjn7yn`LA3#c5K(MFe^z&Ic$Z&IA_0Q0b{M;MLx>ta`v(s? zu@oauKJJB|$z=TzQFvit9IGbJdLG&L?T$~I4N{w%7ZaP(aQ&k0iqG5ZZZCMCWmnvg z{(0_9g!~JlC&|mN0iT&|7=Y~Pjp@4}kxo*RN5Q*{E>4{C+_cXF*QaY{Om|6l1>Zld*#dft- z@SxG&-E3)Xwy64jqN%4K&0Mi(I0Vk{D$L|OtAOb4D@UDCvh%&*4M2axkg8}hOqL2R zIk28uB#>Gw<})Sd_hsGeP$0+Dk6qaxLtV*v!BB6w4Yk0tf6KHVa9tmsrrR~C*Au)d z3TDM;jab`)9lauV9<``0>90qa$kpE6DZn^ELTHnQcBM-g0N{zKI4cMTK+@o?Abu!R zVF)h)d|u*^eM(zgnrSqXSC+Iz}SVAzl&rDj?N%wL2~^;F>j6QtOy&SU9Y zx3Dotsn=wtPAlzWlMp>d;&fi-JkPpn2%t!F=+F|Vx#!_6) z*_C$bk{QpY)nJ&L{OURMxa7E$ux%&UOU1odjQ}!(pE~VafAV*OeS^SXx_mxvfVG{p zGS`8wx{hRMFmXD5P%$rcf48ENqGd}HZ zfqa7u=+mnITQ3I1|J(_RWwQ~d)<3E}$qZG{^rv`(Ye;nPp`#5(|-Fo zZ(Stg5t~|W?NE(2lkkKyib>{3${3Hej=^D}%Tr9%u6%}pf<^3XUnCZy%^W5~0$g=M zDT&@UhRo~bRlr$OD=4{++W;K{d~)@$#|NgP&Sy}$N_Cl|*Y2EYMt9Uka&9R7%I;9F zT1hW}uQvn+v>}hlFkyAK>S0~m7>`r7WO~Pjj&>kS)+^CsJ4&IxZ64EoQhGkI${A zFs`{ZCH>L*fV2r?%u$y8G#Z>H1N0teEc1zkT0iUH7K`rtG~HngJmg8mFMc{=#;YEJ zraC)cx1f49+N#VO&G!O9mN$}2?JoFx+pY zG%$5Ab_YOolm1f^q^YwE+k6GLtEOdmI|}6rsh59z!%~5CqK5%PX-q}#U_KwxW=cV6 zoJb@1r7R+diI{Iyvctr=+^S50d9!i)I`r-`F&RjPV$%m+`SCRlBk#IBydCr0tYIA( zp&cr4=JlvPB;H|`T6T$LQ}v69s?@T8I61ejr;k!g24bYYJ-xI7bEb7h)Mbk`q}5TKs?G!SCB))9NS52LD|nTU;8lIg~T1$-7mSBT(1Dt}sZ3 zz-s&dgXPHXO`Ji$In*dK>v-p+(2{Nt)8*_U*XUAQ|7HP6Yo8tL(7-%0Jl*3T0+?^*Rte zs~~+7V_bmZ21sAEB{WCJMs{oc_=|PQ0&#>+Iev?>Qnk8!Rj#FSEvV0;VxbMDK=x2) zk4?3jRhax?6adYpx(k+(yhOW1eT8-#$~A-Y@~-IhCCi50E9SWNh{)iHk~c&rO|(6) zqGu!406oD*vE;glfD^ZDt43Q`!Y!{z)V%v-?9>H(8HBfif8;1oG!!JQ+M1uHeZOb! zF7T4fmr}7A73z7=J}dlkWwOZNKje~*@yx@~OQ zhN1J4CWf+Mpz_1UP3<$Ke89_qk`QJ0Jh9-ng@fkxoD?ef87Iw~X`2QqWrJ_?=2~5+ zvZni_h-klA!ns~h0y^et1q`#d(+nebzgLFW^*}lmlRPE7$&A36J>f9;ER-rg%WQAT zSqZ3+;$@*D!WP!iR?&g5M3&Ms^9~!d9hl&REN-lGo=Rr4wS^S-q=6H0LaDj9Ni@{8 zXDekME@u#+=4oAd@UQYEcwXi8SHZ55ya+4_U4-fy)9sXS8iIMN%rtTD&`s6A^1nE{hpC6Gh+2}doWAmT zqU3x&r1JT*N9ZUeRhJ5jkIe%p3u6mz?HXnWVxB+s702b`Q#;b|8{- z4SrfZVEyG_qdVQ0#w@zk3|8r(8w>92nJhIEDxfyCKb3i5{OO2g^#`6*VtZ(Qjo)O7 zuJ(157@xQsr*HYw?8sklN`-V<-gKv6t-HC&)=!8KQk_NN1Z7o3GD#jT--+MQ_T};n z!NUhR*$iEelTk!)v@<+yMDwq3I}3owv_f#&zZ@GFR2QacC54@zF>vFB=cu5;h`~1N zFP!*H3REhBay?P5kK=|gDS_XpCxxP@5!OU+1NTszCMlf~6C&ff!_buLxiS%dm6qb< zM*klGEkM%0jGlwnf#g2|Q|r!^^|DCc%y@VZvFl`A1XL_T{-bZwNlYJa-bsz5c9WKi zPGLL^5h3?71yq}rE&Xk;wKu7G(updQX(~J@r#|{Xg*I`b8zKse5s<%$`3XtOD04Wxm?0*C zWgw4AVLdfHIU5AxFUMeqINPR*oj)1}7>vZ={?HcmFul0BP`f#*h=>ah=SH$D^s93D6f2Q!TV zXJ!o{2#~^uWx3v`N{k)M$R=h+U}awS03~RVrje%+6G+qKcN}bRU_>Iz%CIa-uLEF1 zL_=QXW|}028dNqml}-|eNFz~#c<|D{0ViX2MA%fJ4SM#BY%muG_OOdCgUu5xJ8q^9 zV|wu*sw+*s;|^-ZXd=JYtYiqTvdyPm(cp7W$8<~q6G^~>JM0XFrj$Du8dll9!$}(t z!GmM{LKTr`N^rVELIpn?zu`II(6AVdd*DnYSt22L2ZE3joiXR(6k5qJ^au1eJTxvu z#A6S-fZf$$7yp)wjskmbJWS%`a5g=mPiWts!e>XuJcu>EAab%^oswb|LG{q(+*5e= z9LXxpM3uLi6wL`?>iRaU#U!Yp#LhoVgmns{+7Xc;mGndPSyKt+U3is1adOhbAMOz% zY1pOHX5r0-9>lRK?J9!FDMx7e380h=1ZI{@5pf$jrRZf#+L9kQsguBM#XC?wRy{_+(3)Jf!9U?j=Td!fFX`cwYAdDAYmiqMnsDC$it@`4# zDjz=WMr}7w*~Fs}27XgtqsZ3V^j(!R-@JHW>L^dJp$7I?MIaTtgL+P(7GKNDmf8Fo zfRI5tfrBP{tHn_;H7+7Wjln5QjzG2HaBFL2@7yUoT+T*gtZSjd!@4yI%x3D^GRXi^ znt_Vn##xsY6Ysn>D=Z7Ufpn42oq=ezkK~X48sM2%0_0&NSg`K#8UZ_iFJK_3*AhKC z%KQ}t&ICBM9V>?eRQ5{j@EnT5TgvAj@CD)c@|3F0#9_w+R8(kV2a9k)d}VpOH)y{V72t{8=U%wziP# zQXid#aQIyTF5tH2Qd~xBsN)%$lBUGr$xMMDMY!J~c-e50dJUUm30#NUSpMR96+aPU| z?C8LKiBzjzAc!-S%;Q*jW^w`pKZ^1iweI_o@83LS!-Q5%my=tvl~h9cgLQ`Cia9ny zzvrMrLasX{X<-{_B+;EI%tHr&drBSv-V!#zv!f(h|GxjQcO^!&;N1dLM6!gGM&<^= zRa6duFuRU(>F~@B(&Jcb<(%8{z9>1;JS-IM0pV;%8k_Dln=rw{cud2wutc3 z2W|>o(gho4Teo4#(GYb|!zrUEaULRM@5tduJ1^RsBy@Um7HR5c$~Ehyl>jc-Ja;c9 zoOs|{&oPIdP@JDo!*tlDLJ$}z7(5A!)6kwAr`MLCP0fc#`d*nHv@RHBA14T6%o?I73;!=%~A}~O&vL2<9h#rUWqG<%4H|i8}q+%y?BH?-=5Z$9xogQbJK@?sh)CQY|dkrq;Eb20Qhs$NVoL<`sBhC}-?K3B_T2@r4Gw^nl z>>Q0CwIbo`2{G7=mN|EX4jM85X^1^l`kM~iKfNo<;YvUIByp~&6F$I6x3zdkQY4!0 z6`Lxe27BMgP%&G|esYqw&&`$R#DOfZLa?YNfO-xxl>Aa^__BqXipU{)I7Lwv_qo8X z1LW*Phy91vF^8i~rr%Cb=27`60zIp`wSHTcyE120kz}JC5Hzr~*-e)Rb!zJjf2(v` zG>vG(GieYylvDF4!^`k#yDr50^!S*aqNi2K4adjP)vvCCe%IIqiVsV~IS($GQS#c? zqkQN@5g$x)uQ^x?$ZCLdjj^Qw5D};5kX&Hfp3o03*n`i+Dq%lZPy-zl0R?;&dKA82 z8QPCP(K9CdL}S>2Ss)h*v7uyeYVawT>y4TJNKwG1POF*C!HL#?gs=ptnF_6jt>P-a z8$K9F#i>k-P?#1MaZIuBIk8giEwOU^+L46l))ZUFBTYtnZQaWA8<-pVR#GATTUQdc z73XxrMqreTOPtm0NXVzn;-RS7i5p2s+W<*#dpkC=FX`$D5)ApaE>2OvjzAqW>)NQb zeL-&{bQO^7HDQsmh6ce7gN9}a`JN@qnmA4G3JGSXWZOU8(LyM~%7FOxDZz@{jn8=k z(?<}D3^dLXU69*EixHM`slBf0JL7~l5+Uci`7uy(oxJ@F+5T7#WC4NAFh-&AGG)}| zQmSK91 zDN58z?cw&KKaNg??}AWF*Ju@8aAl4O+$6PghKugW*}ui|J8kS>oG?+&5$TWuN(&+JoLaoh1~D&{S8go&1HV7(G3(fDb782_Ai zp7#Dess0hcsG}o_a$apAt_Su-sRkk@Q{sbWyyVSfAqt>0`47D2r1s@d?i5c@uDXbL zO9~vKm z!31>HJkO?_o20l!BnJznfnn!8GeDL(XCO1ub3k9K8z3(<;GhCap-HNt29ZERn~D@t z_OSvshPpPa2FR#V`l0A=b0)*aXKAGpDjT3R2LvFpQ|HniHERHN%0I&GH(A?1{}0}H zkj$I@gAIL(QD7K39Kbq|XAa{+eV$(#>~KG=BcL!j7#{Y^w)hX!VU45t)h$J-9~$5k zC-FK0f&+9SU|h3BzG6lQ8nlrh#7zPv=-`E}I;|}kQ;{J+fcYUJOaOm_SU@FN5`Iwv zG)gG!1enqy&QVrg*o>VLASV(a&E$JmE;F!ff!KYFd@WiM;3^d zk&$)a;#L- zB6EXRAyv%_L5zf0wdk-mS5SVQ8wfjiGfW)?O^MSEfr0Fj*piWcA<0n)?3OsQgwpnm z{CHR@$lb6ADwq(`)nKiARJy{cEK%N}<5&UptdiHkzd^gS4^ zSzeql>muxGFQ%Sa%8U$ZJKs&DK5&X(zaX(u8sdC3EI=phPN)u|vyq||0>^UVV&oWI zn2aHFIHQs=#Z~Si&OOyjS*A042RjzRisIGd(~Z15KUfVF{zhYPnnDul(R$gE!vmla zZ0GRU(krkKxQM!F3BKn3=Um3Nu;Q0I5J0^902SB*ArzpWjZkZJXWl8Q;z_H(N+}VM zO5|l+ShmmNqpAI zw-^SAV{QY>yMt2(28JXCE4x|*4px%Z*{IFOhb-@~kxN+S(qxe>Ye0w9$y_ab314NK zfwch8$0iwuNh2d)8!*V2b0NfmS;;v_mm|DXVqz80G@NQUIvU_oA&yN8D6P4ROY}_- z!fMgXCL&ZU+MWK{1mG*$kxJ%N07`V#Ld8LKA1+WvO-Cu#K23HtrW8Vc3SH2-*&Dsv zoptt9r`}WzG)Kk267?$r>oO7w5aEzWXUM98(+3zh1~CRShTJb3F~zo~|9>JTiX4jw zPOVG>3`QD+Gj2OX{D=e0b?cQP4~qSS54{I)SPebFV-Y3ChZ6!353e#H7rUwv9QR10 zpa9sZJgH!!xX)shF;Fue8Ok5&8y}x6%-MYNOeJeefrmOe8l5q31Z9s;wkLxMYt+`U z^z2q7JWew(k$O_Yra=$c#Z}wrNbegy-DCh(GqVu>U;UBT5VZlK=t+uk^^+8_Dohil zP-75?++^%i+j_YEi5SavI#v71m0XjhC)U}`LBf#ri=o@Rh&WeFP;xOeIv5%=mN^6| zSe=o;>3s+%Y2YkrUzk!83n0-s@LS3Rq8``dSmyoZc>Lz>z-nPK!m-8GMc9OcJ7!&j zJc{|ISm1?!b<}slaLU}6{>QP<^0<%J%LoXt&TQCTmFC?Z}JcDX%F#=?xq zB8hcW6iQr5z#=G3Zb`v(auEMGGA=J9H7hW#aBRU6n}Lf8Adqhr$f)ixy5wak|DRO; zWXf@~4(rO>K!C4SW|!BZb&^!TNirBrgjD3mCge&(9GAr~ZzjM@Pz0Euhs&vKizKhq z+3yi5jW*!&nQwN(34)NT-5KTK>Q!w~4uYP{O2|bPgaMJX2nldxcO#6vP5xaKQ2?Te z1&|@Xb-5V3`$f=FcN%f!P5qETu^?&qiBso_xf8S;0J1P%*M$H2sr-qlk-1J_d8kB) z&DLtAtlDHoVPEUqE`?usz7=se8q-J66O@Ap-7l26;GJ_0Y=r_D7om!Q9S3 z@a!lJH>)CrWqK>dr+C`Ii_r1vd!qBM7N@L3ss>36*6h|$Hz|)?CL1 z6;|F1)x;iMDdxN8wIo=;7#~{~g6Lj3R(UTnQUlFuyr)6;~ygvBw<@d*RLD(=iIg4+U~D zO*94D;mbrRwgoFiu!UY=HK^%F<#%-A37#UBk>7hRTMPi`&!@(MNvJ9JR?y#(idaGDDAF#6&dyn$S36sNJ8JF zEy0Q_H5W)DoS`7sytM$f@VW~*$Yvr=faVGt)!Cx7VA{i+p5YVZk2QoYM^G?pIA|pCaJ>L^BbwP3%@Ab&9-Qd<|#B@)y1nws`OBjvi64D2w)c|C@B$iV&O4h@eEre za)07g`ajxfNWrDV49N0>nUHhhTn4EwgTb-yxtz+I5gb|gt2d`4Xo`LS?4biz$t->? zv52-qNkDYS6=CF{wc0e8wUK>CE?YW{BI8*Ke>l2EU?ZU>1K5Fw`Piun(W-_7#@Za3 zg_)_u^)8w1pH$r{D$&ubfv|AOY{eQh&xyp(ds|sC1MIQwvnU?;w85;TCfiIuJOZAa zDx4w#efWaz1i9rwV#WRXiK>nzfyzz}z`052HA`$2o_F#vp?VmGNbjNVtK|qHLdMLH zX70{vM6Q)dF<=Oa4$GuEMu5hiIoG#ZD1dyPF@)My+SMac^I0OAPMPDl0%q4^MUsdv ztFhH;u|_7u4r8<;=`klcF*Dmm1YGK^1<+8$KtQ3Urjl^rsi=C`HX;e$* zit&)Kko^|LCB$*hQ)sRJyIZ`I%ZXm@!|}tz=~&rm5=6d2tnhK-LFKe~E}Jj#aPlZ5 zemhF*CR--bcBg=!EXS- z;(>Azv+4yf2i3jHqKQ*l>XCO3E328Z8P=>=DK!J!_Ma6Cib<| zlPB?gXq=0*U7kXiklfL68)E9XDcrW~3MSZ;`)yji!)mWl+4_(H@_ptCt%0`U2B4;* z?PSr+NSR}01TH{BCk6aIskMPL5JH?1zzJ?Mp9MgLpEKou!%yL(;m_mETvH>^3G~Oq zubceY`;W)08f0x)$OgYmJ|=Btp)SSYv1wd5DGCJ1{`e8Y+!Im?(T%`#2GybtP2b1} z6eLXm1+e?7Sbu$-nL(Ia9bnTPKt4Nt3Hq4%gdsvQtIS0}7Hy=a}56)@rC1cqizu?dhB17h-bdD9l zgLIAIRH8H0s1;B+$J)c*%<4-(BKG$13=TjM6%m0^$t)+KC3a^rc{C#m|75MfJ@3%vIY0t*OfKU>}wB4pu+A~CRR0svM3nWE}TG(>(k&edD#&8|-F zZBm_eXJI%T%h(`dqI+b~A+3ynr);338lidFWE9cgfnN6a(#CkgNyPRPq|6yKS=v29 zr9aHpkJQhCNa-MZHXMvbE!OBIU|gof z8G*2xAN6Lxr#To`+Qcjg-x`9#Xm2Fg*ueXYp}FA!oWXt<{Dk>^+kUEft+Z$;)KpfJ zwYq+qe+C?dE@PrYm^KYr&Hllpb+8(VVQU861bxv4!5B$%J{7=-NW4psQNWIRgJ9;F zk32`ok5TCUjqRO#2^%sy-zV3Xoy8x_o9?+6iN*`ZAfSJ?KOG_|8R;t*3I)IhE&xaf zPz=c8Y`EaSw7^)ff|0pwD=iO|zC#Y40Qi0N-^>NH2`-XmM!Q!)B#_1cmC;%(>&>Q3 zYF%70fZ9WltdlzOP^NjE@>59Ux=BQl8Y4Uh^B>d$0MiP!WAiIQi`kz{dxywOSAbB}R1qCB+6g&-0f`bB( z1&9V@^5qbB6&(KH?8B$x>v5adXOVRXrKD)yXt^+l=@T`UC*ScwiIMpY3#3F^L`D(d z@Q&XGG+_7&ok1v}kZ-?85!!twe4p&U16GwJ?ZAh_Eml-$pp7(X;xZ6y`jT<{AkrFv z0kNyX{L)+ufv*TKbkqNNQI;ir#bnqBg_NyAHH-Re-5E0rCCo;uOdpiQK}sw`NT_-j z0S@e6m&xGp`}o6U4#iuBKkbVfUfCJ|@>8g??WZJP(kX)X6wh50%xCd55Nfmm@D7q6 z$*rGj=S0WzL?AWz6Y$sNdUys9U`UZb+R#A2ev9^pfM?>-2nIkz84bslHBSX(Erl4M z*2MqJW-$T?ItwXiccE<1vSn2m`vW3Hn7P4F8=bdHs2ky}Beg>yt@(mnuX`7HftblD zHm^wz+dwSjL1~JxfWPmI{$%_m{_8efxF#*myZ*W*K zCg7leDGBAZknmFcY>Xs(f?)@^kUDYpb?YX+DrJq%iKidX=XXJv$V<0ir!4XfR?r-( zjvu==ce>qxDq`>-ckXB?nVRskw1sDmKQAdmi4mWCauNjR`r2KLj>9l5u zUqdCav6BYbOPfu-xDTQlsSv8^l!=pjyt6S(v4iS^6wX9;R9cn7@H`oa1da82oFJm| z_q_#g3)%o2*I@ASXjBc^$V}2)K{vKXf1ZKY2z5FQ#Tm zYp#LW3cZtDS0-#uJSybRt-ih15O#C6J(H2(90s5=4>w&tS3|d6Qy5^RHcid0fenD7 zNT6Z`+3m%@9Ck*;L$_A;)szVzS#*DAAyY4;t+8ieNFEZ#dm#Y8vD4{mrJ1EO_CaF4 z4`X&ri%0i%vtg!+f(%Kj#x0<>Pf!>!#I_adgqEIupW@j-L=ozCC1q5^$zxudSn4Er z!NSuD`w&9i`CAgA%>dy9S)TtyS;i3tYWTs7O#pUV6bt32fJ45w8CQO&t1FL;JM-hQQKlV9BD0NA=DHtD+jUxbR=1B5SAR?(>EVd8_%l5$KPgKT)YfVHffKd4Z9$vB3Z*geeJ8nu{K!i_X4nHlJYOnhL(G9%NlIo0GCI}M!6yKSFL~sp zbS#C@gyQDUsqlbRzZIJgiMOA#EQ$>!P8?_fOLH`|#iJW1w!A@Rxi?58kANh`)S}UN zh3NRni)!tIF%rO7(=OYWkQ!b{IEfH(E4IMPT|K+;VVWMJjBS{mwqw)tGaJ2@-P@_l z$;?oJ3}>K*IanZ@XLU$u$$Bl$hA@X6i-qNYf3#U7+&=M{k& z0vOIjAYW}85EV%G1`%M~j|WHU=IX%?2Vg^i=n&y3k#$IW^iT`oNP08Tgk%K1+K(GF zBnd+AayAc$j^lUx*>H5b@e43tl&+~EK)hYE0Ea-i3qf*Uq#YnrkA1%qcjOpWL+CJ; zdQH-M*tr-F+mIa-mxw||k&yl4D$Uha1n5sf>=wqk$D%35YHQzA2uC+~qhGcHi1-J)fV5%RqT5Z4zfKU2}CrP`yRi3q`pI^AWxt<0saBQ@Y>v-;!3+3hhS7Xm%qPfo3dxaGI+d zaq3}an4zCeG8ls9dHE?`*7R@g?2X_b1YFiW9LIuS(Tim#@9v-$D8=a|q@;ZqR{83Cfqs zNqjyi#;W5;t|E=nXqSH*Bb~qb;@|Wi0 zk#1&i08eb0V+qV;w5|7jR~l9t4xA41R|AS8^_mZGDy(RD2Bj5&*n`{Rb3x9R_C!t* zLOdC*D_0%3M3(_|17@`!ujw8Te0Ar;5B=#R2JC9Ob}QZeHV~9ITZJx_!Mv*F&?3po zD@_8K9+g)mBN|qjgavzWH@R&V;Tk{@$P$fi~ zePTrl!&$A-8_4}z1dIb0T`T?u9`I>y)pN8lJd>UPp+PZ9Ca@$(F{E8F5H5t8L)1n^ zr8WfZKH;ryOwIlA5&}_#cUvr?*63N}=*}V>%R&cL*2MQ)SEqe!1hA~h>J%V3Lbs$k z*h+KA(-RunA`evkhRCI)sjPy^nS}Tud}n;>jVUzjC;w-BXZl|FC;D6RY}an*ljXtI zy#5^71=W!*xnQqg-)I`y5s%lS9fkkFgO7&NkQYtXitfXt$(?Q|EYYOoS zf4NI3^%;9;(?&-bVl+J6;xN>uWu72Bg7zVQs!9PMr)5ovkuvTO$Z|u21x2wu&56rM z#th|<4@w2s+MYeZA-K)sm9htlmn_T+c8W)VjY-c*DGe;y0f|V$1I4(4fMi}`GD;) zZ(%4M0z@cqs4XQ*s}Vf#_5jxgRy2f^3EznS0mLVsqofQVk(-5Ii8Mnp1l>S`SBD}p z+0Jm}!9f9*K6hay5-aN+X|j?@g>nbD+aPq9YXgDmm#$5sMn@2IUz3BHx)ED6G5~?P zbk+<4g2pn#S1@^3ZPp&x7+N5}!Z-q_KZHSrL4_XfHa2L2B;`EWIJ5#pAWEl8sE_YB z`3bcwy3Sik(+_H?hd(mMAj#-KB4cA z^mM&gc!+{CDj|Zgb0*plxkSOaWtm1K)*W$bCK^CLeLZq6Af*uAgrCsKJFEneGyrUJ z6aFWMSkYkkF1AlU>Q9uxY)XKfzLTZ6OwA7n>Jx29Y@eCsUMEC6XK{wnj8MT>*=|H2 zukv4u{R7}S>zFgwK`kp}$m>4Uy0Fmi|;1igb zac9~;Yp~63le#g_oKborkaP%|*1$qX2FmSM%>O5UG}~jT!UR!Z1s8$<#+k~`oF9)Oc6rU4fjX%JDs%g63BQjLj+Q`9~^^O%SiAp6%n*?$+wDDWPLCB|!y4p=) zlmcwWmo@_u;sv(yGPwjsKj%9Owo8{<-wvu)^0H^;OG7CDEKYZa8Blz9B=iUQ1obG} z^4WcOih5~A-b-=t6=*}XINA~;#GWIwN~^jA7H(m?wB1$9{7n&xK_iAj{0w!FQK3PX z0t|h40_v=nR?I{%^jmn2&9@l?Hs;5cbM7N$0n+Um|A23U@28)f5VpZcZ-j~S5T4nv zBV960j=&fV&?{ z>#xDw4g?zTVzokuc0OW1U5={>grWB)?bh<0Im9b@b*Kk#5#Y>%ag4>CJdK<#iViJt zpv;;tJ#0L-&k`DqdLs1&FSFBIAaigz$i~{KbvEc_>T;6R55sM2J_)zpTi%OQuXS+} zpMIU95-y9Tv8O8rQF^_-6mGxWn#M^QjWni^u$O_}gNwsx!d~y=Z|7!_vljg( zB(yq&h-u_e4ZX<5oRkuckTJuAIBkF#9*N>L99fp7P!z3**48}GPB=T{YpPs~RS@LWy<%Se zV53yBMihhfV2OBWTtge->U1>2FgxKwtoeL+%M>T|3;STkS^^Mlnw8(y$%&m5220f9 zr*v`I1@su4D@zSp5X*$21*1OMWOcVzNzR}lfbve*I?{7DVZIXTZDKt`2<$>)wws|& ziF!fdL=FRvvby{0EK>`gY%$3Ok2V7yZmgXwDI@{K?XyO^ZiG9*8(c_k$TJ$ZS;eFb zaE%>@hc4%oj5RQVNYJKf6myO80bb3kNX}J66skOo*M@Wjj41G%P@EcAMe>R)=*5*fn}0nOF9OyOcPY7 zlE|#%BB#6VoH4jx>XzxEyUsCdc+Vi(F#lVN+{M3rjec|30Ocg>ga`^C*JOFFc?@HP zp7J+%rmJ|Yk`hatg6bHUx1t5B$h?L3lBz~gv;Z#jO-FiHmr;NPExL2s;E_Em!!DRp zDE3Lh4z^6m7S14s5N6m0#KX-bRR||TL6Um9){4*rA%;LV69=*<0v8x{>152+`M`Z8 z5Fg0HJfe;=rVfaSGsR2Da^W{Ko^w+(6=M14p0yD~iJgmX-e0c+hL%c zk`$+YQ(0sxOZ}05p|lhvVZ{2fN3E^j_P6ELc(r>~IDX6orn-f5cEe!($uv>Kq(3xh zpLqh*TaHV^6nNNWqEP-08y0p&TniIPlzeW76BsZQg^h@(E@#FPBSfi+Y0xSEmcQV$ z!p;&~EfM{e6A&gPII^PBz|a|Hz9e&9(-#!BF?PU)a&V@c6BZ?cB+Lou5ct}J%UR#1 z0uwC2=tvpq{<=jH8@yDrG&%cW<__* z!7~MwEHXS}Q5;Fe;3yDq;^C=a`y`N!;Ie)-BmlsgR~k5Qa;q`2?PIU$0lNHtwfp$# zm(o|Gz!73*DIRD~&PZS*&M3~GJsLVO^u+3G(VB}84_lrdlm9X(lK>=1IL@9@uml-9 zBwLDS^#2}_HW6?o3Xr0t=j>FVFN|`qc1|N^V4vCNW0Q!Mu|PNAMsen$7l7c=lLvfr zODzR2ZuuPD*=IYZixH7(+X?BBTb<>?w*xKo2|TfppaRv>8rqN%2=M0Ri7P6XtmJrf zU;){d#)aN1tc+uq!-5E0JNE>~yDzT{VvU0beSoT9rtt5E!^qG=lmHD09>H(8b_=*g zq2|T~`Ile47J8j>S^_v;39&gE=bH?2K#xn1B@A|o8L(BoGh|XBWQ!($rqBqqV)7XS zGlKEZ`#VuGjf}WlOTb|RI{~{~A}zovDJ&T%h6GiRa&^h*pO7*UD>J~IX8B%;=%q4A zM$pb2tHuYTVp9YRB23HP`lZ$RWtXNI;QB@M(A!B zk8L)+(Hvs2CbqanC(fE6 z832@R-XW2nXb}71(Z5P>I_z$p_R5fm62R=!jUqG=u#E^s2u&yxP`oaQi&>~UI=Dl4 z??!zh^v$2der+lc0vFu_CiDfR5nKrZRqq_=$D~e_MgS6^GRm09(mjPM1>R{S?evNS55eXtEgC!$^lSMbSV!7isY>N3kL46BDf&|EAb+B&3+H2fcgLf?5kkJ z2B{y$GyQ?YKXa-4mxvH3;9cQ-MI~cDyxnV3acei#4^^aCXChSD1%v6; zWp8LIntD^3%4o@K`AFX>o4Y-I|FgiV5R!5n5>4(Y*Xrx4V`pLS(en$4zN^eot-25plaxUGTHy)18c&) zBS1jlMzTZ3x2k@G0>ok)Ct0#MQ^1j8cNno#@thAV;_Av8Jc1|z1?6_wMvb^hbh%rE zmrOux03l`+dytrG+zx{#$e`!N8Yw`XC8aSjMJt8*_|0G-kO-8r07y&Fl%g>hLt77c zUrD@9cR3qaEVc;(j6i%H)V^cBPhTM;!rPHlNVZ;lApF{j^-$2pKAXvbGZRcOXwGQL zo|R9zF_!o+bWtw|!ACbi_OL*#^od~YA{sKXuIXUFfl&csP(8MTv$1I*1p-x_Zg5l0 zYS5B=aRuI#CWyARkupK37D?grU>Mz=aDZS$+yp%ypavrt!&ZAqc%<4a3?|o!aTK)h zRi+@2b~&I$OAL+Ps|D=C)UQZ2Uf&ZghB_GiMr=lQUWXyKxJCeQl7_bHIi8XQF^7L z1^V+g+!2i72C^$qc;?%LN}m|6(S)#QXuwRg;U(~#$Zkz4(QueefZ>dD&}XBZ_X&dP z0kKLFe~nAjE%H>rv=Ye-7wOLgSo+n!LctazpgDBLWLvw0SO*W)newPc{A|eU0&e;+ z<8anMAO%yDj8Q0(L;(?YxE2)PJ4A}LRoOEmM`;Pbj9tPPi4?G;T9Y5VT}XAJlP6#2 zI)#m90|90iz~aD;Ek**4z(5E|ym;Jvofif)T@d@j8>HrjwMznEYqUSWZ~jTzkCV-+ z`W!!Y*Fyg@a}30fkt!5O9~h=IoA+$7nghII4$1v^UgI)KqcQDerN#KvpEB1%buT~! zyfgDMUO5e6~Lvt1*-ZN{3jww>E+kqCFx(2l&Mug7MrayB@6T!** zH0IjOQ6j0a^WeT8(Vg;Bz#IuHKF6j^RnsCBcmt@+;&q(jkJA&+ggR87dBHYJ5_9+= z&A~I_cp=r2Y*$}4Ayy$1L(%`C&pR{AAPzWYgdTy&C%Z+N(}Yn~gjALj5?EGO#%V5Fv`KgTK8(8bjVBUmfkJ-<>vsU0Mt<4`lSlCV)C8L4U8{8QBSV9z zZAu*gwDgqZh2mlq`3^H?2H8Jteyp8QXO6qGLN++!5S%Hg6S_e3kLd04B|sFx=JD)*|D*kVfNerSJ?!)d0ztia)#i}Y>Dm~_>axH zu#Go`vHHpL)LU4$_ z1&fmbi3QHDb|O*Z_ah)D!hrEToiRH@Lh9~8YXxvyDYKg&32du~q3D{@PQZY$G*bXT zjj0IjQGRF;tOs+Z!vzR2p$1x7gA9bF21beix8hd1K@o&#d9a+#QQ8DveIrpK3W&xa zkCRAf#ZA?$`5NZ#i2yH&EF9R6CcqmRiJ0CphVUZ#`b)v7d9=Hhi2fc`12(OJIVCW1 zTOM~J+5ALy4G)=7ncy3*g~Es@0o7m3!8_&wxHW7qmmcTT`W;=-4tK@?ikAfpa5`zQ zrBI<>52>M)9jRmnM3`Hbu+uG`#!NE`2F6rjsV#|7>dFUm<%;-JI`vWIZ*sQ~$qwfb z7SkrS+f-}yV1-P+R05J9kIa{N+TvcxKJimAh<|uK+Xh9lP~Iu9q^2)Tkw#W z1R*ytuGi57s{_}O<{jFHD_{YZG1D#Ty9BTC0!Lv2n5*Z>rTXsp7Y25O-4x3&w~xL~ct z!T=7z6-x>}hCW;OgtpOc?PvFFS(RjXtOGQ~Wq*0r^-qv(JC@=DQk#}Y$6%=CPzb}Z zmMiOjD%1c4=CICqTwf6;`KJUiif*FGC(A$@)Ye5f)yIp6%p8
diC^`ZbYKXG+RPP-J+$NeV{KZn6-Hegt14JGjxk2@5 z*70TA_RWdi#<~%0=+7b!^GeWW`B9;rPYc1?G~H`4uP9Z={+VhXnl!2(dP8Yxay!aV zHk2};R&!?^l879J#^ecFB4ii~j9jc6z^-Lo;FDmU%LyU5s4*tEK+uT+Wl<0`LyY)n z2o;E!Y1!Rx7Yo+$FBgQTQ6nGL(A^lp$yuEv7)TL~k&F_NvH{NGa~#xDEPx5p;g@eV zJry%#B~1!T2!HJ0u!re_ok?RHxrs4Ld9b7{5|8eLyG<%}z}I%^VYz326BhGi&Kgn? zNG4y{U>^j>2BEzoFDiMln8a%U+ldhk9WV3|%yo7)*#UvEN%pm3$Qxb-d} z7rW<|vW%7yaOq|Amucx`=MsPHra6iu@g|a%iY=|$764=R57U$5amhRctMw+O^Ilw9 zUg7r5t^D6W_t26sw>#)fn}vv+s4fPgOl)alGj5UNC9$bgnp7(<)v0P=JvJWmQ;@|L zd<6APH?1@*oUuR@kxo7X?S=mhc;C{(L{S8d_>PwS9JE1S3(p6FDZ)Nwf;iyKt)_?%N{V7)#Vi)d z#|#u83$6y*)KHB2cnaM_MSd{-h2+>M*j-D24^1Y(P?QbAQE|L?0O@+|QJLEG(Cv8v z?EHND^pX-y2%tu;Vkj-sYZH8bxG+$HQ;hR(JR@MV_e!In$h{ka0wp)Oh(v;LK8AMH z;c%l-sY8Vzq$siPwiWqp^n&t>5blDP66G{|j@0YONL(5JsW&QS>1>)Iv9 ztC446Lhg`DOG2Egg3De>k@VNs$FF;r@?>;n9HFiX@rPeNqCF&ive65C0)s&zQOPkx zJk>DGIi*LL&N`Q#aH4X^AmpCl*yY-b0t0R6XV!W@2!*MEhZtiIH)JNc*oyZgWNMCE zv53yxn=J$Hv2O?|jq;uEcca;!BRWhO=kKi~6(Myuh#^kvs)`nZ*vtzKpNQJcm@e3n z;NtZ~+aZn~THzez49R4S5ttDb?2HYYt$K4EB@lIxoLuS~BxxmE-D=@exT z8Uf=F3oG=D)as~E9HGkz4yZE@$O8qo9_vV#93nWA41TKi*TQ+Oi~}||1s&|&2pG<4 z_?Q}c_3BV3Y}K>l(o~JKA1MUBY42hOs$A$&2a(Xl!8;zy?H#IyXEJy3E~?T)3XZ)3Y_lYLqkqX!AN zJP4L1HNg8KC|WdM0t|}?#v@E)@gRuH1(48AZNj(wq99la<_Ccf^H`HXGh4C}%TEm! z0`N9owVgm;{(vb_(rCcBcSH>-O~jpvst_iBGTb?URYI@53U-G+tX*;;HrWY4o$H1k z_{TWVGEe}P6|TlF#5HhA@r;E`^ki$q2H)E_hsYJ$@v4w!2)ozpVEhnlf)l%fB2FPj zIR5z^yo4$L%_U&dEt8VT)G|R9MZ*#(+`|EDHTB4T(AcdW{@gyWFpofdm$L1FWY#cd!K^r??bJn5UnvY z!xxJXDK$xy_+So9u@h*SA@^a%{=(1me+z6t;o-4?T8Nu25Q9+&fRGcx-9m2!#eVwp z2KFS}Ua`h_1Z;0KY;Q0fqZo5Mo$yO;+9X&G`!pKfWb01l`St0X!w z5!wOp0VoZyo>oi1)=v@zeZCf~v0y@t?_Zil%U}&w7`TMx#k;unZ|E=577lQbb})WT z0<0A^CICf1y1zCiU|~D=K`{$vZUQi0^HD3JrVHnwFzN_VZ5ewfyV?>v{qCK91g7l( zGXC@v%l*&~bmDru!ZM>0Gi97O4|YA<<7u2+VtA3!(ZbV7$CVf~$6-;(;36fvZ|CGS9e=Ry=> z5WiQdzVzRO+v^9fA$~P1!ticf(#jJA=^-7Kn!fP5bFanlU0uF zyvMU>NM4c}?2$dV<5ts~6 zb<5bHAlRVJj!|4@l;BAMwYbn4#ugAH#)KupAQZTmrq2EZV)-iz7Dz!L@fOS35pH9b zt5{D%Xy#+C6FLb|>@kzJV*+Ins$w_{Z3tlDES#r&+VYDS5X|_>(Qd~`;gRPl8{3d5 z20DGtJ3Kkh)CQAq0sA3_P()14 zGBloJ-IRsH>~jQQtU!)b;}{a?iO2&*35|+C6j=sr@(qedN^DsxjuOUZfx}Z8_fmho z6#5Q0-cq1oSS#pOk3E)9v5Lb0kxt7a2PJeG3d)>S^(dWH-nQa`3fXUV*icXk`1cAl zM;8kYDSsp5027KN@eiW-s1xF%mqaS&BwhpB8}EpZL{+I(yh3c`03w`xPWrlU^=ovaXM@`_^Mi&s>UMEM~>hYV)vOY2*l-{t%9?1Y9&JQX> z*kTt2oTeep5p9>YOn4SU{|+Dp$U4|lz?6WwP0>_JP#S}{WCm7sat z)z%ulX?rvFV<9>zo>QP3INE+nzLP(68R!T;uTdnrFO$?j{yC)K$^uN)6xbcoQ54@ccGnFBX>B76W7^dcL8G1-b7Mqp%copUl^gEewP04@&Idj3c0 zNEodRhW46e<|wQT`U0U0%P;BOe|pPwXX+`b<<^phkY&NBsR^RzDdkG+Mc$NKG~=Ys zHREr*n-$v17&g~x^C#$M!GxcTiiZyoT;puVqz6nz!k`SH9PQmbe;RfW(;$`cuJcNr zdApi(x1PM-_!KjyfZ#fkhJd2Ctv6yKIvQLBXJD$s>Fv zJpmc+(;y&Z*t2K=#95!%0~UD3ZH!BQ=yuJ&cXZr1igZfd`@?huz9%B8*tO zgXAfVr3m83!HJoQh9oLl6K!(bjh#1s$YTIi2Ztkdj>z#$Ww5 zc`b|>Etz=?3lKI}WwOEjthA&LKwsG5W$ec7BE=V%kko5*_$9#`JI1>03M--otD?jq z0%0JUIK``om#MO*>=%y^E!;vW{Jrd0Tg#zON5Lt9zZ^nKdquUNBOLZZsIc>CJW+`3t5|VBw(0|K{ftlv zM1yiHoWxbGqS*uK*I^nCjHo(`@JMq-6D(8m7nu?AXrMBBg2af(nY2MR|7YxP+=!`= zpPuz5viO~&3BIIK{lMU;(IVig{&8ikGZP|_Ei2`jLgiiJwyN|1v!rx6+Va370hB#e z)1ZJPk;mpmB8UKN&=5FDmos67-l7sfo=0X;P*5pRKt<|Brma(<1e%ZZE$9LVF{2p^ zhBsqH$K8@EmYSr-Kv_#L9@S&B z*$OGy3KFVL{B(6QIZ1udNHt&z`I;j(fSQ<|G))ZspJ#Av`Jf4gu(P!RX*>YrEvTR& z#K{t9%h2dvzgWX>o(+$Eb9{0B7>)!EI^p7U7fwDb#i27*Z@>_AN&1i&KQGNIXMl8J zlfP+jkla0L4#=I@I{Qfr-6Sv|Kn6p7*cDqNL~)yfNllSB_Q=v>Gugkh zwlYyuVQPgzT=}QUh1LnE3GEXrt)V=*|04YS5tq_#OaU>3r~6;OP&@NNQM%)l#Mbv* z=al8t4{9U@*8xhwYLP0yCzBRz^p{}9qBj>2h(2wble?LcEXP6=^g=e1YRR5WS+b2t zpR^`MJzLu1!4bsWU;mOjFlFBwf(qO0J`2Qx=VK9_wVVB(rzjD(;enTqx4@1SD^I$m{O>5SJ7bi7DF z5y8X;P8FTjGtQ?vx})B8(UMuH$59@hj0G|U@~%`U4<;?nV;dHrPqH=SDTQya6s+r7 z81gVj;?|5ZV1|tSk86K6V(zj=1o;8PPZv2A1K1cMHNpW{E48ce6Fo#qCm)os{64<= z{pzA98JwafCe28C8|XpM8L0_N2eQ3+StmUM^*S_|jA6UakL2QYQ6e(`XI8 zDn^{5%Fsjjh#D}CGiysU^$ku|M3uddnGt*+xqz&QWFr^IOc4SSKjq5fN$0?=y=+ES zn36^i0zI_%6QG+r)?}qKrwfIFuh9{rJ0D&tIbU)|88*#0KuxirRLn;hBFQMsq>WzM zLswRb<(;0%tbB+fzQQJvgcFhE5;netJU+Lo-(I)I_z{~RY|$h0sH|cpIAg*gH5s8UOvA%{4IKAj|trM7Apo@}}(z927 z>sMwHB?^B@8*Evr0^RXIM#vI3bkQabw#%`VFVSNYEoQ{2Q;Pe@!H3l=BFucNl*44% zr9fU5qDQS-vSw%3aZ{Q36~h}w{Fy|!ZuB+OT5hk1GyvnRK#l$2=FT`GM-WVG2%Fgu zt%3tuiJ@Yx&HXwqs1!QVNXfo1ja4?3F=*X+qIk$yH~vE3=*DRZYUY(ehNHUG8bAa_ zT^qu);L!yiJtmDdsm)0N6fJ!#wHg~NSHT3Ku3^ISP0T3IBJYE2h_vzGq%ZY zA)3MHNJJ3lj(a73AFs%nP!X^%r2%Lx5_zmH2<5I_fAs>nU+fpTLGHQ7C$xF$Tfy)*pWCYj7pq_ z5e1m_WF%Yg$6ox9qgA)?O_+Kdpft6)1BhYJ6E4+gyuh6uGHj!=2Rm4oq_n>UtqCy8 z>=RuPL<55mm7)VO5Ue2@{q%{C@2#H60wOGsj3hndf)$fkFn65LC>*PYy7;}P0jyq= zlBf!hl1Ehm1O_5MipeJkPiY2Mn=qU~0g=TZfMjkZi($Y_hapo1b(o?1RmH)T*r9BO zeDFsZ84=9di_)V6kVKhYJ1M)Sg(On5+l4n{>psPzDYB77$&E5cIqjCfCcBzN7dsRc zHzWlLpMsrOe3~f0fD78d9Jw_1{w(7UcdOchO3!w8$uGfY38DpPESDuu1vw&@0dj-} z;IQf_KnS_hq(>_*?LH;Age^BC{P&8sq<~^OzD-^;5djJjc2_%U5t+XWBt!L*fn5UDrMTFCNO_T5j zDV9vp@V2f?q~suIt=BD+qjv$ZrDzRvhf%Zt>YGgII}$=i4nEBwJj~8OY9L~6jBdaM z$AH04o#GS7H+S#^xPY;FQ;zRa(+vKGX&6l6N03thRt=2m>&(?d;a|XHDu`cVufI|) zRx=Z6k5_Wit8>)D)~I>0!(>$-avR@+65}Uzd7w4|? zyi{E85b@vHKMH;}eIlUej&QwOPLd`emR=EjdCJ~-*&zELmIeb;)S&NnzvmwxGY~hr zktXZfn1ck$HCCheUGSBqY_So8Kj9M&H`5{^1X0Kp1_~`UgT((7zN2vY+R2I`a{YNl z5*m6C@sFDIM<56nh}e!PT2znl7{$3Q2HzMG^xxlD7>7GHm<&aA5585dQLpsBLl8Y_ zOavKJuejt{PbG8Zp$LhQ2z@|?dNW}wRj|Gjv$JRf857YMK|q;X6!|w?#SJfCJBcsE z8k6kjk%;J2S0prSQmBO8n*MLw0gKR@Gp7urq0~iMQ&JG7(o84~|0rL4w_lLsk4BK0 zbyX-AO}B}$RGb8K#;t(9tP!+5E%m4t$!EMKj~J5n<9=@UU}KRw%uav2bBSGTo+^>Bv>HHQI5CQVTI zh{fmRDdigh+7L0kl?+41z$dT>LB2t?S^=2u78uJ~jl>$fz=NI`(f3!j;jSZ<;4Fn< zm>t+BVWN0eIgQ|$5Jkx47EtR8Ou+*pZ_1ZEi1DD!f*AT~{7hcQDMa|(+z!%BPD1se zWeO4v_aAhi!V6?A#i5R9qeW6p<=-Z>UtSYtEe+?-5P;HSV}4SrYs z7XNe*z-|m8{15WC&VO`$pZ9mk4}~(AxHGij#PeeC2n2Zp)iwqpEj@(WJQD+qhxA;E z7lL+R)E~iCIZm%kP3WP~^FS7zB;6YFwAX;=$pCnWd_knz09Fnjm0l7HMp9 zt(6o%0}OD4jVBhtg1{pfgT@V5KvLc|;C~^}oH}r{W(&nyJ#{D}{D8O_G%&j3X#iH8 z)h6HJS?7(MszAMkasodXA5_Gn&^`qPYJr7U zgk?zOP@Je&+S$fIYsi_Bg9n3qGJ+_~&PV=CdWfqzG!;N*(x7`Q)+>zNS(t)-K~q&O<03O*X2}BaPYE@})g>ns1uqzLG8~W+t-(O_gqAF3@)viEEr*gcU^k_73sE0D z2T9-na`DO^pf*L!&*%g~j*1M(N$6x)R&s@tI4RAYOIhSk{Ba7T#C=v=%=ymP*;vKI zeVRFmx+b#QWk%+xQ^E=jbq&t&gO{y@D8B=|A_Ga=1X}kETK5gE_wKA{oFVeoGAn_O zhRDO{q}nUqL1Fq)bhhf`0Sl3yV8tw;u`uylqC2K5;l%%ka34hnK_qKeNp_yIffU80 zz4}|y0JE5aO&3g_gSz-icw%UmuLBn7Oeg?`mwqVrG z`Xs2}a4X&M2aWbcG&7L3j6J0U)WCOnmdMSRrRRub(j@bO18HC|@xI7~%?wN^qnZG2 zAT&|1j*2`0T8PA?4Wm+uI1(s~C6Oqj{~?lD@-t=gHUJCr76f~VFpg3ot|+7UAV8fI zVS=cmNiahFPChKnejae$7_SA~R@IZbWe=ci^o(@ZW7Q$Lb&YCCZ6SL$i#o z%zl#!(-LuqweUsyx^zHi!n)ab+skChq{I?2Tz^_a($LP65hENhYLOyL=&#t}v=>zo zD73UO%!mVWghX~AK0s-Q$MRbsg(?Tbuf=qH+ps~h`?s94$Oyzo6G()@L!?|iB^FKv zo&W!73_5G_+86g%$BE?rI8aF;F~Rhik3?zA4F9qr+*x+wKdq4nr=4U5qFN4Ep!RJM zFdZ!o@KraX5w)*E)0;hZH?pr}X4oB@+afq-AXi7l?dWSf7N&LI2Mt&RLswfTCyTsa zw$V~q?1kqRLkUu46vT9@?ZW-Qx+2F*7+?OdE)yxGphX`4?damfn_KJ260rfKM2;%Q z85R@hEoLo|!2j|+J4xYAqR8^e6UR}aWdptszARu8*%Pp* zVYbTMqP$_46yFKy_4zX3ir|LIm|kD3Vw}NYK$_7e-v>ng7|0bLqyeTkzI;QV%)~jS zJ^2Ze4uwBQoHn(O61R1bf{^tBn&}iY#`Iv+(bkyVNzYthLf=K zSLd1+=RhGQ&aW)i*^qd5ITBq`W{gaO${^mB#*!0*ZM4uqn??YsW&OO7^dP(vKM9H^ zI7E`$ftZniff|@1zk%Z-*ijZDVThV~xr-J6*i+C$ko80fh?*na&@d^Hz|2xF@t=zG zhni=}C}o9HG87^9_%0W3h;5sLy=6nw@yJ;@!qJ%|<$)emPe@U+QW7y-#b`&>Z=m!t z%?{R>vk^6h?+RZVm~ew1i!n(|L-8v-bD}lf@eUch6q-bVFt=kgU{5tM>=qx0*`knI zCp59rkCxfdN%*AvLVhX)i5+b4;Sq1r1DqByMnogi*QWo zEd#Zi&3yo(Rwh!BjNx`$Sr}+EIliUc_jSz*5*!7^fq}cg8YdPb24N2&N4M`JS1@1B z>t8~Rd$n&Y_k|a;JXsV{6&oYz`Y?Jz-sgiOshD8KUye)0WaxPyYjp{^ia~^_(h+kCLikY(&bdln3#f!191`0?MvEosZn`AR0_RFtj4@vu%AD1C$VjQ+Etw3--Kh-`Nwi zoW=q^PZ_7eC!q^DwLR1n&E{q3(g9hDI5Z> zyCXza1PkA$lVCY+I(8?U3zHf`rsX1B{bDjK;;b;Rjp6>*asJ5hTR#n6|BP5WE7$AY zCPFZ{6L7J0#Fm~2SqaIv{=}}In^16d^MjM;hzDK<6adW5Pe^M`t0yzd6S{O$=!%M7B-3jsB+1LMDrln zQ89<*2d&=`O*SF?Vlok^HYS`_K$)dqx{z8EFyPQX)C?qx+S_-JFT5zbdg$;#rI_0V}Ow@e*9!l8(jTR;|u!Mi} z==r%JM9&k)K0+1k0wy*e$mx_zB*sk)u6ZK*#UX>g$xV}EAZsi2LLgJ$?PyRZg-OCm zNt1k_GXT^=iO-T(C6-dWuek?MN$xOH`8F~I^1Lksv&BI=lOPO`5FN5&C-s))sFbiU zJa31fn-kK0}zJ$H&Q# zo+T(mjF)_kkc!?+sjMPoiO}bGm83JlG@*slBNN_*grRgQSGkd7+~cnl*+{DtAw)+y zC`I|CMoFh-AO=V~+VEmgAWXpKmB7%L+4aL?+uY6~u7u%LV-;1X*G)`W%QK9#F!oRw z{ed_!u!8^ES%&FFMt{wj0Y@RXm*}I}v_ux7g%SJ%86-u3EO00m0h2psT|B&ELLy)} zDS%{`MePC=ARA7=rZY^RMKi2E;Tja-h5sr zvCvTYgd&&{F;Q}XkhlXEX(=96IoV!4TNbvVBu~g4lY=1Wru_Ied*qmf5>{cOGHlRG zk&&r_An!Jn_Jo7>w9&%XqN-eJF2;xz?SaMq*`+q549)_`*1cqLtX=@_*34Zr~fA&E@max_Fy=7@&Dxi#`lWd%_btXa{dN4*rK?ETcE;TwS8 zq}m|lE6D+opDm_Jdyf|@?v>q~DoE`G0t0~>@YF0fB6%bPC2u>X5PIP}JR$@%7W>IA zm4)R4jnEpxq=exCwCa}Cq>My1c$pnQIWFzzEAeNpq)kw>YNicR@6a_kxKgJV5OEgF zk+}G5$XPud43>U}ICsmlL;8^ya9$oU@sb27F;Ry&bfCpK=1CcfVG6=FWF}?n;J9tf zkrKc|DU;lHk#L$uhT7ziY{AE8ORhjML6pa`~q&HQa2u z#Mi}`#)oK^KAgsU+0L#@>F8@50F@4#!YN)SK4)1;WmgBh+hZ5C2FNNgTf!XoyO;S* z6UK#<6lY+8>9j_1g+mBYo!D}M?91@HjCsC?(&?ONV09oXm z@dj}y;vz`QttJ911q<;YPG-b>k(0Mr1PF#INn%XJ+FV9Z5v^lPw2=kCI!Brj-bh9l zIOX7MdIh#Zt13HFnTmwa0r<1FMr<=^1o_3UISL^l32E7a2p=ZRt@*vX`Mlo51dtGD zs&N*hyb=t|li^*E=-&NjKL4!5ghKq%qHx%ELEN>gY@oUO8cab8Ykj0aQ5lLkige-> z`cg$6KlmoXIo33zVM5SjeP66C8b!OlYEjFa|y#`PW6N1OPhB#|NamYwGL) zvL^sA2gr!VU?O|W16!np1q0uI0_%%mjo)1B)wq}jX$?~`hym)0X%SWxjrb-FhwaJx#OaeKX8F4J+_1&gx$5VW5*Z($i;2tOP1F(?*h*!{-34*E z!y2U71kkMKfUiuc6m4=d0ClG+Jc&t@#@_kdoUun)_C#I4Z~|glR8YJ6%18%v7M-Bq z<+P!f8Y0<;TD zm_hj}>#jfD47)Q3bY>({#0~FD6tmchWw}<-%7G@O8)*-rVF7u~7?96KRY*cwX2GUz z8F*EJz|%Z?5Y&s2#fHO@2@xcO8g?N@QDH_@D*;imiMq`GR`ZSy@@1geFq*3fGl!$H z;;Rdu3J#2jABD`q8R_FTLNas_$~ zQbWZg>^;z{*nuY7X{884U;q-P&@@B}dUgcbp_0d;Xr5*5T?QLIh;)ofZT<#0EYpj? zKnP+qD(Ey!_~c;n0Kw)naZFMb;7xQF6KJWHl03PgjhYhIxwEyo?6q zJDu*6mV$1hB@($fcb&n#O5kw`(ew0qu!r}OD|IO0OJpPfW&n(FsE#4CMv0KKaZDrV z>^P1!M;s6_*7XVRrNhcJbU>Jz7SjXa0TKy2Nj)x@Ay$s~-a?=t%mJ7d^4@mB?M(Sb zpkIy#+*$=J4kgIk-{bZ4fz=w>8!v1|tG20%!3Oy81dK|t^stE#BG9CCQud(BtSs8{ z&5F#01+g@vjD*4_6$hsJq+-J_l^UdL?7mE;ktdWHXv3{~ks=Qd;5lUI+h?`=1O|}v zm_q0eWnpZ%lO`b5cZ)Z`!M-Bw$zB%YBNGu~BW$t|5%Ccr(F*)jAS2))Sb?GlFE}wZ zh+GSn7iMH<%FjCCn={3f2iOg!HCJE)Glz~$^6{f1?~x7VGn+&ZBzUUzp-}5t(9tmT z`|B~1x76ihR}YvOiiTPN+Gx*=0T)!1-T+U4pK_+uOqPya5v;Q?v1BooEhn_3$G|xf z@^g8Jz-;gbyQlhb6IN^kBg~pIO7I*8C~EMikcvGA+G}a8X?Hc)Is`~EB9=uW%qybGF!e%0B_MN1)b;d4r_4O zdk0dZv$qyxXD#A*PKZbZ4sm$f8y)3TMlsrmkh#ELmwb&fQ^*66g-O^F0%E(Q)q33K zNPIFtl`u@?=zIyE>O-dD zs@hRkkT7Up9@#yMV1QJ*H~iorq!BbBxb)%6pM~;C)~pamklOrEMp`DTU{G6EV?YS9!ef%L zhzfx7>%oaH0r;@IfFn{b(4xx>4HET+g?uoy5LjzaUPXc;EEvaN<){RgA;oH7d9ZJz zBf0tmpq=_9-XHR~x=FL@*{leF2cvlsu2yFdkzfd~tPlXLf&vt3E87G;^ie38iJTI% z%WAm^$3?U&vLm7^OaK*elbBIV0FFGyc!M+LuUBn(hKx&6;k8QTTH{9IQs~)i2WCWM zA(i=|XJXmVB9xw#o0+)*Ean4yc^Lsy#=v0V0$@2@mzGZQ3k^o1XhQ9akW)ki z_<}O2DTyVtjzfrm=)QW(p~E804Rn6yMcSxg8j1|6qEe?iD4iqxcVbu%VwBKwyOVR42og7JD#B%8O$NJ(Sm~xiI zml!Tu+`qW>bcW^i#k+(`3~&zb>m>;GjsT9)VKLf=^I;G(58%zSD^&eL;rCOCR%J{+ znHJDRnAnTNmSq*Dp+aMjrcSxxf6&_66(Z6Nf)}XpGLMGB@nET-B1;CzY%wLYX8=4L z0MHISk-?HS)-%vkSp|;QfU(>M#i(16>o4%t!dr_3EYcp$?puPu;1g~I&iJw1Oenvq#$scsak4J0A^=P7%6QQm8s#;`+q`rPfbM9u zCe|t7^h){57JEYw4KrhF~!WF@rXB%9e~T9Aa%79()9< zkFn5o)B-x7BgIjAm~QwQ?Skt{9F-7wK=jh&WxdnGZD!~ z5dn~qN`u_~;70o4Hg}N7MFnB&X1Dex8+D9;rQV_*sx*u&wff|Y*6*(vM+vJg~XsZ4Gb?3ZMsyQ2olw)!Rz;Yp$n zlW}V*lgM*%P9Z^m;=4L59E!E-=H^-D4|oJfh4lyst^^?Z-a!De!h4Vxu|@<2HzZmt zD3uyNap?G%5Rw&g1SZ+#@o2!iN2nJgXCGKVJ&V*GVv3 z7&S9l!oF5toMBN=o7xuNQjQT^N8{mIfc1QQ%F>*Nhe$~OLJs!%8W0NaFoWHTfPiNg zNmg7mP_=gqr1O65NTQ6%md%y^Xoj*z6mW_W36ob#5KEbEb)!8dFm6me2TOI z#t~?fG9dtTBx~swj+sOQK-mEpgNyeCn;@>|$c9oF<=LQ-6}*W8Wgs*Vqd}F?P%uS$ z)dQXaa1#Q3aOf?X@sXpwk>f}R!|@*NEJH*DNVz0l@B%#>63eRmUPk=NYGZc5MUc{( zf((!XT~&iiiJr=^-j%K^f)YK;8DYdg5^R%v21#-|2dyTAR?CKCrCJ629;=LIW{dFAYIF6f#r;)FEZN<_BUQj|zmwt;~*F zsn_&zu>eRe!ByNYA*lkcDu5CTVV{o|n}Rt&1n$Xg4~;5ExWG;-umyqg&P?&M!LPH) z8Hh7@o=KsZDgh24KWISgXxDwa;My!v4#FN&c_5H*XKo?;+K5$0CL%SN^Ony>7dp@U z@F+Gijw{TZ&p>&cz%^6Ll8@BS%CUIoOHV(LiKLG_ZX| zT9j~*6o$}}g;rTO6`>wnd@)NSq%)a8@iSu1Er5d@psbU=cw8 zp1knhO=HN_=CP0%Jr?s=#ZNqold)N{ZY&Jci1y%G0!q&!D!&2T;tWU7uR#;VOA*dE zhxsNMz04sE4k}4oL`(K42~?Fw;auv_Q!bvOsK+ z?ufy2WLNzsZ~&llobhTkI}`u1SQ*3upF^JZ=rva96`;n z3QQ6KG+#Z_LVJYL98CQ{cA@QTNg)T5@esX`w^&TNCh|E_yHI9=#gQh!R>+tF>kr1f zZrZ^>#*1PeeAtFSr91M1&(YGT0;_=uCz#*usRkM z9%KY)RFbjgK%_4)n0R)Xre#zbgtZhZ#8#$}iq7T`qY#{D;5;aq03?mzL;Mg7g0Is} zt0KUL6e=<;6HqRrHA)Jut&otS6Efx>em;`argxES3 zCxF{cVj~r1SzoPK4TfoO*qSN${;}vaNX9U%#S}7O7)hH@-l)@3JQ}>g=KY*RJ&udOf6ZFT@ARG?SJj9|(Lg4m!aM12dXS8Wgz&cX zCY11y8B3p(3mgbY&|8FJMvb@^a#iuNW( zOWjP3-*Kjeg)zUs6i5)+MU1|!uMX)?%vrKB>>!K~fm!jEB}BG0W8*ns$|a77*U6&m zC@~Af$zVjX(JdLF0D@74-`0Z_?^ir9niAF%8ZMGbJ3ue*G*BS|rmT)X6K0e^ei`v$ z`yRP!0tVuU7zUMK_G21+h-HJy9I+cS!}qq3$`4>2qZAk?aqGx$79QRK`4G0rr6xB(UEzW^R~30PZ}aot4zVFpS*cvowGYMN?%*>>xw~B359T zr`Ewttr8OOe?|re9G-`Vr8Lq^-Mc!_J9-qR7kXhMDJi*-Zb+?!8+1Vm2N@!0OhQ%& z7hY7Sf$xNy9VrBln@V^A=s-;NoobyeQHy5aZ1=kS+(r=kq76*mE_c5u5$e}&ov zWPyWQM)^SK6O1b;8T>n@I!oPgp<6%zSu`%ES${(!S3xyDL3<$8ThDK&aH04r3;NoV)E~k|y)rSfc zSHQ5^j%HlcN&xj)q1_CUW)oBl0iVW4OHZanjc`4rF#yI4-5zzvxv`;h#!%4E6Ux*M zsxQg`=T?zEQIf&!A`BfXk~dW(z(e;N$2@?s#CEI*MB!DS@-kp!&lvxhS4a;6NePHu zADj&FbyM+Zn95)bN)T#@h`uO6M3yr26CGg^#6nY)fML9XFiH?51(LB1TY+sz2H7}$ z0lnCRIT3al;ar?Q!4@ML?SX*CIoLsYV7^))6f#{9nSpV*w;4RWND&6@HTt7%6&oZq zNji;(JWmBODga14*&3kQ6otyu>4yd4fI9VzRSGiV3JV!vA|t@b<*Ir2fl`3|I3Lha~B+|J|M2OTmff|#j5mltK44n;PpA6tk5Le>bM(=@HEix!A0WR~P2m%qqv{A62 z@tGl+Bif|UgChzdOBWN!)!eBjcs+S&WRfU~&?0#{i>L?zoV5)-oCJg}+KY$>8SH{{ zU#7`f3M@?#?~y(@m;o<-SC~PLASQl%Aoef_#fZh7k1_rMW8f@;Dqje_yENZx0BZPZ1KTB4?qeq zy~D5-j$Z5?hfI-m5lBFWY^eD9vCLL^icx|{2mypUZH61PZt8-~0s5zqLTy=5Sq^Bx zib8W%LE8ZU5aiHVPpo?gSiry;%`gbzw5VV}17kF{yIaQ+gs#R;=>Y&34+S+BC;>d% z1`G=$FlgMPh08Yi0(?xN%Y2$$1y+v{cHrvoV8L!RJ?9|ygyMLr`Fy=+Ak4u4Z_hRB}`e0Go4C+RsV_;OvA zo!r|&cNpjuD2-W{S;?_%z?0`yx!6Gefepa%8Kj^;M<(gXffz?*ikJulCs4EG-+{N6 zK+=yp^=3B)b1_qS$+NZHSzp0}12&<|0#uyh@X0OGD+vSNMMcI0tyq9WIlJECg<;Wk ziip)bq8-7PgF%SVpVidbkH+bevg?!4#S1M2fL< z1UOJx9>9lD#(NF9*sP2(pytLJ7^DjSZ(x6QLbV=XJ?H6G;wnC>U#RV=Y*8{sYUCkt zOU}3?xhyFT2P}t)6%4(+ir{Krs?3vs?}gMH&UK(Zmn7Dq@kJ8+ZZ5X|B{m2H_cnwL zL~k}h1ZED$x?~73bjD;Q*eHYYB|`v)90a*8B{=Rh4h~vCUWBKhtu;RU483{qczbI- z!pfY$j^$$v5(AIH*k;ip)AuPEmJ?B$Fx4cTPAZ6XNn`*rF-pzE#dTI}u?Y#dxEulG zH44u^%sUA_GlPap^ka<750-4#z|p*VABCjsm=+vj9S}uBp$=1+$Z8qYb~q6E5H%-! z@?kf<3TF;B6=o6m!b0=HWUK-uBv*l$lHNuMDqw!R6g(s^V4jY61R&Tt!=?-b7%?#j zKlN%bCd)l4!A>Q`ngPUU+H{6fv7xatt z%>VvzD~~pf$F-A*QD700X#k(_w$M-btdY0DL%VZQA>?3q$N>UQF~egK7N>??oo+x2 z1s(3s5+Lmu@LH`}(%Y4r8R{{^M!uO?i1)rqaqMnKzCq44!>tDkj0NChX@MRn)>8#B zFx;MOb}S~^Q6rQf&k>;#v@`@@)1WF#zlV|cKuX=A)Gui|(qXU&8IR4j^-Hty$Qx43 zG}1`T$$AoJxCSR-eO?#*;}u#i|2*vCqiAR&Y;2VZEgAwoy! zs_{%U1q9931s8>2!4+w^wK7YGcminA8h@csWGq1(VQ$xKxw6biT{RVZm`*7kw4X{- zaYQ|W@MtaX4KbO?jD&s0P&k~X(kX*OGa1MhWQDowE*L;W04#m(ma;H-@1&L;bB6vwWLuYnQ0P*2*?q|q72%gHew?$oPe1@qc++QvOgEqLKRT~CP4DL zCR_rf5@4Va5$6rwF8BNm<`}h2{Z9u=By8-k1Q^f*kbqbjlPu^jtT1N(40J8O>sw(C zC4vjx6zSE3*sdmsCkf1UT=j{9QO+e10(%-VCW4Cz5~ZK<#6y6-zMhy{B=s4cALWt$9NC_ub zS1Ie-XqBE!VTV*| \ No newline at end of file diff --git a/src/assets/fonts/PT_Sans-Web-Bold.ttf b/src/assets/fonts/PT_Sans-Web-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e4eb44382057857548ed13dc1198ebc33e02dda2 GIT binary patch literal 276185 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
mTHAEe$VyMwd2Z!<84)tH68!{ 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%0Ai|on$F;`Dkm2i$ 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 VokpZ_x0BnxNj^g#b$233egMNe(OLii literal 0 HcmV?d00001 diff --git a/src/assets/fonts/PT_Sans-Web-Bold.woff b/src/assets/fonts/PT_Sans-Web-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..87db2866927ab8db1651d5bec424e8839d3a511e GIT binary patch literal 57524 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 z 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 literal 0 HcmV?d00001 diff --git a/src/assets/fonts/PT_Sans-Web-Regular.woff b/src/assets/fonts/PT_Sans-Web-Regular.woff new file mode 100644 index 0000000000000000000000000000000000000000..a71e5b6a0e441ea98d1b016bc8638a4e96672365 GIT binary patch literal 55340 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 Os((FL901K~L0AB&Kl-Hr literal 0 HcmV?d00001 diff --git a/src/assets/fonts/PT_Sans-Web-Regular.woff2 b/src/assets/fonts/PT_Sans-Web-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..1b54f9e1b03a7756bd672e50cf00c0f0260cc076 GIT binary patch literal 45416 zcmV(}K+wN;Pew8T0RR910I_HQ5dZ)H0e#Q_0I>uB0RR9100000000000000000000 z0000Rmp&YVNCsd4fkX&434;?65DJ9rAcW623xiSs64qP+HUcCAhadzX1%ns|gnSHx zDqHSsaYAv!RAjriTUfQN$2mM2QWUuzN&!%Mv+6+Yc0eje_zPwK|Nn+$Lxy(H4G1Ku zY7@0q-PZm?hziV-L6UkxAZ4S*2n`jbMJ=Nympi?S3j#wFC*w5w{D{_z4UubJ2I8|Z zicqq`uw}I8>Q=BrVZsVt2hvH-hE)!7DX~QLM}8SqlyxA69Va{9HeGipRTWX%4Cm>r zIoYWRl`#F9?J6d8Dax7LEOM(}3KjYgs)B(mxsks&-s!5C%O@g^o_}*0&jn+Bz(p!* z6=UQDC4cx-Y!9L&wSSm4Y@3%IZR-&ch#n)x89vQ$S&*gzr)GLfrcVB&litx&Yj_XI z#eIxEulWefiy%oNIU_OpL}osCGrO_RVe_A$jW;6fOXwwEHry+BIGgm_ePFB_XY%b{ z0^+#!0!p-zENzQ(pD)k<|9<~E*FGV*0VIW31ajom`!A?k9oMq0{2e~BIRh}aT0oDn zv1k^>Dqv#_ST$n<#zthQpqPOd)`|I8h`wIootOolk(ZuT7wW;LcsKjy@!sP#1f$dx zGh@KWIbW}cB~CO245m(wB6u@;Dkzvtmqe1EDkMPKB!Gf{F;=8dxjwpDb|LCl}Kx^|n0Px$@8lnpx)o zV0*Ft)`pE+HxT6w?)y&vy_OwGmLre&uL;9jl+Vf^?J2?Ccq|5c%G28@({tQDf}*eh zxCXQd96;Fbr&4jcs-i{*B(_9R%g$);e?Nw^HwC1vN7>VUYZrXq&rk~9p(Hrd_)D3o zGxfBKrg#;Jii7}w{ohqC*E!iM(`0ws^wrg|mU|qsvM3M=Dp63)tz`1wfAfDe)jv}3 ze{WG>B7q$Onw^n%^0HObWRt24($%^KNircF?ggLNm-=$ud)i(nZHE_P5g-8wO3>$p z|L1jP*8hVfQ<9Yztb{eFgykW0QQf9Ew`jWU`saWCR{apxdNc{*4K2_%!d5NJ(4(x_ zGynMcyE%0$&(vCLKJ9GN9J@7Ez9UJX0OxbghdZQ4@FY~rS?U?ig3({m)G}q8ei=r7 zEyGCa8iy^s{r-Q`)tA0krn{bz0Uh^eQ11UY#zHHnjj2+xHepP z{=Z5sx9>g<6(7~*jtEbHM?fpdtM+17gQt173cQHO;YB8r`4a%i4^kw9l8c$FflNwe zk*abL0ILm>s@B-&co^nYAFoQN_UV>94Aah=Z7(+78=hUr@0Ato^H1i?WO8!8^WPsQ zh5P2{n`*5g)DlXlWB!hPQTz7G{;MHsHm|Aa&KVs70R_Ep`+vX7ew1fXA+0!*Z1w8% zXtJ7B>7D;7qJbu8X8B*H=9AMoeg}oqh2eM{2C+2u2V|1^IF?_be~+uPN%E!{){awq zownavR8UY55WBPQH?5Z*!PjmN3K%X-8X7hWY-vIS=2mAD)Pi2Y{|Ep7=F;4!a_AS_ z6xf*~4a$~epmg0`zfJ;R7BK_Ri=Usj0q9%LU-tpL5P&;{&HIf&pf_JW?*q_L2_VMf z2((HA34>hBL@Z?gMFNU_uFI$X_15=FJ$}{O&BGsTKnNrX$yC&gOsqV-HVe8XETUVF zJ|6&zgA}8d*^S)|v~J>di=iFueqFaiSnXDLx_S?O-7b$>u`envD4xsse(kqZ8%0aTRi_}gSBoEvuB=2yuCDhceM>29}+|z zCoT5v%~zr*?=0Re4mQ zBIy2&7<;ZtD{h8k^FgAPN}2a@i46I#a#`eS72(D9;)Yi}`Ehqs8K1m%ffTe7CB<5@gaTln`g zmn9cjUVH3(EtS?wx%hXJg&AJEF8qLN?xiB&#Fg(~(=T#+tJ&UWFkj4(#g_b&$8hiR zCzYs~46kL?f_6~LH>`B8VU-x4fJs>{w|r}m&PC?#6a!LMo3n>}9keoKZBLKM5^}4{ z74x+#f?MzVL{M8y0~`2pfn#=S2_|qM?i6TXHsf{QM>?24-s7!CL|O|L2 zeEU^uIc3cI_*IYzs6w4k8A>Wd1*-@ZsUlQlHN-vgsAul4C>J-_Rf62cy9vz+lbBaRB8;CdPq$Oavsfc8NzSNEnDe zst%7#W|a9Qu>u!FR0u%*R7U{ZiB@#YGo(HS(y%xxrys@=z&67jD)_(tT>}~cQ8vJj zw_1PTvMk8;0I&t&@>fU9MXB6RqY(fw2Zjv^X;ik-zOf_fE4WjM7bw&JC_I_RdhEw} zT*t%sG)O`;yE(kG4G+fQ|^}Po|W_9 z8~|wggMJ|sn^YDm?Ofcva#^$knAepcQAFeqMdzoWr32CR4_McM-FFhe?|bZtARj$W zNNxW0K<%0r9QfI13_{zzo_Q-5k?_l6X!murog2;`J@;fjqV5Yrp#yuYcicYJIyqa8 zrii(FPIi~sBUobS#m83n2Pz-qcnYNbni)XXAg~S={k;_lX@6QfIj3{{ zF5D?OHfcxi7y01qg$C$KiD;{!?(At9Ynqk|99N2_ZPeD|FVzUM|J2SiXk z*^&nYif6AEK;SU~U=>TW$8)(S35O$q#1(rmz|@>n%&$bVjD@F+WxpHk0i*UW+#I}I z)+L%y_V@vLPPU%TPvW)5N)@_k%>q;Qdc%V)4OvOzPN;1||!nT~Hl2szD z1xqzgF;OjAIlbo<%JW`%q>!@7yh_$K8Q(bDq)K_k5#p1&Ng3%=H-(_Ys!(c3ZmkVj zZf%yFuw3L;DTWwF_$;-i3#O%QuPdaCGIm>7?Tyvxw(Lc2bG1R6lBkZIEviQ7zEjHk z<~U`HAn#Lwyiy3aNEhBRHmQs#Z0}W-Dul?hXSa{AJ8OZI$~pHMnM&VgT&V&f@4Zrr zF_iS9WOrGPWWljgxY?oi7^Xkh^2x+ zA~;ISBNq|kk!+%fqVOH15AVD(4o@``i|#xll9^x-dU#^68{+e+It)9Wuq>J`Z})!(ALIi1Sp>w@ zqpK6;B4fih%3*Vp;`j3^ied!8*I5a;G<9coylH=>oeXALkEV zgfk(eRiLTU;`E{ac!&7XuAFpEdkUAcg~=mX+NgnYFJO-y&czU*Ko9!gx%N~^%pw~J ziJTvmB+b!qf4c?*$oXYe23`nq7DpEzBIhTA?B~`bH$9X5fWp;lT)WWqiIYi8gIZY` z$`7Y@ONANFph?4v@Ak%3)@6D*#B}$#ck;)FYFS&opqiFcSDPn?2DDjPEq$R*q6JCj z%sIX|^ZzL2m5u=?r>~|x_Fc^W@lFM5r|ob_SqtMdD0ZiXj&ZK*N0kN?;FW9Oi{nxX zaY8=wF%|}T02LdM@%Bs@pJH!ks}@_USn(4Xc%lGe$#|laQHkWdhrVq+KD$W<8nOs` zi?>$U%`}6~QOwk<>uGn_Jg=9Rr9}?bgAb&Ik~oIxKHeoEkcT5i<>XF?k58_Wd(p$g z-qqcDXK#AglR2;Gj4xvWcj&R$a8}&s8XfPIbo+4I$I)}Zccsp}A0FQB?Z+}pDkCFa z?ll;0J_r@lA3iuRb(^9TCTf|*_~8p0LW^t)0>)=sU>{rM?lCHrA(bhrKB+$+7${zv0^E6HeRcvf@1Y?zo z3OC{jqk64Lz}yTVJJQ_-uPR<;L%jcawz?kTq-)M62B@~tH&&VYLUS_%)mTY(%^oEW zLf(vR^H{)B9G;zZ zzb3#kmX2;zg`Plr%HG#oQq!7It9n7E^Rq-1q&xzIMj6@gRy31xL^Zv*jQ(6W7vgNx zyl3lck^pYo8sedjGI`8Ke2uQ&`OXb%)A{kL*G@TS=9_A+GC^!>WZRhbSe!j1v-6@F zfr5RCwCy+RC%98=xO1HU)v^~9;0(R=0iFcQ^ZQm{$9Ywz1fm8>_b+Q^NLnly&X6n6u=9Fi;Ug#a34aa;|+ z66;M$A#XKq9D7K5E6>iE;FZ#^f+p%gLoTac@W@) zgI&`aR1uq!13*Fx3!_+qyV>+1fzC$8SL$mx?@8ODt&oKqo@q_y^g;Exjr=;=CFzDn zTG~F^2}m0jsjGmjaKF3P);9Isj+k{_9(45jZauS7Lot_<@98xGS^pt$MgxjZ-~6u` ztyHF5-*lAphorg2_wK`R->14LHh)X#b&vA0JTQW@kmgnEku`an&Cae=M1eB|1hjN# z#88qA71~L)zdsv#0&h}Xs`@+qYmxN)j6=IM80+K9)BPdFKYxq79{?cMHspDnsCaJX zOpQa@*9O7(J6=Q<14`Wl;1)nSGsmA6187JGy`|_%uK96uED`L z-u`dN*JF{2=WfJ9qlzC&0Wqby#1E#bF5VtRr9qJ?v{Ua$Zs?pY=={CeMfp5@^Ep?} zb*oV92B4-m=m5Nk^v25lXhErZj`!VYe7tt$gxz;d^Bh3M38Y?Ea^J4em@PvU4c zI{_pSM)Z;ix?7`RB`3S>eJ6(1!NqR%)TEsC<1aqq2EsZd~*@%FTN&BsM$X?#EB3n-*wtFNA9`m_Asnb(R+ za*Jt8r9IfJvYW@ck67q`J+klidG(3S3+<23#m5D5lclWvwfSuHR@edG4vs!H*^<1Go2gvQU2xr%WxeTaYM9Hk36i=_BPCvqmRnCLxQ$E zv~zjggMuo;@n>8RcMbQzhdYEqzKLU7Itw9ibWBN*qYs zxwyjXn%UWiLR5{rz3o+0r3iw466VT2hJ1c8>TT>?0eG8P6RicMV zoxr*%lA2BPJ~vZ`ei3NFDlD!{8FD^|Ds3Ua##5*_hcOd(#VoEMG*)vjZ z&WBzoz`tVS<@{AbL|B&!>qc#!7<#sb^3}a6-$4CnFn(Boo%i&In)Wf=@`7m}FzQ}k z`uXy8g~&HF`?-?8HyA&TP+kv2^|V(IQJSvt z4NetLF(i1O-^f(rH{ZDVe}x#uk&TsLjBGLzVJQT9pZz*Q2*);p*)MF&=_bPsO*4dv z`RiVi<0qykC_uCidm=b~!(tdiy#Gk{K6uam^7wJ8jnVpGV}ucc*&cEsIZlI%6JNHE zk~ah2Cx9k=1WChEM54$0AUBX-(ChBtO>XR$egeL`5!tg|eUcpr1UiUc{tkN;Q>QA!~XSXV8&WtwGCHMf#|w|4$7y!3V!Z7iYmX z;Vmf!1PuCM%Y&nQi#snfD$kHh)j&63jLChg|9N#i_94%eQ=S!*Z`g>!hW_9Syo(J# z-^i<&f7iGxc3b_z$X<1!Ne&Sfr0<;D+0Aa`F;8Qzw>6~~}|Ag1}uGxVhLSrFkC z9BMz@+*5z>o6rB_+tStWgJ+KxR!eu(vK*#mUud9pG-nUTZd!i0&bsXP^?eO4&)r>& zzQwk(Am;~SBC9d2$ywVJ6|#88wt|$Cs@Him`SK!i0av2XB(u!%gAsxvs)DD*-tP-G zJV~Yve%?VbdGuBrY32R9n#j|(3es0E`5<(&9v??A36hvzjnYSw2+T3Nk*3<0)8Wyv z&YP~Aa;p7u((cX^w<9ybH2tz4UmL>*gTId^8~qs$Yp&Vl4GAc1FV1W!1^iG~p=9Q0 zl6@qp;Px)0zS{E3vk4)=ou5IINi)b_#pkKZq&xjHdL8D-*oHiXA(L0p@o_U>QCM5& zsWxlPMu|yupA;8Oj!tthNPnQ1!Ih046{Eu>+g1X3DA=dpnXb(@GFJ>m(rN7d0uxTa z)nlHlqbJL9zWeGoUJ{*0FnOFrsn|*o;WRc;{LFIFzGE^k3;QYfYYOfG-|>7QF`)hL zmE&AJNA`$MSbg{RDex=VpJGC0o|~Ff*)q4gMLO(n>(!Ve$Y175baqa0_kImFkz>KP zk?kI(*=9K(xcy78v%>^Z!D8M)kq*crB;e9(V6Vp7keg6FFO zOh5VU%Dm0&v%{9*LRS5keZ@ohe}wZ_el{8cK_n{;`&{#ALTehsiXGaQ;MKf+-0T6(&zu}N{*)$-w_0GhFceKkmuV^aDyOWYz&(fK%3P6BU85fK`IDAb z6fKwdNLI*$^y792zhJAPyTQ1%uEDmyf5t9dQDB|Cxm2?vPs3}s`O4%jFe->BP(64J7eK9$cQ@z|HiD78RDt z7v<#Cv6X5&WH-X{x0aJZO4BnN+!lIWnmLOu73km%L3!2~?N=tQoyJ8fq#ODczWAr36))m=TcvlQlNW#{C0sgMSd&27WmC z!Sf1jLnnL3HTlovpH2uW@%koiX0BjSL5X6qKc|VUR68NNk(R%;Tn|yJ=QL#6sC8;n zHch5Edtw_RcyB@D)_RY4C2q-++^!lkvYQS_bDO-Dh?cgBvRKm*DtEW++Z%e3VdV#x z>C#h0@e}?kcFWH`1KBw`g$m&pL(cu)_xSC!V8dG!AbtLUh1;q)9&$wEq zJ>s3B&!0G#SRN8tecpA3@0ySmg+`U1{i4~c6DkV!4}QPcRwpwRQs;U0ul;_Bwf1lT zU#1FOC34w>vVxjrgURS>arh^@^8D&$!Q;w9xxP@Iun_JPiM?8lz-Lb?!N@}~vs*M# z-rY0sZzgG4cQZParh{b0h&hiaQ;&}B?!1nX79w-8nMfu!+d44_<$93WSU*zA-?ebu zKAQZ&l~Wqd5qc0WnASv(zrp}}zYke5E+~PfdjCHohPb+<1mrUM^_C>7aT;57fQz&x z_~IHT=2kw8x`U|!;_8MU zcq2|TV@~Hy2kt+LZ3DtOR!$_Wx(;gt!aF)9GLN4YF24@135C}#pA?=sojZl4fXc4> z%9lT1)cx7>{JZWyYD+eK+_PcJ$AT%8`4aVLN69t`1h`_O$p8CxjCZ<%X)B&?T57vt zF9oh$Zo4r}%NjduszO(p4(F_B)DkgtrH*j(?jK*9s?pV^uM3`>CJiGz84J*ccw^pt z$9D_AG=0gts}i*Kql)euF6We^6!K?~9Rzh~i;NknosohxhA!WoMWRs3+RLbXm4+68 zDxidG0<2<81utLZxY?dX{PAzQ!+UicO5S;V2uCLdZ)_QJe}L;vWNu0EjDflR3)__e zOv9y((wh_iaRVfSyQq>Kqks79)fUQ6nP`D3gCRAbi&OfW7SxD!(0yn_eII4TI16fE ztmHE0lb&7NBLjN6k`Sg4sa+r|FP^nvcK5tm=KmI5b)TCfJGA3p(p{F(87SvKjMpGR z%6IIW0fH>q%Sbffiqx}P=GW5nP(Rg?PW5T|aDCxfK248_UG7UUrH0x5-Lf&*fqLg6 z3ZZ&@Rstn_H(XaUKMsH8GCv+V-!y;3J>vR!7hO`BSE05*Hz4)Z{Q|D*ZG^9k&!+_Q_gEOy`8)LloDac(xVlU~OOBLDG`=b0j|HXDcl#AzmMQRk<_sq;Sz ze{mmi?_R!svf#_JvoSk=DVw7Iy`z^t3mr4bTJg_flweJ2uKT-ILPD)VA1^%fU9S6m z?(>lSri5hi$(TwvPsUwS1j|h4y9JDLohDw|^?z6J`xPV?-=$78DDUL3KD~Z-f|4__ z66sD8294qm{mlz%l^!5>7N;C`^{7}-V)GsywR@w-ep1|5L?_t%eg*HyEUCZ zJ-+H)D;-+|iYv*bI{r7!91k_H6Ou z!0@Ys;G&u@?mnyg!as#Tzur$M3Plwc>oNz&0TjhHd zQpry||3ymkNqU|+fHWlVbcj4fTj4xkRG!&SEexRb$uX<@-@E{cXrb<1Gx(^d0U4A^ z`gGq-aZ8)ZOH%#tOE^=l1FleOGzxC|y)CA>ovY*H;}OLn_W`yaEtJzIA7H5`zbFX~ z8NE)2ZdGc^sOK{saM8*9n47{aOyWZ~tbh(j4~#LQ|`OvAB0A_y*!GRYC@C z^G^4!i$|xYu^?mDPup@YPE%8sVfLWWdoZYW@hI{|!5~ccpiWBlDh7)D{UVEn)YCBG zJ$(b*b3}Q5$$-&g%PoB4BWre*3aaxHN52!U7p7Se{OCDP;ULPd>pX-{u&i6T-*CLrG+52Q5Jh<@k@I zp13EJ+#zH%%6lOMjyx0m@k`LA->k(e|9w}vOqF+M^B;kdRrofkTAsHtVd3z&rMsAw zYGGdhPs!w`tkoSsIr}+QJ@(z!ZRsA}Gi({&g+g^+@uSN7MOO#k5i-OXsS3O1cY`~V z6XN+?L9m8MJyNxphYCej&vzdQvi;?Idc!vqcO}}yWTK6SUndCC3|sg1exWC`->RZB z4=iv;g>o037laYBBSijLC>}}Bzj%O3owE?55s5IGg>z;rtwQxS7UGU&_vJUg+j0lN z8rcDep8S?vv@!y$x8rA|eRF9^D@h0Tu>k!9;?u#)3?;LfXrv^i}|>r5UpC z7aYkB0G7-j8k7b%VbB$Eh#U+$X9{sH@KG!0{l3Ss=0?-0ysyUk5%!mP3Y>%_4%*?z zVqf%EIVWSVOlb9S=K7WOugpmv1XYy?S+W|i(2#5FhBJT`3_ji$gX+O>rQPk{3OFfm zrnfI-R^P*5%sSUc@9XdOl=jb_HFI@OfJ~l~iHmzC`$)tMQmHwXJUas!-@rP(qDp2k z%3yvJb$!hXZhrN$rEA0y3i)kOeJ7!yX4w?D2A-f>otQP|wXfmpR}G84(|Br&=J`A7 z`hFptKdFKf8~V4i-?~R!CKslpFguH*M}}>uvI z&0(Bz4Fc78I|Lm+aZ`Hl9*bRgGILr%qDg43mWfmi^=UhfItCkVqN=WCP&`C&WK~}* z1+}kAO}u8%N8!`-&;Zq$4x=ITK1*>fU5Aao4M4wJq?Sr%eN&NQP7SsFOBv2iW42I0 z=5UyEKYuQ%nJv&G^OGSAt@xL89x2#Lg=lqRdH&M7-W55yOmx?EJ!2!j^9a?AsL*86 z+tfBUO_-X^Ni<^%ljOt#rOCrl2=s(&+j-h^_Jle?X=Z^oo?}M&(xM_TF=o~&VHbkE zTnaM;KiY_gDAnwaVaxEk2NLfrnB|Uw$XaXc8sxdvm;zP*PhD5s_QaSHRG>78vi^Uk zk^jvmECj?J#xGoO68@|aw-7Mp6FJ`1jCG8;Kf-D)1xr4q5`a7WVfp=j>CZMW``Xxk zuKC^?!OE{*HmE{ZNnB2066wUojCsZ|L6byyc=tX;r{6aPUsKRA_X7)Re7}~t0C0>Q z14W-o;{CljA~irgC_P8^#kyRHT9=-KBk1~WouTL^pRU8kx@~2eU-HFTl{qc!^luVw z91Grw+@&-gwy?BTKVPfAn=-)F@VPTY>{c$fF@XFGj+l!^Z->JNr%O^+j{l2c!;yKj*lRH7 zFhm-iDjJ&HHm7coBo0RemSFL6V@?v;W1y2rG`)vP_2_An_bJf{T=O29!u|iomL6n* zHveHOUiI(0%H{S}V07zWmHfoB(nkkmL8O^gJ6*NMDI8i?!D%c?ja`s-jcjHAz2_ll z#j-u8Krqs$f|y~Un8~EvlqoR9ZTQduHGq1zcMhnuIGB{0 zYqc>_lAeWsA8hRfdyDnO7n#2Z1X%B9{ccc!vl@!b2>wVol^(5=mRQpKB$>=wo&Pkb zz00Rg@>#}Jc$hXW3Kkv3#Que8AHfT1i?Z1ocmqOnBNr}cT`>nSKLf5+M8pszJIWfI zIk#&O!^K!+D4aDOSsB90%2`UyT|&=)voIQeFwZ-yd$I95j-L9Z)O(+QK{~$ zKxK}CsBbdR$H6DyuS{4(GUP)nzJ1B?TNDBZ`2d4G2RuCJDI2rMSCPBNv^1Jt*^1g) zY#alhz@u(sG3QXoa~SOHqX^V6Kp~f}B3MX&W!qGYY7Me3y?gH-IX@DgzV5`r{H#Dq z9(wcsA!{s`IaFFk-QU&oYde8fDmPH8OjY~*U~>D5ka3JtlPUD&DCi`sudQ-$O_X43 zY7nSDd(?3-vh;5(Q6B?N15p6Bnz=Fn*k)$>Z{b6NKa&U0rh{7m`FD<~+(u^M2tMWr zxVf0^M%DuG3%!%KR3{Al0uXq`TN%&mc{mE`)zcBo9#%VbwR%7`>_GN@jJn2HIc6kdD6nq6YKfuoQxHIaN(e@r<_eV* z_4p24r7@z9@o|ga<}wv1Hq|qQ5(t^p63x?L$Cxo%)Tp^J1HKXAR0Jde^p^J2#4{!5r1NDL5QNP_rkk9dkAz;dPriKUP=ln_`C6bqD;H@d6n|l z10c`nl?L+P@jus_Vk@t`vLL&UXYhk9puJw!E!Won$^SR_sk@I`iI49?PqTg{1HWCX zAM`U{3sp48a>i<&CE1m~EEy5+80OUDKggf{#PZL7o;1O{>EH67Co~KlMq|4!pw#B> zZh(GW;BxD`h_;>d*pcYo0sZ@@gC9TUA9bq?XrK5iN3)?x*6oN0gL!qLEpfilQR{VL zJT_k1ty8w^{qH|-{uPOE;Nyh`_z`fY6DSA>kT5Y4sHDk~r%0LV*R`(pC2&OKpEd=* zw6Kk+7-EMuj>v$(w;Gzqz~J+b;v6^<1JXkHmf_e$Bv~3)>)l^*37Yv~lw1NnWot}K z6A)_rsEB`EN9?wl@NgbB>!8&-va(B{JHRBGk*>U9Pe>91o7V(It1+>!ls7TlC_Wwc zgS%w{4nC2{DBr+9Vsl);CGCfHmoC@)Mv_WsPv<(VahRCY!=9TUPsTjGe%oltv`b9$ zP?iyk4NJbGM%JuYJNr?OI@ny7^<7yu*sKtewEF9yL++mQOh{f^Du>d_d0G=A=J{z9cYYU|_f~6vLquO7tW4DY}k3h*1Qw zNS*M4h+Q;OXUd)fG07hRByYqYQD4s?FgjQ!cQP@5&+Ulxx6%^V8lI#Jsl-jVBU z$G!2WXuorhN905>x(P`ZIgm}?X%iCDWfK6<+6_^dy#v<=*oi$5-7)sDTLh&8jRVx@ zhwp^(lKyk&fF;W3DtmQDd&Izfhi$SQR2VtFB14rc9y5(&a^F_L7#i1qlnv)Pta#Lz zF45%GG7qk@_p0VeNse z>hT9*MFr+BJ9Vpxao z;kGyW^6QokCR8xWSSwx#GoW@&9x-l3b@>B()k7sBb!R0IsHI_`1(Td z*6YIm+fjFPCa*8-PT=unPJ~4=dk{V)Pr?Lcebq3stHh%2%3qgqO~!lrFz}5!Vl}#x zdnH zCsoF1oc2X|4u5ACo+bDxh8f6EE>|CN?(QDDWBviH*MclC3Q?Miws?OolyWH(Q*SVaNv zlj%M4`GRb@L|^NAn*6I+_ovR1n;eezE8)emp%*kRxi#|{Rzd$>$wsOT6U;WF=Zy5h(Rg8zPNUezOvW^2Bs0(z^aRmGWb?--J9iC-I zasT3zB{?n&^I_pgdbioragh3f9IuO%EPql@)foC~|9BRx9k6B~>g3`2>##HY?WP^E_tcjTlc%G@%55QuJM)dteHOZ&2Gth#xJ@ymg^D0{H?mpbHWq-0={W89rC$ye% zw9O9|U~&4L=5?plA7MCsI{n-h&$;~GxjGD{=q(U%jpE@7^#}LERo&*A!V+e#YEpyn ztM?%5ZYG)W)hfoo@YYK54v;7}hj!b4_t z@ohK*N*AmSA=DB~Sa5tb-^E#g3*ZYn0=FZ#aCorzMDjvDO!Thu)#q$u?s+@*zZX=^ zKX$GqKI%YbPiANH-uTWZQ9U)q3#IHO6aXc$HBY^#`tHj38e(15SN(2tbP|Oz1`Xbx zN#8@}FnDwzsz@A@=)?|6ydn6NC+E0GGd3ZDt4 zggC4y5Ub(K>yf_dN>g zdHT>VZ=}%&D*x9P@E*waG066pAlp|!Hq5xP)07Y~!fqLmpb=4$SSu3}S(87cgH7aZ z;BuT~d-pmTW;}8#;gyU6$^2$gtG`o1=ysy>p5&r&jfyXA!P4kf1F_>>!qDDU$I@Ht zLWU;_;964P?NeP;j{yEOz_PRx zUg2Mbgbsxr$HNO_A`?#`*-rV-51W+I<&y@<=Ne>W?>gy!CV*QULUxPB<-j93Im9c5gA{etg!UU_ zap?$a5Hw`rD6A4-FW|G;6@>~p<`AZ#EJxI-+G9dl0hvIo1!Nyv7FocTCq>Gig;|-; zuGW=V3G&-m0Rh6qNT9x(gv<*MVDlZVTaIc71Ojm$4^NN~OC$TW`2|8}qm=BjSx^{) zA^AUmh8Cbb@rjfuEKfwU@bF|#WE>VA!$6U0yOL0cXHSs{_ceh4xBQ2oy8+koIonwzJkG}!1e<1(L|H}7m z5Y{U(*j6n44dln?6AkRKrI+z!Z3sC zfo=`hOxYYRLmfwOYRmrvGsBZYaQ;w9Db~Clie*kyuueaz!9jwTo2<6TcLlP^4$~v3QwPGlSLp9du+oUzl z#(}|(>{oH}OK5?Daz zRY5 z)oJ22oW5?r6@K$+mubR8F~+stxuUjiT74IzePZ;t=E~ZZ^*2dp?^gru*HN7hoqg?R zw3SAHqH_ei$3eIpV$x`o&%e&q0Ql?)H%0J2F%UdUp&}^g8W93{#Yf_sC|{B&Db4C$ zOZvD(DyQ1xZsoR0!keigVsmZkgNc_ax8=E2Hj~0XNp-d89S$r8632+zD6i!Ft1B~o z>fFBmT0SJP3hH!6h?5pNejH*u`d92Xk|eWW!=}^w5cX&@We{&RYOjNnhIsEy7P0$#Ah1myI*0tSU zvm-kEHerhpm2??vRoXV;kNK%mH3l0auFE{|pw`y80JH=BkN8j&@PM5m!7n@oDhgNg zpKv|r0Q;^nVIFshnBdV<_4{OHEr|0}@dpPtF~7p$RF>J|%H|-oM!hIGK0j9;#R#Po zrVeMcw3_s$fkxPRCeP`%MX91NsbXjqf-a+zn_If2)0=zTxXyor;P9|#;GEesv+jq^D4hK$#w4Q#JQk0?GE}IMb#GahC%T}{^AXtb8f|TAASs3M8i+E z=lbenRZqhPgLO;@1Vk3G|0l5Mmym}z-Fy%<<~&<6*V47k@}(FwDUqYb&?A{YOVM0U zrn0h;Hu6?_P*2gPVe(iig5-KVQ68AHk?Ul<9{;DlH`#TKblCD73bYt$z>fFCE4+#- z3ibXnbYGEZFfbd@4qhkdmkEY7@?B!XLjbUsxXCB?DLtmTdFer}8w@ad9+m+r2rp{I zr#Jl`2)2i?yy^s9_`JWJQ|x?HCmzU!ux|kfy>k8~Jad_uP?qqdk?<*Cvu2{K9g=L7*l$^hv5qrBYCFBWW*^-F z$VE^XYUry-E!H|-TU8$Xclt%5e|i59b8QS4I2PdV;Yx(L;CAl;$1(w$7JS&0`&s_U)8TuH zL!7Ww)x^-7qC%7546JwK0H z^Hvjc_+)*+v(h)hRvhbB57H;=RzMbkpYhp^fCrGu>Yv8>h`5Q3LR#Ln+Anny;sdYgN! zyYlq@n;=U*&pzL3-+1hoQ;Dmvd4KQ3y+(S=rVksuK#@Iv;A^Kl3NVRUNcdoY1#VcN zOBmFZJg!)jg}dm?nC6(CqU}zVZ|Km?jsDx>LwfzI+l*L6$6J;bD0+=&SIVWBIb&D2 zoos$++eEC}m6_`2b2XdFjvK(%_b2vg&~aZNI_}3w7$HPf8KwQ(swKj265ZAzrk6P> zH_nz%`iS8LJHM0`w%YPRjdw!@qqc(XT4y`1f@Ev$ER6M0|xC71T$PhqO^=`+3k@^X0eIaJ4W zM4N&5i6+$gbLqi|j^RN6z)^M>z$QAW?*sb%SC+_}`M(&=x9u0lO%U zpey6CF}Ye2kv8W^qkl#>$bYpf)Nc=ca)RGQI+R4GQ)Ck%ih`;rwjm&7kNWq|c}0fK zR-h<|tZIyEzX3bk@eg7Q6-4+G2MHanQMVQNpa6M|8P>mowQ-o2J~?mudTFrPG1L62 zkg$QAOwj10PU`Ag>>^oftB+smAqS0aseOKgP^giMt)||8f1Hh@ShpigE&ixv3iv zt9Y7yq|5gDZ7ylee8+#WZ8b5^|Et{3s?Y6b*N5u!i}dsSunha)i9GYa-ryRG^Z141 zJr7Ta#v2ejMCB^2ob+KwZ)iy6kUlsdQtY*H6DqFKM!!=9MdZWOjRs1BNWCcOM8s8# z#PkO#(u6U3m?9cg!A9LXN_Vmw_t>KTP_?_8N||oeIrl8E1OD&>MTyFN>tIreO^e{N z0Oy{Q7g3<73+ONFp$B?wbizX0`#{mC0)~W)1V)_DA)ZgZI!YEDpn%^WOw&7CAkHic zSh}5AS(y9Es6HjXD9Oqn?q-qb{!mS9&pOf_Kdc631sA4D2baJ+6i|VIi&eM`yoZ9K z)ufdd7C;CrruL{hFj(4?akvj0@^fprAfHEZ@l}c{9gO6aC0-4Wo$wqF!6eq2(2=NU zT@X6cwJOfn*awBCQxn(wRwq1Gz#8>M=z%n?oC?y>% z(+g{InXgxWt?(0VxmX1G4)6DTGOMWdP_ zLS<2@l8Vw}lp6>H8Cj2VIX#api?5UWFY+yZ@|_q^QxKWhqHxI5G|c|qijeqPkbKbi zoEvO~37l~WTrExjJ|DnsD(ZVbOFQjJ`20PQ5`@f?eqyPHO9EUj&AP%ncY@s?bXLkUAJ7?3e9u&M~G`s#h!J{H5?XPE_d^7(`lod@Y8e z`SLuW$G@iLswQMD;4-}IUIWBbCWi)I`8hb2e9AKhx2qn)St+I>%Eo9i!s0FkH;*{V z^IVzF%8JHh#d0(H(Vc8fUe}@AXu)syw=xe4c-|7Sca@9KoolY?OFtp#NM5nbqtDRf zA^R(WZS9`_6t*t2&8r3pM5#6-|suujY!f z`LX0@F6ADuware+oJz!+TZgxIWd@RcDZ&e!LL>>x$e4(Ou4XRbiI@v@%X!Ysy;($U zLW>^>kqdghR$k}P!e|vb%TcxHksj-@-)c}Cuj{Lo-I~BFa`f1sGLMeENI7DcWmYrM zCGLwzN6X+;W2YAL0K6m`Qc zv`MQO62EhWaTS`7SrK)>4~0nP2d?ULxG+(k04)=4lDFFp;NlGH-GzaFHB7{DfvW+7;%wFGJ|ox*TS;M%b)g)nKwWt5xuJPO$c( z3X`~5)p}i4c5+(QVM^_%AiUS>h|X!ZMszcD4w-#N@nJ6O(nVMrG%}e(%nxmYBoXXU z!Y+gbHpdvI(e#)?)YeJ5F~rLpSAcw@cA`(uWEDdN?HZ=b{9nDiI(5W@M28vnt-E9i1Pl4T-ASJSq>>J&$I0l=PYe2ooed^|Px@ z`1S-ytPtf?E(TZpt&AVW4Hmch$;x9wkf)EyVT_QXq)gB~0!mzBZ+#G@3~*MSoMXIx z?S(}1T$21qVpYiNuMj+Ws3K|on#hNh1Qf_xO@fE-=eqy7Pp~Kuk&SGyeb^%@#qK8Q ziG-|SGi6%0PLJ32o2& zW!U~z^>!8B`?ljMNacAp@S;>1D`tTEBvZ7a7RlavavVLv(rPV#pzfvQQ%z@{4Un%h zTcjxp=ZjS}%be5|(FPvN~&`8{pUe zYh2e+X>Ixe0|tU1pVcZE-DXAy^KeJcPIut)3H4QAERs?Ah(2!RRrIGBbTAZEO=8(@ z@(5??8W3g1*+hm4J@r^|J0|1DE=Mc37&srcRXV!Qg8KYR6>sUiBZTs+)&=^#OC}Bb ziBv;&u&;My2ZjzFn~>+E@lxTrVy%?;)Fz2e5f!J9=zv^E@&d@k5sihaKKl!P zr6xhKo(540lz$p!BKiyZpNP_v9SMm=)eRj#=^&MvH#`Uk2#8ZJ_m5}k62ftn(Q*T( zNT^001*8f}HL5d5b5;?|tHfiU3#eR&C2~nNNf|PQo|^6kP%y*oj?8Qll2i z@*|(2&&Z{1tTrjFoVaYKMM5j0%1e0!CUD*;ef|VZ_Xy2Kw(VR%`|IigT4C%J#ToSc zi=ze=;)?Fte0I`CA43F}gxZ+%^LH4)-Ck|>eKSp#{PQxGji8nELf_>aNt z18?FK8w6|PQpaaJ1Q+cYFl$ApWL*voG6aNy^xi&t5&jhE@d_)M9*Nf2`hk=GYL0lVpkvgCzJ{E6dh zCr4l;=+XXwBq)E2<^f6k47pgrw?ks-AMIH^YF%1VQ-mz_i5r0{1EJ0iP*hE{5%nsE zc`1$IGDiw2ZsD99R$T7a$(T{&7hJIUvU+I@RPQtB#R2&-Wo1=?dm#uY@r_=hXfe!W zog)D3nCd)^lFx&n$;i_zQkwF-4SQ=ufp^5UAOb0mD73HWR^%Kmp4c^KQBz-8iehyI zom)zHSDJ5@(}b)0 z#a?+&-s!iVFHMsBVxG^+oMJS#r9wPakUgj(I#D_ zI<(cGtGJ0SB=Sdu=cPhD7ihAwT_5^FS%J!@K0|u>yG{?TGWkKBJ4Y#ml|BKSUh9qaI2~@06%8ZR0{hgx zYEUnxkOnIN1HS=U{64{QIbgO?GQpn~cim^-%a?a)j~qY9Uq(Ja>X>0a9Y*S?ent?q zEZiQ71EVF1&OtaV+8o@NLIP@%HDOp0EbWg!CJ0qg`@M^x(*WS?~=q>?iZCN&WCU=8Z~fNL=aZ6bx6 zK%LQLP4H;l6mn7Yx;JdGela>ni}~G@)2O}9b9cN|QY&axm(SR%63$!-Y6yZl=GEL# zT;!oYbLyNWG?&K9EF$QobRr{Qe=>NdrUDky`CjMN^8sBS%k3JWETB5OyM*nnoH2+? z{iBzIej5Au@0=dg5k(!!VPDRN7~gsmFlX0gwHZ6gX*IT3LPT5uV9~W)DjzSRQBAp6 zq-rJ#Q>^@?(d;%=2JY0c!-VMw4S0Bm1|L{j(mx(JXj37nu)lR<`(>8UkH@2`7A0on zHwUPFD~$0lAbboa+d==A++%F0XQ<|ylTQUuez^b!B9!Kra4B+P>zkH-4(qTe-3v9A zfGi#^{5_A3=}q?iY53JxDWcs_p}unzdT$hQ?*JIoEYNX;6DmBxoso5N*5jzudvvr@ z*Jqy-stqMNF;g<+_&KE-dYsPyLlle3gw85Yg8Qf?lat5+jc`&J2c6TI4l=pT4KztR z1Bb6YxriE4XX2Vis0ykGQ8ue!qXJisBs;A!%Pih{UI(cN zu!tGg6z9oIs{q@l=7t$;?+(J~25w3uQgl)0a2E4?*u9R+D)?ED4fFbsh26O5+efajj*ZO(=_`MDD<Zwi?1qFpGpRMhZV&TIp){P@%p5-;doQ2aci0g;L%qqhBTOU6c z!y5`cnM~jLU*dPkRqp(2V45z3+twVSFA>|LV+h+bMINoci##bND*s*OcIak}Hc6x~ zby6IT*ySv6)NdEW2X&lj8ISC6TnVhd3adSm#X56$yOGihyG;>r9VA?1eTezkyGeNiq)WqMGj z*k40D!RA5+U=Mq@ia;}wMKzp<`$01nHN5@?kcY<&s|l_rZybHHBW(#_GZZ&A%ZXnC zQgmrW#2fY=3}raA)o1rVvt;e^Uv)I)!i)5wwq`boF=r2ocXDfI`)i7u^Rw)&oO{)4 zMrZE%nMTj@1UIznZ~VW|>>shAAE?jtUqEC?k$w>85FREmnw|1d2O{Ur_`T5f92;% zQl2bYk@Ef|IY`ucU!C&zvjDEkAq8hV@x3#Qh2ts)d~#p~9IPT?nyB#8A-U+B@keGC`oT&)o{`(fdFSm&#H30+rnk@9-#u<{2s&hAW>i&WL`gJTVF0h~ISi zooN#UXhbd$KJ|GLusy5*(GkJPPw-U=l&D;+eSoEj(1BoMt5zYSf!qdn>`fGWsNy!u zZ>gb8Vvy1?))h&Ao3klGDS{@?_%?d&=Oc@b?vu$>RF8(Kj)8E1L?93deZCi#wbZGo2zJ9e>l$tIxQ`4GJn_Ec3*ahuc*qle^>uydg!{@iGjevGEHssG ze3y~M?Y2pIiK2OBKUIBSpql-`AC8^2VCq@ymGkbR^D}Msr9pn#i&tKnn<&)gYMBFo zVxo~6>&3$pY5)dc#)gLg5r&BMc;;`Ci;1)f_!~@rYGg5v0TySB`N8<9ClbdEiGTbm zLbi?=F>A#$^Q1=DlICPWGy-21Wf)rc-_fqi;1H}=hXO4 z;Bt+1F60qgKnSVgoUu0PyTj|F(dE7rBPJzs)EF>h!$W`wL&TVrc_W>93&F0J2W(nG zZ>v{mG(vT{8w3OdrsfluLr-wc_Qnb26erPd!%L zJtLfExL28Q9|hSch07`*`OY|X0g}@~Quho1}E1ogFt;|%3?s5egeZgi6z8O=dsoVOv{ zMZ^WJa)*cGC*)TT5v@HO^SB*&8D^Xr7FlC=jV_CBjj3}yVGBf}D4LF+b3L-yQ2xlZ zHb%>fpm2@cwUj< zj_}Ed%p>FzM2lUB#{(HG&s!q!mlAa7dLTtc(_d4F?12ydTh|vh4PrMkb>@%bqP^|1 zCc@@)u-$uf>vlsS(x7m1PE@7Rv|eQ?otMaHi`r_9zlE@(Hd>3Kyz#>k?{9-{vsz6W zG)Q<`+o~b>;_FG**7h4>BMi^n%pv{>B;~rw7fEcAHG#IWwZAQ);=1Emp21PrMAR0Qo6M7o}IAdd%VR$8=Uz+6FFn-ciJ zYJ@%j03hgOY=9s@;g>iAezB(`x16tJ{5RK7Lc(wR&|F71lah%at_`%R@xDHCvM)j} zOT{10;4tT($DWXNUowis9;K?#j@rLV5QN8_*aYIFo9nxx(>UD)1KWjVFI<#7V1}m^ zBCQBeIO5hSLj1tH7>NHg93MQ<-uQ~&IobCX+Y#K|eh_c|p+^NV#3wm60~;R4jH}0y z8$;t5nPk34aA>Mpe-&zn_gUpewQOa!k>$C(%zdoOX6qAr(?s%A^YZ*{zMqgB<=Ol? z+Wsw1jD$tOo@Q`Bko)gNzY>2r)|j*Yu92@)LD=ri?oT-!GvDp2OsMiB}Wx-5qyP$T@;Q{if z-&?9)FHUeN#NA+pq7y`R{Bc<6?*h6EfnG*QxSRl?L;=#b5%A2Kl*@a3kI9enw-I+~ zRdk>u>Zmv-6TF(}d0JXp+Clr|j6yJDWNlgpTFKa1Bp_M_vGRvQ)}Z={^e1F?oNeRu zLEqn0?q8*hq%7nLZqUzvIC3>neq0xtS(+_;^`1PMa4(@Ry6L5B(2A8o;fX13SJU`7 zuU5H|lv`65^G+-O0ASYN;qU#17KJU8aFxxnpk_96j1~MjkI;3qy zY;jaG5^)DWMXv9VjdF4)qmo;c&2&v(0s{tuAP541KoA;fObXSl&u#tQ+pE_Y1{Sv# zV@Xc>qrg|Xr$SH@ON_yN%4MPD@>;cXQ?K2jF@}BLqx?yA`{pdKP3ooY5cV^=0AJWX z3}1)gt6Kxdaqt~sv42GR#SVE^7A!s9rMM{}UQWFbp@>--2X(+uAFcoZ(1#A!YPiT~ zgYleQ}>Oq55P;`tik0_gT!v+m)h2EHkUH{K%oA+{8LNF?moL)ezT%+tNkHT}l4t;pET ze>tzOcAnx8LfD6rfA&k+zQuK8!h%D6d$kIAu{whU{HXEE6ipLszii-_!>mvX;6X}h zVA~RBr7MPk6ZTa@;X+FqsS5%Y`Y`CTAVu*in}U02RU7i_jcJy&$3=~F zb&(BR6f#Do%TZF(Sp!U)M3NBBlPq`jho`v&*dqf`+O$K2;!B0*|Gy|tQB(uoIv`vw z##?(2S9zCv`gomwj*YvvZVr(p%klx{wip^Eh)yd!Mi2TpbXQxs(Hss5kBvE?Gf=PY zXhd$l}ppuikfgQ zK@b9uLP7;n%aj7n;JFy_BpFy!7r}WJVURxv_MGslGjYD)M3wiWvOy~vpJju`!rk;x zL=N^D-*?L~FdlsA6z8==O4PD&30f5Hr9+kgc=!`ifA&yx-ph|FIpNg#*ZBPa+)jjj zq;a=93C9>H5I4J)L~&^su+4CcH%SFY+`(Yu;A^Rshj00Np+jh6ACD-Xat{o$Q2$&r zVf}bZcvM;m`w$Q;gFJ~-qw#sXKO;!!GvWJzdd61{EruKs2d){;TEAc`M)=}7wIr_Zv|IN3LSvQB9K0Oto&A~wT=E|0be)3_$K zrU&QqvQon|9xtj|RJf>{l*#DzG>Up;@KTcLAVxwOYi&@EMi{)Cv(prP+s@gH{C1kC zIn2E#TqDGPQHXV&51h_-_=;eh`?077XH;Xp>Q)km!{Kb3X!eJA)EU^{s4UdDj5|q^ z6qyfUl4u;Shp0{-k6@eH;u1Q2;>^*o&NI6hbF*Yz%^AlI3rCO-LA_xC%Z%m1FUe7; zZ*JxaDlLq-G(Smx@`lznts?g`bA?q$7yO+=Xq2qENzIz%(s--pRjl5U_c$|7sQr{U z)G_?XB**$HEst)IB$NG3QvC{Zmn~CXEwOg3G)VnruIQnkY>KA0*jT9XlP#($6v_DY zNhTZ?Lzu3@>*M^jMLG~h*D$$d)QnYF4#u`s6l^BOOA&z5C7*#*_s16bp+ELG2)6;W zIEffGbg6$ub$XIJ0APk@e}94oQ@A$QEHWzG(JKmJ<8^P-xKn1o_T$gIPxsuH{s(oz zto7zx?nq*GQ<+p$z%tkz`%pj|gA0g&(gvB=l-BtNE)#@^L7Zdi|K?0sTf;&>D}`EK z7UI@$K0b`4dgfRg>uc8uG!Ow9aul?blKevDV}E;ZcM9HQq{CM$wVJm|B9Sg-V!`rC z&_QL%gTS%9MEm5o3?A{UX(-g)00aq@GM89pK&am{En1Y6g9CH#J3;C{G6d_31P<{c zr2)y6)q{(AX$ByO4OGB0C!R&808Qv`%k8#TrKi)CCok;fuFlPhbUL{-Cb`=rSoibj zay*(8QE1wQ0@Ou{NdqK2FoZ9u7EyJ1g6Zk$wGX#ydb{4=+UZeVS%*_mgmZhVz3MGX zI&A3*ylhH|oV8rQNgfb;z+pAd?e2S~hwRkD~gP{5>xn72a-jp}_j z)bO`Ga@o`OAaf+vxwwXq#U6jj(WpLWsef|$Dhc7pRpJ$Ww6Dlhb9G03RAF9ZAaD?o zJ%WqOMMLmtc&k{aznku;XjB5#`s7LpPk>lVLm&2O)dzAFe>*YV)T_BZ*r&xnD1tZ~jqITmaGJh!nCehFR!M z3?3;JaeQ7{5}3q=#Dfc6+=sCAte5qm4@_s57$5MGi4n&cetlhv1> z0ZI6^-D=M(R3w*C4(cs3O$fBC_C4lV*=*u4JF;wZpTcTYQv;W(hCH2pAM3rI?6~@V zIz3S0ol5mimT!FZSYv(hN^yP#WmDo${>CrOo8|<-0(6xs^w%ku76XXhrWa!%oyyOO zC-_nRg%|1R_dD5CT@$vW?}y;T#xFa&q^~r)#e=Vu*H(p!<^XPQ zK}N(b%j_b7s_I3E{NCt*FICt+xvgrCk8_WCz?HrV0doXhc`rmGHoPI7uRe(K=Q}6?zYmITe{G$IJAad*gp1U<*lq@*V>zy ztjrR4#kqJcvQUpxOXbKf@yeCMg@)>-*OxD4*v@O&j-8hbGd{wc|Ek3*r_JcD*^Cu` zxdP0#J?FW?Z65IH9=Q+T;7&0mpk7E-yVXE4j7DXZXvcFtyoy|a``tuq1uu`Cg$w?| z6*>@wd!RS<=b5EZ?aVXJOXQY7bfFAw(BDVs;!|RY6RA976jT&L0F$QFuad|kh19H8 zJw-f6qY zI&xJVQX^=1#>7Soo}?atfI8n{W|W7qx2Lo=mg=s2n9oA89YZ4bPmeb!TXgf)mQMBa zVGPEs)bOpFhIGm5f?4#JIlti5Al_AQQEGqLV;YKi+6?HKolk40;oejTLv8r9!&_yU zi@~W$bYWs+rD^!eH-KvQcDvslf~-BZYlw`za=829(mct zfqfGpfMuBgN_9hDqwEa!ElAhEN$aCcAbpgbd zRZ`HSnTH0?FV~@bf(&M5~PvL+>dbJ{`#AM(DI?Jae#{xs4b#3$A|OP z=obP1Bqs9-4<26rQ@s>)Vkal|wQ)-nX|iK^r6XwDj5TfjIwS14oGR{Ef%pp*Iar*w z%SSzBOFZ4qGfcZ%VAkd#u4Auqk|IOy#8*0_?LC%& z4?m$(7p&Ze2dRVNP?oaN@Ffgf-!#-4$$|;eOME64;--s!Mk3+xc3%P2$qhbMtS5Z!6YG$&$eIVkLXQO+ zA?sGFbXOk(*Y=dz?dr4puxgTtTctZS-K6f=4TpUgsXj<`kUcGd@X%Y;)81rm5dJmJ zAa@@Az;#aEroLB}d(}g-yYXU|Uyt68cK^nXt;ZLlcVp>$eEG*a4q;YE0wqR`x36|g z56;$PS2q>%o$gsao#zi4xOdAehnAZwg|TIiQn6yNm-6mR%EswT)LRDGmD*6uq)MDPXoz&3z zvZ@N@?R4;$_q+g#=p@LHb)!LFXuCXZNK*g+001ZgpJYAgQ-jaOp4$OTJ^P z_N90*u?8Q=;Yf54_pv0!>YJLpXQh8geH?C^_j#Mcq5*}A_(c5SeTLA8EqkkvU#mdz zpeQcysxF&R$OG)sNAD7ehz`BXc8F zyNndDc%UODbxsM)&8t9IT_jZWlc zwU5s%RHo~ndyyxZsidW7=A8$%YtYZE&|>#|DA$MJoOvBvFu0d2iUpsIjAj+91CS@y zM$;>=vW=RxN)snob$g}uP_ucE z*PB3n{s6gEH&axLHJj>pH&vdP%R5JhhD1W8C+;|5zNIq)!nZ!NKD%~Pol2x5>8K%O z{*k{+T=Vy#DSlzgVz>W4uNld&`1Hl8`vbCBR|#Jwd!F14Duuiu?id!h%-Ni3a#8@x zaDt$qE$n$5Jt$CLNmF0#t+y@n7{qKA>3mMsyao&wobrdbh45=lj|aaG?#BH-n^u?O z)QEHCXkEgG|L0mmjlY`@#Y>A6Gt@;E=u$Q6l(y**^DQggTsSO-l@UzU#ZbRQ#R@w3 z@2Ih7a>d3}gHy@3gu7Jh^h;W5TLf&_bm`R*`aHWYfMy_#|wqZ)EF!=j^;xPylCKZBr+I`A5A`lYa64)%ZUh$b(~7;x%zzEn^4A* z1fX`6s8QK%%Vr6Se6^H+4zWTDBIl^SRJIc=mo4C5!Yg#>j$2jk!kCoYTG5Rfh~n*N zY;ic8y67xkc3fO?Rgk#F7-PW}Y-PzE|LTbaDh;Sab(6UDV^@vRAuK%i=L~$DYs%M7fHf^ks8TCTM)7+9|vOxGMoz z*!05?$)T;j!?cSj@U0~(A7Uszc1bL}!vv{uf~cg)l8@SQE7fX#DG8@YsT8ls18N$# zKGNNzeRN#)sLXNk6K!u~7d@ta;-rO+i|-&A05wc`2n0bwRk^_75d}7B3YkS?7obD@kh(BwAfvze&=0f7l;U%lv4WT{?MNOeHjKSfye9tVu0EL1E=B7yn0o^T6A; z`JmDQm8(HK7%E#wA%_z9RB>NMMA+t8(pv5I$%&icqBSSjXN`p1+*(SC8cobe)ucaH z*k~JDby;VLv^w^Z7W2VQks@xP_NDak+O9eC-ck>K>^Ei=k zq?QXV`z+|6a%-ZurE1>3Z3mY+5?raRl2_Tw_*^?tiF#;@GJm`ac{SmexlfOo5DL}6 z4^%Y{{A#};-Je1q=!nm@_?1NZ>VIt{9g(&t`o&U0cCXuy>U;Xy9q?{l(DC^MN>eMa zscE*(U5*;^e7Nz1s&K=qyuQ{6;RLzj_~JtrajIR9QQ_rDE0yOGs26ONHs5=L^v)k=Zm4I^PQ6f9IgaD*DX~dsS8)VXRCSx}c<7_o`Pgo3 zBn{Z{5~O!UM1dzh;=fgK3j!e$@+m=gqCA6f$kWG2&s1~|`3!!2eSmLM8%;{7Ig8MH zERE(bMI8661jH^=4Tcy5F$@#CD-;_^zwKUk){Ymp#W_q^aNrwfP-VB zo6fX+^WKK%c3g>7mhgUxrS|~m1(%PlDV{#!wo6Pt^`qx}_I1IV5{-uze2kd78+GK6u|>_`a-z#T(%eDz9c4d_tX?%EctaV^Vqm;%l~ zK%WLXpm%KR)!Rw}WE^QSmYJB-0Y9{4tUR)-oY*t?-LT+D^Npk&WB54&78j)MF$bx- zwB|_dZ`8*lx@u=&*#cWW*ATb=g#@sVh=;15JOG26P}TOlEf>-3Las9r3QN>ku#iY1 zi8`3yPc8O8K&5C{6T%fHL>YMTN6%9i3Bc~DlY0Jb6qlqsaTl$Lkh8s8>Fhk+-e3;* z0m_Baz1`8JL%TvvX^zwfHnv0l&^azRkcpoNKB&;7B8;@>PKatS$^3nDFeppaT~Msx zny?dgNmy9CcuT1B{AK2 z;*oA6?&U!87n0M*=)wA%@HDLLj@C6jV#&}2aB( zJG32e0u9NeuVKayCKcV8sNQu( ztkl~=ZyIWM*``S!86wCu3#_v9A*xarC%OdNDD_ulqIeKOP$xWjEyl1}F*p~snJ~Wk zWP#x?msD(ahbHzEW9qy*!-TQ9Rcs%}sFUsOi&B>4Zuqs&E2R4((4Kys30G{-oJZY51ZqM62 z6&*>FHwm|eMf|fM%K>^o+Q?|aakE1oHW~Ll7*Rhq5-Cv2kQ@a{J)XQaiZo@7uo&i7 z7G1tOZML_LZqWs-4Z!Pvc)n}u>+5yFK^QtJcov$Wd%}r2^@ORbkuoeeL@!%TWgJ;2%|#o6%owY-jycrvv7dh~Ht~xT{n)%+R)6CkusxQS zW81#^1Jctpxi*Gym%Ltvl$4azE?@MW^%I@7$vBfh z0$@aCo|sLQT+-11pVP53*fc6n4X+>|8s5s?nx{J9%t@|72_f!2C00ixXX$l8t1bAJCdPUT3YMO(^4`fZwfxDL22JDK8h#EmQ7P+|^s<~AQjSBl%{ zHcTh^2VywUU-Zl9VOv=-d|N)=J-_yZ??3JFs?ypZi%)l^x(rRGab~{Q^+h)FGRhX}jpBW*hc7QtscQ#^{ zipNyq-p4Nqwd!z{4fR}Z0O=wcQQ{;?bs0LBUz3U$t<`fp$Eahfl&DFSbC8=o!&^T9 zh@x9|QMVZ*+p&#ebgu8KAn@uzAP@)?abYL6W2iDFNpDbB3#!t=2swjG^P2H2b&gQI zF(}K!)wy>C1Of%V)c|%#x4!WFQe85_p@EfztLbLQJgPC!wQ0@z&!g!+^ZIEy-rfvpvD`;J1dvsgQh~2bTZgsnDUVC{H z9*QKKdG`42XHdS(T1`;oGE7VP=A?mPdfrY%0AiJ)#>@Ik70uY`%#@v~ly_c{taecv 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 literal 0 HcmV?d00001 diff --git a/src/icons/material/index.ts b/src/icons/material/index.ts new file mode 100644 index 0000000..e7e0300 --- /dev/null +++ b/src/icons/material/index.ts @@ -0,0 +1,225 @@ +import { + mdiAccountBoxOutline, + mdiAccountCircleOutline, + mdiAccountGroupOutline, + mdiAccountOffOutline, + mdiAccountOutline, + mdiAccountPlus, + mdiAccountSchoolOutline, + mdiAccountSearch, + mdiAccountSwitch, + mdiAccountSwitchOutline, + mdiAlert, + mdiAlertCircle, + mdiArchiveOutline, + mdiArrowCollapse, + mdiArrowCollapseDown, + mdiArrowCollapseUp, + mdiArrowExpand, + mdiApplicationBracketsOutline, + mdiCalendar, + mdiCalendarOutline, + mdiCardAccountDetailsOutline, + mdiChatOutline, + mdiCheck, + mdiCheckAll, + mdiCheckboxBlankOutline, + mdiCheckboxIntermediate, + mdiCheckboxOutline, + mdiCheckCircle, + mdiCheckCircleOutline, + mdiChevronLeft, + mdiCircleOutline, + mdiClockOutline, + mdiClose, + mdiCogOutline, + mdiContentCopy, + mdiContentSave, + mdiDeleteOutline, + mdiDnsOutline, + mdiDotsVertical, + mdiDrag, + mdiEmailCheckOutline, + mdiEmailOutline, + mdiEmailRemoveOutline, + mdiEyeOffOutline, + mdiEyeOutline, + mdiFileCertificateOutline, + mdiFileDocumentOutline, + mdiFileReplaceOutline, + mdiFileTreeOutline, + mdiFileQuestionOutline, + mdiFlag, + mdiFlagOutline, + mdiFolder, + mdiFolderAccount, + mdiFolderOpenOutline, + mdiFormatBold, + mdiFormatItalic, + mdiFormatListBulleted, + mdiFormatListChecks, + mdiFormatListNumbered, + mdiFormatStrikethrough, + mdiFormatText, + mdiFormatUnderline, + mdiGiftOutline, + mdiHeart, + mdiHelpCircleOutline, + mdiImage, + mdiInformation, + mdiLightbulbOnOutline, + mdiLock, + mdiLockOutline, + mdiLogin, + mdiMagnify, + mdiMenu, + mdiMenuDown, + mdiMenuDownOutline, + mdiMenuOpen, + mdiMenuSwapOutline, + mdiMenuUpOutline, + mdiMinus, + mdiNewspaperVariantOutline, + mdiOpenInNew, + mdiPencilOutline, + mdiPlaylistEdit, + mdiPlus, + mdiPlusCircleOutline, + mdiPresentation, + mdiPrinter, + mdiPound, + mdiPuzzleOutline, + mdiQrcode, + mdiRedo, + mdiRefreshCircle, + mdiReload, + mdiRenameOutline, + mdiSchoolOutline, + mdiShareVariantOutline, + mdiShieldAccountVariantOutline, + mdiTextBoxCheckOutline, + mdiTimerSandComplete, + mdiTrashCanOutline, + mdiTrayArrowDown, + mdiTrayArrowUp, + mdiTune, + mdiUndo, + mdiUndoVariant, + mdiViewDashboard, + mdiViewDashboardOutline, + mdiViewGridOutline, + mdiViewListOutline, +} from "@mdi/js"; + +export { + mdiAccountBoxOutline, + mdiAccountCircleOutline, + mdiAccountGroupOutline, + mdiAccountOffOutline, + mdiAccountOutline, + mdiAccountPlus, + mdiAccountSchoolOutline, + mdiAccountSearch, + mdiAccountSwitch, + mdiAccountSwitchOutline, + mdiAlert, + mdiAlertCircle, + mdiArchiveOutline, + mdiArrowCollapse, + mdiArrowCollapseDown, + mdiArrowCollapseUp, + mdiArrowExpand, + mdiApplicationBracketsOutline, + mdiCalendar, + mdiCalendarOutline, + mdiCardAccountDetailsOutline, + mdiChatOutline, + mdiCheck, + mdiCheckAll, + mdiCheckboxBlankOutline, + mdiCheckboxIntermediate, + mdiCheckboxOutline, + mdiCheckCircle, + mdiCheckCircleOutline, + mdiChevronLeft, + mdiCircleOutline, + mdiClockOutline, + mdiClose, + mdiCogOutline, + mdiContentCopy, + mdiContentSave, + mdiDeleteOutline, + mdiDnsOutline, + mdiDotsVertical, + mdiDrag, + mdiEmailCheckOutline, + mdiEmailOutline, + mdiEmailRemoveOutline, + mdiEyeOffOutline, + mdiEyeOutline, + mdiFileCertificateOutline, + mdiFileDocumentOutline, + mdiFileReplaceOutline, + mdiFileTreeOutline, + mdiFileQuestionOutline, + mdiFlag, + mdiFlagOutline, + mdiFolder, + mdiFolderAccount, + mdiFolderOpenOutline, + mdiFormatBold, + mdiFormatItalic, + mdiFormatListBulleted, + mdiFormatListChecks, + mdiFormatListNumbered, + mdiFormatStrikethrough, + mdiFormatText, + mdiFormatUnderline, + mdiGiftOutline, + mdiHeart, + mdiHelpCircleOutline, + mdiImage, + mdiInformation, + mdiLightbulbOnOutline, + mdiLock, + mdiLockOutline, + mdiLogin, + mdiMagnify, + mdiMenu, + mdiMenuDown, + mdiMenuDownOutline, + mdiMenuOpen, + mdiMenuSwapOutline, + mdiMenuUpOutline, + mdiMinus, + mdiNewspaperVariantOutline, + mdiOpenInNew, + mdiPencilOutline, + mdiPlaylistEdit, + mdiPlus, + mdiPlusCircleOutline, + mdiPresentation, + mdiPrinter, + mdiPound, + mdiPuzzleOutline, + mdiQrcode, + mdiRedo, + mdiRefreshCircle, + mdiReload, + mdiRenameOutline, + mdiSchoolOutline, + mdiShareVariantOutline, + mdiShieldAccountVariantOutline, + mdiTextBoxCheckOutline, + mdiTimerSandComplete, + mdiTrashCanOutline, + mdiTrayArrowDown, + mdiTrayArrowUp, + mdiTune, + mdiUndo, + mdiUndoVariant, + mdiViewDashboard, + mdiViewDashboardOutline, + mdiViewGridOutline, + mdiViewListOutline, +}; diff --git a/src/locales/de.ts b/src/locales/de.ts new file mode 100644 index 0000000..e3ae192 --- /dev/null +++ b/src/locales/de.ts @@ -0,0 +1,3 @@ +export default { + test: "Transaltion test", +}; diff --git a/src/locales/en.ts b/src/locales/en.ts new file mode 100644 index 0000000..e3ae192 --- /dev/null +++ b/src/locales/en.ts @@ -0,0 +1,3 @@ +export default { + test: "Transaltion test", +}; diff --git a/src/locales/es.ts b/src/locales/es.ts new file mode 100644 index 0000000..e3ae192 --- /dev/null +++ b/src/locales/es.ts @@ -0,0 +1,3 @@ +export default { + test: "Transaltion test", +}; diff --git a/src/locales/schema.ts b/src/locales/schema.ts new file mode 100644 index 0000000..624098e --- /dev/null +++ b/src/locales/schema.ts @@ -0,0 +1,3 @@ +import deDE from "./de"; + +export type MessageSchema = typeof deDE; diff --git a/src/locales/uk.ts b/src/locales/uk.ts new file mode 100644 index 0000000..e3ae192 --- /dev/null +++ b/src/locales/uk.ts @@ -0,0 +1,3 @@ +export default { + test: "Transaltion test", +}; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..58e5b92 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,59 @@ +import { handleApplicationError } from "@/plugins/application-error-handler"; +import { createI18n } from "@/plugins/i18n"; +import vuetify from "@/plugins/vuetify"; +import router from "@/router"; +import { initializeAxios } from "@/utils/api"; +import { useAuthStore } from "@data/auth"; +import { useEnvConfigStore } from "@data/env-config"; +import { htmlConfig } from "@feature/render-html"; +import axios from "axios"; +import { createPinia } from "pinia"; +import Cookies from "universal-cookie"; +import { createApp } from "vue"; +import VueDOMPurifyHTML from "vue-dompurify-html"; +import App from "./App.vue"; + +import "@/styles/global.scss"; + +const app = createApp(App); + +app.config.errorHandler = handleApplicationError; + +const pinia = createPinia(); +app.use(pinia); + +const i18n = createI18n(); +app.use(i18n); + +app.use(VueDOMPurifyHTML, { + namedConfigurations: htmlConfig, +}); + +(async () => { + const runtimeConfigJson = await axios.get( + `${window.location.origin}/runtime.config.json` + ); + axios.defaults.baseURL = runtimeConfigJson.data.apiURL; + + initializeAxios(axios); + + await useEnvConfigStore().loadConfig(); + + const cookies = new Cookies(); + const jwt = cookies.get("jwt"); + + if (jwt) { + axios.defaults.headers.common["Authorization"] = "Bearer " + jwt; + try { + await useAuthStore().login(jwt); + } catch (e) { + // eslint-disable-next-line no-console + console.error("### JWT invalid: ", e); + } + } + + app.use(router); + app.use(vuetify); + + app.mount("#app"); +})(); diff --git a/src/modules/data/README.md b/src/modules/data/README.md new file mode 100644 index 0000000..7957483 --- /dev/null +++ b/src/modules/data/README.md @@ -0,0 +1,5 @@ +# Data + +State and API-access. Does not contain any visual components. They are the data-sources of all smart components. + +[Documentation](https://documentation.dbildungscloud.dev/docs/nuxt-client/ProjectStructure#types-of-building-blocks) \ No newline at end of file diff --git a/src/modules/data/application-error/applicationError.store.ts b/src/modules/data/application-error/applicationError.store.ts new file mode 100644 index 0000000..eb1da08 --- /dev/null +++ b/src/modules/data/application-error/applicationError.store.ts @@ -0,0 +1,15 @@ +import { defineStore } from "pinia"; +import { Ref, ref } from "vue"; +import { ApplicationError } from "./applicationError"; + +export const useApplicationErrorStore = defineStore("applicationError", () => { + const error: Ref = ref(); + + const setError = (err: ApplicationError) => { + error.value = err; + }; + + return { + setError, + }; +}); diff --git a/src/modules/data/application-error/applicationError.ts b/src/modules/data/application-error/applicationError.ts new file mode 100644 index 0000000..9be2940 --- /dev/null +++ b/src/modules/data/application-error/applicationError.ts @@ -0,0 +1,21 @@ +import { HttpStatusCode } from "./httpStatusCode.enum"; + +export interface ApplicationErrorProps { + statusCode: HttpStatusCode; + translationKey: string; + message?: string; +} + +export class ApplicationError extends Error { + public readonly name = ApplicationError.name; + + public statusCode: HttpStatusCode; + + public translationKey: string; + + constructor(props: ApplicationErrorProps) { + super(props.message); + this.statusCode = props.statusCode; + this.translationKey = props.translationKey; + } +} diff --git a/src/modules/data/application-error/httpStatusCode.enum.ts b/src/modules/data/application-error/httpStatusCode.enum.ts new file mode 100644 index 0000000..64986fe --- /dev/null +++ b/src/modules/data/application-error/httpStatusCode.enum.ts @@ -0,0 +1,374 @@ +export enum HttpStatusCode { + /** + * The server has received the request headers and the client should proceed to send the request body + * (in the case of a request for which a body needs to be sent; for example, a POST request). + * Sending a large request body to a server after a request has been rejected for inappropriate headers would be inefficient. + * To have a server check the request's headers, a client must send Expect: 100-continue as a header in its initial request + * and receive a 100 Continue status code in response before sending the body. The response 417 Expectation Failed indicates the request should not be continued. + */ + Continue = 100, + + /** + * The requester has asked the server to switch protocols and the server has agreed to do so. + */ + SwitchingProtocols = 101, + + /** + * A WebDAV request may contain many sub-requests involving file operations, requiring a long time to complete the request. + * This code indicates that the server has received and is processing the request, but no response is available yet. + * This prevents the client from timing out and assuming the request was lost. + */ + Processing = 102, + + /** + * Standard response for successful HTTP requests. + * The actual response will depend on the request method used. + * In a GET request, the response will contain an entity corresponding to the requested resource. + * In a POST request, the response will contain an entity describing or containing the result of the action. + */ + Ok = 200, + + /** + * The request has been fulfilled, resulting in the creation of a new resource. + */ + Created = 201, + + /** + * The request has been accepted for processing, but the processing has not been completed. + * The request might or might not be eventually acted upon, and may be disallowed when processing occurs. + */ + Accepted = 202, + + /** + * SINCE HTTP/1.1 + * The server is a transforming proxy that received a 200 OK from its origin, + * but is returning a modified version of the origin's response. + */ + NonAuthoritativeInformation = 203, + + /** + * The server successfully processed the request and is not returning any content. + */ + NoContent = 204, + + /** + * The server successfully processed the request, but is not returning any content. + * Unlike a 204 response, this response requires that the requester reset the document view. + */ + ResetContent = 205, + + /** + * The server is delivering only part of the resource (byte serving) due to a range header sent by the client. + * The range header is used by HTTP clients to enable resuming of interrupted downloads, + * or split a download into multiple simultaneous streams. + */ + PartialContent = 206, + + /** + * The message body that follows is an XML message and can contain a number of separate response codes, + * depending on how many sub-requests were made. + */ + MultiStatus = 207, + + /** + * The members of a DAV binding have already been enumerated in a preceding part of the (multistatus) response, + * and are not being included again. + */ + AlreadyReported = 208, + + /** + * The server has fulfilled a request for the resource, + * and the response is a representation of the result of one or more instance-manipulations applied to the current instance. + */ + ImUsed = 226, + + /** + * Indicates multiple options for the resource from which the client may choose (via agent-driven content negotiation). + * For example, this code could be used to present multiple video format options, + * to list files with different filename extensions, or to suggest word-sense disambiguation. + */ + MultipleChoices = 300, + + /** + * This and all future requests should be directed to the given URI. + */ + MovedPermanently = 301, + + /** + * This is an example of industry practice contradicting the standard. + * The HTTP/1.0 specification (RFC 1945) required the client to perform a temporary redirect + * (the original describing phrase was "Moved Temporarily"), but popular browsers implemented 302 + * with the functionality of a 303 See Other. Therefore, HTTP/1.1 added status codes 303 and 307 + * to distinguish between the two behaviours. However, some Web applications and frameworks + * use the 302 status code as if it were the 303. + */ + Found = 302, + + /** + * SINCE HTTP/1.1 + * The response to the request can be found under another URI using a GET method. + * When received in response to a POST (or PUT/DELETE), the client should presume that + * the server has received the data and should issue a redirect with a separate GET message. + */ + SeeOther = 303, + + /** + * Indicates that the resource has not been modified since the version specified by the request headers If-Modified-Since or If-None-Match. + * In such case, there is no need to retransmit the resource since the client still has a previously-downloaded copy. + */ + NotModified = 304, + + /** + * SINCE HTTP/1.1 + * The requested resource is available only through a proxy, the address for which is provided in the response. + * Many HTTP clients (such as Mozilla and Internet Explorer) do not correctly handle responses with this status code, primarily for security reasons. + */ + UseProxy = 305, + + /** + * No longer used. Originally meant "Subsequent requests should use the specified proxy." + */ + SwitchProxy = 306, + + /** + * SINCE HTTP/1.1 + * In this case, the request should be repeated with another URI; however, future requests should still use the original URI. + * In contrast to how 302 was historically implemented, the request method is not allowed to be changed when reissuing the original request. + * For example, a POST request should be repeated using another POST request. + */ + TemporaryRedirect = 307, + + /** + * The request and all future requests should be repeated using another URI. + * 307 and 308 parallel the behaviors of 302 and 301, but do not allow the HTTP method to change. + * So, for example, submitting a form to a permanently redirected resource may continue smoothly. + */ + PermanentRedirect = 308, + + /** + * The server cannot or will not process the request due to an apparent client error + * (e.g., malformed request syntax, too large size, invalid request message framing, or deceptive request routing). + */ + BadRequest = 400, + + /** + * Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet + * been provided. The response must include a WWW-Authenticate header field containing a challenge applicable to the + * requested resource. See Basic access authentication and Digest access authentication. 401 semantically means + * "unauthenticated",i.e. the user does not have the necessary credentials. + */ + Unauthorized = 401, + + /** + * Reserved for future use. The original intention was that this code might be used as part of some form of digital + * cash or micro payment scheme, but that has not happened, and this code is not usually used. + * Google Developers API uses this status if a particular developer has exceeded the daily limit on requests. + */ + PaymentRequired = 402, + + /** + * The request was valid, but the server is refusing action. + * The user might not have the necessary permissions for a resource. + */ + Forbidden = 403, + + /** + * The requested resource could not be found but may be available in the future. + * Subsequent requests by the client are permissible. + */ + NotFound = 404, + + /** + * A request method is not supported for the requested resource; + * for example, a GET request on a form that requires data to be presented via POST, or a PUT request on a read-only resource. + */ + MethodNotAllowed = 405, + + /** + * The requested resource is capable of generating only content not acceptable according to the Accept headers sent in the request. + */ + NotAcceptable = 406, + + /** + * The client must first authenticate itself with the proxy. + */ + ProxyAuthenticationRequired = 407, + + /** + * The server timed out waiting for the request. + * According to HTTP specifications: + * "The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time." + */ + RequestTimeout = 408, + + /** + * Indicates that the request could not be processed because of conflict in the request, + * such as an edit conflict between multiple simultaneous updates. + */ + Conflict = 409, + + /** + * Indicates that the resource requested is no longer available and will not be available again. + * This should be used when a resource has been intentionally removed and the resource should be purged. + * Upon receiving a 410 status code, the client should not request the resource in the future. + * Clients such as search engines should remove the resource from their indices. + * Most use cases do not require clients and search engines to purge the resource, and a "404 Not Found" may be used instead. + */ + Gone = 410, + + /** + * The request did not specify the length of its content, which is required by the requested resource. + */ + LengthRequired = 411, + + /** + * The server does not meet one of the preconditions that the requester put on the request. + */ + PreconditionFailed = 412, + + /** + * The request is larger than the server is willing or able to process. Previously called "Request Entity Too Large". + */ + PayloadTooLarge = 413, + + /** + * The URI provided was too long for the server to process. Often the result of too much data being encoded as a query-string of a GET request, + * in which case it should be converted to a POST request. + * Called "Request-URI Too Long" previously. + */ + UriTooLong = 414, + + /** + * The request entity has a media type which the server or resource does not support. + * For example, the client uploads an image as image/svg+xml, but the server requires that images use a different format. + */ + UnsupportedMediaType = 415, + + /** + * The client has asked for a portion of the file (byte serving), but the server cannot supply that portion. + * For example, if the client asked for a part of the file that lies beyond the end of the file. + * Called "Requested Range Not Satisfiable" previously. + */ + RangeNotSatisfiable = 416, + + /** + * The server cannot meet the requirements of the Expect request-header field. + */ + ExpectationFailed = 417, + + /** + * This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol, + * and is not expected to be implemented by actual HTTP servers. The RFC specifies this code should be returned by + * teapots requested to brew coffee. This HTTP status is used as an Easter egg in some websites, including Google.com. + */ + IAmATeapot = 418, + + /** + * The request was directed at a server that is not able to produce a response (for example because a connection reuse). + */ + MisdirectedRequest = 421, + + /** + * The request was well-formed but was unable to be followed due to semantic errors. + */ + UnprocessableEntity = 422, + + /** + * The resource that is being accessed is locked. + */ + Locked = 423, + + /** + * The request failed due to failure of a previous request (e.g., a PROPPATCH). + */ + FailedDependency = 424, + + /** + * The client should switch to a different protocol such as TLS/1.0, given in the Upgrade header field. + */ + UpgradeRequired = 426, + + /** + * The origin server requires the request to be conditional. + * Intended to prevent "the 'lost update' problem, where a client + * GETs a resource's state, modifies it, and PUTs it back to the server, + * when meanwhile a third party has modified the state on the server, leading to a conflict." + */ + PreconditionRequired = 428, + + /** + * The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes. + */ + TooManyRequests = 429, + + /** + * The server is unwilling to process the request because either an individual header field, + * or all the header fields collectively, are too large. + */ + RequestHeaderFieldsTooLarge = 431, + + /** + * A server operator has received a legal demand to deny access to a resource or to a set of resources + * that includes the requested resource. The code 451 was chosen as a reference to the novel Fahrenheit 451. + */ + UnavailableForLegalReasons = 451, + + /** + * A generic error message, given when an unexpected condition was encountered and no more specific message is suitable. + */ + InternalServerError = 500, + + /** + * The server either does not recognize the request method, or it lacks the ability to fulfill the request. + * Usually this implies future availability (e.g., a new feature of a web-service API). + */ + NotImplemented = 501, + + /** + * The server was acting as a gateway or proxy and received an invalid response from the upstream server. + */ + BadGateway = 502, + + /** + * The server is currently unavailable (because it is overloaded or down for maintenance). + * Generally, this is a temporary state. + */ + ServiceUnavailable = 503, + + /** + * The server was acting as a gateway or proxy and did not receive a timely response from the upstream server. + */ + GatewayTimeout = 504, + + /** + * The server does not support the HTTP protocol version used in the request + */ + HttpVersionNotSupported = 505, + + /** + * Transparent content negotiation for the request results in a circular reference. + */ + VariantAlsoNegotiates = 506, + + /** + * The server is unable to store the representation needed to complete the request. + */ + InsufficientStorage = 507, + + /** + * The server detected an infinite loop while processing the request. + */ + LoopDetected = 508, + + /** + * Further extensions to the request are required for the server to fulfill it. + */ + NotExtended = 510, + + /** + * The client needs to authenticate to gain network access. + * Intended for use by intercepting proxies used to control access to the network (e.g., "captive portals" used + * to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot). + */ + NetworkAuthenticationRequired = 511, +} diff --git a/src/modules/data/application-error/index.ts b/src/modules/data/application-error/index.ts new file mode 100644 index 0000000..825e7c2 --- /dev/null +++ b/src/modules/data/application-error/index.ts @@ -0,0 +1,3 @@ +export { useApplicationErrorStore } from "./applicationError.store"; +export { ApplicationError } from "./applicationError"; +export { HttpStatusCode } from "./httpStatusCode.enum"; diff --git a/src/modules/data/auth/auth.store.ts b/src/modules/data/auth/auth.store.ts new file mode 100644 index 0000000..7797973 --- /dev/null +++ b/src/modules/data/auth/auth.store.ts @@ -0,0 +1,29 @@ +import { MeApiFactory, MeApiInterface, MeResponse } from "@/serverApi/v3"; +import { $axios } from "@/utils/api/api"; +import { defineStore } from "pinia"; +import { computed, ComputedRef, Ref, ref } from "vue"; + +export const useAuthStore = defineStore("auth", () => { + const me: Ref = ref(null); + const accessToken: Ref = ref(null); + + const meApi = (): MeApiInterface => { + return MeApiFactory(undefined, "v3", $axios); + }; + + const login = async (jwt: string): Promise => { + const { data } = await meApi().meControllerMe(); + + me.value = data; + accessToken.value = jwt; + }; + + const isLoggedIn: ComputedRef = computed(() => { + return true; + }); + + return { + login, + isLoggedIn, + }; +}); diff --git a/src/modules/data/auth/index.ts b/src/modules/data/auth/index.ts new file mode 100644 index 0000000..6030aba --- /dev/null +++ b/src/modules/data/auth/index.ts @@ -0,0 +1 @@ +export { useAuthStore } from "./auth.store"; diff --git a/src/modules/data/env-config/envConfig.store.ts b/src/modules/data/env-config/envConfig.store.ts new file mode 100644 index 0000000..6a3bc6f --- /dev/null +++ b/src/modules/data/env-config/envConfig.store.ts @@ -0,0 +1,28 @@ +import { + ConfigResponse, + DefaultApiFactory, + DefaultApiInterface, +} from "@/serverApi/v3"; +import { $axios } from "@/utils/api"; +import { defineStore } from "pinia"; +import { readonly, Ref, ref } from "vue"; +import { defaultConfigEnvs } from "./envConfigDefaults"; + +export const useEnvConfigStore = defineStore("envConfig", () => { + const envs: Ref = ref(defaultConfigEnvs); + + const serverApi = (): DefaultApiInterface => { + return DefaultApiFactory(undefined, "v3", $axios); + }; + + const loadConfig = async (): Promise => { + const serverConfig = await serverApi().serverConfigControllerPublicConfig(); + + envs.value = serverConfig.data; + }; + + return { + getEnvs: readonly(envs), + loadConfig, + }; +}); diff --git a/src/modules/data/env-config/envConfigDefaults.ts b/src/modules/data/env-config/envConfigDefaults.ts new file mode 100644 index 0000000..e13fe25 --- /dev/null +++ b/src/modules/data/env-config/envConfigDefaults.ts @@ -0,0 +1,73 @@ +import { + ConfigResponse, + LanguageType, + SchulcloudTheme, + Timezone, +} from "@/serverApi/v3"; + +export const defaultConfigEnvs: ConfigResponse = { + NOT_AUTHENTICATED_REDIRECT_URL: "", + SC_THEME: SchulcloudTheme.Default, + JWT_TIMEOUT_SECONDS: -1, + JWT_SHOW_TIMEOUT_WARNING_SECONDS: -1, + FEATURE_LERNSTORE_ENABLED: false, + MIGRATION_END_GRACE_PERIOD_MS: -1, + ADMIN_TABLES_DISPLAY_CONSENT_COLUMN: false, + DOCUMENT_BASE_DIR: "", + FEATURE_CONSENT_NECESSARY: false, + FEATURE_SCHOOL_SANIS_USER_MIGRATION_ENABLED: false, + GHOST_BASE_URL: "", + I18N__AVAILABLE_LANGUAGES: [], + I18N__FALLBACK_LANGUAGE: LanguageType.De, + I18N__DEFAULT_LANGUAGE: LanguageType.De, + I18N__DEFAULT_TIMEZONE: Timezone.EuropeBerlin, + SC_TITLE: "", + FEATURE_SHOW_OUTDATED_USERS: false, + FEATURE_ENABLE_LDAP_SYNC_DURING_MIGRATION: false, + FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED: false, + FEATURE_CTL_TOOLS_TAB_ENABLED: false, + FEATURE_CTL_TOOLS_COPY_ENABLED: false, + ACCESSIBILITY_REPORT_EMAIL: "", + FEATURE_NEW_SCHOOL_ADMINISTRATION_PAGE_AS_DEFAULT_ENABLED: false, + FEATURE_LTI_TOOLS_TAB_ENABLED: true, + FEATURE_SHOW_MIGRATION_WIZARD: false, + FEATURE_TLDRAW_ENABLED: false, + TLDRAW__ASSETS_ENABLED: false, + TLDRAW__ASSETS_MAX_SIZE: -1, + TLDRAW__ASSETS_ALLOWED_MIME_TYPES_LIST: [], + ALERT_STATUS_URL: null, + FEATURE_ES_COLLECTIONS_ENABLED: false, + FEATURE_EXTENSIONS_ENABLED: false, + FEATURE_TEAMS_ENABLED: false, + FEATURE_ADMIN_TOGGLE_STUDENT_LERNSTORE_VIEW_ENABLED: false, + TEACHER_STUDENT_VISIBILITY__IS_CONFIGURABLE: false, + TEACHER_STUDENT_VISIBILITY__IS_ENABLED_BY_DEFAULT: false, + TEACHER_STUDENT_VISIBILITY__IS_VISIBLE: false, + FEATURE_SCHOOL_POLICY_ENABLED_NEW: false, + FEATURE_SCHOOL_TERMS_OF_USE_ENABLED: false, + FEATURE_NEXBOARD_COPY_ENABLED: false, + FEATURE_VIDEOCONFERENCE_ENABLED: false, + FEATURE_COLUMN_BOARD_ENABLED: false, + FEATURE_COLUMN_BOARD_SUBMISSIONS_ENABLED: false, + FEATURE_COLUMN_BOARD_LINK_ELEMENT_ENABLED: false, + FEATURE_COLUMN_BOARD_EXTERNAL_TOOLS_ENABLED: false, + FEATURE_COLUMN_BOARD_SHARE: false, + FEATURE_COLUMN_BOARD_COLLABORATIVE_TEXT_EDITOR_ENABLED: false, + FEATURE_COLUMN_BOARD_SOCKET_ENABLED: false, + FEATURE_COURSE_SHARE: false, + FEATURE_BOARD_LAYOUT_ENABLED: false, + FEATURE_LOGIN_LINK_ENABLED: false, + FEATURE_LESSON_SHARE: false, + FEATURE_TASK_SHARE: false, + FEATURE_USER_MIGRATION_ENABLED: false, + FEATURE_COPY_SERVICE_ENABLED: false, + FEATURE_COMMON_CARTRIDGE_COURSE_EXPORT_ENABLED: false, + FEATURE_COMMON_CARTRIDGE_COURSE_IMPORT_ENABLED: false, + FEATURE_ALLOW_INSECURE_LDAP_URL_ENABLED: false, + ROCKETCHAT_SERVICE_ENABLED: false, + FEATURE_SCHULCONNEX_COURSE_SYNC_ENABLED: false, + CTL_TOOLS_RELOAD_TIME_MS: 299000, + FEATURE_MEDIA_SHELF_ENABLED: false, + BOARD_COLLABORATION_URI: "ws://localhost:4450", + FEATURE_SCHULCONNEX_MEDIA_LICENSE_ENABLED: false, +}; diff --git a/src/modules/data/env-config/index.ts b/src/modules/data/env-config/index.ts new file mode 100644 index 0000000..20b04e0 --- /dev/null +++ b/src/modules/data/env-config/index.ts @@ -0,0 +1 @@ +export { useEnvConfigStore } from "./envConfig.store"; diff --git a/src/modules/feature/README.md b/src/modules/feature/README.md new file mode 100644 index 0000000..8aad1dd --- /dev/null +++ b/src/modules/feature/README.md @@ -0,0 +1,5 @@ +# Feature + +Complex features with **stateful / smart components**. Usually specialized to fulfill specific roles in the App. Can also contain presentational components that are specialized for this feature. + +[Documentation](https://documentation.dbildungscloud.dev/docs/nuxt-client/ProjectStructure#types-of-building-blocks) \ No newline at end of file diff --git a/src/modules/feature/render-html/RenderHTML.unit.ts b/src/modules/feature/render-html/RenderHTML.unit.ts new file mode 100644 index 0000000..5c77aa0 --- /dev/null +++ b/src/modules/feature/render-html/RenderHTML.unit.ts @@ -0,0 +1,131 @@ +import { mount } from "@vue/test-utils"; +import RenderHTML from "./RenderHTML.vue"; +import vueDompurifyHTMLPlugin from "vue-dompurify-html"; +import { default as htmlConfig } from "./config"; + +describe("RenderHTML", () => { + const setup = (props: { + html: string; + component?: string; + config?: string; + }) => { + const wrapper = mount(RenderHTML, { + global: { + plugins: [ + [ + vueDompurifyHTMLPlugin, + { + namedConfigurations: htmlConfig, + }, + ], + ], + }, + props, + }); + + return { wrapper }; + }; + + describe("when component is mounted", () => { + it("should render html in tags", () => { + const { wrapper } = setup({ html: "test value" }); + expect(wrapper.findComponent(RenderHTML).exists()).toBe(true); + expect(wrapper.find("b").exists()).toBe(true); + }); + + it("should render with div", () => { + const { wrapper } = setup({ html: "test value" }); + expect(wrapper.findComponent(RenderHTML).exists()).toBe(true); + expect(wrapper.element.nodeName).toStrictEqual("DIV"); + }); + + it("should render with span", () => { + const { wrapper } = setup({ + html: "test value", + component: "span", + }); + expect(wrapper.findComponent(RenderHTML).exists()).toBe(true); + expect(wrapper.element.nodeName).toStrictEqual("SPAN"); + }); + + describe("when ck5 config is active", () => { + it("should strip non whitelisted tags", () => { + const { wrapper } = setup({ + html: "

test value

", + component: "span", + config: "ck5", + }); + expect(wrapper.find("h1").exists()).toBe(false); + }); + + it("should allow whitelisted tags", () => { + const { wrapper } = setup({ + html: "
test value
", + component: "span", + config: "ck5", + }); + expect(wrapper.find("h5").exists()).toBe(true); + }); + + it("should strip non whitelisted attributes", () => { + const { wrapper } = setup({ + html: 'test value', + component: "div", + config: "ck5", + }); + expect(wrapper.html()).toEqual( + '
test value
' + ); + }); + + it("should allow whitelisted attributes", () => { + const { wrapper } = setup({ + html: 'test value', + component: "div", + config: "ck5", + }); + expect(wrapper.html()).toEqual( + '
test value
' + ); + }); + }); + + describe("when translations config is active", () => { + it("should strip non whiteltisted tags", () => { + const { wrapper } = setup({ + html: "
test value
", + component: "span", + }); + expect(wrapper.find("h5").exists()).toBe(false); + }); + + it("should allow whitelisted tags", () => { + const { wrapper } = setup({ + html: "
test value
", + component: "span", + }); + expect(wrapper.find("div").exists()).toBe(false); + }); + + it("should strip non whitelisted attributes", () => { + const { wrapper } = setup({ + html: 'test value', + component: "span", + }); + expect(wrapper.html()).toEqual( + 'test value' + ); + }); + + it("should allow whitelisted attributes", () => { + const { wrapper } = setup({ + html: 'test value', + component: "span", + }); + expect(wrapper.html()).toEqual( + 'test value' + ); + }); + }); + }); +}); diff --git a/src/modules/feature/render-html/RenderHTML.vue b/src/modules/feature/render-html/RenderHTML.vue new file mode 100644 index 0000000..6a963bb --- /dev/null +++ b/src/modules/feature/render-html/RenderHTML.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/modules/feature/render-html/config.ts b/src/modules/feature/render-html/config.ts new file mode 100644 index 0000000..8326f8e --- /dev/null +++ b/src/modules/feature/render-html/config.ts @@ -0,0 +1,39 @@ +export default { + ck5: { + ALLOWED_TAGS: [ + "h4", + "h5", + "p", + "span", + "br", + "strong", + "b", + "i", + "em", + "u", + "s", + "code", + "sup", + "sub", + "mark", + "blockquote", + "ul", + "ol", + "li", + "hr", + "table", + "thead", + "tbody", + "tr", + "td", + "th", + "a", + "figure", + ], + ALLOWED_ATTR: ["class", "href", "name", "target", "style", "rel"], + }, + translations: { + ALLOWED_TAGS: ["br", "span", "p", "ul", "li", "a", "b"], + ALLOWED_ATTR: ["class", "href", "target"], + }, +}; diff --git a/src/modules/feature/render-html/index.ts b/src/modules/feature/render-html/index.ts new file mode 100644 index 0000000..7ca0a6d --- /dev/null +++ b/src/modules/feature/render-html/index.ts @@ -0,0 +1,4 @@ +import RenderHTML from "./RenderHTML.vue"; +import config from "./config"; + +export { RenderHTML, config as htmlConfig }; diff --git a/src/modules/page/AboutView.vue b/src/modules/page/AboutView.vue new file mode 100644 index 0000000..aa18656 --- /dev/null +++ b/src/modules/page/AboutView.vue @@ -0,0 +1,7 @@ + + + diff --git a/src/modules/page/HomeView.vue b/src/modules/page/HomeView.vue new file mode 100644 index 0000000..5e481cf --- /dev/null +++ b/src/modules/page/HomeView.vue @@ -0,0 +1,7 @@ + + + diff --git a/src/modules/page/README.md b/src/modules/page/README.md new file mode 100644 index 0000000..b0cdcab --- /dev/null +++ b/src/modules/page/README.md @@ -0,0 +1,5 @@ +# Page + +Contains a subpage of the application. Orchestrates Feature and UI building-blocks. + +[Documentation](https://documentation.dbildungscloud.dev/docs/nuxt-client/ProjectStructure#types-of-building-blocks) \ No newline at end of file diff --git a/src/modules/ui/README.md b/src/modules/ui/README.md new file mode 100644 index 0000000..f95604e --- /dev/null +++ b/src/modules/ui/README.md @@ -0,0 +1,5 @@ +# UI + +**Stateless / presentational components** which get their data via props and emit events. Usually less specialized. + +[Documentation](https://documentation.dbildungscloud.dev/docs/nuxt-client/ProjectStructure#types-of-building-blocks) \ No newline at end of file diff --git a/src/modules/util/README.md b/src/modules/util/README.md new file mode 100644 index 0000000..b1c52c2 --- /dev/null +++ b/src/modules/util/README.md @@ -0,0 +1,5 @@ +# Util + +Contains shared low-level code. + +[Documentation](https://documentation.dbildungscloud.dev/docs/nuxt-client/ProjectStructure#types-of-building-blocks) \ No newline at end of file diff --git a/src/plugins/application-error-handler.ts b/src/plugins/application-error-handler.ts new file mode 100644 index 0000000..aa10c1a --- /dev/null +++ b/src/plugins/application-error-handler.ts @@ -0,0 +1,27 @@ +import { + ApplicationError, + useApplicationErrorStore, +} from "@data/application-error"; + +export const handleApplicationError = (err: unknown) => { + /** + * Note: The Global-ErrorHandler wraps the error + * so we can't use instanceof ApplicationError here. + */ + // eslint-disable-next-line no-console + console.error(err); + + const applicationErrorStore = useApplicationErrorStore(); + + const applicationError = err as ApplicationError; + if (applicationError.name === ApplicationError.name) { + applicationErrorStore.setError(applicationError); + return; + } + applicationErrorStore.setError( + new ApplicationError({ + statusCode: 500, + translationKey: "error.generic", + }) + ); +}; diff --git a/src/plugins/axios.d.ts b/src/plugins/axios.d.ts new file mode 100644 index 0000000..18e9c6d --- /dev/null +++ b/src/plugins/axios.d.ts @@ -0,0 +1,11 @@ +import { AxiosInstance } from "axios"; + +declare module "vue/types/vue" { + export interface Vue { + $axios: AxiosInstance; + } + + export interface VueConstructor { + axios: AxiosInstance; + } +} diff --git a/src/plugins/i18n.d.ts b/src/plugins/i18n.d.ts new file mode 100644 index 0000000..1e493a6 --- /dev/null +++ b/src/plugins/i18n.d.ts @@ -0,0 +1,8 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import Vue from "vue"; + +declare module "vue/types/vue" { + interface Vue { + $ts(key: string): string; + } +} diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts new file mode 100644 index 0000000..0ce691f --- /dev/null +++ b/src/plugins/i18n.ts @@ -0,0 +1,50 @@ +import deDE from "@/locales/de"; +import enGB from "@/locales/en"; +import esES from "@/locales/es"; +import { MessageSchema } from "@/locales/schema"; +import ukUA from "@/locales/uk"; +import { createI18n } from "vue-i18n"; + +declare type SupportedLanguages = "en" | "de" | "es" | "uk"; + +const messages: Record = { + en: enGB, + de: deDE, + es: esES, + uk: ukUA, +}; + +const fileSizeFormat = { + maximumFractionDigits: 2, +}; + +const numberFormats = { + de: { + fileSize: fileSizeFormat, + }, + en: { + fileSize: fileSizeFormat, + }, + es: { + fileSize: fileSizeFormat, + }, + uk: { + fileSize: fileSizeFormat, + }, +}; + +const localCreateI18n = () => { + // If false, the type is a Composer instance for the Composition API, if true, the type is a VueI18n instance for the legacy API + // https://vue-i18n.intlify.dev/guide/advanced/typescript#global-resource-schema-type-definition + const i18n = createI18n({ + legacy: false, + locale: "de", + fallbackLocale: "de", + messages: messages, + numberFormats, + }); + + return i18n; +}; + +export { localCreateI18n as createI18n }; diff --git a/src/plugins/i18n.unit.js b/src/plugins/i18n.unit.js new file mode 100644 index 0000000..91d7cc3 --- /dev/null +++ b/src/plugins/i18n.unit.js @@ -0,0 +1,70 @@ +import { SchulcloudTheme } from "@/serverApi/v3"; +import { authModule, envConfigModule } from "@/store"; +import AuthModule from "@/store/auth"; +import EnvConfigModule from "@/store/env-config"; +import { envsFactory } from "@@/tests/test-utils"; +import setupStores from "@@/tests/test-utils/setupStores"; +import { unref } from "vue"; +import { createI18n } from "./i18n"; +// TODO refactor to ts +const envs = { + FALLBACK_DISABLED: false, + NOT_AUTHENTICATED_REDIRECT_URL: "/login", + JWT_SHOW_TIMEOUT_WARNING_SECONDS: 3600, + JWT_TIMEOUT_SECONDS: 7200, + SC_THEME: SchulcloudTheme.Default, + ADMIN_TABLES_DISPLAY_CONSENT_COLUMN: null, + FEATURE_ES_COLLECTIONS_ENABLED: null, + FEATURE_EXTENSIONS_ENABLED: null, + FEATURE_TEAMS_ENABLED: null, + I18N__AVAILABLE_LANGUAGES: [], + I18N__DEFAULT_LANGUAGE: "", + I18N__DEFAULT_TIMEZONE: "", + I18N__FALLBACK_LANGUAGE: "", + DOCUMENT_BASE_DIR: "", + SC_TITLE: "", +}; + +describe("i18n plugin", () => { + beforeEach(() => { + setupStores({ authModule: AuthModule, envConfigModule: EnvConfigModule }); + }); + + it("sets locale to the locale computed in the auth store module", () => { + authModule.setLocale("fi"); + const envBuild = envsFactory.build({ + ...envs, + I18N__FALLBACK_LANGUAGE: "da", + }); + envConfigModule.setEnvs(envBuild); + + const i18n = createI18n(); + + expect(unref(i18n.global.locale)).toBe("fi"); + expect(unref(i18n.global.fallbackLocale)).toBe("da"); + }); + + it("sets the number formats for all supported languages correctly", () => { + authModule.setLocale("fi"); + const envBuild = envsFactory.build({ + ...envs, + I18N__FALLBACK_LANGUAGE: "da", + }); + envConfigModule.setEnvs(envBuild); + + const i18n = createI18n(); + + expect( + unref(i18n.global.numberFormats).de.fileSize.maximumFractionDigits + ).toBe(2); + expect( + unref(i18n.global.numberFormats).en.fileSize.maximumFractionDigits + ).toBe(2); + expect( + unref(i18n.global.numberFormats).es.fileSize.maximumFractionDigits + ).toBe(2); + expect( + unref(i18n.global.numberFormats).uk.fileSize.maximumFractionDigits + ).toBe(2); + }); +}); diff --git a/src/plugins/vuetify.ts b/src/plugins/vuetify.ts new file mode 100644 index 0000000..fcf0fee --- /dev/null +++ b/src/plugins/vuetify.ts @@ -0,0 +1,19 @@ +import "vuetify/styles"; +import { createVuetify } from "vuetify"; + +import theme from "@/vuetify.options"; + +export default createVuetify({ + ...theme, + defaults: { + VAlert: { variant: "tonal" }, + VAutocomplete: { color: "primary" }, + VCheckbox: { color: "primary" }, + VFileInput: { variant: "underlined", color: "primary" }, + VSelect: { variant: "underlined", color: "primary" }, + VSwitch: { inset: true, flat: true, color: "primary" }, + VTabs: { color: "primary" }, + VTextarea: { variant: "underlined", color: "primary" }, + VTextField: { variant: "underlined", color: "primary" }, + }, +}); diff --git a/src/router/guards/index.ts b/src/router/guards/index.ts new file mode 100644 index 0000000..363689b --- /dev/null +++ b/src/router/guards/index.ts @@ -0,0 +1 @@ +export * from "./is-authenticated.guard"; diff --git a/src/router/guards/is-authenticated.guard.ts b/src/router/guards/is-authenticated.guard.ts new file mode 100644 index 0000000..b68c52d --- /dev/null +++ b/src/router/guards/is-authenticated.guard.ts @@ -0,0 +1,26 @@ +import { useAuthStore } from "@data/auth"; +import { NavigationGuardNext, RouteLocationNormalized } from "vue-router"; +import { getLoginUrlWithRedirect } from "../login-redirect-url"; + +export const isAuthenticatedGuard = ( + to: RouteLocationNormalized, + from: RouteLocationNormalized, + next: NavigationGuardNext +) => { + const userIsLoggedIn = useAuthStore().isLoggedIn; + + if (userIsLoggedIn || isRoutePublic(to)) { + next(); + } else { + const loginUrl = getLoginUrlWithRedirect(to.fullPath); + window.location.assign(loginUrl); + } +}; + +const isRoutePublic = (route: RouteLocationNormalized) => { + if (typeof route.meta?.isPublic === "boolean") { + return route.meta.isPublic; + } else { + return false; + } +}; diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 0000000..c70d9ff --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,12 @@ +import { createRouter, createWebHistory } from "vue-router"; +import { isAuthenticatedGuard } from "./guards"; +import { routes } from "./routes"; + +const router = createRouter({ + history: createWebHistory("/"), + routes, +}); + +router.beforeEach(isAuthenticatedGuard); + +export default router; diff --git a/src/router/login-redirect-url.ts b/src/router/login-redirect-url.ts new file mode 100644 index 0000000..09c4483 --- /dev/null +++ b/src/router/login-redirect-url.ts @@ -0,0 +1,37 @@ +import { useEnvConfigStore } from "@data/env-config"; + +export const getLoginUrlWithRedirect = (targetPath: string) => { + const currentOrigin = window.location.origin; + + const currentUrl = new URL(targetPath, currentOrigin); + const loginUrl = new URL( + useEnvConfigStore().getEnvs.NOT_AUTHENTICATED_REDIRECT_URL, + currentOrigin // fallback to current origin, if a relative url is configured + ); + + const isInternalUrl = currentUrl.origin === loginUrl.origin; + + if (isInternalUrl) { + return addRedirectAsParam(loginUrl, currentUrl); + } + + return addRedirectAsParamToUrlParams(loginUrl, currentUrl); +}; + +const addRedirectAsParam = (loginUrl: URL, currentUrl: URL) => { + loginUrl.searchParams.set("redirect", currentUrl.toString()); + return loginUrl.toString(); +}; + +const addRedirectAsParamToUrlParams = (loginUrl: URL, currentUrl: URL) => { + for (const [name, value] of loginUrl.searchParams.entries()) { + const isSchulcloudUrl = value.indexOf(currentUrl.origin) === 0; + if (isSchulcloudUrl) { + const urlInParameters = new URL(value); + urlInParameters.searchParams.set("redirect", currentUrl.toString()); + loginUrl.searchParams.set(name, urlInParameters.toString()); + } + } + + return loginUrl.toString(); +}; diff --git a/src/router/routes.ts b/src/router/routes.ts new file mode 100644 index 0000000..3de40d2 --- /dev/null +++ b/src/router/routes.ts @@ -0,0 +1,16 @@ +import HomeView from "@page/HomeView.vue"; +import { RouteRecordRaw } from "vue-router"; + +// routes configuration sorted in alphabetical order +export const routes: Readonly = [ + { + path: "/", + name: "home", + component: HomeView, + }, + { + path: "/about", + name: "about", + component: () => import("@page/AboutView.vue"), + }, +]; diff --git a/src/serverApi/v3/.gitignore b/src/serverApi/v3/.gitignore new file mode 100644 index 0000000..149b576 --- /dev/null +++ b/src/serverApi/v3/.gitignore @@ -0,0 +1,4 @@ +wwwroot/*.js +node_modules +typings +dist diff --git a/src/serverApi/v3/.npmignore b/src/serverApi/v3/.npmignore new file mode 100644 index 0000000..999d88d --- /dev/null +++ b/src/serverApi/v3/.npmignore @@ -0,0 +1 @@ +# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm \ No newline at end of file diff --git a/src/serverApi/v3/.openapi-generator-ignore b/src/serverApi/v3/.openapi-generator-ignore new file mode 100644 index 0000000..7484ee5 --- /dev/null +++ b/src/serverApi/v3/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/src/serverApi/v3/.openapi-generator/FILES b/src/serverApi/v3/.openapi-generator/FILES new file mode 100644 index 0000000..16b445e --- /dev/null +++ b/src/serverApi/v3/.openapi-generator/FILES @@ -0,0 +1,9 @@ +.gitignore +.npmignore +.openapi-generator-ignore +api.ts +base.ts +common.ts +configuration.ts +git_push.sh +index.ts diff --git a/src/serverApi/v3/.openapi-generator/VERSION b/src/serverApi/v3/.openapi-generator/VERSION new file mode 100644 index 0000000..acf69b4 --- /dev/null +++ b/src/serverApi/v3/.openapi-generator/VERSION @@ -0,0 +1 @@ +5.1.0 \ No newline at end of file diff --git a/src/serverApi/v3/api.ts b/src/serverApi/v3/api.ts new file mode 100644 index 0000000..19b13fb --- /dev/null +++ b/src/serverApi/v3/api.ts @@ -0,0 +1,25748 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { Configuration } from './configuration'; +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from './base'; + +/** + * + * @export + * @interface AccountByIdBodyParams + */ +export interface AccountByIdBodyParams { + /** + * The new user name for the user. + * @type {string} + * @memberof AccountByIdBodyParams + */ + username?: string | null; + /** + * The new password for the user. + * @type {string} + * @memberof AccountByIdBodyParams + */ + password?: string | null; + /** + * The new activation state of the user. + * @type {boolean} + * @memberof AccountByIdBodyParams + */ + activated?: boolean | null; +} +/** + * + * @export + * @interface AccountResponse + */ +export interface AccountResponse { + /** + * + * @type {string} + * @memberof AccountResponse + */ + id: string; + /** + * + * @type {string} + * @memberof AccountResponse + */ + username: string; + /** + * + * @type {string} + * @memberof AccountResponse + */ + userId: string; + /** + * + * @type {boolean} + * @memberof AccountResponse + */ + activated: boolean; + /** + * + * @type {string} + * @memberof AccountResponse + */ + updatedAt: string; +} +/** + * + * @export + * @interface AccountSearchListResponse + */ +export interface AccountSearchListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof AccountSearchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof AccountSearchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof AccountSearchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof AccountSearchListResponse + */ + limit: number; +} +/** + * + * @export + * @enum {string} + */ +export enum Action { + Read = 'read', + Write = 'write' +} + +/** + * + * @export + * @interface AlertResponse + */ +export interface AlertResponse { + /** + * + * @type {Array} + * @memberof AlertResponse + */ + data: Array; +} +/** + * + * @export + * @interface ApiValidationError + */ +export interface ApiValidationError { + /** + * The response status code. + * @type {number} + * @memberof ApiValidationError + */ + code: number; + /** + * The error type. + * @type {string} + * @memberof ApiValidationError + */ + type: string; + /** + * The error title. + * @type {string} + * @memberof ApiValidationError + */ + title: string; + /** + * The error message. + * @type {string} + * @memberof ApiValidationError + */ + message: string; + /** + * The error details. + * @type {object} + * @memberof ApiValidationError + */ + details?: object; +} +/** + * + * @export + * @interface AuthorizationBodyParams + */ +export interface AuthorizationBodyParams { + /** + * + * @type {AuthorizationContextParams} + * @memberof AuthorizationBodyParams + */ + context: AuthorizationContextParams; + /** + * The entity or domain object the operation should be performed on. + * @type {string} + * @memberof AuthorizationBodyParams + */ + referenceType: AuthorizationBodyParamsReferenceTypeEnum; + /** + * The id of the entity/domain object of the defined referenceType. + * @type {string} + * @memberof AuthorizationBodyParams + */ + referenceId: string; +} + +/** + * @export + * @enum {string} + */ +export enum AuthorizationBodyParamsReferenceTypeEnum { + Users = 'users', + Schools = 'schools', + Courses = 'courses', + Coursegroups = 'coursegroups', + Tasks = 'tasks', + Lessons = 'lessons', + Teams = 'teams', + Submissions = 'submissions', + SchoolExternalTools = 'school-external-tools', + Boardnodes = 'boardnodes', + ContextExternalTools = 'context-external-tools', + ExternalTools = 'external-tools', + Instances = 'instances' +} + +/** + * + * @export + * @interface AuthorizationContextParams + */ +export interface AuthorizationContextParams { + /** + * + * @type {Action} + * @memberof AuthorizationContextParams + */ + action: Action; + /** + * User permissions that are needed to execute the operation. + * @type {Array} + * @memberof AuthorizationContextParams + */ + requiredPermissions: Array; +} +/** + * + * @export + * @interface AuthorizedReponse + */ +export interface AuthorizedReponse { + /** + * + * @type {string} + * @memberof AuthorizedReponse + */ + userId: string; + /** + * + * @type {boolean} + * @memberof AuthorizedReponse + */ + isAuthorized: boolean; +} +/** + * + * @export + * @interface BasicToolConfigParams + */ +export interface BasicToolConfigParams { + /** + * + * @type {string} + * @memberof BasicToolConfigParams + */ + type: string; + /** + * + * @type {string} + * @memberof BasicToolConfigParams + */ + baseUrl: string; +} +/** + * + * @export + * @interface BoardContextResponse + */ +export interface BoardContextResponse { + /** + * + * @type {string} + * @memberof BoardContextResponse + */ + id: string; + /** + * + * @type {BoardExternalReferenceType} + * @memberof BoardContextResponse + */ + type: BoardExternalReferenceType; +} +/** + * + * @export + * @interface BoardElementResponse + */ +export interface BoardElementResponse { + /** + * the type of the element in the content. For possible types, please refer to the enum + * @type {string} + * @memberof BoardElementResponse + */ + type: BoardElementResponseTypeEnum; + /** + * Content of the Board, either: a task or a lesson specific for the board + * @type {object} + * @memberof BoardElementResponse + */ + content: object; +} + +/** + * @export + * @enum {string} + */ +export enum BoardElementResponseTypeEnum { + Task = 'task', + Lesson = 'lesson', + ColumnBoard = 'column-board' +} + +/** + * + * @export + * @enum {string} + */ +export enum BoardExternalReferenceType { + Course = 'course', + User = 'user' +} + +/** + * + * @export + * @enum {string} + */ +export enum BoardLayout { + Columns = 'columns', + List = 'list', + Grid = 'grid' +} + +/** + * + * @export + * @enum {string} + */ +export enum BoardParentType { + Course = 'course', + User = 'user' +} + +/** + * + * @export + * @interface BoardResponse + */ +export interface BoardResponse { + /** + * + * @type {string} + * @memberof BoardResponse + */ + id: string; + /** + * + * @type {string} + * @memberof BoardResponse + */ + title: string; + /** + * + * @type {Array} + * @memberof BoardResponse + */ + columns: Array; + /** + * + * @type {TimestampsResponse} + * @memberof BoardResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {boolean} + * @memberof BoardResponse + */ + isVisible: boolean; + /** + * + * @type {string} + * @memberof BoardResponse + */ + layout: string; +} +/** + * + * @export + * @interface CardListResponse + */ +export interface CardListResponse { + /** + * + * @type {Array} + * @memberof CardListResponse + */ + data: Array; +} +/** + * + * @export + * @interface CardResponse + */ +export interface CardResponse { + /** + * + * @type {string} + * @memberof CardResponse + */ + id: string; + /** + * + * @type {string} + * @memberof CardResponse + */ + title?: string; + /** + * + * @type {number} + * @memberof CardResponse + */ + height: number; + /** + * + * @type {Array} + * @memberof CardResponse + */ + elements: Array; + /** + * + * @type {VisibilitySettingsResponse} + * @memberof CardResponse + */ + visibilitySettings: VisibilitySettingsResponse; + /** + * + * @type {TimestampsResponse} + * @memberof CardResponse + */ + timestamps: TimestampsResponse; +} +/** + * + * @export + * @interface CardSkeletonResponse + */ +export interface CardSkeletonResponse { + /** + * + * @type {string} + * @memberof CardSkeletonResponse + */ + cardId: string; + /** + * The approximate height of the referenced card. Intended to be used for prerendering purposes. Note, that different devices can lead to this value not being precise + * @type {number} + * @memberof CardSkeletonResponse + */ + height: number; +} +/** + * + * @export + * @interface ChangeLanguageParams + */ +export interface ChangeLanguageParams { + /** + * + * @type {LanguageType} + * @memberof ChangeLanguageParams + */ + language: LanguageType; +} +/** + * + * @export + * @interface ClassInfoResponse + */ +export interface ClassInfoResponse { + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + id: string; + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + type: ClassInfoResponseTypeEnum; + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + name: string; + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + externalSourceName?: string; + /** + * + * @type {Array} + * @memberof ClassInfoResponse + */ + teacherNames: Array; + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + schoolYear?: string; + /** + * + * @type {boolean} + * @memberof ClassInfoResponse + */ + isUpgradable?: boolean; + /** + * + * @type {number} + * @memberof ClassInfoResponse + */ + studentCount: number; + /** + * + * @type {Array} + * @memberof ClassInfoResponse + */ + synchronizedCourses?: Array; +} + +/** + * @export + * @enum {string} + */ +export enum ClassInfoResponseTypeEnum { + Class = 'class', + Group = 'group' +} + +/** + * + * @export + * @interface ClassInfoSearchListResponse + */ +export interface ClassInfoSearchListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof ClassInfoSearchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof ClassInfoSearchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof ClassInfoSearchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof ClassInfoSearchListResponse + */ + limit: number; +} +/** + * + * @export + * @enum {string} + */ +export enum ClassRequestContext { + Course = 'course', + ClassOverview = 'class-overview' +} + +/** + * + * @export + * @interface ClassResponse + */ +export interface ClassResponse { + /** + * + * @type {string} + * @memberof ClassResponse + */ + name: string; + /** + * + * @type {number} + * @memberof ClassResponse + */ + gradeLevel: number; +} +/** + * + * @export + * @enum {string} + */ +export enum ClassSortQueryType { + Name = 'name', + ExternalSourceName = 'externalSourceName', + SynchronizedCourses = 'synchronizedCourses', + StudentCount = 'studentCount', + TeacherNames = 'teacherNames' +} + +/** + * + * @export + * @interface CollaborativeTextEditorElementResponse + */ +export interface CollaborativeTextEditorElementResponse { + /** + * + * @type {string} + * @memberof CollaborativeTextEditorElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof CollaborativeTextEditorElementResponse + */ + type: ContentElementType; + /** + * + * @type {TimestampsResponse} + * @memberof CollaborativeTextEditorElementResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {object} + * @memberof CollaborativeTextEditorElementResponse + */ + content: object; +} +/** + * + * @export + * @enum {string} + */ +export enum CollaborativeTextEditorParentType { + ContentElement = 'content-element' +} + +/** + * + * @export + * @interface CollaborativeTextEditorResponse + */ +export interface CollaborativeTextEditorResponse { + /** + * + * @type {string} + * @memberof CollaborativeTextEditorResponse + */ + url: string; +} +/** + * + * @export + * @interface CollapsableBodyParams + */ +export interface CollapsableBodyParams { + /** + * + * @type {boolean} + * @memberof CollapsableBodyParams + */ + collapsed: boolean; +} +/** + * + * @export + * @interface ColorBodyParams + */ +export interface ColorBodyParams { + /** + * + * @type {MediaBoardColors} + * @memberof ColorBodyParams + */ + backgroundColor: MediaBoardColors; +} +/** + * + * @export + * @interface ColumnResponse + */ +export interface ColumnResponse { + /** + * + * @type {string} + * @memberof ColumnResponse + */ + id: string; + /** + * + * @type {string} + * @memberof ColumnResponse + */ + title: string; + /** + * + * @type {Array} + * @memberof ColumnResponse + */ + cards: Array; + /** + * + * @type {TimestampsResponse} + * @memberof ColumnResponse + */ + timestamps: TimestampsResponse; +} +/** + * + * @export + * @interface ConfigResponse + */ +export interface ConfigResponse { + /** + * + * @type {string} + * @memberof ConfigResponse + */ + ACCESSIBILITY_REPORT_EMAIL: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_NEW_SCHOOL_ADMINISTRATION_PAGE_AS_DEFAULT_ENABLED: boolean; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + MIGRATION_END_GRACE_PERIOD_MS: number; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_CTL_TOOLS_TAB_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_LTI_TOOLS_TAB_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SHOW_OUTDATED_USERS: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_ENABLE_LDAP_SYNC_DURING_MIGRATION: boolean; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + CTL_TOOLS_RELOAD_TIME_MS: number; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_CTL_TOOLS_COPY_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SHOW_MIGRATION_WIZARD: boolean; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + MIGRATION_WIZARD_DOCUMENTATION_LINK?: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_TLDRAW_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + TLDRAW__ASSETS_ENABLED: boolean; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + TLDRAW__ASSETS_MAX_SIZE: number; + /** + * + * @type {Array} + * @memberof ConfigResponse + */ + TLDRAW__ASSETS_ALLOWED_MIME_TYPES_LIST: Array; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + ADMIN_TABLES_DISPLAY_CONSENT_COLUMN: boolean; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + ALERT_STATUS_URL: string | null; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_ES_COLLECTIONS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_EXTENSIONS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_TEAMS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_LERNSTORE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_ADMIN_TOGGLE_STUDENT_LERNSTORE_VIEW_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + TEACHER_STUDENT_VISIBILITY__IS_CONFIGURABLE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + TEACHER_STUDENT_VISIBILITY__IS_ENABLED_BY_DEFAULT: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + TEACHER_STUDENT_VISIBILITY__IS_VISIBLE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHOOL_POLICY_ENABLED_NEW: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHOOL_TERMS_OF_USE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_NEXBOARD_COPY_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_VIDEOCONFERENCE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_SUBMISSIONS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_COLLABORATIVE_TEXT_EDITOR_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_LINK_ELEMENT_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_EXTERNAL_TOOLS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_SHARE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_SOCKET_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COURSE_SHARE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_LOGIN_LINK_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_LESSON_SHARE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_TASK_SHARE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_BOARD_LAYOUT_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_USER_MIGRATION_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COPY_SERVICE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_CONSENT_NECESSARY: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COMMON_CARTRIDGE_COURSE_EXPORT_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COMMON_CARTRIDGE_COURSE_IMPORT_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHOOL_SANIS_USER_MIGRATION_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHULCONNEX_COURSE_SYNC_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_ALLOW_INSECURE_LDAP_URL_ENABLED: boolean; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + GHOST_BASE_URL: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + ROCKETCHAT_SERVICE_ENABLED: boolean; + /** + * + * @type {Array} + * @memberof ConfigResponse + */ + I18N__AVAILABLE_LANGUAGES: Array; + /** + * + * @type {LanguageType} + * @memberof ConfigResponse + */ + I18N__DEFAULT_LANGUAGE: LanguageType; + /** + * + * @type {LanguageType} + * @memberof ConfigResponse + */ + I18N__FALLBACK_LANGUAGE: LanguageType; + /** + * + * @type {Timezone} + * @memberof ConfigResponse + */ + I18N__DEFAULT_TIMEZONE: Timezone; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + JWT_SHOW_TIMEOUT_WARNING_SECONDS: number; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + JWT_TIMEOUT_SECONDS: number; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + NOT_AUTHENTICATED_REDIRECT_URL: string; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + DOCUMENT_BASE_DIR: string; + /** + * + * @type {SchulcloudTheme} + * @memberof ConfigResponse + */ + SC_THEME: SchulcloudTheme; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + SC_TITLE: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_MEDIA_SHELF_ENABLED: boolean; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + BOARD_COLLABORATION_URI: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHULCONNEX_MEDIA_LICENSE_ENABLED: boolean; +} +/** + * + * @export + * @interface ConsentRequestBody + */ +export interface ConsentRequestBody { + /** + * The error should follow the OAuth2 error format (e.g. invalid_request, login_required). Defaults to request_denied. + * @type {string} + * @memberof ConsentRequestBody + */ + error?: string; + /** + * Debug contains information to help resolve the problem as a developer. Usually not exposed to the public but only in the server logs. + * @type {string} + * @memberof ConsentRequestBody + */ + error_debug?: string; + /** + * Description of the error in a human readable format. + * @type {string} + * @memberof ConsentRequestBody + */ + error_description?: string; + /** + * Hint to help resolve the error. + * @type {string} + * @memberof ConsentRequestBody + */ + error_hint?: string; + /** + * Represents the HTTP status code of the error (e.g. 401 or 403). Defaults to 400. + * @type {number} + * @memberof ConsentRequestBody + */ + status_code?: number; + /** + * The Oauth2 client id. + * @type {Array} + * @memberof ConsentRequestBody + */ + grant_scope?: Array; + /** + * Remember, if set to true, tells the oauth provider to remember this consent authorization and reuse it if the same client asks the same user for the same, or a subset of, scope. + * @type {boolean} + * @memberof ConsentRequestBody + */ + remember?: boolean; + /** + * RememberFor sets how long the consent authorization should be remembered for in seconds. If set to 0, the authorization will be remembered indefinitely. + * @type {number} + * @memberof ConsentRequestBody + */ + remember_for?: number; +} +/** + * + * @export + * @interface ConsentResponse + */ +export interface ConsentResponse { + /** + * ACR represents the Authentication AuthorizationContext Class Reference value for this authentication session + * @type {string} + * @memberof ConsentResponse + */ + acr: string; + /** + * + * @type {Array} + * @memberof ConsentResponse + */ + amr?: Array; + /** + * Is the id/authorization challenge of the consent authorization request. It is used to identify the session. + * @type {string} + * @memberof ConsentResponse + */ + challenge: string; + /** + * + * @type {OauthClientResponse} + * @memberof ConsentResponse + */ + client: OauthClientResponse; + /** + * + * @type {object} + * @memberof ConsentResponse + */ + context: object; + /** + * LoginChallenge is the login challenge this consent challenge belongs to. + * @type {string} + * @memberof ConsentResponse + */ + login_challenge: string; + /** + * LoginSessionID is the login session ID. + * @type {string} + * @memberof ConsentResponse + */ + login_session_id: string; + /** + * + * @type {OidcContextResponse} + * @memberof ConsentResponse + */ + oidc_context: OidcContextResponse; + /** + * RequestUrl is the original OAuth 2.0 Authorization URL requested by the OAuth 2.0 client. + * @type {string} + * @memberof ConsentResponse + */ + request_url: string; + /** + * + * @type {Array} + * @memberof ConsentResponse + */ + requested_access_token_audience?: Array; + /** + * The request scopes of the login request. + * @type {Array} + * @memberof ConsentResponse + */ + requested_scope?: Array; + /** + * Skip, if true, implies that the client has requested the same scopes from the same user previously. + * @type {boolean} + * @memberof ConsentResponse + */ + skip: boolean; + /** + * Subject is the user id of the end-user that is authenticated. + * @type {string} + * @memberof ConsentResponse + */ + subject: string; +} +/** + * + * @export + * @interface ConsentSessionResponse + */ +export interface ConsentSessionResponse { + /** + * The id of the client. + * @type {string} + * @memberof ConsentSessionResponse + */ + client_id: string; + /** + * The name of the client. + * @type {string} + * @memberof ConsentSessionResponse + */ + client_name: string; + /** + * The id/challenge of the consent authorization request. + * @type {string} + * @memberof ConsentSessionResponse + */ + challenge: string; +} +/** + * + * @export + * @interface ConsentsResponse + */ +export interface ConsentsResponse { + /** + * + * @type {UserConsentResponse} + * @memberof ConsentsResponse + */ + userConsent: UserConsentResponse; + /** + * + * @type {Array} + * @memberof ConsentsResponse + */ + parentConsents: Array; +} +/** + * + * @export + * @enum {string} + */ +export enum ContentElementType { + File = 'file', + Drawing = 'drawing', + Link = 'link', + RichText = 'richText', + SubmissionContainer = 'submissionContainer', + ExternalTool = 'externalTool', + CollaborativeTextEditor = 'collaborativeTextEditor' +} + +/** + * + * @export + * @interface ContextExternalToolBodyParams + */ +export interface ContextExternalToolBodyParams { + /** + * + * @type {string} + * @memberof ContextExternalToolBodyParams + */ + contextId: string; + /** + * + * @type {ToolContextType} + * @memberof ContextExternalToolBodyParams + */ + contextType: ToolContextType; +} +/** + * + * @export + * @interface ContextExternalToolConfigurationStatusResponse + */ +export interface ContextExternalToolConfigurationStatusResponse { + /** + * Is the tool outdated on school scope, because of non matching versions or required parameter changes on ExternalTool? + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isOutdatedOnScopeSchool: boolean; + /** + * Is the tool outdated on context scope, because of non matching versions or required parameter changes on SchoolExternalTool? + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isOutdatedOnScopeContext: boolean; + /** + * True, if a mandatory parameter on the context external tool is missing a value + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isIncompleteOnScopeContext: boolean; + /** + * True, if a optional parameter on the context external tool is missing a value. This is happening, when course is copied. + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isIncompleteOperationalOnScopeContext: boolean; + /** + * Is the tool deactivated, because of superhero or school administrator + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isDeactivated: boolean; + /** + * True if the tool is not licensed for user + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isNotLicensed: boolean; +} +/** + * + * @export + * @interface ContextExternalToolConfigurationTemplateListResponse + */ +export interface ContextExternalToolConfigurationTemplateListResponse { + /** + * + * @type {Array} + * @memberof ContextExternalToolConfigurationTemplateListResponse + */ + data: Array; +} +/** + * + * @export + * @interface ContextExternalToolConfigurationTemplateResponse + */ +export interface ContextExternalToolConfigurationTemplateResponse { + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + externalToolId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + schoolExternalToolId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + name: string; + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + logoUrl?: string; + /** + * + * @type {Array} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + parameters: Array; +} +/** + * + * @export + * @interface ContextExternalToolCountPerContextResponse + */ +export interface ContextExternalToolCountPerContextResponse { + /** + * + * @type {number} + * @memberof ContextExternalToolCountPerContextResponse + */ + course: number; + /** + * + * @type {number} + * @memberof ContextExternalToolCountPerContextResponse + */ + boardElement: number; + /** + * + * @type {number} + * @memberof ContextExternalToolCountPerContextResponse + */ + mediaBoard: number; +} +/** + * + * @export + * @interface ContextExternalToolPostParams + */ +export interface ContextExternalToolPostParams { + /** + * + * @type {string} + * @memberof ContextExternalToolPostParams + */ + schoolToolId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolPostParams + */ + contextId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolPostParams + */ + contextType: string; + /** + * + * @type {string} + * @memberof ContextExternalToolPostParams + */ + displayName?: string; + /** + * + * @type {Array} + * @memberof ContextExternalToolPostParams + */ + parameters?: Array; +} +/** + * + * @export + * @interface ContextExternalToolResponse + */ +export interface ContextExternalToolResponse { + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + id: string; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + schoolToolId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + contextId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + contextType: ContextExternalToolResponseContextTypeEnum; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + displayName?: string; + /** + * + * @type {Array} + * @memberof ContextExternalToolResponse + */ + parameters: Array; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + logoUrl?: string; +} + +/** + * @export + * @enum {string} + */ +export enum ContextExternalToolResponseContextTypeEnum { + Course = 'course', + BoardElement = 'board-element', + MediaBoard = 'media-board' +} + +/** + * + * @export + * @interface ContextExternalToolSearchListResponse + */ +export interface ContextExternalToolSearchListResponse { + /** + * + * @type {Array} + * @memberof ContextExternalToolSearchListResponse + */ + data: Array; +} +/** + * + * @export + * @interface CopyApiResponse + */ +export interface CopyApiResponse { + /** + * Id of copied element + * @type {string} + * @memberof CopyApiResponse + */ + id?: string; + /** + * Title of copied element + * @type {string} + * @memberof CopyApiResponse + */ + title?: string; + /** + * Type of copied element + * @type {string} + * @memberof CopyApiResponse + */ + type: CopyApiResponseTypeEnum; + /** + * Id of destination course + * @type {string} + * @memberof CopyApiResponse + */ + destinationCourseId?: string; + /** + * Copy progress status of copied element + * @type {string} + * @memberof CopyApiResponse + */ + status: CopyApiResponseStatusEnum; + /** + * List of included sub elements with recursive type structure + * @type {Array} + * @memberof CopyApiResponse + */ + elements?: Array; +} + +/** + * @export + * @enum {string} + */ +export enum CopyApiResponseTypeEnum { + Board = 'BOARD', + Card = 'CARD', + CollaborativeTextEditorElement = 'COLLABORATIVE_TEXT_EDITOR_ELEMENT', + Column = 'COLUMN', + Columnboard = 'COLUMNBOARD', + Content = 'CONTENT', + Course = 'COURSE', + CoursegroupGroup = 'COURSEGROUP_GROUP', + ExternalTool = 'EXTERNAL_TOOL', + ExternalToolElement = 'EXTERNAL_TOOL_ELEMENT', + File = 'FILE', + FileElement = 'FILE_ELEMENT', + DrawingElement = 'DRAWING_ELEMENT', + FileGroup = 'FILE_GROUP', + Leaf = 'LEAF', + Lesson = 'LESSON', + LessonContentEtherpad = 'LESSON_CONTENT_ETHERPAD', + LessonContentGeogebra = 'LESSON_CONTENT_GEOGEBRA', + LessonContentGroup = 'LESSON_CONTENT_GROUP', + LessonContentLernstore = 'LESSON_CONTENT_LERNSTORE', + LessonContentNexboard = 'LESSON_CONTENT_NEXBOARD', + LessonContentTask = 'LESSON_CONTENT_TASK', + LessonContentText = 'LESSON_CONTENT_TEXT', + LernstoreMaterial = 'LERNSTORE_MATERIAL', + LernstoreMaterialGroup = 'LERNSTORE_MATERIAL_GROUP', + LinkElement = 'LINK_ELEMENT', + LtitoolGroup = 'LTITOOL_GROUP', + MediaBoard = 'MEDIA_BOARD', + MediaLine = 'MEDIA_LINE', + MediaExternalToolElement = 'MEDIA_EXTERNAL_TOOL_ELEMENT', + Metadata = 'METADATA', + RichtextElement = 'RICHTEXT_ELEMENT', + SubmissionContainerElement = 'SUBMISSION_CONTAINER_ELEMENT', + SubmissionItem = 'SUBMISSION_ITEM', + SubmissionGroup = 'SUBMISSION_GROUP', + Task = 'TASK', + TaskGroup = 'TASK_GROUP', + TimeGroup = 'TIME_GROUP', + UserGroup = 'USER_GROUP' +} +/** + * @export + * @enum {string} + */ +export enum CopyApiResponseStatusEnum { + Success = 'success', + Failure = 'failure', + NotDoing = 'not-doing', + NotImplemented = 'not-implemented', + Partial = 'partial' +} + +/** + * + * @export + * @interface CountyResponse + */ +export interface CountyResponse { + /** + * + * @type {string} + * @memberof CountyResponse + */ + id: string; + /** + * + * @type {string} + * @memberof CountyResponse + */ + name: string; + /** + * + * @type {number} + * @memberof CountyResponse + */ + countyId: number; + /** + * + * @type {string} + * @memberof CountyResponse + */ + antaresKey: string; +} +/** + * + * @export + * @interface CourseExportBodyParams + */ +export interface CourseExportBodyParams { + /** + * The list of ids of topics which should be exported. If empty no topics are exported. + * @type {Array} + * @memberof CourseExportBodyParams + */ + topics: Array; + /** + * The list of ids of tasks which should be exported. If empty no tasks are exported. + * @type {Array} + * @memberof CourseExportBodyParams + */ + tasks: Array; + /** + * The list of ids of column boards which should be exported. If empty no column boards are exported. + * @type {Array} + * @memberof CourseExportBodyParams + */ + columnBoards: Array; +} +/** + * + * @export + * @interface CourseInfoResponse + */ +export interface CourseInfoResponse { + /** + * + * @type {string} + * @memberof CourseInfoResponse + */ + id: string; + /** + * + * @type {string} + * @memberof CourseInfoResponse + */ + name: string; +} +/** + * + * @export + * @interface CourseMetadataListResponse + */ +export interface CourseMetadataListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof CourseMetadataListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof CourseMetadataListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof CourseMetadataListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof CourseMetadataListResponse + */ + limit: number; +} +/** + * + * @export + * @interface CourseMetadataResponse + */ +export interface CourseMetadataResponse { + /** + * The id of the Grid element + * @type {string} + * @memberof CourseMetadataResponse + */ + id: string; + /** + * Title of the Grid element + * @type {string} + * @memberof CourseMetadataResponse + */ + title: string; + /** + * Short title of the Grid element + * @type {string} + * @memberof CourseMetadataResponse + */ + shortTitle: string; + /** + * Color of the Grid element + * @type {string} + * @memberof CourseMetadataResponse + */ + displayColor: string; + /** + * Start date of the course + * @type {string} + * @memberof CourseMetadataResponse + */ + startDate?: string; + /** + * End date of the course. After this the course counts as archived + * @type {string} + * @memberof CourseMetadataResponse + */ + untilDate?: string; + /** + * Start of the copying process if it is still ongoing - otherwise property is not set. + * @type {string} + * @memberof CourseMetadataResponse + */ + copyingSince?: string; +} +/** + * + * @export + * @interface CreateBoardBodyParams + */ +export interface CreateBoardBodyParams { + /** + * The title of the board + * @type {string} + * @memberof CreateBoardBodyParams + */ + title: string; + /** + * The id of the parent + * @type {string} + * @memberof CreateBoardBodyParams + */ + parentId: string; + /** + * + * @type {BoardParentType} + * @memberof CreateBoardBodyParams + */ + parentType: BoardParentType; + /** + * + * @type {BoardLayout} + * @memberof CreateBoardBodyParams + */ + layout: BoardLayout; +} +/** + * + * @export + * @interface CreateBoardResponse + */ +export interface CreateBoardResponse { + /** + * + * @type {string} + * @memberof CreateBoardResponse + */ + id: string; +} +/** + * + * @export + * @interface CreateCardBodyParams + */ +export interface CreateCardBodyParams { + /** + * + * @type {Array} + * @memberof CreateCardBodyParams + */ + requiredEmptyElements?: Array; +} + +/** + * @export + * @enum {string} + */ +export enum CreateCardBodyParamsRequiredEmptyElementsEnum { + File = 'file', + Drawing = 'drawing', + Link = 'link', + RichText = 'richText', + SubmissionContainer = 'submissionContainer', + ExternalTool = 'externalTool', + CollaborativeTextEditor = 'collaborativeTextEditor' +} + +/** + * + * @export + * @interface CreateContentElementBodyParams + */ +export interface CreateContentElementBodyParams { + /** + * + * @type {ContentElementType} + * @memberof CreateContentElementBodyParams + */ + type: ContentElementType; + /** + * to bring element to a specific position, default is last position + * @type {number} + * @memberof CreateContentElementBodyParams + */ + toPosition?: number; +} +/** + * + * @export + * @interface CreateMediaElementBodyParams + */ +export interface CreateMediaElementBodyParams { + /** + * The id of the line where the element is created + * @type {string} + * @memberof CreateMediaElementBodyParams + */ + lineId: string; + /** + * The position where the element is created + * @type {number} + * @memberof CreateMediaElementBodyParams + */ + position: number; + /** + * The id of the school external tool + * @type {string} + * @memberof CreateMediaElementBodyParams + */ + schoolExternalToolId: string; +} +/** + * + * @export + * @interface CreateNewsParams + */ +export interface CreateNewsParams { + /** + * Title of the News entity + * @type {string} + * @memberof CreateNewsParams + */ + title: string; + /** + * Content of the News entity + * @type {string} + * @memberof CreateNewsParams + */ + content: string; + /** + * The point in time from when the News entity schould be displayed. Defaults to now so that the news is published + * @type {string} + * @memberof CreateNewsParams + */ + displayAt?: string; + /** + * Target model to which the News entity is related + * @type {string} + * @memberof CreateNewsParams + */ + targetModel: CreateNewsParamsTargetModelEnum; + /** + * Specific target id to which the News entity is related + * @type {string} + * @memberof CreateNewsParams + */ + targetId: string; +} + +/** + * @export + * @enum {string} + */ +export enum CreateNewsParamsTargetModelEnum { + Schools = 'schools', + Courses = 'courses', + Teams = 'teams' +} + +/** + * + * @export + * @interface CreateSubmissionItemBodyParams + */ +export interface CreateSubmissionItemBodyParams { + /** + * Boolean indicating whether the submission is completed. + * @type {boolean} + * @memberof CreateSubmissionItemBodyParams + */ + completed: boolean; +} +/** + * + * @export + * @interface CustomParameterEntryParam + */ +export interface CustomParameterEntryParam { + /** + * + * @type {string} + * @memberof CustomParameterEntryParam + */ + name: string; + /** + * + * @type {string} + * @memberof CustomParameterEntryParam + */ + value?: string; +} +/** + * + * @export + * @interface CustomParameterEntryResponse + */ +export interface CustomParameterEntryResponse { + /** + * + * @type {string} + * @memberof CustomParameterEntryResponse + */ + name: string; + /** + * + * @type {string} + * @memberof CustomParameterEntryResponse + */ + value?: string; +} +/** + * + * @export + * @interface CustomParameterPostParams + */ +export interface CustomParameterPostParams { + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + name: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + displayName: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + description?: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + defaultValue?: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + regex?: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + regexComment?: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + scope: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + location: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + type: string; + /** + * + * @type {boolean} + * @memberof CustomParameterPostParams + */ + isOptional: boolean; + /** + * + * @type {boolean} + * @memberof CustomParameterPostParams + */ + isProtected: boolean; +} +/** + * + * @export + * @interface CustomParameterResponse + */ +export interface CustomParameterResponse { + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + name: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + displayName: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + description?: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + defaultValue?: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + regex?: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + regexComment?: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + scope: CustomParameterResponseScopeEnum; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + location: CustomParameterResponseLocationEnum; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + type: CustomParameterResponseTypeEnum; + /** + * + * @type {boolean} + * @memberof CustomParameterResponse + */ + isOptional: boolean; + /** + * + * @type {boolean} + * @memberof CustomParameterResponse + */ + isProtected: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum CustomParameterResponseScopeEnum { + Global = 'global', + School = 'school', + Context = 'context' +} +/** + * @export + * @enum {string} + */ +export enum CustomParameterResponseLocationEnum { + Path = 'path', + Body = 'body', + Query = 'query' +} +/** + * @export + * @enum {string} + */ +export enum CustomParameterResponseTypeEnum { + String = 'string', + Number = 'number', + Boolean = 'boolean', + AutoContextid = 'auto_contextid', + AutoContextname = 'auto_contextname', + AutoSchoolid = 'auto_schoolid', + AutoSchoolnumber = 'auto_schoolnumber', + AutoMediumid = 'auto_mediumid' +} + +/** + * + * @export + * @interface DashboardGridElementResponse + */ +export interface DashboardGridElementResponse { + /** + * The id of the Grid element + * @type {string} + * @memberof DashboardGridElementResponse + */ + id: string; + /** + * Title of the Grid element + * @type {string} + * @memberof DashboardGridElementResponse + */ + title: string; + /** + * Short title of the Grid element + * @type {string} + * @memberof DashboardGridElementResponse + */ + shortTitle: string; + /** + * Color of the Grid element + * @type {string} + * @memberof DashboardGridElementResponse + */ + displayColor: string; + /** + * X position of the Grid element + * @type {number} + * @memberof DashboardGridElementResponse + */ + xPosition: number; + /** + * Y position of the Grid element + * @type {number} + * @memberof DashboardGridElementResponse + */ + yPosition: number; + /** + * The id of the group element + * @type {string} + * @memberof DashboardGridElementResponse + */ + groupId: string; + /** + * List of all subelements in the group + * @type {Array} + * @memberof DashboardGridElementResponse + */ + groupElements: Array; + /** + * Start of the copying process if it is still ongoing - otherwise property is not set. + * @type {string} + * @memberof DashboardGridElementResponse + */ + copyingSince: string; + /** + * Is the course synchronized with a group? + * @type {boolean} + * @memberof DashboardGridElementResponse + */ + isSynchronized: boolean; +} +/** + * + * @export + * @interface DashboardGridSubElementResponse + */ +export interface DashboardGridSubElementResponse { + /** + * The id of the Grid element + * @type {string} + * @memberof DashboardGridSubElementResponse + */ + id: string; + /** + * Title of the Grid element + * @type {string} + * @memberof DashboardGridSubElementResponse + */ + title: string; + /** + * Short title of the Grid element + * @type {string} + * @memberof DashboardGridSubElementResponse + */ + shortTitle: string; + /** + * Color of the Grid element + * @type {string} + * @memberof DashboardGridSubElementResponse + */ + displayColor: string; +} +/** + * + * @export + * @interface DashboardResponse + */ +export interface DashboardResponse { + /** + * The id of the Dashboard entity + * @type {string} + * @memberof DashboardResponse + */ + id: string; + /** + * List of all elements visible on the dashboard + * @type {Array} + * @memberof DashboardResponse + */ + gridElements: Array; +} +/** + * + * @export + * @interface DrawingContentBody + */ +export interface DrawingContentBody { + /** + * + * @type {string} + * @memberof DrawingContentBody + */ + description: string; +} +/** + * + * @export + * @interface DrawingElementContent + */ +export interface DrawingElementContent { + /** + * + * @type {string} + * @memberof DrawingElementContent + */ + description: string; +} +/** + * + * @export + * @interface DrawingElementContentBody + */ +export interface DrawingElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof DrawingElementContentBody + */ + type: ContentElementType; + /** + * + * @type {DrawingContentBody} + * @memberof DrawingElementContentBody + */ + content: DrawingContentBody; +} +/** + * + * @export + * @interface DrawingElementResponse + */ +export interface DrawingElementResponse { + /** + * + * @type {string} + * @memberof DrawingElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof DrawingElementResponse + */ + type: ContentElementType; + /** + * + * @type {TimestampsResponse} + * @memberof DrawingElementResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {DrawingElementContent} + * @memberof DrawingElementResponse + */ + content: DrawingElementContent; +} +/** + * + * @export + * @interface EntityNotFoundError + */ +export interface EntityNotFoundError { + /** + * The response status code. + * @type {number} + * @memberof EntityNotFoundError + */ + code: number; + /** + * The error type. + * @type {string} + * @memberof EntityNotFoundError + */ + type: string; + /** + * The error title. + * @type {string} + * @memberof EntityNotFoundError + */ + title: string; + /** + * The error message. + * @type {string} + * @memberof EntityNotFoundError + */ + message: string; + /** + * The error details. + * @type {object} + * @memberof EntityNotFoundError + */ + details?: object; +} +/** + * + * @export + * @interface ExternalSourceResponse + */ +export interface ExternalSourceResponse { + /** + * + * @type {string} + * @memberof ExternalSourceResponse + */ + externalId: string; + /** + * + * @type {string} + * @memberof ExternalSourceResponse + */ + systemId: string; +} +/** + * + * @export + * @interface ExternalToolBulkCreateParams + */ +export interface ExternalToolBulkCreateParams { + /** + * List of external tools + * @type {Array} + * @memberof ExternalToolBulkCreateParams + */ + data: Array; +} +/** + * + * @export + * @interface ExternalToolContentBody + */ +export interface ExternalToolContentBody { + /** + * + * @type {string} + * @memberof ExternalToolContentBody + */ + contextExternalToolId?: string; +} +/** + * + * @export + * @interface ExternalToolCreateParams + */ +export interface ExternalToolCreateParams { + /** + * Name of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + name: string; + /** + * Description of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + description?: string; + /** + * URL of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + url?: string; + /** + * URL of the logo of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + logoUrl?: string; + /** + * URL of the thumbnail of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + thumbnailUrl?: string; + /** + * Configuration of the external tool + * @type {BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams} + * @memberof ExternalToolCreateParams + */ + config: BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams; + /** + * Custom parameters of the external tool + * @type {Array} + * @memberof ExternalToolCreateParams + */ + parameters?: Array; + /** + * Tool can be hidden, those tools cant be added to e.g. school, course or board + * @type {boolean} + * @memberof ExternalToolCreateParams + */ + isHidden: boolean; + /** + * Tool can be deactivated, related tools can not be added to e.g. school, course or board anymore + * @type {boolean} + * @memberof ExternalToolCreateParams + */ + isDeactivated: boolean; + /** + * Tool should be opened in a new tab + * @type {boolean} + * @memberof ExternalToolCreateParams + */ + openNewTab: boolean; + /** + * Restrict tools to specific contexts + * @type {Array} + * @memberof ExternalToolCreateParams + */ + restrictToContexts?: Array; + /** + * Medium of the external tool + * @type {ExternalToolMediumParams} + * @memberof ExternalToolCreateParams + */ + medium?: ExternalToolMediumParams; +} +/** + * + * @export + * @interface ExternalToolElementContent + */ +export interface ExternalToolElementContent { + /** + * + * @type {string} + * @memberof ExternalToolElementContent + */ + contextExternalToolId: string | null; +} +/** + * + * @export + * @interface ExternalToolElementContentBody + */ +export interface ExternalToolElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof ExternalToolElementContentBody + */ + type: ContentElementType; + /** + * + * @type {ExternalToolContentBody} + * @memberof ExternalToolElementContentBody + */ + content: ExternalToolContentBody; +} +/** + * + * @export + * @interface ExternalToolElementResponse + */ +export interface ExternalToolElementResponse { + /** + * + * @type {string} + * @memberof ExternalToolElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof ExternalToolElementResponse + */ + type: ContentElementType; + /** + * + * @type {ExternalToolElementContent} + * @memberof ExternalToolElementResponse + */ + content: ExternalToolElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof ExternalToolElementResponse + */ + timestamps: TimestampsResponse; +} +/** + * + * @export + * @interface ExternalToolMediumParams + */ +export interface ExternalToolMediumParams { + /** + * Id of the medium + * @type {string} + * @memberof ExternalToolMediumParams + */ + mediumId: string; + /** + * Publisher of the medium + * @type {string} + * @memberof ExternalToolMediumParams + */ + publisher?: string; + /** + * The id of the media source + * @type {string} + * @memberof ExternalToolMediumParams + */ + mediaSourceId?: string; +} +/** + * + * @export + * @interface ExternalToolMediumResponse + */ +export interface ExternalToolMediumResponse { + /** + * Id of the medium + * @type {string} + * @memberof ExternalToolMediumResponse + */ + mediumId: string; + /** + * Publisher of the medium + * @type {string} + * @memberof ExternalToolMediumResponse + */ + publisher?: string; + /** + * The id of the media source + * @type {string} + * @memberof ExternalToolMediumResponse + */ + mediaSourceId?: string; +} +/** + * + * @export + * @interface ExternalToolMetadataResponse + */ +export interface ExternalToolMetadataResponse { + /** + * + * @type {number} + * @memberof ExternalToolMetadataResponse + */ + schoolExternalToolCount: number; + /** + * + * @type {ContextExternalToolCountPerContextResponse} + * @memberof ExternalToolMetadataResponse + */ + contextExternalToolCountPerContext: ContextExternalToolCountPerContextResponse; +} +/** + * + * @export + * @interface ExternalToolResponse + */ +export interface ExternalToolResponse { + /** + * Id of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + id: string; + /** + * Name of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + name: string; + /** + * Description of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + description?: string; + /** + * URL of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + url?: string; + /** + * URL of the logo of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + logoUrl?: string; + /** + * URL of the thumbnail of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + thumbnailUrl?: string; + /** + * Configuration of the external tool + * @type {BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams} + * @memberof ExternalToolResponse + */ + config: BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams; + /** + * Custom parameters of the external tool + * @type {Array} + * @memberof ExternalToolResponse + */ + parameters: Array; + /** + * Is the external tool hidden + * @type {boolean} + * @memberof ExternalToolResponse + */ + isHidden: boolean; + /** + * Is the external tool deactivated + * @type {boolean} + * @memberof ExternalToolResponse + */ + isDeactivated: boolean; + /** + * Should the external tool be opened in a new tab + * @type {boolean} + * @memberof ExternalToolResponse + */ + openNewTab: boolean; + /** + * Contexts in which the external tool is restricted + * @type {Array} + * @memberof ExternalToolResponse + */ + restrictToContexts?: Array; + /** + * Medium of the external tool + * @type {ExternalToolMediumResponse} + * @memberof ExternalToolResponse + */ + medium?: ExternalToolMediumResponse; +} +/** + * + * @export + * @interface ExternalToolSearchListResponse + */ +export interface ExternalToolSearchListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof ExternalToolSearchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof ExternalToolSearchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof ExternalToolSearchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof ExternalToolSearchListResponse + */ + limit: number; +} +/** + * + * @export + * @interface ExternalToolUpdateParams + */ +export interface ExternalToolUpdateParams { + /** + * ID of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + id: string; + /** + * + * @type {string} + * @memberof ExternalToolUpdateParams + */ + name: string; + /** + * Description of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + description?: string; + /** + * URL of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + url?: string; + /** + * URL of the logo of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + logoUrl?: string; + /** + * URL of the thumbnail of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + thumbnailUrl?: string; + /** + * Configuration of the external tool + * @type {BasicToolConfigParams | Lti11ToolConfigUpdateParams | Oauth2ToolConfigUpdateParams} + * @memberof ExternalToolUpdateParams + */ + config: BasicToolConfigParams | Lti11ToolConfigUpdateParams | Oauth2ToolConfigUpdateParams; + /** + * Custom parameters of the external tool + * @type {Array} + * @memberof ExternalToolUpdateParams + */ + parameters?: Array; + /** + * + * @type {boolean} + * @memberof ExternalToolUpdateParams + */ + isHidden: boolean; + /** + * Tool can be deactivated, related tools can not be added to e.g. school, course or board anymore + * @type {boolean} + * @memberof ExternalToolUpdateParams + */ + isDeactivated: boolean; + /** + * Open the tool in a new tab + * @type {boolean} + * @memberof ExternalToolUpdateParams + */ + openNewTab: boolean; + /** + * Restrict the tool to certain contexts + * @type {Array} + * @memberof ExternalToolUpdateParams + */ + restrictToContexts?: Array; + /** + * Medium of the external tool + * @type {ExternalToolMediumParams} + * @memberof ExternalToolUpdateParams + */ + medium?: ExternalToolMediumParams; +} +/** + * + * @export + * @interface FederalStateResponse + */ +export interface FederalStateResponse { + /** + * + * @type {string} + * @memberof FederalStateResponse + */ + id: string; + /** + * + * @type {string} + * @memberof FederalStateResponse + */ + name: string; + /** + * + * @type {string} + * @memberof FederalStateResponse + */ + abbreviation: string; + /** + * + * @type {string} + * @memberof FederalStateResponse + */ + logoUrl: string; + /** + * + * @type {Array} + * @memberof FederalStateResponse + */ + counties: Array; +} +/** + * + * @export + * @interface FileContentBody + */ +export interface FileContentBody { + /** + * + * @type {string} + * @memberof FileContentBody + */ + caption: string; + /** + * + * @type {string} + * @memberof FileContentBody + */ + alternativeText: string; +} +/** + * + * @export + * @interface FileElementContent + */ +export interface FileElementContent { + /** + * + * @type {string} + * @memberof FileElementContent + */ + caption: string; + /** + * + * @type {string} + * @memberof FileElementContent + */ + alternativeText: string; +} +/** + * + * @export + * @interface FileElementContentBody + */ +export interface FileElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof FileElementContentBody + */ + type: ContentElementType; + /** + * + * @type {FileContentBody} + * @memberof FileElementContentBody + */ + content: FileContentBody; +} +/** + * + * @export + * @interface FileElementResponse + */ +export interface FileElementResponse { + /** + * + * @type {string} + * @memberof FileElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof FileElementResponse + */ + type: ContentElementType; + /** + * + * @type {FileElementContent} + * @memberof FileElementResponse + */ + content: FileElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof FileElementResponse + */ + timestamps: TimestampsResponse; +} +/** + * + * @export + * @enum {string} + */ +export enum FileStorageType { + AwsS3 = 'awsS3' +} + +/** + * + * @export + * @interface ForbiddenOperationError + */ +export interface ForbiddenOperationError { + /** + * The response status code. + * @type {number} + * @memberof ForbiddenOperationError + */ + code: number; + /** + * The error type. + * @type {string} + * @memberof ForbiddenOperationError + */ + type: string; + /** + * The error title. + * @type {string} + * @memberof ForbiddenOperationError + */ + title: string; + /** + * The error message. + * @type {string} + * @memberof ForbiddenOperationError + */ + message: string; + /** + * The error details. + * @type {object} + * @memberof ForbiddenOperationError + */ + details?: object; +} +/** + * + * @export + * @interface ForceMigrationParams + */ +export interface ForceMigrationParams { + /** + * Email of the administrator + * @type {string} + * @memberof ForceMigrationParams + */ + email: string; + /** + * Target externalId to link it with an external account + * @type {string} + * @memberof ForceMigrationParams + */ + externalUserId: string; + /** + * Target externalId to link it with an external school + * @type {string} + * @memberof ForceMigrationParams + */ + externalSchoolId: string; +} +/** + * + * @export + * @interface GetMetaTagDataBody + */ +export interface GetMetaTagDataBody { + /** + * + * @type {string} + * @memberof GetMetaTagDataBody + */ + url: string; +} +/** + * + * @export + * @interface GroupListResponse + */ +export interface GroupListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof GroupListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof GroupListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof GroupListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof GroupListResponse + */ + limit: number; +} +/** + * + * @export + * @interface GroupResponse + */ +export interface GroupResponse { + /** + * + * @type {string} + * @memberof GroupResponse + */ + id: string; + /** + * + * @type {string} + * @memberof GroupResponse + */ + name: string; + /** + * + * @type {string} + * @memberof GroupResponse + */ + type: GroupResponseTypeEnum; + /** + * + * @type {Array} + * @memberof GroupResponse + */ + users: Array; + /** + * + * @type {ExternalSourceResponse} + * @memberof GroupResponse + */ + externalSource?: ExternalSourceResponse; + /** + * + * @type {string} + * @memberof GroupResponse + */ + organizationId?: string; +} + +/** + * @export + * @enum {string} + */ +export enum GroupResponseTypeEnum { + Class = 'class', + Course = 'course', + Other = 'other' +} + +/** + * + * @export + * @interface GroupUserResponse + */ +export interface GroupUserResponse { + /** + * + * @type {string} + * @memberof GroupUserResponse + */ + id: string; + /** + * + * @type {string} + * @memberof GroupUserResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof GroupUserResponse + */ + lastName: string; + /** + * + * @type {RoleName} + * @memberof GroupUserResponse + */ + role: RoleName; +} +/** + * + * @export + * @interface ImportUserListResponse + */ +export interface ImportUserListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof ImportUserListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof ImportUserListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof ImportUserListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof ImportUserListResponse + */ + limit: number; +} +/** + * + * @export + * @interface ImportUserResponse + */ +export interface ImportUserResponse { + /** + * id reference to a import user + * @type {string} + * @memberof ImportUserResponse + */ + importUserId: string; + /** + * login name from external system + * @type {string} + * @memberof ImportUserResponse + */ + loginName: string; + /** + * external systems user firstname + * @type {string} + * @memberof ImportUserResponse + */ + firstName: string; + /** + * external systems user lastname + * @type {string} + * @memberof ImportUserResponse + */ + lastName: string; + /** + * list of user roles from external system: student, teacher, admin + * @type {Array} + * @memberof ImportUserResponse + */ + roleNames: Array; + /** + * names of classes the user attends from external system + * @type {Array} + * @memberof ImportUserResponse + */ + classNames: Array; + /** + * assignemnt to a local user account + * @type {UserMatchResponse} + * @memberof ImportUserResponse + */ + match?: UserMatchResponse; + /** + * manual flag to apply it as filter + * @type {boolean} + * @memberof ImportUserResponse + */ + flagged: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum ImportUserResponseRoleNamesEnum { + Student = 'student', + Teacher = 'teacher', + Admin = 'admin' +} + +/** + * + * @export + * @enum {string} + */ +export enum InstanceFeature { + IsTeamCreationByStudentsEnabled = 'isTeamCreationByStudentsEnabled' +} + +/** + * + * @export + * @enum {string} + */ +export enum LanguageType { + De = 'de', + En = 'en', + Es = 'es', + Uk = 'uk' +} + +/** + * + * @export + * @interface LayoutBodyParams + */ +export interface LayoutBodyParams { + /** + * + * @type {MediaBoardLayoutType} + * @memberof LayoutBodyParams + */ + layout: MediaBoardLayoutType; +} +/** + * + * @export + * @interface LdapAuthorizationBodyParams + */ +export interface LdapAuthorizationBodyParams { + /** + * + * @type {string} + * @memberof LdapAuthorizationBodyParams + */ + systemId: string; + /** + * + * @type {string} + * @memberof LdapAuthorizationBodyParams + */ + username: string; + /** + * + * @type {string} + * @memberof LdapAuthorizationBodyParams + */ + password: string; + /** + * + * @type {string} + * @memberof LdapAuthorizationBodyParams + */ + schoolId: string; +} +/** + * + * @export + * @interface LessonContentResponse + */ +export interface LessonContentResponse { + /** + * + * @type {object} + * @memberof LessonContentResponse + */ + content: object; + /** + * The id of the Material entity + * @type {string} + * @memberof LessonContentResponse + * @deprecated + */ + _id: string; + /** + * The id of the Material entity + * @type {string} + * @memberof LessonContentResponse + */ + id: string; + /** + * Title of the Material entity + * @type {string} + * @memberof LessonContentResponse + */ + title: string; + /** + * + * @type {string} + * @memberof LessonContentResponse + */ + component: LessonContentResponseComponentEnum; + /** + * + * @type {boolean} + * @memberof LessonContentResponse + */ + hidden: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum LessonContentResponseComponentEnum { + Etherpad = 'Etherpad', + GeoGebra = 'geoGebra', + Internal = 'internal', + Resources = 'resources', + Text = 'text', + NeXboard = 'neXboard' +} + +/** + * + * @export + * @interface LessonCopyApiParams + */ +export interface LessonCopyApiParams { + /** + * Destination course parent Id the lesson is copied to + * @type {string} + * @memberof LessonCopyApiParams + */ + courseId?: string; +} +/** + * + * @export + * @interface LessonMetadataListResponse + */ +export interface LessonMetadataListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof LessonMetadataListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof LessonMetadataListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof LessonMetadataListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof LessonMetadataListResponse + */ + limit: number; +} +/** + * + * @export + * @interface LessonMetadataResponse + */ +export interface LessonMetadataResponse { + /** + * The id of the Lesson entity + * @type {string} + * @memberof LessonMetadataResponse + */ + _id: string; + /** + * Name of the Lesson entity + * @type {string} + * @memberof LessonMetadataResponse + */ + name: string; +} +/** + * + * @export + * @interface LessonResponse + */ +export interface LessonResponse { + /** + * The id of the Lesson entity + * @type {string} + * @memberof LessonResponse + * @deprecated + */ + _id: string; + /** + * The id of the Lesson entity + * @type {string} + * @memberof LessonResponse + */ + id: string; + /** + * Name of the Lesson entity + * @type {string} + * @memberof LessonResponse + */ + name: string; + /** + * The id of the Course entity + * @type {string} + * @memberof LessonResponse + */ + courseId?: string; + /** + * The id of the Course-group entity + * @type {string} + * @memberof LessonResponse + */ + courseGroupId?: string; + /** + * Hidden status of the Lesson entity + * @type {boolean} + * @memberof LessonResponse + */ + hidden: boolean; + /** + * Position of the Lesson entity + * @type {number} + * @memberof LessonResponse + */ + position: number; + /** + * Contents of the Lesson entity + * @type {Array} + * @memberof LessonResponse + */ + contents: Array; + /** + * Materials of the Lesson entity + * @type {Array} + * @memberof LessonResponse + */ + materials: Array; +} +/** + * + * @export + * @interface LinkContentBody + */ +export interface LinkContentBody { + /** + * + * @type {string} + * @memberof LinkContentBody + */ + url: string; + /** + * + * @type {string} + * @memberof LinkContentBody + */ + title: string; + /** + * + * @type {string} + * @memberof LinkContentBody + */ + description: string; + /** + * + * @type {string} + * @memberof LinkContentBody + */ + imageUrl: string; +} +/** + * + * @export + * @interface LinkElementContent + */ +export interface LinkElementContent { + /** + * + * @type {string} + * @memberof LinkElementContent + */ + url: string; + /** + * + * @type {string} + * @memberof LinkElementContent + */ + title: string; + /** + * + * @type {string} + * @memberof LinkElementContent + */ + description?: string; + /** + * + * @type {string} + * @memberof LinkElementContent + */ + imageUrl?: string; +} +/** + * + * @export + * @interface LinkElementContentBody + */ +export interface LinkElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof LinkElementContentBody + */ + type: ContentElementType; + /** + * + * @type {LinkContentBody} + * @memberof LinkElementContentBody + */ + content: LinkContentBody; +} +/** + * + * @export + * @interface LinkElementResponse + */ +export interface LinkElementResponse { + /** + * + * @type {string} + * @memberof LinkElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof LinkElementResponse + */ + type: ContentElementType; + /** + * + * @type {LinkElementContent} + * @memberof LinkElementResponse + */ + content: LinkElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof LinkElementResponse + */ + timestamps: TimestampsResponse; +} +/** + * + * @export + * @interface LocalAuthorizationBodyParams + */ +export interface LocalAuthorizationBodyParams { + /** + * + * @type {string} + * @memberof LocalAuthorizationBodyParams + */ + username: string; + /** + * + * @type {string} + * @memberof LocalAuthorizationBodyParams + */ + password: string; +} +/** + * + * @export + * @interface LoginRequestBody + */ +export interface LoginRequestBody { + /** + * The error should follow the OAuth2 error format (e.g. invalid_request, login_required). Defaults to request_denied. + * @type {string} + * @memberof LoginRequestBody + */ + error?: string; + /** + * Debug contains information to help resolve the problem as a developer. Usually not exposed to the public but only in the server logs. + * @type {string} + * @memberof LoginRequestBody + */ + error_debug?: string; + /** + * Description of the error in a human readable format. + * @type {string} + * @memberof LoginRequestBody + */ + error_description?: string; + /** + * Hint to help resolve the error. + * @type {string} + * @memberof LoginRequestBody + */ + error_hint?: string; + /** + * Represents the HTTP status code of the error (e.g. 401 or 403). Defaults to 400. + * @type {number} + * @memberof LoginRequestBody + */ + status_code?: number; + /** + * Remember, if set to true, tells the oauth provider to remember this consent authorization and reuse it if the same client asks the same user for the same, or a subset of, scope. + * @type {boolean} + * @memberof LoginRequestBody + */ + remember?: boolean; + /** + * RememberFor sets how long the consent authorization should be remembered for in seconds. If set to 0, the authorization will be remembered indefinitely. + * @type {number} + * @memberof LoginRequestBody + */ + remember_for?: number; +} +/** + * + * @export + * @interface LoginResponse + */ +export interface LoginResponse { + /** + * Id of the corresponding client. + * @type {string} + * @memberof LoginResponse + */ + client_id: string; + /** + * The id/challenge of the consent login request. + * @type {string} + * @memberof LoginResponse + */ + challenge: string; + /** + * + * @type {OauthClientResponse} + * @memberof LoginResponse + */ + client: OauthClientResponse; + /** + * + * @type {OidcContextResponse} + * @memberof LoginResponse + */ + oidc_context: OidcContextResponse; + /** + * The original oauth2.0 authorization url request by the client. + * @type {string} + * @memberof LoginResponse + */ + request_url: string; + /** + * + * @type {Array} + * @memberof LoginResponse + */ + requested_access_token_audience: Array; + /** + * The request scopes of the login request. + * @type {Array} + * @memberof LoginResponse + */ + requested_scope?: Array; + /** + * The login session id. This parameter is used as sid for the oidc front-/backchannel logout. + * @type {string} + * @memberof LoginResponse + */ + session_id: string; + /** + * Skip, if true, implies that the client has requested the same scopes from the same user previously. + * @type {boolean} + * @memberof LoginResponse + */ + skip: boolean; + /** + * User id of the end-user that is authenticated. + * @type {string} + * @memberof LoginResponse + */ + subject: string; +} +/** + * + * @export + * @interface Lti11ToolConfigCreateParams + */ +export interface Lti11ToolConfigCreateParams { + /** + * + * @type {ToolConfigType} + * @memberof Lti11ToolConfigCreateParams + */ + type: ToolConfigType; + /** + * + * @type {string} + * @memberof Lti11ToolConfigCreateParams + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof Lti11ToolConfigCreateParams + */ + key: string; + /** + * + * @type {string} + * @memberof Lti11ToolConfigCreateParams + */ + secret: string; + /** + * + * @type {LtiMessageType} + * @memberof Lti11ToolConfigCreateParams + */ + lti_message_type: LtiMessageType; + /** + * + * @type {LtiPrivacyPermission} + * @memberof Lti11ToolConfigCreateParams + */ + privacy_permission: LtiPrivacyPermission; + /** + * + * @type {string} + * @memberof Lti11ToolConfigCreateParams + */ + launch_presentation_locale: string; +} +/** + * + * @export + * @interface Lti11ToolConfigUpdateParams + */ +export interface Lti11ToolConfigUpdateParams { + /** + * + * @type {ToolConfigType} + * @memberof Lti11ToolConfigUpdateParams + */ + type: ToolConfigType; + /** + * + * @type {string} + * @memberof Lti11ToolConfigUpdateParams + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof Lti11ToolConfigUpdateParams + */ + key: string; + /** + * + * @type {string} + * @memberof Lti11ToolConfigUpdateParams + */ + secret?: string; + /** + * + * @type {LtiMessageType} + * @memberof Lti11ToolConfigUpdateParams + */ + lti_message_type: LtiMessageType; + /** + * + * @type {LtiPrivacyPermission} + * @memberof Lti11ToolConfigUpdateParams + */ + privacy_permission: LtiPrivacyPermission; + /** + * + * @type {string} + * @memberof Lti11ToolConfigUpdateParams + */ + launch_presentation_locale: string; +} +/** + * + * @export + * @enum {string} + */ +export enum LtiMessageType { + BasicLtiLaunchRequest = 'basic-lti-launch-request' +} + +/** + * + * @export + * @enum {string} + */ +export enum LtiPrivacyPermission { + Anonymous = 'anonymous', + EMail = 'e-mail', + Name = 'name', + Public = 'public', + Pseudonymous = 'pseudonymous' +} + +/** + * + * @export + * @interface MaterialResponse + */ +export interface MaterialResponse { + /** + * The id of the Material entity + * @type {string} + * @memberof MaterialResponse + */ + _id: string; + /** + * The id of the Material entity + * @type {string} + * @memberof MaterialResponse + */ + id: string; + /** + * Title of the Material entity + * @type {string} + * @memberof MaterialResponse + */ + title: string; + /** + * ? + * @type {Array} + * @memberof MaterialResponse + */ + relatedResources: Array; + /** + * Url of the material + * @type {string} + * @memberof MaterialResponse + */ + url: string; + /** + * Position of the Lesson entity + * @type {string} + * @memberof MaterialResponse + */ + client: string; + /** + * Description of the material license + * @type {Array} + * @memberof MaterialResponse + */ + license: Array; + /** + * For material from Merlin, the Merlin reference + * @type {string} + * @memberof MaterialResponse + */ + merlinReference: string; +} +/** + * + * @export + * @interface MeAccountResponse + */ +export interface MeAccountResponse { + /** + * + * @type {string} + * @memberof MeAccountResponse + */ + id: string; +} +/** + * + * @export + * @interface MeResponse + */ +export interface MeResponse { + /** + * + * @type {MeSchoolResponse} + * @memberof MeResponse + */ + school: MeSchoolResponse; + /** + * + * @type {MeUserResponse} + * @memberof MeResponse + */ + user: MeUserResponse; + /** + * + * @type {Array} + * @memberof MeResponse + */ + roles: Array; + /** + * + * @type {Array} + * @memberof MeResponse + */ + permissions: Array; + /** + * + * @type {LanguageType} + * @memberof MeResponse + */ + language: LanguageType; + /** + * + * @type {MeAccountResponse} + * @memberof MeResponse + */ + account: MeAccountResponse; +} +/** + * + * @export + * @interface MeRoleResponse + */ +export interface MeRoleResponse { + /** + * + * @type {string} + * @memberof MeRoleResponse + */ + id: string; + /** + * + * @type {string} + * @memberof MeRoleResponse + */ + name: string; +} +/** + * + * @export + * @interface MeSchoolLogoResponse + */ +export interface MeSchoolLogoResponse { + /** + * + * @type {string} + * @memberof MeSchoolLogoResponse + */ + url?: string; + /** + * + * @type {string} + * @memberof MeSchoolLogoResponse + */ + name?: string; +} +/** + * + * @export + * @interface MeSchoolResponse + */ +export interface MeSchoolResponse { + /** + * + * @type {string} + * @memberof MeSchoolResponse + */ + id: string; + /** + * + * @type {string} + * @memberof MeSchoolResponse + */ + name: string; + /** + * + * @type {MeSchoolLogoResponse} + * @memberof MeSchoolResponse + */ + logo: MeSchoolLogoResponse; +} +/** + * + * @export + * @interface MeUserResponse + */ +export interface MeUserResponse { + /** + * + * @type {string} + * @memberof MeUserResponse + */ + id: string; + /** + * + * @type {string} + * @memberof MeUserResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof MeUserResponse + */ + lastName: string; + /** + * + * @type {string} + * @memberof MeUserResponse + */ + customAvatarBackgroundColor?: string; +} +/** + * + * @export + * @interface MediaAvailableLineElementResponse + */ +export interface MediaAvailableLineElementResponse { + /** + * School External tool id of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + schoolExternalToolId: string; + /** + * Name of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + name: string; + /** + * Description of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + description?: string; + /** + * Logo url of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + logoUrl?: string; + /** + * Thumbnail url of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + thumbnailUrl?: string; +} +/** + * + * @export + * @interface MediaAvailableLineResponse + */ +export interface MediaAvailableLineResponse { + /** + * Available media elements in the line + * @type {Array} + * @memberof MediaAvailableLineResponse + */ + elements: Array; + /** + * + * @type {MediaBoardColors} + * @memberof MediaAvailableLineResponse + */ + backgroundColor: MediaBoardColors; + /** + * Collapse available media line + * @type {boolean} + * @memberof MediaAvailableLineResponse + */ + collapsed: boolean; +} +/** + * + * @export + * @enum {string} + */ +export enum MediaBoardColors { + Transparent = 'transparent', + Red = 'red', + Pink = 'pink', + Purple = 'purple', + DeepPurple = 'deepPurple', + Indigo = 'indigo', + Blue = 'blue', + LightBlue = 'lightBlue', + Cyan = 'cyan', + Teal = 'teal', + Green = 'green', + LightGreen = 'lightGreen', + Lime = 'lime', + Yellow = 'yellow', + Amber = 'amber', + Orange = 'orange', + DeepOrange = 'deepOrange', + Brown = 'brown', + Grey = 'grey', + BlueGrey = 'blueGrey' +} + +/** + * + * @export + * @enum {string} + */ +export enum MediaBoardLayoutType { + Columns = 'columns', + List = 'list', + Grid = 'grid' +} + +/** + * + * @export + * @interface MediaBoardResponse + */ +export interface MediaBoardResponse { + /** + * The id of the media board + * @type {string} + * @memberof MediaBoardResponse + */ + id: string; + /** + * The lines of the media board + * @type {Array} + * @memberof MediaBoardResponse + */ + lines: Array; + /** + * The timestamps of the media board + * @type {TimestampsResponse} + * @memberof MediaBoardResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {MediaBoardLayoutType} + * @memberof MediaBoardResponse + */ + layout: MediaBoardLayoutType; +} +/** + * + * @export + * @interface MediaExternalToolElementContent + */ +export interface MediaExternalToolElementContent { + /** + * The id of the context external tool + * @type {string} + * @memberof MediaExternalToolElementContent + */ + contextExternalToolId: string; +} +/** + * + * @export + * @interface MediaExternalToolElementResponse + */ +export interface MediaExternalToolElementResponse { + /** + * The id of the media external tool element + * @type {string} + * @memberof MediaExternalToolElementResponse + */ + id: string; + /** + * The content of the media external tool element + * @type {MediaExternalToolElementContent} + * @memberof MediaExternalToolElementResponse + */ + content: MediaExternalToolElementContent; + /** + * The timestamps of the media external tool element + * @type {TimestampsResponse} + * @memberof MediaExternalToolElementResponse + */ + timestamps: TimestampsResponse; +} +/** + * + * @export + * @interface MediaLineResponse + */ +export interface MediaLineResponse { + /** + * The id of the media line + * @type {string} + * @memberof MediaLineResponse + */ + id: string; + /** + * The title of the media line + * @type {string} + * @memberof MediaLineResponse + */ + title: string; + /** + * The elements of the media line + * @type {Array} + * @memberof MediaLineResponse + */ + elements: Array; + /** + * The timestamps of the media line + * @type {TimestampsResponse} + * @memberof MediaLineResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {MediaBoardColors} + * @memberof MediaLineResponse + */ + backgroundColor: MediaBoardColors; + /** + * Collapse the media line + * @type {boolean} + * @memberof MediaLineResponse + */ + collapsed: boolean; +} +/** + * + * @export + * @interface Message + */ +export interface Message { + /** + * + * @type {string} + * @memberof Message + */ + title: string; + /** + * + * @type {string} + * @memberof Message + */ + text: string; + /** + * + * @type {string} + * @memberof Message + */ + timestamp: string; + /** + * + * @type {MessageOrigin} + * @memberof Message + */ + origin: MessageOrigin; + /** + * + * @type {string} + * @memberof Message + */ + url: string; + /** + * + * @type {string} + * @memberof Message + */ + status: string; + /** + * + * @type {string} + * @memberof Message + */ + createdAt: string; +} +/** + * + * @export + * @interface MessageOrigin + */ +export interface MessageOrigin { + /** + * + * @type {number} + * @memberof MessageOrigin + */ + message_id: number; + /** + * + * @type {string} + * @memberof MessageOrigin + */ + page: string; +} +/** + * + * @export + * @interface MetaTagExtractorResponse + */ +export interface MetaTagExtractorResponse { + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + url: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + title: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + description: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + imageUrl: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + type: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + parentTitle: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + parentType: string; +} +/** + * + * @export + * @interface MoveCardBodyParams + */ +export interface MoveCardBodyParams { + /** + * + * @type {string} + * @memberof MoveCardBodyParams + */ + toColumnId: string; + /** + * + * @type {number} + * @memberof MoveCardBodyParams + */ + toPosition: number; +} +/** + * + * @export + * @interface MoveColumnBodyParams + */ +export interface MoveColumnBodyParams { + /** + * The id of the target board + * @type {string} + * @memberof MoveColumnBodyParams + */ + toBoardId: string; + /** + * + * @type {number} + * @memberof MoveColumnBodyParams + */ + toPosition: number; +} +/** + * + * @export + * @interface MoveContentElementBody + */ +export interface MoveContentElementBody { + /** + * + * @type {string} + * @memberof MoveContentElementBody + */ + toCardId: string; + /** + * + * @type {number} + * @memberof MoveContentElementBody + */ + toPosition: number; +} +/** + * + * @export + * @interface MoveElementBodyParams + */ +export interface MoveElementBodyParams { + /** + * The id of the line where the element is moved to + * @type {string} + * @memberof MoveElementBodyParams + */ + toLineId: string; + /** + * The position where the element is moved to + * @type {number} + * @memberof MoveElementBodyParams + */ + toPosition: number; +} +/** + * + * @export + * @interface MoveElementParams + */ +export interface MoveElementParams { + /** + * + * @type {MoveElementPositionParams} + * @memberof MoveElementParams + */ + from: MoveElementPositionParams; + /** + * + * @type {MoveElementPositionParams} + * @memberof MoveElementParams + */ + to: MoveElementPositionParams; +} +/** + * + * @export + * @interface MoveElementPositionParams + */ +export interface MoveElementPositionParams { + /** + * + * @type {number} + * @memberof MoveElementPositionParams + */ + x: number; + /** + * + * @type {number} + * @memberof MoveElementPositionParams + */ + y: number; + /** + * used to identify a position within a group. + * @type {number} + * @memberof MoveElementPositionParams + */ + groupIndex?: number; +} +/** + * + * @export + * @interface NewsListResponse + */ +export interface NewsListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof NewsListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof NewsListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof NewsListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof NewsListResponse + */ + limit: number; +} +/** + * + * @export + * @interface NewsResponse + */ +export interface NewsResponse { + /** + * The id of the News entity + * @type {string} + * @memberof NewsResponse + */ + id: string; + /** + * Title of the News entity + * @type {string} + * @memberof NewsResponse + */ + title: string; + /** + * Content of the News entity + * @type {string} + * @memberof NewsResponse + */ + content: string; + /** + * The point in time from when the News entity schould be displayed + * @type {string} + * @memberof NewsResponse + */ + displayAt: string; + /** + * The type of source of the News entity + * @type {string} + * @memberof NewsResponse + */ + source?: NewsResponseSourceEnum; + /** + * The source description of the News entity + * @type {string} + * @memberof NewsResponse + */ + sourceDescription?: string; + /** + * + * @type {NewsTargetModel} + * @memberof NewsResponse + */ + targetModel: NewsTargetModel; + /** + * Specific target id to which the News entity is related + * @type {string} + * @memberof NewsResponse + */ + targetId: string; + /** + * The target object with id and name, could be the school, team, or course name + * @type {TargetInfoResponse} + * @memberof NewsResponse + */ + target: TargetInfoResponse; + /** + * The School ownership + * @type {SchoolInfoResponse} + * @memberof NewsResponse + */ + school: SchoolInfoResponse; + /** + * Reference to the User that created the News entity + * @type {UserInfoResponse} + * @memberof NewsResponse + */ + creator: UserInfoResponse; + /** + * Reference to the User that updated the News entity + * @type {UserInfoResponse} + * @memberof NewsResponse + */ + updater?: UserInfoResponse; + /** + * The creation timestamp + * @type {string} + * @memberof NewsResponse + */ + createdAt: string; + /** + * The update timestamp + * @type {string} + * @memberof NewsResponse + */ + updatedAt: string; + /** + * List of permissions the current user has for the News entity + * @type {Array} + * @memberof NewsResponse + */ + permissions: Array; +} + +/** + * @export + * @enum {string} + */ +export enum NewsResponseSourceEnum { + Internal = 'internal', + Rss = 'rss' +} + +/** + * + * @export + * @enum {string} + */ +export enum NewsTargetModel { + Schools = 'schools', + Courses = 'courses', + Teams = 'teams' +} + +/** + * + * @export + * @interface OAuthTokenDto + */ +export interface OAuthTokenDto { + /** + * + * @type {string} + * @memberof OAuthTokenDto + */ + idToken: string; + /** + * + * @type {string} + * @memberof OAuthTokenDto + */ + refreshToken: string; + /** + * + * @type {string} + * @memberof OAuthTokenDto + */ + accessToken: string; +} +/** + * + * @export + * @interface Oauth2AuthorizationBodyParams + */ +export interface Oauth2AuthorizationBodyParams { + /** + * + * @type {string} + * @memberof Oauth2AuthorizationBodyParams + */ + redirectUri: string; + /** + * + * @type {string} + * @memberof Oauth2AuthorizationBodyParams + */ + code: string; + /** + * + * @type {string} + * @memberof Oauth2AuthorizationBodyParams + */ + systemId: string; +} +/** + * + * @export + * @interface Oauth2MigrationParams + */ +export interface Oauth2MigrationParams { + /** + * + * @type {string} + * @memberof Oauth2MigrationParams + */ + redirectUri: string; + /** + * + * @type {string} + * @memberof Oauth2MigrationParams + */ + code: string; + /** + * + * @type {string} + * @memberof Oauth2MigrationParams + */ + systemId: string; +} +/** + * + * @export + * @interface Oauth2ToolConfigCreateParams + */ +export interface Oauth2ToolConfigCreateParams { + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + type: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + clientId: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + clientSecret: string; + /** + * + * @type {boolean} + * @memberof Oauth2ToolConfigCreateParams + */ + skipConsent: boolean; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + frontchannelLogoutUri?: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + scope?: string; + /** + * + * @type {Array} + * @memberof Oauth2ToolConfigCreateParams + */ + redirectUris: Array; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + tokenEndpointAuthMethod: string; +} +/** + * + * @export + * @interface Oauth2ToolConfigUpdateParams + */ +export interface Oauth2ToolConfigUpdateParams { + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + type: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + clientId: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + clientSecret?: string; + /** + * + * @type {boolean} + * @memberof Oauth2ToolConfigUpdateParams + */ + skipConsent: boolean; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + frontchannelLogoutUri?: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + scope?: string; + /** + * + * @type {Array} + * @memberof Oauth2ToolConfigUpdateParams + */ + redirectUris: Array; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + tokenEndpointAuthMethod: string; +} +/** + * + * @export + * @interface OauthClientCreateBody + */ +export interface OauthClientCreateBody { + /** + * The Oauth2 client id. + * @type {string} + * @memberof OauthClientCreateBody + */ + client_id: string; + /** + * The Oauth2 client name. + * @type {string} + * @memberof OauthClientCreateBody + */ + client_name: string; + /** + * The Oauth2 client secret. + * @type {string} + * @memberof OauthClientCreateBody + */ + client_secret: string; + /** + * The allowed redirect urls of the Oauth2 client. + * @type {Array} + * @memberof OauthClientCreateBody + */ + redirect_uris?: Array; + /** + * Requested Client Authentication method for the Token Endpoint. The options are client_secret_post, client_secret_basic, private_key_jwt, and none. + * @type {string} + * @memberof OauthClientCreateBody + */ + token_endpoint_auth_method: string; + /** + * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. + * @type {string} + * @memberof OauthClientCreateBody + */ + subject_type: string; + /** + * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. + * @type {string} + * @memberof OauthClientCreateBody + */ + scope?: string; + /** + * Thr frontchannel logout uri. + * @type {string} + * @memberof OauthClientCreateBody + */ + frontchannel_logout_uri?: string; + /** + * The grant types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientCreateBody + */ + grant_types?: Array; + /** + * The response types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientCreateBody + */ + response_types?: Array; +} +/** + * + * @export + * @interface OauthClientResponse + */ +export interface OauthClientResponse { + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + allowed_cors_origins?: Array; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + audience: Array; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + authorization_code_grant_access_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + authorization_code_grant_id_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + authorization_code_grant_refresh_token_lifespan: string; + /** + * Boolean value specifying whether the RP requires that a sid (session ID) Claim. + * @type {boolean} + * @memberof OauthClientResponse + */ + backchannel_logout_session_required: boolean; + /** + * RP URL that will cause the RP to log itself out when sent a Logout Token by the OP. + * @type {string} + * @memberof OauthClientResponse + */ + backchannel_logout_uri: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + client_credentials_grant_access_token_lifespan: string; + /** + * Id of the client. + * @type {string} + * @memberof OauthClientResponse + */ + client_id: string; + /** + * Human-readable string name of the client presented to the end-user. + * @type {string} + * @memberof OauthClientResponse + */ + client_name: string; + /** + * SecretExpiresAt is an integer holding the time at which the client secret will expire or 0 if it will not expire. + * @type {number} + * @memberof OauthClientResponse + */ + client_secret_expires_at: number; + /** + * ClientUri is an URL string of a web page providing information about the client. + * @type {string} + * @memberof OauthClientResponse + */ + client_uri: string; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + contacts?: Array; + /** + * CreatedAt returns the timestamp of the clients creation. + * @type {string} + * @memberof OauthClientResponse + */ + created_at: string; + /** + * Boolean value specifying whether the RP requires that iss (issuer) and sid (session ID) query parameters. + * @type {boolean} + * @memberof OauthClientResponse + */ + frontchannel_logout_session_required: boolean; + /** + * RP URL that will cause the RP to log itself out when rendered in an iframe by the OP. + * @type {string} + * @memberof OauthClientResponse + */ + frontchannel_logout_uri: string; + /** + * The grant types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientResponse + */ + grant_types?: Array; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + implicit_grant_access_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + implicit_grant_id_token_lifespan: string; + /** + * + * @type {object} + * @memberof OauthClientResponse + */ + jwks: object; + /** + * URL for the clients JSON Web Key Set [JWK] document + * @type {string} + * @memberof OauthClientResponse + */ + jwks_uri: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + jwt_bearer_grant_access_token_lifespan: string; + /** + * LogoUri is an URL string that references a logo for the client. + * @type {string} + * @memberof OauthClientResponse + */ + logo_uri: string; + /** + * + * @type {object} + * @memberof OauthClientResponse + */ + metadata: object; + /** + * Owner is a string identifying the owner of the OAuth 2.0 Client. + * @type {string} + * @memberof OauthClientResponse + */ + owner: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + password_grant_access_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + password_grant_refresh_token_lifespan: string; + /** + * PolicyUri is a URL string that points to a human-readable privacy policy document + * @type {string} + * @memberof OauthClientResponse + */ + policy_uri: string; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + post_logout_redirect_uris?: Array; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + redirect_uris?: Array; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + refresh_token_grant_access_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + refresh_token_grant_id_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + refresh_token_grant_refresh_token_lifespan: string; + /** + * RegistrationAccessToken can be used to update, get, or delete the OAuth2 Client. + * @type {string} + * @memberof OauthClientResponse + */ + registration_access_token: string; + /** + * RegistrationClientURI is the URL used to update, get, or delete the OAuth2 Client. + * @type {string} + * @memberof OauthClientResponse + */ + registration_client_uri: string; + /** + * JWS [JWS] alg algorithm [JWA] that MUST be used for signing Request Objects sent to the OP. + * @type {string} + * @memberof OauthClientResponse + */ + request_object_signing_alg: string; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + request_uris?: Array; + /** + * The response types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientResponse + */ + response_types?: Array; + /** + * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. + * @type {string} + * @memberof OauthClientResponse + */ + scope: string; + /** + * URL using the https scheme to be used in calculating Pseudonymous Identifiers by the OP. + * @type {string} + * @memberof OauthClientResponse + */ + sector_identifier_uri: string; + /** + * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. + * @type {string} + * @memberof OauthClientResponse + */ + subject_type: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + token_endpoint_auth_method: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + token_endpoint_auth_signing_alg: string; + /** + * TermsOfServiceUri is a URL string that points to a human-readable terms of service document for the client. + * @type {string} + * @memberof OauthClientResponse + */ + tos_uri: string; + /** + * UpdatedAt returns the timestamp of the last update. + * @type {string} + * @memberof OauthClientResponse + */ + updated_at: string; + /** + * JWS alg algorithm [JWA] REQUIRED for signing UserInfo Responses. + * @type {string} + * @memberof OauthClientResponse + */ + userinfo_signed_response_alg: string; +} +/** + * + * @export + * @interface OauthClientUpdateBody + */ +export interface OauthClientUpdateBody { + /** + * The Oauth2 client name. + * @type {string} + * @memberof OauthClientUpdateBody + */ + client_name: string; + /** + * The Oauth2 client secret. + * @type {string} + * @memberof OauthClientUpdateBody + */ + client_secret?: string; + /** + * The allowed redirect urls of the Oauth2 client. + * @type {Array} + * @memberof OauthClientUpdateBody + */ + redirect_uris?: Array; + /** + * Requested Client Authentication method for the Token Endpoint. The options are client_secret_post, client_secret_basic, private_key_jwt, and none. + * @type {string} + * @memberof OauthClientUpdateBody + */ + token_endpoint_auth_method: string; + /** + * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. + * @type {string} + * @memberof OauthClientUpdateBody + */ + subject_type: string; + /** + * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. + * @type {string} + * @memberof OauthClientUpdateBody + */ + scope?: string; + /** + * Thr frontchannel logout uri. + * @type {string} + * @memberof OauthClientUpdateBody + */ + frontchannel_logout_uri?: string; + /** + * The grant types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientUpdateBody + */ + grant_types?: Array; + /** + * The response types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientUpdateBody + */ + response_types?: Array; +} +/** + * + * @export + * @interface OauthConfigResponse + */ +export interface OauthConfigResponse { + /** + * Client id + * @type {string} + * @memberof OauthConfigResponse + */ + clientId: string; + /** + * Hint for idp redirects (optional) + * @type {string} + * @memberof OauthConfigResponse + */ + idpHint?: string | null; + /** + * Redirect uri + * @type {string} + * @memberof OauthConfigResponse + */ + redirectUri: string; + /** + * Grant type + * @type {string} + * @memberof OauthConfigResponse + */ + grantType: string; + /** + * Token endpoint + * @type {string} + * @memberof OauthConfigResponse + */ + tokenEndpoint: string; + /** + * Auth endpoint + * @type {string} + * @memberof OauthConfigResponse + */ + authEndpoint: string; + /** + * Response type + * @type {string} + * @memberof OauthConfigResponse + */ + responseType: string; + /** + * Scope + * @type {string} + * @memberof OauthConfigResponse + */ + scope: string; + /** + * Provider + * @type {string} + * @memberof OauthConfigResponse + */ + provider: string; + /** + * Logout endpoint + * @type {string} + * @memberof OauthConfigResponse + */ + logoutEndpoint?: string; + /** + * Issuer + * @type {string} + * @memberof OauthConfigResponse + */ + issuer: string; + /** + * Jwks endpoint + * @type {string} + * @memberof OauthConfigResponse + */ + jwksEndpoint: string; +} +/** + * + * @export + * @interface OidcContextResponse + */ +export interface OidcContextResponse { + /** + * + * @type {Array} + * @memberof OidcContextResponse + */ + acr_values: Array; + /** + * + * @type {string} + * @memberof OidcContextResponse + */ + display: string; + /** + * + * @type {object} + * @memberof OidcContextResponse + */ + id_token_hint_claims: object; + /** + * + * @type {string} + * @memberof OidcContextResponse + */ + login_hint: string; + /** + * + * @type {Array} + * @memberof OidcContextResponse + */ + ui_locales: Array; +} +/** + * + * @export + * @interface ParentConsentResponse + */ +export interface ParentConsentResponse { + /** + * + * @type {string} + * @memberof ParentConsentResponse + */ + form: string; + /** + * + * @type {boolean} + * @memberof ParentConsentResponse + */ + privacyConsent: boolean; + /** + * + * @type {boolean} + * @memberof ParentConsentResponse + */ + termsOfUseConsent: boolean; + /** + * + * @type {string} + * @memberof ParentConsentResponse + */ + dateOfPrivacyConsent: string; + /** + * + * @type {string} + * @memberof ParentConsentResponse + */ + dateOfTermsOfUseConsent: string; + /** + * + * @type {string} + * @memberof ParentConsentResponse + */ + _id: string; +} +/** + * + * @export + * @interface PatchGroupParams + */ +export interface PatchGroupParams { + /** + * Title of the Group grid element + * @type {string} + * @memberof PatchGroupParams + */ + title: string; +} +/** + * + * @export + * @interface PatchMyAccountParams + */ +export interface PatchMyAccountParams { + /** + * The current user password to authorize the update action. + * @type {string} + * @memberof PatchMyAccountParams + */ + passwordOld: string; + /** + * The new password for the current user. + * @type {string} + * @memberof PatchMyAccountParams + */ + passwordNew?: string | null; + /** + * The new email address for the current user. + * @type {string} + * @memberof PatchMyAccountParams + */ + email?: string | null; + /** + * The new first name for the current user. + * @type {string} + * @memberof PatchMyAccountParams + */ + firstName?: string | null; + /** + * The new last name for the current user. + * @type {string} + * @memberof PatchMyAccountParams + */ + lastName?: string | null; +} +/** + * + * @export + * @interface PatchMyPasswordParams + */ +export interface PatchMyPasswordParams { + /** + * The new user password. + * @type {string} + * @memberof PatchMyPasswordParams + */ + password: string; + /** + * The confirmed new user password. Must match the password field. + * @type {string} + * @memberof PatchMyPasswordParams + */ + confirmPassword: string; +} +/** + * + * @export + * @interface PatchOrderParams + */ +export interface PatchOrderParams { + /** + * Array ids determining the new order + * @type {Array} + * @memberof PatchOrderParams + */ + elements: Array; +} +/** + * + * @export + * @interface PatchVisibilityParams + */ +export interface PatchVisibilityParams { + /** + * true to publish the element, false to unpublish + * @type {boolean} + * @memberof PatchVisibilityParams + */ + visibility: boolean; +} +/** + * + * @export + * @enum {string} + */ +export enum Permission { + AccountCreate = 'ACCOUNT_CREATE', + AccountDelete = 'ACCOUNT_DELETE', + AccountEdit = 'ACCOUNT_EDIT', + AccountView = 'ACCOUNT_VIEW', + AddSchoolMembers = 'ADD_SCHOOL_MEMBERS', + AdminEdit = 'ADMIN_EDIT', + AdminView = 'ADMIN_VIEW', + BaseView = 'BASE_VIEW', + CalendarCreate = 'CALENDAR_CREATE', + CalendarEdit = 'CALENDAR_EDIT', + CalendarView = 'CALENDAR_VIEW', + ChangeTeamRoles = 'CHANGE_TEAM_ROLES', + ClassCreate = 'CLASS_CREATE', + ClassEdit = 'CLASS_EDIT', + ClassFullAdmin = 'CLASS_FULL_ADMIN', + ClassList = 'CLASS_LIST', + ClassRemove = 'CLASS_REMOVE', + ClassView = 'CLASS_VIEW', + CommentsCreate = 'COMMENTS_CREATE', + CommentsEdit = 'COMMENTS_EDIT', + CommentsView = 'COMMENTS_VIEW', + ContentNonOerView = 'CONTENT_NON_OER_VIEW', + ContentView = 'CONTENT_VIEW', + ContextToolAdmin = 'CONTEXT_TOOL_ADMIN', + ContextToolUser = 'CONTEXT_TOOL_USER', + CoursegroupCreate = 'COURSEGROUP_CREATE', + CoursegroupEdit = 'COURSEGROUP_EDIT', + CourseCreate = 'COURSE_CREATE', + CourseDelete = 'COURSE_DELETE', + CourseEdit = 'COURSE_EDIT', + CourseRemove = 'COURSE_REMOVE', + CourseView = 'COURSE_VIEW', + CreateSupportJwt = 'CREATE_SUPPORT_JWT', + CreateTopicsAndTasks = 'CREATE_TOPICS_AND_TASKS', + DashboardView = 'DASHBOARD_VIEW', + DatasourcesCreate = 'DATASOURCES_CREATE', + DatasourcesDelete = 'DATASOURCES_DELETE', + DatasourcesEdit = 'DATASOURCES_EDIT', + DatasourcesRun = 'DATASOURCES_RUN', + DatasourcesRunView = 'DATASOURCES_RUN_VIEW', + DatasourcesView = 'DATASOURCES_VIEW', + DefaultFilePermissions = 'DEFAULT_FILE_PERMISSIONS', + DeleteTeam = 'DELETE_TEAM', + EditAllFiles = 'EDIT_ALL_FILES', + EnterthecloudStart = 'ENTERTHECLOUD_START', + FederalstateCreate = 'FEDERALSTATE_CREATE', + FederalstateEdit = 'FEDERALSTATE_EDIT', + FederalstateView = 'FEDERALSTATE_VIEW', + FilestorageCreate = 'FILESTORAGE_CREATE', + FilestorageEdit = 'FILESTORAGE_EDIT', + FilestorageRemove = 'FILESTORAGE_REMOVE', + FilestorageView = 'FILESTORAGE_VIEW', + FileCreate = 'FILE_CREATE', + FileDelete = 'FILE_DELETE', + FileMove = 'FILE_MOVE', + FolderCreate = 'FOLDER_CREATE', + FolderDelete = 'FOLDER_DELETE', + GroupList = 'GROUP_LIST', + GroupFullAdmin = 'GROUP_FULL_ADMIN', + GroupView = 'GROUP_VIEW', + HelpdeskCreate = 'HELPDESK_CREATE', + HelpdeskEdit = 'HELPDESK_EDIT', + HelpdeskView = 'HELPDESK_VIEW', + HomeworkCreate = 'HOMEWORK_CREATE', + HomeworkEdit = 'HOMEWORK_EDIT', + HomeworkView = 'HOMEWORK_VIEW', + ImportUserMigrate = 'IMPORT_USER_MIGRATE', + ImportUserUpdate = 'IMPORT_USER_UPDATE', + ImportUserView = 'IMPORT_USER_VIEW', + InstanceView = 'INSTANCE_VIEW', + InviteAdministrators = 'INVITE_ADMINISTRATORS', + InviteExperts = 'INVITE_EXPERTS', + JoinMeeting = 'JOIN_MEETING', + LeaveTeam = 'LEAVE_TEAM', + LernstoreView = 'LERNSTORE_VIEW', + LessonsCreate = 'LESSONS_CREATE', + LessonsView = 'LESSONS_VIEW', + LinkCreate = 'LINK_CREATE', + NewsCreate = 'NEWS_CREATE', + NewsEdit = 'NEWS_EDIT', + NewsView = 'NEWS_VIEW', + NextcloudUser = 'NEXTCLOUD_USER', + NotificationCreate = 'NOTIFICATION_CREATE', + NotificationEdit = 'NOTIFICATION_EDIT', + NotificationView = 'NOTIFICATION_VIEW', + OauthClientEdit = 'OAUTH_CLIENT_EDIT', + OauthClientView = 'OAUTH_CLIENT_VIEW', + PasswordEdit = 'PASSWORD_EDIT', + PwrecoveryCreate = 'PWRECOVERY_CREATE', + PwrecoveryEdit = 'PWRECOVERY_EDIT', + PwrecoveryView = 'PWRECOVERY_VIEW', + ReleasesCreate = 'RELEASES_CREATE', + ReleasesEdit = 'RELEASES_EDIT', + ReleasesView = 'RELEASES_VIEW', + RemoveMembers = 'REMOVE_MEMBERS', + RenameTeam = 'RENAME_TEAM', + RequestConsents = 'REQUEST_CONSENTS', + RoleCreate = 'ROLE_CREATE', + RoleEdit = 'ROLE_EDIT', + RoleView = 'ROLE_VIEW', + SchoolChatManage = 'SCHOOL_CHAT_MANAGE', + SchoolCreate = 'SCHOOL_CREATE', + SchoolEdit = 'SCHOOL_EDIT', + SchoolLogoManage = 'SCHOOL_LOGO_MANAGE', + SchoolNewsEdit = 'SCHOOL_NEWS_EDIT', + SchoolPermissionChange = 'SCHOOL_PERMISSION_CHANGE', + SchoolPermissionView = 'SCHOOL_PERMISSION_VIEW', + SchoolStudentTeamManage = 'SCHOOL_STUDENT_TEAM_MANAGE', + SchoolSystemEdit = 'SCHOOL_SYSTEM_EDIT', + SchoolSystemView = 'SCHOOL_SYSTEM_VIEW', + SchoolToolAdmin = 'SCHOOL_TOOL_ADMIN', + ScopePermissionsView = 'SCOPE_PERMISSIONS_VIEW', + StartMeeting = 'START_MEETING', + StudentCreate = 'STUDENT_CREATE', + StudentDelete = 'STUDENT_DELETE', + StudentEdit = 'STUDENT_EDIT', + StudentList = 'STUDENT_LIST', + StudentSkipRegistration = 'STUDENT_SKIP_REGISTRATION', + SubmissionsCreate = 'SUBMISSIONS_CREATE', + SubmissionsEdit = 'SUBMISSIONS_EDIT', + SubmissionsSchoolView = 'SUBMISSIONS_SCHOOL_VIEW', + SubmissionsView = 'SUBMISSIONS_VIEW', + SyncStart = 'SYNC_START', + SystemCreate = 'SYSTEM_CREATE', + SystemEdit = 'SYSTEM_EDIT', + SystemView = 'SYSTEM_VIEW', + TaskDashboardTeacherViewV3 = 'TASK_DASHBOARD_TEACHER_VIEW_V3', + TaskDashboardViewV3 = 'TASK_DASHBOARD_VIEW_V3', + TeacherCreate = 'TEACHER_CREATE', + TeacherDelete = 'TEACHER_DELETE', + TeacherEdit = 'TEACHER_EDIT', + TeacherList = 'TEACHER_LIST', + TeacherSkipRegistration = 'TEACHER_SKIP_REGISTRATION', + TeamCreate = 'TEAM_CREATE', + ToolCreateEtherpad = 'TOOL_CREATE_ETHERPAD', + TeamEdit = 'TEAM_EDIT', + TeamInviteExternal = 'TEAM_INVITE_EXTERNAL', + TeamView = 'TEAM_VIEW', + ToolAdmin = 'TOOL_ADMIN', + ToolCreate = 'TOOL_CREATE', + ToolEdit = 'TOOL_EDIT', + ToolNewView = 'TOOL_NEW_VIEW', + ToolView = 'TOOL_VIEW', + TopicCreate = 'TOPIC_CREATE', + TopicEdit = 'TOPIC_EDIT', + TopicView = 'TOPIC_VIEW', + UploadFiles = 'UPLOAD_FILES', + UseLibreoffice = 'USE_LIBREOFFICE', + UseRocketchat = 'USE_ROCKETCHAT', + UsergroupCreate = 'USERGROUP_CREATE', + UsergroupEdit = 'USERGROUP_EDIT', + UsergroupView = 'USERGROUP_VIEW', + UserChangeOwnName = 'USER_CHANGE_OWN_NAME', + UserCreate = 'USER_CREATE', + UserLoginMigrationAdmin = 'USER_LOGIN_MIGRATION_ADMIN', + UserLoginMigrationRollback = 'USER_LOGIN_MIGRATION_ROLLBACK', + UserLoginMigrationForce = 'USER_LOGIN_MIGRATION_FORCE', + UserMigrate = 'USER_MIGRATE', + UserUpdate = 'USER_UPDATE', + YearsEdit = 'YEARS_EDIT' +} + +/** + * + * @export + * @interface ProviderConfigResponse + */ +export interface ProviderConfigResponse { + /** + * + * @type {string} + * @memberof ProviderConfigResponse + */ + provider: string; +} +/** + * + * @export + * @interface PseudonymResponse + */ +export interface PseudonymResponse { + /** + * + * @type {string} + * @memberof PseudonymResponse + */ + id: string; + /** + * + * @type {string} + * @memberof PseudonymResponse + */ + toolId: string; + /** + * + * @type {string} + * @memberof PseudonymResponse + */ + userId: string; +} +/** + * + * @export + * @interface PublicSystemListResponse + */ +export interface PublicSystemListResponse { + /** + * + * @type {Array} + * @memberof PublicSystemListResponse + */ + data: Array; +} +/** + * + * @export + * @interface PublicSystemResponse + */ +export interface PublicSystemResponse { + /** + * Id of the system. + * @type {string} + * @memberof PublicSystemResponse + */ + id: string; + /** + * Flag to request only systems with oauth-config. + * @type {string} + * @memberof PublicSystemResponse + */ + type?: string | null; + /** + * Alias of the system. + * @type {string} + * @memberof PublicSystemResponse + */ + alias?: string | null; + /** + * Display name of the system. + * @type {string} + * @memberof PublicSystemResponse + */ + displayName?: string | null; + /** + * Oauth config of the system. + * @type {OauthConfigResponse} + * @memberof PublicSystemResponse + */ + oauthConfig?: OauthConfigResponse | null; +} +/** + * + * @export + * @interface RedirectResponse + */ +export interface RedirectResponse { + /** + * RedirectURL is the URL which you should redirect the user to once the authentication process is completed. + * @type {string} + * @memberof RedirectResponse + */ + redirect_to: string; +} +/** + * + * @export + * @interface RenameBodyParams + */ +export interface RenameBodyParams { + /** + * + * @type {string} + * @memberof RenameBodyParams + */ + title: string; +} +/** + * + * @export + * @interface ResolvedUserResponse + */ +export interface ResolvedUserResponse { + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + lastName: string; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + id: string; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + updatedAt: string; + /** + * + * @type {Array} + * @memberof ResolvedUserResponse + */ + roles: Array; + /** + * + * @type {Array} + * @memberof ResolvedUserResponse + */ + permissions: Array; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + schoolId: string; +} +/** + * + * @export + * @interface RichText + */ +export interface RichText { + /** + * Content of the rich text element + * @type {string} + * @memberof RichText + */ + content: string; + /** + * Input format of the rich text element + * @type {string} + * @memberof RichText + */ + type: RichTextTypeEnum; +} + +/** + * @export + * @enum {string} + */ +export enum RichTextTypeEnum { + PlainText = 'plainText', + RichTextCk5Simple = 'richTextCk5Simple', + RichTextCk4 = 'richTextCk4', + RichTextCk5 = 'richTextCk5' +} + +/** + * + * @export + * @interface RichTextContentBody + */ +export interface RichTextContentBody { + /** + * + * @type {string} + * @memberof RichTextContentBody + */ + text: string; + /** + * + * @type {string} + * @memberof RichTextContentBody + */ + inputFormat: string; +} +/** + * + * @export + * @interface RichTextElementContent + */ +export interface RichTextElementContent { + /** + * + * @type {string} + * @memberof RichTextElementContent + */ + text: string; + /** + * + * @type {string} + * @memberof RichTextElementContent + */ + inputFormat: string; +} +/** + * + * @export + * @interface RichTextElementContentBody + */ +export interface RichTextElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof RichTextElementContentBody + */ + type: ContentElementType; + /** + * + * @type {RichTextContentBody} + * @memberof RichTextElementContentBody + */ + content: RichTextContentBody; +} +/** + * + * @export + * @interface RichTextElementResponse + */ +export interface RichTextElementResponse { + /** + * + * @type {string} + * @memberof RichTextElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof RichTextElementResponse + */ + type: ContentElementType; + /** + * + * @type {RichTextElementContent} + * @memberof RichTextElementResponse + */ + content: RichTextElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof RichTextElementResponse + */ + timestamps: TimestampsResponse; +} +/** + * + * @export + * @enum {string} + */ +export enum RoleName { + Administrator = 'administrator', + CourseAdministrator = 'courseAdministrator', + CourseStudent = 'courseStudent', + CourseSubstitutionTeacher = 'courseSubstitutionTeacher', + CourseTeacher = 'courseTeacher', + Demo = 'demo', + DemoStudent = 'demoStudent', + DemoTeacher = 'demoTeacher', + Expert = 'expert', + Helpdesk = 'helpdesk', + Student = 'student', + Superhero = 'superhero', + Teacher = 'teacher', + Teamadministrator = 'teamadministrator', + Teamexpert = 'teamexpert', + Teamleader = 'teamleader', + Teammember = 'teammember', + Teamowner = 'teamowner', + User = 'user' +} + +/** + * + * @export + * @interface SchoolExistsResponse + */ +export interface SchoolExistsResponse { + /** + * + * @type {boolean} + * @memberof SchoolExistsResponse + */ + exists: boolean; +} +/** + * + * @export + * @interface SchoolExternalToolConfigurationStatusResponse + */ +export interface SchoolExternalToolConfigurationStatusResponse { + /** + * Is the tool outdated on school scope, because of non matching versions or required parameter changes on ExternalTool? + * @type {boolean} + * @memberof SchoolExternalToolConfigurationStatusResponse + */ + isOutdatedOnScopeSchool: boolean; + /** + * Is the tool deactivated, because of instance administrator? + * @type {boolean} + * @memberof SchoolExternalToolConfigurationStatusResponse + */ + isGloballyDeactivated: boolean; +} +/** + * + * @export + * @interface SchoolExternalToolConfigurationTemplateListResponse + */ +export interface SchoolExternalToolConfigurationTemplateListResponse { + /** + * + * @type {Array} + * @memberof SchoolExternalToolConfigurationTemplateListResponse + */ + data: Array; +} +/** + * + * @export + * @interface SchoolExternalToolConfigurationTemplateResponse + */ +export interface SchoolExternalToolConfigurationTemplateResponse { + /** + * + * @type {string} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + externalToolId: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + name: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + logoUrl?: string; + /** + * + * @type {Array} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + parameters: Array; +} +/** + * + * @export + * @interface SchoolExternalToolMetadataResponse + */ +export interface SchoolExternalToolMetadataResponse { + /** + * + * @type {ContextExternalToolCountPerContextResponse} + * @memberof SchoolExternalToolMetadataResponse + */ + contextExternalToolCountPerContext: ContextExternalToolCountPerContextResponse; +} +/** + * + * @export + * @interface SchoolExternalToolPostParams + */ +export interface SchoolExternalToolPostParams { + /** + * + * @type {string} + * @memberof SchoolExternalToolPostParams + */ + toolId: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolPostParams + */ + schoolId: string; + /** + * + * @type {Array} + * @memberof SchoolExternalToolPostParams + */ + parameters?: Array; + /** + * Tool can be deactivated, related tools can not be added to e.g. course or board anymore + * @type {boolean} + * @memberof SchoolExternalToolPostParams + */ + isDeactivated: boolean; +} +/** + * + * @export + * @interface SchoolExternalToolResponse + */ +export interface SchoolExternalToolResponse { + /** + * + * @type {string} + * @memberof SchoolExternalToolResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolResponse + */ + name: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolResponse + */ + toolId: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolResponse + */ + schoolId: string; + /** + * + * @type {boolean} + * @memberof SchoolExternalToolResponse + */ + isDeactivated: boolean; + /** + * + * @type {Array} + * @memberof SchoolExternalToolResponse + */ + parameters: Array; + /** + * + * @type {SchoolExternalToolConfigurationStatusResponse} + * @memberof SchoolExternalToolResponse + */ + status: SchoolExternalToolConfigurationStatusResponse; +} +/** + * + * @export + * @interface SchoolExternalToolSearchListResponse + */ +export interface SchoolExternalToolSearchListResponse { + /** + * + * @type {Array} + * @memberof SchoolExternalToolSearchListResponse + */ + data: Array; +} +/** + * + * @export + * @enum {string} + */ +export enum SchoolFeature { + RocketChat = 'rocketChat', + Videoconference = 'videoconference', + Nextcloud = 'nextcloud', + StudentVisibility = 'studentVisibility', + LdapUniventionMigrationSchool = 'ldapUniventionMigrationSchool', + OauthProvisioningEnabled = 'oauthProvisioningEnabled', + ShowOutdatedUsers = 'showOutdatedUsers', + EnableLdapSyncDuringMigration = 'enableLdapSyncDuringMigration' +} + +/** + * + * @export + * @interface SchoolForExternalInviteResponse + */ +export interface SchoolForExternalInviteResponse { + /** + * + * @type {string} + * @memberof SchoolForExternalInviteResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolForExternalInviteResponse + */ + name: string; +} +/** + * + * @export + * @interface SchoolForLdapLoginResponse + */ +export interface SchoolForLdapLoginResponse { + /** + * + * @type {string} + * @memberof SchoolForLdapLoginResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolForLdapLoginResponse + */ + name: string; + /** + * + * @type {Array} + * @memberof SchoolForLdapLoginResponse + */ + systems: Array; +} +/** + * + * @export + * @interface SchoolInfoResponse + */ +export interface SchoolInfoResponse { + /** + * The id of the School entity + * @type {string} + * @memberof SchoolInfoResponse + */ + id: string; + /** + * The name of the School entity + * @type {string} + * @memberof SchoolInfoResponse + */ + name: string; +} +/** + * + * @export + * @interface SchoolLogo + */ +export interface SchoolLogo { + /** + * + * @type {string} + * @memberof SchoolLogo + */ + dataUrl?: string; + /** + * + * @type {string} + * @memberof SchoolLogo + */ + name?: string; +} +/** + * + * @export + * @interface SchoolPermissionsParams + */ +export interface SchoolPermissionsParams { + /** + * + * @type {TeacherPermissionParams} + * @memberof SchoolPermissionsParams + */ + teacher?: TeacherPermissionParams; + /** + * + * @type {StudentPermissionParams} + * @memberof SchoolPermissionsParams + */ + student?: StudentPermissionParams; +} +/** + * + * @export + * @enum {string} + */ +export enum SchoolPurpose { + Expert = 'expert', + Tombstone = 'tombstone', + Demo = 'demo', + Test = 'test', + MintEc = 'MINT-EC' +} + +/** + * + * @export + * @interface SchoolResponse + */ +export interface SchoolResponse { + /** + * + * @type {string} + * @memberof SchoolResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + updatedAt: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + name: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + officialSchoolNumber?: string; + /** + * + * @type {SchoolYearResponse} + * @memberof SchoolResponse + */ + currentYear?: SchoolYearResponse; + /** + * + * @type {FederalStateResponse} + * @memberof SchoolResponse + */ + federalState: FederalStateResponse; + /** + * + * @type {CountyResponse} + * @memberof SchoolResponse + */ + county?: CountyResponse; + /** + * + * @type {SchoolPurpose} + * @memberof SchoolResponse + */ + purpose?: SchoolPurpose; + /** + * + * @type {Array} + * @memberof SchoolResponse + */ + features: Array; + /** + * + * @type {Array} + * @memberof SchoolResponse + */ + systemIds: Array; + /** + * + * @type {boolean} + * @memberof SchoolResponse + */ + inUserMigration?: boolean; + /** + * + * @type {boolean} + * @memberof SchoolResponse + */ + inMaintenance: boolean; + /** + * + * @type {boolean} + * @memberof SchoolResponse + */ + isExternal: boolean; + /** + * + * @type {SchoolLogo} + * @memberof SchoolResponse + */ + logo?: SchoolLogo; + /** + * + * @type {FileStorageType} + * @memberof SchoolResponse + */ + fileStorageType?: FileStorageType; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + language?: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + timezone?: string; + /** + * + * @type {object} + * @memberof SchoolResponse + */ + permissions?: object; + /** + * + * @type {YearsResponse} + * @memberof SchoolResponse + */ + years: YearsResponse; + /** + * + * @type {Array} + * @memberof SchoolResponse + */ + instanceFeatures: Array; +} +/** + * + * @export + * @interface SchoolSystemResponse + */ +export interface SchoolSystemResponse { + /** + * + * @type {string} + * @memberof SchoolSystemResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolSystemResponse + */ + type: string; + /** + * + * @type {string} + * @memberof SchoolSystemResponse + */ + alias?: string; + /** + * + * @type {ProviderConfigResponse} + * @memberof SchoolSystemResponse + */ + ldapConfig?: ProviderConfigResponse; + /** + * + * @type {ProviderConfigResponse} + * @memberof SchoolSystemResponse + */ + oauthConfig?: ProviderConfigResponse; +} +/** + * + * @export + * @interface SchoolUpdateBodyParams + */ +export interface SchoolUpdateBodyParams { + /** + * + * @type {string} + * @memberof SchoolUpdateBodyParams + */ + name?: string; + /** + * + * @type {string} + * @memberof SchoolUpdateBodyParams + */ + officialSchoolNumber?: string; + /** + * + * @type {SchoolLogo} + * @memberof SchoolUpdateBodyParams + */ + logo?: SchoolLogo; + /** + * + * @type {string} + * @memberof SchoolUpdateBodyParams + */ + fileStorageType?: SchoolUpdateBodyParamsFileStorageTypeEnum; + /** + * + * @type {LanguageType} + * @memberof SchoolUpdateBodyParams + */ + language?: LanguageType; + /** + * + * @type {Array} + * @memberof SchoolUpdateBodyParams + */ + features?: Array; + /** + * + * @type {SchoolPermissionsParams} + * @memberof SchoolUpdateBodyParams + */ + permissions?: SchoolPermissionsParams; + /** + * + * @type {string} + * @memberof SchoolUpdateBodyParams + */ + countyId?: string; + /** + * + * @type {boolean} + * @memberof SchoolUpdateBodyParams + */ + enableStudentTeamCreation?: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum SchoolUpdateBodyParamsFileStorageTypeEnum { + AwsS3 = 'awsS3' +} + +/** + * + * @export + * @enum {string} + */ +export enum SchoolYearQueryType { + NextYear = 'nextYear', + CurrentYear = 'currentYear', + PreviousYears = 'previousYears' +} + +/** + * + * @export + * @interface SchoolYearResponse + */ +export interface SchoolYearResponse { + /** + * + * @type {string} + * @memberof SchoolYearResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolYearResponse + */ + name: string; + /** + * + * @type {string} + * @memberof SchoolYearResponse + */ + startDate: string; + /** + * + * @type {string} + * @memberof SchoolYearResponse + */ + endDate: string; +} +/** + * + * @export + * @interface SchulConneXProvisioningOptionsParams + */ +export interface SchulConneXProvisioningOptionsParams { + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsParams + */ + groupProvisioningClassesEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsParams + */ + groupProvisioningCoursesEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsParams + */ + groupProvisioningOtherEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsParams + */ + schoolExternalToolProvisioningEnabled: boolean; +} +/** + * + * @export + * @interface SchulConneXProvisioningOptionsResponse + */ +export interface SchulConneXProvisioningOptionsResponse { + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsResponse + */ + groupProvisioningClassesEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsResponse + */ + groupProvisioningCoursesEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsResponse + */ + groupProvisioningOtherEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsResponse + */ + schoolExternalToolProvisioningEnabled: boolean; +} +/** + * + * @export + * @enum {string} + */ +export enum SchulcloudTheme { + Brb = 'brb', + Default = 'default', + N21 = 'n21', + Thr = 'thr' +} + +/** + * + * @export + * @interface SetHeightBodyParams + */ +export interface SetHeightBodyParams { + /** + * + * @type {number} + * @memberof SetHeightBodyParams + */ + height: number; +} +/** + * + * @export + * @interface ShareTokenBodyParams + */ +export interface ShareTokenBodyParams { + /** + * the type of the object being shared + * @type {string} + * @memberof ShareTokenBodyParams + */ + parentType: ShareTokenBodyParamsParentTypeEnum; + /** + * the id of the object being shared. + * @type {string} + * @memberof ShareTokenBodyParams + */ + parentId: string; + /** + * when defined, the sharetoken will expire after the given number of days. + * @type {number} + * @memberof ShareTokenBodyParams + */ + expiresInDays?: number | null; + /** + * when defined, the sharetoken will be usable exclusively by members of the users school. + * @type {boolean} + * @memberof ShareTokenBodyParams + */ + schoolExclusive?: boolean | null; +} + +/** + * @export + * @enum {string} + */ +export enum ShareTokenBodyParamsParentTypeEnum { + Courses = 'courses', + Tasks = 'tasks', + Lessons = 'lessons', + ColumnBoard = 'columnBoard' +} + +/** + * + * @export + * @interface ShareTokenImportBodyParams + */ +export interface ShareTokenImportBodyParams { + /** + * the new name of the imported object. + * @type {string} + * @memberof ShareTokenImportBodyParams + */ + newName: string; + /** + * Id of the course to which the lesson/task will be added + * @type {string} + * @memberof ShareTokenImportBodyParams + */ + destinationCourseId?: string | null; +} +/** + * + * @export + * @interface ShareTokenInfoResponse + */ +export interface ShareTokenInfoResponse { + /** + * + * @type {string} + * @memberof ShareTokenInfoResponse + */ + token: string; + /** + * + * @type {string} + * @memberof ShareTokenInfoResponse + */ + parentType: ShareTokenInfoResponseParentTypeEnum; + /** + * + * @type {string} + * @memberof ShareTokenInfoResponse + */ + parentName: string; +} + +/** + * @export + * @enum {string} + */ +export enum ShareTokenInfoResponseParentTypeEnum { + Courses = 'courses', + Tasks = 'tasks', + Lessons = 'lessons', + ColumnBoard = 'columnBoard' +} + +/** + * + * @export + * @interface ShareTokenPayloadResponse + */ +export interface ShareTokenPayloadResponse { + /** + * + * @type {string} + * @memberof ShareTokenPayloadResponse + */ + parentType: ShareTokenPayloadResponseParentTypeEnum; + /** + * + * @type {string} + * @memberof ShareTokenPayloadResponse + */ + parentId: string; +} + +/** + * @export + * @enum {string} + */ +export enum ShareTokenPayloadResponseParentTypeEnum { + Courses = 'courses', + Tasks = 'tasks', + Lessons = 'lessons', + ColumnBoard = 'columnBoard' +} + +/** + * + * @export + * @interface ShareTokenResponse + */ +export interface ShareTokenResponse { + /** + * + * @type {string} + * @memberof ShareTokenResponse + */ + token: string; + /** + * + * @type {ShareTokenPayloadResponse} + * @memberof ShareTokenResponse + */ + payload: ShareTokenPayloadResponse; + /** + * + * @type {string} + * @memberof ShareTokenResponse + */ + expiresAt?: string; +} +/** + * + * @export + * @interface SingleColumnBoardResponse + */ +export interface SingleColumnBoardResponse { + /** + * The id of the room this board belongs to + * @type {string} + * @memberof SingleColumnBoardResponse + */ + roomId: string; + /** + * Title of the Board + * @type {string} + * @memberof SingleColumnBoardResponse + */ + title: string; + /** + * Color of the Board + * @type {string} + * @memberof SingleColumnBoardResponse + */ + displayColor: string; + /** + * Array of board specific tasks or lessons with matching type property + * @type {Array} + * @memberof SingleColumnBoardResponse + */ + elements: Array; + /** + * Boolean if the room this board belongs to is archived + * @type {boolean} + * @memberof SingleColumnBoardResponse + */ + isArchived: boolean; + /** + * Is the course synchronized with a group? + * @type {boolean} + * @memberof SingleColumnBoardResponse + */ + isSynchronized: boolean; +} +/** + * + * @export + * @interface StudentPermissionParams + */ +export interface StudentPermissionParams { + /** + * + * @type {boolean} + * @memberof StudentPermissionParams + */ + LERNSTORE_VIEW?: boolean; +} +/** + * + * @export + * @interface SubmissionContainerContentBody + */ +export interface SubmissionContainerContentBody { + /** + * The point in time until when a submission can be handed in. + * @type {string} + * @memberof SubmissionContainerContentBody + */ + dueDate?: string; +} +/** + * + * @export + * @interface SubmissionContainerElementContent + */ +export interface SubmissionContainerElementContent { + /** + * The dueDate as date string or null of not set + * @type {string} + * @memberof SubmissionContainerElementContent + */ + dueDate: string; +} +/** + * + * @export + * @interface SubmissionContainerElementContentBody + */ +export interface SubmissionContainerElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof SubmissionContainerElementContentBody + */ + type: ContentElementType; + /** + * + * @type {SubmissionContainerContentBody} + * @memberof SubmissionContainerElementContentBody + */ + content: SubmissionContainerContentBody; +} +/** + * + * @export + * @interface SubmissionContainerElementResponse + */ +export interface SubmissionContainerElementResponse { + /** + * + * @type {string} + * @memberof SubmissionContainerElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof SubmissionContainerElementResponse + */ + type: ContentElementType; + /** + * + * @type {SubmissionContainerElementContent} + * @memberof SubmissionContainerElementResponse + */ + content: SubmissionContainerElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof SubmissionContainerElementResponse + */ + timestamps: TimestampsResponse; +} +/** + * + * @export + * @interface SubmissionItemResponse + */ +export interface SubmissionItemResponse { + /** + * + * @type {string} + * @memberof SubmissionItemResponse + */ + id: string; + /** + * + * @type {TimestampsResponse} + * @memberof SubmissionItemResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {boolean} + * @memberof SubmissionItemResponse + */ + completed: boolean; + /** + * + * @type {string} + * @memberof SubmissionItemResponse + */ + userId: string; + /** + * + * @type {Array} + * @memberof SubmissionItemResponse + */ + elements: Array; +} +/** + * + * @export + * @interface SubmissionStatusListResponse + */ +export interface SubmissionStatusListResponse { + /** + * + * @type {Array} + * @memberof SubmissionStatusListResponse + */ + data: Array; +} +/** + * + * @export + * @interface SubmissionStatusResponse + */ +export interface SubmissionStatusResponse { + /** + * + * @type {string} + * @memberof SubmissionStatusResponse + */ + id: string; + /** + * + * @type {Array} + * @memberof SubmissionStatusResponse + */ + submitters: Array; + /** + * + * @type {boolean} + * @memberof SubmissionStatusResponse + */ + isSubmitted: boolean; + /** + * + * @type {number} + * @memberof SubmissionStatusResponse + */ + grade?: number; + /** + * + * @type {boolean} + * @memberof SubmissionStatusResponse + */ + isGraded: boolean; + /** + * + * @type {string} + * @memberof SubmissionStatusResponse + */ + submittingCourseGroupName?: string; +} +/** + * + * @export + * @interface SubmissionsResponse + */ +export interface SubmissionsResponse { + /** + * + * @type {Array} + * @memberof SubmissionsResponse + */ + submissionItemsResponse: Array; + /** + * + * @type {Array} + * @memberof SubmissionsResponse + */ + users: Array; +} +/** + * + * @export + * @interface SuccessfulResponse + */ +export interface SuccessfulResponse { + /** + * + * @type {boolean} + * @memberof SuccessfulResponse + */ + successful: boolean; +} +/** + * + * @export + * @interface SystemForLdapLoginResponse + */ +export interface SystemForLdapLoginResponse { + /** + * + * @type {string} + * @memberof SystemForLdapLoginResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SystemForLdapLoginResponse + */ + type: string; + /** + * + * @type {string} + * @memberof SystemForLdapLoginResponse + */ + alias: string; +} +/** + * + * @export + * @enum {string} + */ +export enum SystemType { + Oauth = 'oauth', + Ldap = 'ldap', + Oidc = 'oidc', + TspBase = 'tsp-base', + TspSchool = 'tsp-school', + Local = 'local', + Iserv = 'iserv', + Lernsax = 'lernsax', + Itslearning = 'itslearning', + Moodle = 'moodle' +} + +/** + * + * @export + * @interface TargetInfoResponse + */ +export interface TargetInfoResponse { + /** + * The id of the Target entity + * @type {string} + * @memberof TargetInfoResponse + */ + id: string; + /** + * The name of the Target entity + * @type {string} + * @memberof TargetInfoResponse + */ + name: string; +} +/** + * + * @export + * @interface TaskCopyApiParams + */ +export interface TaskCopyApiParams { + /** + * Destination course parent Id the task is copied to + * @type {string} + * @memberof TaskCopyApiParams + */ + courseId?: string; + /** + * Destination lesson parent Id the task is copied to + * @type {string} + * @memberof TaskCopyApiParams + */ + lessonId?: string; +} +/** + * + * @export + * @interface TaskListResponse + */ +export interface TaskListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof TaskListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof TaskListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof TaskListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof TaskListResponse + */ + limit: number; +} +/** + * + * @export + * @interface TaskResponse + */ +export interface TaskResponse { + /** + * + * @type {string} + * @memberof TaskResponse + */ + id: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + name: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + availableDate?: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + dueDate?: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + courseName: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + lessonName?: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + courseId: string; + /** + * Task description object, with props content: string and type: input format types + * @type {RichText} + * @memberof TaskResponse + */ + description?: RichText; + /** + * + * @type {boolean} + * @memberof TaskResponse + */ + lessonHidden: boolean; + /** + * + * @type {string} + * @memberof TaskResponse + */ + displayColor?: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + updatedAt: string; + /** + * + * @type {TaskStatusResponse} + * @memberof TaskResponse + */ + status: TaskStatusResponse; +} +/** + * + * @export + * @interface TaskStatusResponse + */ +export interface TaskStatusResponse { + /** + * + * @type {number} + * @memberof TaskStatusResponse + */ + submitted: number; + /** + * + * @type {number} + * @memberof TaskStatusResponse + */ + maxSubmissions: number; + /** + * + * @type {number} + * @memberof TaskStatusResponse + */ + graded: number; + /** + * + * @type {boolean} + * @memberof TaskStatusResponse + */ + isDraft: boolean; + /** + * + * @type {boolean} + * @memberof TaskStatusResponse + */ + isSubstitutionTeacher: boolean; + /** + * + * @type {boolean} + * @memberof TaskStatusResponse + */ + isFinished: boolean; +} +/** + * + * @export + * @interface TeacherPermissionParams + */ +export interface TeacherPermissionParams { + /** + * + * @type {boolean} + * @memberof TeacherPermissionParams + */ + STUDENT_LIST?: boolean; +} +/** + * + * @export + * @interface TeamPermissionsBody + */ +export interface TeamPermissionsBody { + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + read: boolean; + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + write: boolean; + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + create: boolean; + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + _delete: boolean; + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + share: boolean; +} +/** + * + * @export + * @interface TimestampsResponse + */ +export interface TimestampsResponse { + /** + * + * @type {string} + * @memberof TimestampsResponse + */ + lastUpdatedAt: string; + /** + * + * @type {string} + * @memberof TimestampsResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof TimestampsResponse + */ + deletedAt?: string; +} +/** + * + * @export + * @enum {string} + */ +export enum Timezone { + EuropeBerlin = 'Europe/Berlin' +} + +/** + * + * @export + * @enum {string} + */ +export enum ToolConfigType { + Basic = 'basic', + Oauth2 = 'oauth2', + Lti11 = 'lti11' +} + +/** + * + * @export + * @enum {string} + */ +export enum ToolContextType { + Course = 'course', + BoardElement = 'board-element', + MediaBoard = 'media-board' +} + +/** + * + * @export + * @interface ToolContextTypesListResponse + */ +export interface ToolContextTypesListResponse { + /** + * + * @type {Array} + * @memberof ToolContextTypesListResponse + */ + data: Array; +} +/** + * + * @export + * @interface ToolLaunchRequestResponse + */ +export interface ToolLaunchRequestResponse { + /** + * The Launch Request method (GET or POST) + * @type {string} + * @memberof ToolLaunchRequestResponse + */ + method: ToolLaunchRequestResponseMethodEnum; + /** + * The URL for the Tool Launch Request + * @type {string} + * @memberof ToolLaunchRequestResponse + */ + url: string; + /** + * The payload for the Tool Launch Request (optional) + * @type {string} + * @memberof ToolLaunchRequestResponse + */ + payload?: string; + /** + * Specifies whether the Tool should be launched in a new tab + * @type {boolean} + * @memberof ToolLaunchRequestResponse + */ + openNewTab?: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum ToolLaunchRequestResponseMethodEnum { + Get = 'GET', + Post = 'POST' +} + +/** + * + * @export + * @interface ToolReferenceListResponse + */ +export interface ToolReferenceListResponse { + /** + * + * @type {Array} + * @memberof ToolReferenceListResponse + */ + data: Array; +} +/** + * + * @export + * @interface ToolReferenceResponse + */ +export interface ToolReferenceResponse { + /** + * The id of the tool in the context + * @type {string} + * @memberof ToolReferenceResponse + */ + contextToolId: string; + /** + * The description of the tool + * @type {string} + * @memberof ToolReferenceResponse + */ + description?: string; + /** + * The url of the logo which is stored in the db + * @type {string} + * @memberof ToolReferenceResponse + */ + logoUrl?: string; + /** + * The url of the thumbnail which is stored in the db + * @type {string} + * @memberof ToolReferenceResponse + */ + thumbnailUrl?: string; + /** + * The display name of the tool + * @type {string} + * @memberof ToolReferenceResponse + */ + displayName: string; + /** + * Whether the tool should be opened in a new tab + * @type {boolean} + * @memberof ToolReferenceResponse + */ + openInNewTab: boolean; + /** + * The status of the tool + * @type {ContextExternalToolConfigurationStatusResponse} + * @memberof ToolReferenceResponse + */ + status: ContextExternalToolConfigurationStatusResponse; +} +/** + * + * @export + * @interface UpdateBoardTitleParams + */ +export interface UpdateBoardTitleParams { + /** + * + * @type {string} + * @memberof UpdateBoardTitleParams + */ + title: string; +} +/** + * + * @export + * @interface UpdateElementContentBodyParams + */ +export interface UpdateElementContentBodyParams { + /** + * + * @type {FileElementContentBody | LinkElementContentBody | RichTextElementContentBody | SubmissionContainerElementContentBody | ExternalToolElementContentBody | DrawingElementContentBody} + * @memberof UpdateElementContentBodyParams + */ + data: FileElementContentBody | LinkElementContentBody | RichTextElementContentBody | SubmissionContainerElementContentBody | ExternalToolElementContentBody | DrawingElementContentBody; +} +/** + * + * @export + * @interface UpdateFlagParams + */ +export interface UpdateFlagParams { + /** + * updates flag for an import user + * @type {boolean} + * @memberof UpdateFlagParams + */ + flagged: boolean; +} +/** + * + * @export + * @interface UpdateMatchParams + */ +export interface UpdateMatchParams { + /** + * updates local user reference for an import user + * @type {string} + * @memberof UpdateMatchParams + */ + userId: string; +} +/** + * + * @export + * @interface UpdateNewsParams + */ +export interface UpdateNewsParams { + /** + * Title of the News entity + * @type {string} + * @memberof UpdateNewsParams + */ + title?: string; + /** + * Content of the News entity + * @type {string} + * @memberof UpdateNewsParams + */ + content?: string; + /** + * The point in time from when the News entity schould be displayed + * @type {string} + * @memberof UpdateNewsParams + */ + displayAt?: string; +} +/** + * + * @export + * @interface UpdateSubmissionItemBodyParams + */ +export interface UpdateSubmissionItemBodyParams { + /** + * Boolean indicating whether the submission is completed. + * @type {boolean} + * @memberof UpdateSubmissionItemBodyParams + */ + completed: boolean; +} +/** + * + * @export + * @interface UserConsentResponse + */ +export interface UserConsentResponse { + /** + * + * @type {string} + * @memberof UserConsentResponse + */ + form: string; + /** + * + * @type {boolean} + * @memberof UserConsentResponse + */ + privacyConsent: boolean; + /** + * + * @type {boolean} + * @memberof UserConsentResponse + */ + termsOfUseConsent: boolean; + /** + * + * @type {string} + * @memberof UserConsentResponse + */ + dateOfPrivacyConsent: string; + /** + * + * @type {string} + * @memberof UserConsentResponse + */ + dateOfTermsOfUseConsent: string; +} +/** + * + * @export + * @interface UserDataResponse + */ +export interface UserDataResponse { + /** + * + * @type {string} + * @memberof UserDataResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof UserDataResponse + */ + lastName: string; + /** + * + * @type {string} + * @memberof UserDataResponse + */ + userId: string; +} +/** + * + * @export + * @interface UserInfoResponse + */ +export interface UserInfoResponse { + /** + * The id of the User entity + * @type {string} + * @memberof UserInfoResponse + */ + id: string; + /** + * First name of the user + * @type {string} + * @memberof UserInfoResponse + */ + firstName?: string; + /** + * Last name of the user + * @type {string} + * @memberof UserInfoResponse + */ + lastName?: string; +} +/** + * + * @export + * @interface UserListResponse + */ +export interface UserListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof UserListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof UserListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof UserListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof UserListResponse + */ + limit: number; +} +/** + * + * @export + * @interface UserLoginMigrationMandatoryParams + */ +export interface UserLoginMigrationMandatoryParams { + /** + * + * @type {boolean} + * @memberof UserLoginMigrationMandatoryParams + */ + mandatory: boolean; +} +/** + * + * @export + * @interface UserLoginMigrationResponse + */ +export interface UserLoginMigrationResponse { + /** + * Id of the migration + * @type {string} + * @memberof UserLoginMigrationResponse + */ + id: string; + /** + * Id of the system which is the origin of the migration + * @type {string} + * @memberof UserLoginMigrationResponse + */ + sourceSystemId?: string; + /** + * Id of the system which is the target of the migration + * @type {string} + * @memberof UserLoginMigrationResponse + */ + targetSystemId: string; + /** + * Date when the migration was marked as required + * @type {string} + * @memberof UserLoginMigrationResponse + */ + mandatorySince?: string; + /** + * Date when the migration was started + * @type {string} + * @memberof UserLoginMigrationResponse + */ + startedAt: string; + /** + * Date when the migration was completed + * @type {string} + * @memberof UserLoginMigrationResponse + */ + closedAt?: string; + /** + * Date when the migration was completed including the grace period + * @type {string} + * @memberof UserLoginMigrationResponse + */ + finishedAt?: string; +} +/** + * + * @export + * @interface UserLoginMigrationSearchListResponse + */ +export interface UserLoginMigrationSearchListResponse { + /** + * Contains user login migration responses + * @type {Array} + * @memberof UserLoginMigrationSearchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof UserLoginMigrationSearchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof UserLoginMigrationSearchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof UserLoginMigrationSearchListResponse + */ + limit: number; +} +/** + * + * @export + * @interface UserMatchListResponse + */ +export interface UserMatchListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof UserMatchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof UserMatchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof UserMatchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof UserMatchListResponse + */ + limit: number; +} +/** + * + * @export + * @interface UserMatchResponse + */ +export interface UserMatchResponse { + /** + * local user id + * @type {string} + * @memberof UserMatchResponse + */ + userId: string; + /** + * login name of local user + * @type {string} + * @memberof UserMatchResponse + */ + loginName: string; + /** + * firstname of local user + * @type {string} + * @memberof UserMatchResponse + */ + firstName: string; + /** + * lastname of local user + * @type {string} + * @memberof UserMatchResponse + */ + lastName: string; + /** + * list of user roles from external system: student, teacher, admin + * @type {Array} + * @memberof UserMatchResponse + */ + roleNames: Array; + /** + * match type: admin (manual) or auto (set, when names match exactly for a single user + * @type {string} + * @memberof UserMatchResponse + */ + matchedBy?: UserMatchResponseMatchedByEnum; +} + +/** + * @export + * @enum {string} + */ +export enum UserMatchResponseRoleNamesEnum { + Student = 'student', + Teacher = 'teacher', + Admin = 'admin' +} +/** + * @export + * @enum {string} + */ +export enum UserMatchResponseMatchedByEnum { + Auto = 'auto', + Admin = 'admin' +} + +/** + * + * @export + * @interface UserResponse + */ +export interface UserResponse { + /** + * + * @type {string} + * @memberof UserResponse + */ + _id: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + lastName: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + email: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + birthday: string; + /** + * + * @type {object} + * @memberof UserResponse + */ + preferences: object; + /** + * + * @type {string} + * @memberof UserResponse + */ + consentStatus: string; + /** + * + * @type {ConsentsResponse} + * @memberof UserResponse + */ + consent: ConsentsResponse; + /** + * + * @type {Array} + * @memberof UserResponse + */ + classes: Array; + /** + * + * @type {string} + * @memberof UserResponse + */ + importHash: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + lastLoginSystemChange: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + outdatedSince: string; +} +/** + * + * @export + * @interface ValidationError + */ +export interface ValidationError { + /** + * The response status code. + * @type {number} + * @memberof ValidationError + */ + code: number; + /** + * The error type. + * @type {string} + * @memberof ValidationError + */ + type: string; + /** + * The error title. + * @type {string} + * @memberof ValidationError + */ + title: string; + /** + * The error message. + * @type {string} + * @memberof ValidationError + */ + message: string; + /** + * The error details. + * @type {object} + * @memberof ValidationError + */ + details?: object; +} +/** + * + * @export + * @interface VideoConferenceCreateParams + */ +export interface VideoConferenceCreateParams { + /** + * + * @type {boolean} + * @memberof VideoConferenceCreateParams + */ + everyAttendeeJoinsMuted?: boolean; + /** + * + * @type {boolean} + * @memberof VideoConferenceCreateParams + */ + everybodyJoinsAsModerator?: boolean; + /** + * + * @type {boolean} + * @memberof VideoConferenceCreateParams + */ + moderatorMustApproveJoinRequests?: boolean; + /** + * The URL that the BigBlueButton client will go to after users click the OK button on the ‘You have been logged out’ or ’This session was ended’ message. Has to be a URL from the same domain that the conference is started from. + * @type {string} + * @memberof VideoConferenceCreateParams + */ + logoutUrl?: string; +} +/** + * + * @export + * @interface VideoConferenceInfoResponse + */ +export interface VideoConferenceInfoResponse { + /** + * + * @type {VideoConferenceStateResponse} + * @memberof VideoConferenceInfoResponse + */ + state: VideoConferenceStateResponse; + /** + * The options for the video conference. + * @type {VideoConferenceOptionsResponse} + * @memberof VideoConferenceInfoResponse + */ + options: VideoConferenceOptionsResponse; +} +/** + * + * @export + * @interface VideoConferenceJoinResponse + */ +export interface VideoConferenceJoinResponse { + /** + * The URL to join the video conference. + * @type {string} + * @memberof VideoConferenceJoinResponse + */ + url: string; +} +/** + * + * @export + * @interface VideoConferenceOptionsResponse + */ +export interface VideoConferenceOptionsResponse { + /** + * Every attendee joins muted + * @type {boolean} + * @memberof VideoConferenceOptionsResponse + */ + everyAttendeeJoinsMuted: boolean; + /** + * Every attendee joins as a moderator + * @type {boolean} + * @memberof VideoConferenceOptionsResponse + */ + everybodyJoinsAsModerator: boolean; + /** + * Moderator must approve join requests + * @type {boolean} + * @memberof VideoConferenceOptionsResponse + */ + moderatorMustApproveJoinRequests: boolean; +} +/** + * + * @export + * @enum {string} + */ +export enum VideoConferenceScope { + Course = 'course', + Event = 'event' +} + +/** + * + * @export + * @enum {string} + */ +export enum VideoConferenceStateResponse { + NotStarted = 'NOT_STARTED', + Running = 'RUNNING', + Finished = 'FINISHED' +} + +/** + * + * @export + * @interface VisibilityBodyParams + */ +export interface VisibilityBodyParams { + /** + * + * @type {boolean} + * @memberof VisibilityBodyParams + */ + isVisible: boolean; +} +/** + * + * @export + * @interface VisibilitySettingsResponse + */ +export interface VisibilitySettingsResponse { + /** + * + * @type {string} + * @memberof VisibilitySettingsResponse + */ + publishedAt?: string; +} +/** + * + * @export + * @interface YearsResponse + */ +export interface YearsResponse { + /** + * + * @type {Array} + * @memberof YearsResponse + */ + schoolYears: Array; + /** + * + * @type {SchoolYearResponse} + * @memberof YearsResponse + */ + activeYear: SchoolYearResponse; + /** + * + * @type {SchoolYearResponse} + * @memberof YearsResponse + */ + lastYear: SchoolYearResponse; + /** + * + * @type {SchoolYearResponse} + * @memberof YearsResponse + */ + nextYear: SchoolYearResponse; +} + +/** + * AccountApi - axios parameter creator + * @export + */ +export const AccountApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerDeleteAccountById: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('accountControllerDeleteAccountById', 'id', id) + const localVarPath = `/account/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerFindAccountById: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('accountControllerFindAccountById', 'id', id) + const localVarPath = `/account/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerReplaceMyPassword: async (patchMyPasswordParams: PatchMyPasswordParams, options: any = {}): Promise => { + // verify required parameter 'patchMyPasswordParams' is not null or undefined + assertParamExists('accountControllerReplaceMyPassword', 'patchMyPasswordParams', patchMyPasswordParams) + const localVarPath = `/account/me/password`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchMyPasswordParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerSearchAccounts: async (type: 'userId' | 'username', value: string, skip?: number, limit?: number, options: any = {}): Promise => { + // verify required parameter 'type' is not null or undefined + assertParamExists('accountControllerSearchAccounts', 'type', type) + // verify required parameter 'value' is not null or undefined + assertParamExists('accountControllerSearchAccounts', 'value', value) + const localVarPath = `/account`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (type !== undefined) { + localVarQueryParameter['type'] = type; + } + + if (value !== undefined) { + localVarQueryParameter['value'] = value; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerUpdateAccountById: async (id: string, accountByIdBodyParams: AccountByIdBodyParams, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('accountControllerUpdateAccountById', 'id', id) + // verify required parameter 'accountByIdBodyParams' is not null or undefined + assertParamExists('accountControllerUpdateAccountById', 'accountByIdBodyParams', accountByIdBodyParams) + const localVarPath = `/account/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(accountByIdBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerUpdateMyAccount: async (patchMyAccountParams: PatchMyAccountParams, options: any = {}): Promise => { + // verify required parameter 'patchMyAccountParams' is not null or undefined + assertParamExists('accountControllerUpdateMyAccount', 'patchMyAccountParams', patchMyAccountParams) + const localVarPath = `/account/me`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchMyAccountParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AccountApi - functional programming interface + * @export + */ +export const AccountApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AccountApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerDeleteAccountById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerDeleteAccountById(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerFindAccountById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerFindAccountById(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerReplaceMyPassword(patchMyPasswordParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerSearchAccounts(type, value, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerUpdateAccountById(id, accountByIdBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerUpdateMyAccount(patchMyAccountParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AccountApi - factory interface + * @export + */ +export const AccountApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AccountApiFp(configuration) + return { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerDeleteAccountById(id: string, options?: any): AxiosPromise { + return localVarFp.accountControllerDeleteAccountById(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerFindAccountById(id: string, options?: any): AxiosPromise { + return localVarFp.accountControllerFindAccountById(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): AxiosPromise { + return localVarFp.accountControllerReplaceMyPassword(patchMyPasswordParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.accountControllerSearchAccounts(type, value, skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): AxiosPromise { + return localVarFp.accountControllerUpdateAccountById(id, accountByIdBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): AxiosPromise { + return localVarFp.accountControllerUpdateMyAccount(patchMyAccountParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AccountApi - interface + * @export + * @interface AccountApi + */ +export interface AccountApiInterface { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerDeleteAccountById(id: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerFindAccountById(id: string, options?: any): AxiosPromise; + + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): AxiosPromise; + + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): AxiosPromise; + +} + +/** + * AccountApi - object-oriented interface + * @export + * @class AccountApi + * @extends {BaseAPI} + */ +export class AccountApi extends BaseAPI implements AccountApiInterface { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerDeleteAccountById(id: string, options?: any) { + return AccountApiFp(this.configuration).accountControllerDeleteAccountById(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerFindAccountById(id: string, options?: any) { + return AccountApiFp(this.configuration).accountControllerFindAccountById(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any) { + return AccountApiFp(this.configuration).accountControllerReplaceMyPassword(patchMyPasswordParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any) { + return AccountApiFp(this.configuration).accountControllerSearchAccounts(type, value, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any) { + return AccountApiFp(this.configuration).accountControllerUpdateAccountById(id, accountByIdBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any) { + return AccountApiFp(this.configuration).accountControllerUpdateMyAccount(patchMyAccountParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * AdminStudentsApi - axios parameter creator + * @export + */ +export const AdminStudentsApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiStudentsControllerFindStudentById: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('adminApiStudentsControllerFindStudentById', 'id', id) + const localVarPath = `/users/admin/students/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiStudentsControllerSearchStudents: async (skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options: any = {}): Promise => { + const localVarPath = `/users/admin/students`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if ($limit !== undefined) { + localVarQueryParameter['$limit'] = $limit; + } + + if ($skip !== undefined) { + localVarQueryParameter['$skip'] = $skip; + } + + if (classes) { + localVarQueryParameter['classes'] = classes; + } + + if (searchQuery !== undefined) { + localVarQueryParameter['searchQuery'] = searchQuery; + } + + if (users) { + localVarQueryParameter['users'] = users; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AdminStudentsApi - functional programming interface + * @export + */ +export const AdminStudentsApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AdminStudentsApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async adminApiStudentsControllerFindStudentById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiStudentsControllerFindStudentById(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AdminStudentsApi - factory interface + * @export + */ +export const AdminStudentsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AdminStudentsApiFp(configuration) + return { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiStudentsControllerFindStudentById(id: string, options?: any): AxiosPromise { + return localVarFp.adminApiStudentsControllerFindStudentById(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise { + return localVarFp.adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AdminStudentsApi - interface + * @export + * @interface AdminStudentsApi + */ +export interface AdminStudentsApiInterface { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminStudentsApiInterface + */ + adminApiStudentsControllerFindStudentById(id: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminStudentsApiInterface + */ + adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise; + +} + +/** + * AdminStudentsApi - object-oriented interface + * @export + * @class AdminStudentsApi + * @extends {BaseAPI} + */ +export class AdminStudentsApi extends BaseAPI implements AdminStudentsApiInterface { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminStudentsApi + */ + public adminApiStudentsControllerFindStudentById(id: string, options?: any) { + return AdminStudentsApiFp(this.configuration).adminApiStudentsControllerFindStudentById(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminStudentsApi + */ + public adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any) { + return AdminStudentsApiFp(this.configuration).adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * AdminTeachersApi - axios parameter creator + * @export + */ +export const AdminTeachersApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiTeachersControllerFindTeacherById: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('adminApiTeachersControllerFindTeacherById', 'id', id) + const localVarPath = `/users/admin/teachers/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiTeachersControllerSearchTeachers: async (skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options: any = {}): Promise => { + const localVarPath = `/users/admin/teachers`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if ($limit !== undefined) { + localVarQueryParameter['$limit'] = $limit; + } + + if ($skip !== undefined) { + localVarQueryParameter['$skip'] = $skip; + } + + if (classes) { + localVarQueryParameter['classes'] = classes; + } + + if (searchQuery !== undefined) { + localVarQueryParameter['searchQuery'] = searchQuery; + } + + if (users) { + localVarQueryParameter['users'] = users; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AdminTeachersApi - functional programming interface + * @export + */ +export const AdminTeachersApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AdminTeachersApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async adminApiTeachersControllerFindTeacherById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiTeachersControllerFindTeacherById(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AdminTeachersApi - factory interface + * @export + */ +export const AdminTeachersApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AdminTeachersApiFp(configuration) + return { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiTeachersControllerFindTeacherById(id: string, options?: any): AxiosPromise { + return localVarFp.adminApiTeachersControllerFindTeacherById(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise { + return localVarFp.adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AdminTeachersApi - interface + * @export + * @interface AdminTeachersApi + */ +export interface AdminTeachersApiInterface { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminTeachersApiInterface + */ + adminApiTeachersControllerFindTeacherById(id: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminTeachersApiInterface + */ + adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise; + +} + +/** + * AdminTeachersApi - object-oriented interface + * @export + * @class AdminTeachersApi + * @extends {BaseAPI} + */ +export class AdminTeachersApi extends BaseAPI implements AdminTeachersApiInterface { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminTeachersApi + */ + public adminApiTeachersControllerFindTeacherById(id: string, options?: any) { + return AdminTeachersApiFp(this.configuration).adminApiTeachersControllerFindTeacherById(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminTeachersApi + */ + public adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any) { + return AdminTeachersApiFp(this.configuration).adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * AlertApi - axios parameter creator + * @export + */ +export const AlertApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + alertControllerFind: async (options: any = {}): Promise => { + const localVarPath = `/alert`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AlertApi - functional programming interface + * @export + */ +export const AlertApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AlertApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async alertControllerFind(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.alertControllerFind(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AlertApi - factory interface + * @export + */ +export const AlertApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AlertApiFp(configuration) + return { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + alertControllerFind(options?: any): AxiosPromise { + return localVarFp.alertControllerFind(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AlertApi - interface + * @export + * @interface AlertApi + */ +export interface AlertApiInterface { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AlertApiInterface + */ + alertControllerFind(options?: any): AxiosPromise; + +} + +/** + * AlertApi - object-oriented interface + * @export + * @class AlertApi + * @extends {BaseAPI} + */ +export class AlertApi extends BaseAPI implements AlertApiInterface { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AlertApi + */ + public alertControllerFind(options?: any) { + return AlertApiFp(this.configuration).alertControllerFind(options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * AuthenticationApi - axios parameter creator + * @export + */ +export const AuthenticationApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginLdap: async (ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options: any = {}): Promise => { + // verify required parameter 'ldapAuthorizationBodyParams' is not null or undefined + assertParamExists('loginControllerLoginLdap', 'ldapAuthorizationBodyParams', ldapAuthorizationBodyParams) + const localVarPath = `/authentication/ldap`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(ldapAuthorizationBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginLocal: async (localAuthorizationBodyParams: LocalAuthorizationBodyParams, options: any = {}): Promise => { + // verify required parameter 'localAuthorizationBodyParams' is not null or undefined + assertParamExists('loginControllerLoginLocal', 'localAuthorizationBodyParams', localAuthorizationBodyParams) + const localVarPath = `/authentication/local`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(localAuthorizationBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginOauth2: async (oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options: any = {}): Promise => { + // verify required parameter 'oauth2AuthorizationBodyParams' is not null or undefined + assertParamExists('loginControllerLoginOauth2', 'oauth2AuthorizationBodyParams', oauth2AuthorizationBodyParams) + const localVarPath = `/authentication/oauth2`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(oauth2AuthorizationBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AuthenticationApi - functional programming interface + * @export + */ +export const AuthenticationApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AuthenticationApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginLdap(ldapAuthorizationBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginLocal(localAuthorizationBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AuthenticationApi - factory interface + * @export + */ +export const AuthenticationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AuthenticationApiFp(configuration) + return { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): AxiosPromise { + return localVarFp.loginControllerLoginLdap(ldapAuthorizationBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): AxiosPromise { + return localVarFp.loginControllerLoginLocal(localAuthorizationBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): AxiosPromise { + return localVarFp.loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AuthenticationApi - interface + * @export + * @interface AuthenticationApi + */ +export interface AuthenticationApiInterface { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApiInterface + */ + loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApiInterface + */ + loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApiInterface + */ + loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): AxiosPromise; + +} + +/** + * AuthenticationApi - object-oriented interface + * @export + * @class AuthenticationApi + * @extends {BaseAPI} + */ +export class AuthenticationApi extends BaseAPI implements AuthenticationApiInterface { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApi + */ + public loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any) { + return AuthenticationApiFp(this.configuration).loginControllerLoginLdap(ldapAuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApi + */ + public loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any) { + return AuthenticationApiFp(this.configuration).loginControllerLoginLocal(localAuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApi + */ + public loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any) { + return AuthenticationApiFp(this.configuration).loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * AuthorizationApi - axios parameter creator + * @export + */ +export const AuthorizationApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + authorizationReferenceControllerAuthorizeByReference: async (authorizationBodyParams: AuthorizationBodyParams, options: any = {}): Promise => { + // verify required parameter 'authorizationBodyParams' is not null or undefined + assertParamExists('authorizationReferenceControllerAuthorizeByReference', 'authorizationBodyParams', authorizationBodyParams) + const localVarPath = `/authorization/by-reference`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(authorizationBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AuthorizationApi - functional programming interface + * @export + */ +export const AuthorizationApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AuthorizationApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AuthorizationApi - factory interface + * @export + */ +export const AuthorizationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AuthorizationApiFp(configuration) + return { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): AxiosPromise { + return localVarFp.authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AuthorizationApi - interface + * @export + * @interface AuthorizationApi + */ +export interface AuthorizationApiInterface { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthorizationApiInterface + */ + authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): AxiosPromise; + +} + +/** + * AuthorizationApi - object-oriented interface + * @export + * @class AuthorizationApi + * @extends {BaseAPI} + */ +export class AuthorizationApi extends BaseAPI implements AuthorizationApiInterface { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthorizationApi + */ + public authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any) { + return AuthorizationApiFp(this.configuration).authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * BoardApi - axios parameter creator + * @export + */ +export const BoardApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCopyBoard: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerCopyBoard', 'boardId', boardId) + const localVarPath = `/boards/{boardId}/copy` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCreateBoard: async (createBoardBodyParams: CreateBoardBodyParams, options: any = {}): Promise => { + // verify required parameter 'createBoardBodyParams' is not null or undefined + assertParamExists('boardControllerCreateBoard', 'createBoardBodyParams', createBoardBodyParams) + const localVarPath = `/boards`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createBoardBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCreateColumn: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerCreateColumn', 'boardId', boardId) + const localVarPath = `/boards/{boardId}/columns` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerDeleteBoard: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerDeleteBoard', 'boardId', boardId) + const localVarPath = `/boards/{boardId}` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerGetBoardContext: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerGetBoardContext', 'boardId', boardId) + const localVarPath = `/boards/{boardId}/context` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerGetBoardSkeleton: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerGetBoardSkeleton', 'boardId', boardId) + const localVarPath = `/boards/{boardId}` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerUpdateBoardTitle: async (boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerUpdateBoardTitle', 'boardId', boardId) + // verify required parameter 'updateBoardTitleParams' is not null or undefined + assertParamExists('boardControllerUpdateBoardTitle', 'updateBoardTitleParams', updateBoardTitleParams) + const localVarPath = `/boards/{boardId}/title` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateBoardTitleParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerUpdateVisibility: async (boardId: string, visibilityBodyParams: VisibilityBodyParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerUpdateVisibility', 'boardId', boardId) + // verify required parameter 'visibilityBodyParams' is not null or undefined + assertParamExists('boardControllerUpdateVisibility', 'visibilityBodyParams', visibilityBodyParams) + const localVarPath = `/boards/{boardId}/visibility` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(visibilityBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardApi - functional programming interface + * @export + */ +export const BoardApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerCopyBoard(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCopyBoard(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCreateBoard(createBoardBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerCreateColumn(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCreateColumn(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerDeleteBoard(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerDeleteBoard(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerGetBoardContext(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerGetBoardContext(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerGetBoardSkeleton(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerGetBoardSkeleton(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerUpdateVisibility(boardId, visibilityBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardApi - factory interface + * @export + */ +export const BoardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardApiFp(configuration) + return { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCopyBoard(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerCopyBoard(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): AxiosPromise { + return localVarFp.boardControllerCreateBoard(createBoardBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCreateColumn(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerCreateColumn(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerDeleteBoard(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerDeleteBoard(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerGetBoardContext(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerGetBoardContext(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerGetBoardSkeleton(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerGetBoardSkeleton(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): AxiosPromise { + return localVarFp.boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): AxiosPromise { + return localVarFp.boardControllerUpdateVisibility(boardId, visibilityBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardApi - interface + * @export + * @interface BoardApi + */ +export interface BoardApiInterface { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerCopyBoard(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerCreateColumn(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerDeleteBoard(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerGetBoardContext(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerGetBoardSkeleton(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardApi - object-oriented interface + * @export + * @class BoardApi + * @extends {BaseAPI} + */ +export class BoardApi extends BaseAPI implements BoardApiInterface { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerCopyBoard(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerCopyBoard(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any) { + return BoardApiFp(this.configuration).boardControllerCreateBoard(createBoardBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerCreateColumn(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerCreateColumn(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerDeleteBoard(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerDeleteBoard(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerGetBoardContext(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerGetBoardContext(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerGetBoardSkeleton(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerGetBoardSkeleton(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any) { + return BoardApiFp(this.configuration).boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any) { + return BoardApiFp(this.configuration).boardControllerUpdateVisibility(boardId, visibilityBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * BoardCardApi - axios parameter creator + * @export + */ +export const BoardCardApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerCreateElement: async (cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerCreateElement', 'cardId', cardId) + // verify required parameter 'createContentElementBodyParams' is not null or undefined + assertParamExists('cardControllerCreateElement', 'createContentElementBodyParams', createContentElementBodyParams) + const localVarPath = `/cards/{cardId}/elements` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createContentElementBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerDeleteCard: async (cardId: string, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerDeleteCard', 'cardId', cardId) + const localVarPath = `/cards/{cardId}` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerGetCards: async (ids: Array, options: any = {}): Promise => { + // verify required parameter 'ids' is not null or undefined + assertParamExists('cardControllerGetCards', 'ids', ids) + const localVarPath = `/cards`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (ids) { + localVarQueryParameter['ids'] = ids; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerMoveCard: async (cardId: string, moveCardBodyParams: MoveCardBodyParams, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerMoveCard', 'cardId', cardId) + // verify required parameter 'moveCardBodyParams' is not null or undefined + assertParamExists('cardControllerMoveCard', 'moveCardBodyParams', moveCardBodyParams) + const localVarPath = `/cards/{cardId}/position` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveCardBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerUpdateCardHeight: async (cardId: string, setHeightBodyParams: SetHeightBodyParams, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerUpdateCardHeight', 'cardId', cardId) + // verify required parameter 'setHeightBodyParams' is not null or undefined + assertParamExists('cardControllerUpdateCardHeight', 'setHeightBodyParams', setHeightBodyParams) + const localVarPath = `/cards/{cardId}/height` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(setHeightBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerUpdateCardTitle: async (cardId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerUpdateCardTitle', 'cardId', cardId) + // verify required parameter 'renameBodyParams' is not null or undefined + assertParamExists('cardControllerUpdateCardTitle', 'renameBodyParams', renameBodyParams) + const localVarPath = `/cards/{cardId}/title` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardCardApi - functional programming interface + * @export + */ +export const BoardCardApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardCardApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerCreateElement(cardId, createContentElementBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerDeleteCard(cardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerDeleteCard(cardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerGetCards(ids: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerGetCards(ids, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerMoveCard(cardId, moveCardBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerUpdateCardTitle(cardId, renameBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardCardApi - factory interface + * @export + */ +export const BoardCardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardCardApiFp(configuration) + return { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise { + return localVarFp.cardControllerCreateElement(cardId, createContentElementBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerDeleteCard(cardId: string, options?: any): AxiosPromise { + return localVarFp.cardControllerDeleteCard(cardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerGetCards(ids: Array, options?: any): AxiosPromise { + return localVarFp.cardControllerGetCards(ids, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): AxiosPromise { + return localVarFp.cardControllerMoveCard(cardId, moveCardBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): AxiosPromise { + return localVarFp.cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { + return localVarFp.cardControllerUpdateCardTitle(cardId, renameBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardCardApi - interface + * @export + * @interface BoardCardApi + */ +export interface BoardCardApiInterface { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerDeleteCard(cardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerGetCards(ids: Array, options?: any): AxiosPromise; + + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardCardApi - object-oriented interface + * @export + * @class BoardCardApi + * @extends {BaseAPI} + */ +export class BoardCardApi extends BaseAPI implements BoardCardApiInterface { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerCreateElement(cardId, createContentElementBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerDeleteCard(cardId: string, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerDeleteCard(cardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerGetCards(ids: Array, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerGetCards(ids, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerMoveCard(cardId, moveCardBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerUpdateCardTitle(cardId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * BoardColumnApi - axios parameter creator + * @export + */ +export const BoardColumnApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerCreateCard: async (columnId: string, createCardBodyParams?: CreateCardBodyParams, options: any = {}): Promise => { + // verify required parameter 'columnId' is not null or undefined + assertParamExists('columnControllerCreateCard', 'columnId', columnId) + const localVarPath = `/columns/{columnId}/cards` + .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createCardBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerDeleteColumn: async (columnId: string, options: any = {}): Promise => { + // verify required parameter 'columnId' is not null or undefined + assertParamExists('columnControllerDeleteColumn', 'columnId', columnId) + const localVarPath = `/columns/{columnId}` + .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerMoveColumn: async (columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options: any = {}): Promise => { + // verify required parameter 'columnId' is not null or undefined + assertParamExists('columnControllerMoveColumn', 'columnId', columnId) + // verify required parameter 'moveColumnBodyParams' is not null or undefined + assertParamExists('columnControllerMoveColumn', 'moveColumnBodyParams', moveColumnBodyParams) + const localVarPath = `/columns/{columnId}/position` + .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveColumnBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerUpdateColumnTitle: async (columnId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { + // verify required parameter 'columnId' is not null or undefined + assertParamExists('columnControllerUpdateColumnTitle', 'columnId', columnId) + // verify required parameter 'renameBodyParams' is not null or undefined + assertParamExists('columnControllerUpdateColumnTitle', 'renameBodyParams', renameBodyParams) + const localVarPath = `/columns/{columnId}/title` + .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardColumnApi - functional programming interface + * @export + */ +export const BoardColumnApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardColumnApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerCreateCard(columnId, createCardBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async columnControllerDeleteColumn(columnId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerDeleteColumn(columnId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerMoveColumn(columnId, moveColumnBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerUpdateColumnTitle(columnId, renameBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardColumnApi - factory interface + * @export + */ +export const BoardColumnApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardColumnApiFp(configuration) + return { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): AxiosPromise { + return localVarFp.columnControllerCreateCard(columnId, createCardBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerDeleteColumn(columnId: string, options?: any): AxiosPromise { + return localVarFp.columnControllerDeleteColumn(columnId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise { + return localVarFp.columnControllerMoveColumn(columnId, moveColumnBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { + return localVarFp.columnControllerUpdateColumnTitle(columnId, renameBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardColumnApi - interface + * @export + * @interface BoardColumnApi + */ +export interface BoardColumnApiInterface { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApiInterface + */ + columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApiInterface + */ + columnControllerDeleteColumn(columnId: string, options?: any): AxiosPromise; + + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApiInterface + */ + columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApiInterface + */ + columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardColumnApi - object-oriented interface + * @export + * @class BoardColumnApi + * @extends {BaseAPI} + */ +export class BoardColumnApi extends BaseAPI implements BoardColumnApiInterface { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApi + */ + public columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any) { + return BoardColumnApiFp(this.configuration).columnControllerCreateCard(columnId, createCardBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApi + */ + public columnControllerDeleteColumn(columnId: string, options?: any) { + return BoardColumnApiFp(this.configuration).columnControllerDeleteColumn(columnId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApi + */ + public columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any) { + return BoardColumnApiFp(this.configuration).columnControllerMoveColumn(columnId, moveColumnBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApi + */ + public columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any) { + return BoardColumnApiFp(this.configuration).columnControllerUpdateColumnTitle(columnId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * BoardElementApi - axios parameter creator + * @export + */ +export const BoardElementApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerCreateSubmissionItem: async (contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerCreateSubmissionItem', 'contentElementId', contentElementId) + // verify required parameter 'createSubmissionItemBodyParams' is not null or undefined + assertParamExists('elementControllerCreateSubmissionItem', 'createSubmissionItemBodyParams', createSubmissionItemBodyParams) + const localVarPath = `/elements/{contentElementId}/submissions` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createSubmissionItemBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerDeleteElement: async (contentElementId: string, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerDeleteElement', 'contentElementId', contentElementId) + const localVarPath = `/elements/{contentElementId}` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerMoveElement: async (contentElementId: string, moveContentElementBody: MoveContentElementBody, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerMoveElement', 'contentElementId', contentElementId) + // verify required parameter 'moveContentElementBody' is not null or undefined + assertParamExists('elementControllerMoveElement', 'moveContentElementBody', moveContentElementBody) + const localVarPath = `/elements/{contentElementId}/position` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveContentElementBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerReadPermission: async (contentElementId: string, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerReadPermission', 'contentElementId', contentElementId) + const localVarPath = `/elements/{contentElementId}/permission` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerUpdateElement: async (contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerUpdateElement', 'contentElementId', contentElementId) + // verify required parameter 'updateElementContentBodyParams' is not null or undefined + assertParamExists('elementControllerUpdateElement', 'updateElementContentBodyParams', updateElementContentBodyParams) + const localVarPath = `/elements/{contentElementId}/content` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateElementContentBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardElementApi - functional programming interface + * @export + */ +export const BoardElementApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardElementApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerDeleteElement(contentElementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerDeleteElement(contentElementId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerMoveElement(contentElementId, moveContentElementBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerReadPermission(contentElementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerReadPermission(contentElementId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardElementApi - factory interface + * @export + */ +export const BoardElementApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardElementApiFp(configuration) + return { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): AxiosPromise { + return localVarFp.elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerDeleteElement(contentElementId: string, options?: any): AxiosPromise { + return localVarFp.elementControllerDeleteElement(contentElementId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): AxiosPromise { + return localVarFp.elementControllerMoveElement(contentElementId, moveContentElementBody, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerReadPermission(contentElementId: string, options?: any): AxiosPromise { + return localVarFp.elementControllerReadPermission(contentElementId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): AxiosPromise { + return localVarFp.elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardElementApi - interface + * @export + * @interface BoardElementApi + */ +export interface BoardElementApiInterface { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerDeleteElement(contentElementId: string, options?: any): AxiosPromise; + + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): AxiosPromise; + + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerReadPermission(contentElementId: string, options?: any): AxiosPromise; + + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardElementApi - object-oriented interface + * @export + * @class BoardElementApi + * @extends {BaseAPI} + */ +export class BoardElementApi extends BaseAPI implements BoardElementApiInterface { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerDeleteElement(contentElementId: string, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerDeleteElement(contentElementId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerMoveElement(contentElementId, moveContentElementBody, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerReadPermission(contentElementId: string, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerReadPermission(contentElementId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * BoardSubmissionApi - axios parameter creator + * @export + */ +export const BoardSubmissionApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerCreateElement: async (submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options: any = {}): Promise => { + // verify required parameter 'submissionItemId' is not null or undefined + assertParamExists('boardSubmissionControllerCreateElement', 'submissionItemId', submissionItemId) + // verify required parameter 'createContentElementBodyParams' is not null or undefined + assertParamExists('boardSubmissionControllerCreateElement', 'createContentElementBodyParams', createContentElementBodyParams) + const localVarPath = `/board-submissions/{submissionItemId}/elements` + .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createContentElementBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerDeleteSubmissionItem: async (submissionItemId: string, options: any = {}): Promise => { + // verify required parameter 'submissionItemId' is not null or undefined + assertParamExists('boardSubmissionControllerDeleteSubmissionItem', 'submissionItemId', submissionItemId) + const localVarPath = `/board-submissions/{submissionItemId}` + .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerGetSubmissionItems: async (submissionContainerId: string, options: any = {}): Promise => { + // verify required parameter 'submissionContainerId' is not null or undefined + assertParamExists('boardSubmissionControllerGetSubmissionItems', 'submissionContainerId', submissionContainerId) + const localVarPath = `/board-submissions/{submissionContainerId}` + .replace(`{${"submissionContainerId"}}`, encodeURIComponent(String(submissionContainerId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerUpdateSubmissionItem: async (submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options: any = {}): Promise => { + // verify required parameter 'submissionItemId' is not null or undefined + assertParamExists('boardSubmissionControllerUpdateSubmissionItem', 'submissionItemId', submissionItemId) + // verify required parameter 'updateSubmissionItemBodyParams' is not null or undefined + assertParamExists('boardSubmissionControllerUpdateSubmissionItem', 'updateSubmissionItemBodyParams', updateSubmissionItemBodyParams) + const localVarPath = `/board-submissions/{submissionItemId}` + .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateSubmissionItemBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardSubmissionApi - functional programming interface + * @export + */ +export const BoardSubmissionApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardSubmissionApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerGetSubmissionItems(submissionContainerId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardSubmissionApi - factory interface + * @export + */ +export const BoardSubmissionApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardSubmissionApiFp(configuration) + return { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise { + return localVarFp.boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): AxiosPromise { + return localVarFp.boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): AxiosPromise { + return localVarFp.boardSubmissionControllerGetSubmissionItems(submissionContainerId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): AxiosPromise { + return localVarFp.boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardSubmissionApi - interface + * @export + * @interface BoardSubmissionApi + */ +export interface BoardSubmissionApiInterface { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApiInterface + */ + boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApiInterface + */ + boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApiInterface + */ + boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): AxiosPromise; + + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApiInterface + */ + boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardSubmissionApi - object-oriented interface + * @export + * @class BoardSubmissionApi + * @extends {BaseAPI} + */ +export class BoardSubmissionApi extends BaseAPI implements BoardSubmissionApiInterface { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApi + */ + public boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any) { + return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApi + */ + public boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any) { + return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApi + */ + public boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any) { + return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerGetSubmissionItems(submissionContainerId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApi + */ + public boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any) { + return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * CollaborativeStorageApi - axios parameter creator + * @export + */ +export const CollaborativeStorageApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeStorageControllerUpdateTeamPermissionsForRole: async (teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options: any = {}): Promise => { + // verify required parameter 'teamId' is not null or undefined + assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'teamId', teamId) + // verify required parameter 'roleId' is not null or undefined + assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'roleId', roleId) + // verify required parameter 'teamPermissionsBody' is not null or undefined + assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'teamPermissionsBody', teamPermissionsBody) + const localVarPath = `/collaborative-storage/team/{teamId}/role/{roleId}/permissions` + .replace(`{${"teamId"}}`, encodeURIComponent(String(teamId))) + .replace(`{${"roleId"}}`, encodeURIComponent(String(roleId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(teamPermissionsBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * CollaborativeStorageApi - functional programming interface + * @export + */ +export const CollaborativeStorageApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = CollaborativeStorageApiAxiosParamCreator(configuration) + return { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * CollaborativeStorageApi - factory interface + * @export + */ +export const CollaborativeStorageApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = CollaborativeStorageApiFp(configuration) + return { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): AxiosPromise { + return localVarFp.collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * CollaborativeStorageApi - interface + * @export + * @interface CollaborativeStorageApi + */ +export interface CollaborativeStorageApiInterface { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeStorageApiInterface + */ + collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): AxiosPromise; + +} + +/** + * CollaborativeStorageApi - object-oriented interface + * @export + * @class CollaborativeStorageApi + * @extends {BaseAPI} + */ +export class CollaborativeStorageApi extends BaseAPI implements CollaborativeStorageApiInterface { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeStorageApi + */ + public collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any) { + return CollaborativeStorageApiFp(this.configuration).collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * CollaborativeTextEditorApi - axios parameter creator + * @export + */ +export const CollaborativeTextEditorApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeTextEditorControllerDeleteSessionsByUser: async (options: any = {}): Promise => { + const localVarPath = `/collaborative-text-editor/delete-sessions`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent: async (parentId: string, parentType: CollaborativeTextEditorParentType, options: any = {}): Promise => { + // verify required parameter 'parentId' is not null or undefined + assertParamExists('collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent', 'parentId', parentId) + // verify required parameter 'parentType' is not null or undefined + assertParamExists('collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent', 'parentType', parentType) + const localVarPath = `/collaborative-text-editor/{parentType}/{parentId}` + .replace(`{${"parentId"}}`, encodeURIComponent(String(parentId))) + .replace(`{${"parentType"}}`, encodeURIComponent(String(parentType))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * CollaborativeTextEditorApi - functional programming interface + * @export + */ +export const CollaborativeTextEditorApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = CollaborativeTextEditorApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeTextEditorControllerDeleteSessionsByUser(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * CollaborativeTextEditorApi - factory interface + * @export + */ +export const CollaborativeTextEditorApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = CollaborativeTextEditorApiFp(configuration) + return { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): AxiosPromise { + return localVarFp.collaborativeTextEditorControllerDeleteSessionsByUser(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): AxiosPromise { + return localVarFp.collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * CollaborativeTextEditorApi - interface + * @export + * @interface CollaborativeTextEditorApi + */ +export interface CollaborativeTextEditorApiInterface { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeTextEditorApiInterface + */ + collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): AxiosPromise; + + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeTextEditorApiInterface + */ + collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): AxiosPromise; + +} + +/** + * CollaborativeTextEditorApi - object-oriented interface + * @export + * @class CollaborativeTextEditorApi + * @extends {BaseAPI} + */ +export class CollaborativeTextEditorApi extends BaseAPI implements CollaborativeTextEditorApiInterface { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeTextEditorApi + */ + public collaborativeTextEditorControllerDeleteSessionsByUser(options?: any) { + return CollaborativeTextEditorApiFp(this.configuration).collaborativeTextEditorControllerDeleteSessionsByUser(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeTextEditorApi + */ + public collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any) { + return CollaborativeTextEditorApiFp(this.configuration).collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * CoursesApi - axios parameter creator + * @export + */ +export const CoursesApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerExportCourse: async (courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options: any = {}): Promise => { + // verify required parameter 'courseId' is not null or undefined + assertParamExists('courseControllerExportCourse', 'courseId', courseId) + // verify required parameter 'version' is not null or undefined + assertParamExists('courseControllerExportCourse', 'version', version) + // verify required parameter 'courseExportBodyParams' is not null or undefined + assertParamExists('courseControllerExportCourse', 'courseExportBodyParams', courseExportBodyParams) + const localVarPath = `/courses/{courseId}/export` + .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (version !== undefined) { + localVarQueryParameter['version'] = version; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(courseExportBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerFindForUser: async (skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/courses`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerGetUserPermissions: async (courseId: string, options: any = {}): Promise => { + // verify required parameter 'courseId' is not null or undefined + assertParamExists('courseControllerGetUserPermissions', 'courseId', courseId) + const localVarPath = `/courses/{courseId}/user-permissions` + .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerImportCourse: async (file: any, options: any = {}): Promise => { + // verify required parameter 'file' is not null or undefined + assertParamExists('courseControllerImportCourse', 'file', file) + const localVarPath = `/courses/import`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + const localVarFormParams = new ((configuration && configuration.formDataCtor) || FormData)(); + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + if (file !== undefined) { + localVarFormParams.append('file', file as any); + } + + + localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = localVarFormParams; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerStopSynchronization: async (courseId: string, options: any = {}): Promise => { + // verify required parameter 'courseId' is not null or undefined + assertParamExists('courseControllerStopSynchronization', 'courseId', courseId) + const localVarPath = `/courses/{courseId}/stop-sync` + .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * CoursesApi - functional programming interface + * @export + */ +export const CoursesApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = CoursesApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerExportCourse(courseId, version, courseExportBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerFindForUser(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerFindForUser(skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerGetUserPermissions(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerGetUserPermissions(courseId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerImportCourse(file: any, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerImportCourse(file, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerStopSynchronization(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerStopSynchronization(courseId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * CoursesApi - factory interface + * @export + */ +export const CoursesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = CoursesApiFp(configuration) + return { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): AxiosPromise { + return localVarFp.courseControllerExportCourse(courseId, version, courseExportBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerFindForUser(skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.courseControllerFindForUser(skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerGetUserPermissions(courseId: string, options?: any): AxiosPromise { + return localVarFp.courseControllerGetUserPermissions(courseId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerImportCourse(file: any, options?: any): AxiosPromise { + return localVarFp.courseControllerImportCourse(file, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerStopSynchronization(courseId: string, options?: any): AxiosPromise { + return localVarFp.courseControllerStopSynchronization(courseId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * CoursesApi - interface + * @export + * @interface CoursesApi + */ +export interface CoursesApiInterface { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): AxiosPromise; + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerFindForUser(skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerGetUserPermissions(courseId: string, options?: any): AxiosPromise; + + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerImportCourse(file: any, options?: any): AxiosPromise; + + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerStopSynchronization(courseId: string, options?: any): AxiosPromise; + +} + +/** + * CoursesApi - object-oriented interface + * @export + * @class CoursesApi + * @extends {BaseAPI} + */ +export class CoursesApi extends BaseAPI implements CoursesApiInterface { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any) { + return CoursesApiFp(this.configuration).courseControllerExportCourse(courseId, version, courseExportBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerFindForUser(skip?: number, limit?: number, options?: any) { + return CoursesApiFp(this.configuration).courseControllerFindForUser(skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerGetUserPermissions(courseId: string, options?: any) { + return CoursesApiFp(this.configuration).courseControllerGetUserPermissions(courseId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerImportCourse(file: any, options?: any) { + return CoursesApiFp(this.configuration).courseControllerImportCourse(file, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerStopSynchronization(courseId: string, options?: any) { + return CoursesApiFp(this.configuration).courseControllerStopSynchronization(courseId, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * DashboardApi - axios parameter creator + * @export + */ +export const DashboardApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerFindForUser: async (options: any = {}): Promise => { + const localVarPath = `/dashboard`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerMoveElement: async (dashboardId: string, moveElementParams: MoveElementParams, options: any = {}): Promise => { + // verify required parameter 'dashboardId' is not null or undefined + assertParamExists('dashboardControllerMoveElement', 'dashboardId', dashboardId) + // verify required parameter 'moveElementParams' is not null or undefined + assertParamExists('dashboardControllerMoveElement', 'moveElementParams', moveElementParams) + const localVarPath = `/dashboard/{dashboardId}/moveElement` + .replace(`{${"dashboardId"}}`, encodeURIComponent(String(dashboardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveElementParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerPatchGroup: async (dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options: any = {}): Promise => { + // verify required parameter 'dashboardId' is not null or undefined + assertParamExists('dashboardControllerPatchGroup', 'dashboardId', dashboardId) + // verify required parameter 'x' is not null or undefined + assertParamExists('dashboardControllerPatchGroup', 'x', x) + // verify required parameter 'y' is not null or undefined + assertParamExists('dashboardControllerPatchGroup', 'y', y) + // verify required parameter 'patchGroupParams' is not null or undefined + assertParamExists('dashboardControllerPatchGroup', 'patchGroupParams', patchGroupParams) + const localVarPath = `/dashboard/{dashboardId}/element` + .replace(`{${"dashboardId"}}`, encodeURIComponent(String(dashboardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (x !== undefined) { + localVarQueryParameter['x'] = x; + } + + if (y !== undefined) { + localVarQueryParameter['y'] = y; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchGroupParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * DashboardApi - functional programming interface + * @export + */ +export const DashboardApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = DashboardApiAxiosParamCreator(configuration) + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async dashboardControllerFindForUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerFindForUser(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerMoveElement(dashboardId, moveElementParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * DashboardApi - factory interface + * @export + */ +export const DashboardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = DashboardApiFp(configuration) + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerFindForUser(options?: any): AxiosPromise { + return localVarFp.dashboardControllerFindForUser(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): AxiosPromise { + return localVarFp.dashboardControllerMoveElement(dashboardId, moveElementParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): AxiosPromise { + return localVarFp.dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * DashboardApi - interface + * @export + * @interface DashboardApi + */ +export interface DashboardApiInterface { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApiInterface + */ + dashboardControllerFindForUser(options?: any): AxiosPromise; + + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApiInterface + */ + dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): AxiosPromise; + + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApiInterface + */ + dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): AxiosPromise; + +} + +/** + * DashboardApi - object-oriented interface + * @export + * @class DashboardApi + * @extends {BaseAPI} + */ +export class DashboardApi extends BaseAPI implements DashboardApiInterface { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApi + */ + public dashboardControllerFindForUser(options?: any) { + return DashboardApiFp(this.configuration).dashboardControllerFindForUser(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApi + */ + public dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any) { + return DashboardApiFp(this.configuration).dashboardControllerMoveElement(dashboardId, moveElementParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApi + */ + public dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any) { + return DashboardApiFp(this.configuration).dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * DefaultApi - axios parameter creator + * @export + */ +export const DefaultApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + serverConfigControllerPublicConfig: async (options: any = {}): Promise => { + const localVarPath = `/config/public`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + serverControllerGetHello: async (options: any = {}): Promise => { + const localVarPath = `/`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * DefaultApi - functional programming interface + * @export + */ +export const DefaultApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = DefaultApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async serverConfigControllerPublicConfig(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.serverConfigControllerPublicConfig(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async serverControllerGetHello(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.serverControllerGetHello(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * DefaultApi - factory interface + * @export + */ +export const DefaultApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = DefaultApiFp(configuration) + return { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + serverConfigControllerPublicConfig(options?: any): AxiosPromise { + return localVarFp.serverConfigControllerPublicConfig(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + serverControllerGetHello(options?: any): AxiosPromise { + return localVarFp.serverControllerGetHello(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * DefaultApi - interface + * @export + * @interface DefaultApi + */ +export interface DefaultApiInterface { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DefaultApiInterface + */ + serverConfigControllerPublicConfig(options?: any): AxiosPromise; + + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DefaultApiInterface + */ + serverControllerGetHello(options?: any): AxiosPromise; + +} + +/** + * DefaultApi - object-oriented interface + * @export + * @class DefaultApi + * @extends {BaseAPI} + */ +export class DefaultApi extends BaseAPI implements DefaultApiInterface { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DefaultApi + */ + public serverConfigControllerPublicConfig(options?: any) { + return DefaultApiFp(this.configuration).serverConfigControllerPublicConfig(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DefaultApi + */ + public serverControllerGetHello(options?: any) { + return DefaultApiFp(this.configuration).serverControllerGetHello(options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * GroupApi - axios parameter creator + * @export + */ +export const GroupApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerFindClasses: async (skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options: any = {}): Promise => { + const localVarPath = `/groups/class`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (sortOrder !== undefined) { + localVarQueryParameter['sortOrder'] = sortOrder; + } + + if (sortBy !== undefined) { + localVarQueryParameter['sortBy'] = sortBy; + } + + if (type !== undefined) { + localVarQueryParameter['type'] = type; + } + + if (calledFrom !== undefined) { + localVarQueryParameter['calledFrom'] = calledFrom; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerGetAllGroups: async (skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options: any = {}): Promise => { + const localVarPath = `/groups`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (availableGroupsForCourseSync !== undefined) { + localVarQueryParameter['availableGroupsForCourseSync'] = availableGroupsForCourseSync; + } + + if (nameQuery !== undefined) { + localVarQueryParameter['nameQuery'] = nameQuery; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerGetGroup: async (groupId: string, options: any = {}): Promise => { + // verify required parameter 'groupId' is not null or undefined + assertParamExists('groupControllerGetGroup', 'groupId', groupId) + const localVarPath = `/groups/{groupId}` + .replace(`{${"groupId"}}`, encodeURIComponent(String(groupId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * GroupApi - functional programming interface + * @export + */ +export const GroupApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = GroupApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async groupControllerGetGroup(groupId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerGetGroup(groupId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * GroupApi - factory interface + * @export + */ +export const GroupApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = GroupApiFp(configuration) + return { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): AxiosPromise { + return localVarFp.groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): AxiosPromise { + return localVarFp.groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerGetGroup(groupId: string, options?: any): AxiosPromise { + return localVarFp.groupControllerGetGroup(groupId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * GroupApi - interface + * @export + * @interface GroupApi + */ +export interface GroupApiInterface { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApiInterface + */ + groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): AxiosPromise; + + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApiInterface + */ + groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): AxiosPromise; + + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApiInterface + */ + groupControllerGetGroup(groupId: string, options?: any): AxiosPromise; + +} + +/** + * GroupApi - object-oriented interface + * @export + * @class GroupApi + * @extends {BaseAPI} + */ +export class GroupApi extends BaseAPI implements GroupApiInterface { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApi + */ + public groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any) { + return GroupApiFp(this.configuration).groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApi + */ + public groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any) { + return GroupApiFp(this.configuration).groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApi + */ + public groupControllerGetGroup(groupId: string, options?: any) { + return GroupApiFp(this.configuration).groupControllerGetGroup(groupId, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * LessonApi - axios parameter creator + * @export + */ +export const LessonApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerDelete: async (lessonId: string, options: any = {}): Promise => { + // verify required parameter 'lessonId' is not null or undefined + assertParamExists('lessonControllerDelete', 'lessonId', lessonId) + const localVarPath = `/lessons/{lessonId}` + .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerGetCourseLessons: async (courseId: string, options: any = {}): Promise => { + // verify required parameter 'courseId' is not null or undefined + assertParamExists('lessonControllerGetCourseLessons', 'courseId', courseId) + const localVarPath = `/lessons/course/{courseId}` + .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerGetLesson: async (lessonId: string, options: any = {}): Promise => { + // verify required parameter 'lessonId' is not null or undefined + assertParamExists('lessonControllerGetLesson', 'lessonId', lessonId) + const localVarPath = `/lessons/{lessonId}` + .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * LessonApi - functional programming interface + * @export + */ +export const LessonApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = LessonApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async lessonControllerDelete(lessonId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerDelete(lessonId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async lessonControllerGetCourseLessons(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerGetCourseLessons(courseId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async lessonControllerGetLesson(lessonId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerGetLesson(lessonId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * LessonApi - factory interface + * @export + */ +export const LessonApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = LessonApiFp(configuration) + return { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerDelete(lessonId: string, options?: any): AxiosPromise { + return localVarFp.lessonControllerDelete(lessonId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerGetCourseLessons(courseId: string, options?: any): AxiosPromise { + return localVarFp.lessonControllerGetCourseLessons(courseId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerGetLesson(lessonId: string, options?: any): AxiosPromise { + return localVarFp.lessonControllerGetLesson(lessonId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * LessonApi - interface + * @export + * @interface LessonApi + */ +export interface LessonApiInterface { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApiInterface + */ + lessonControllerDelete(lessonId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApiInterface + */ + lessonControllerGetCourseLessons(courseId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApiInterface + */ + lessonControllerGetLesson(lessonId: string, options?: any): AxiosPromise; + +} + +/** + * LessonApi - object-oriented interface + * @export + * @class LessonApi + * @extends {BaseAPI} + */ +export class LessonApi extends BaseAPI implements LessonApiInterface { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApi + */ + public lessonControllerDelete(lessonId: string, options?: any) { + return LessonApiFp(this.configuration).lessonControllerDelete(lessonId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApi + */ + public lessonControllerGetCourseLessons(courseId: string, options?: any) { + return LessonApiFp(this.configuration).lessonControllerGetCourseLessons(courseId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApi + */ + public lessonControllerGetLesson(lessonId: string, options?: any) { + return LessonApiFp(this.configuration).lessonControllerGetLesson(lessonId, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * MeApi - axios parameter creator + * @export + */ +export const MeApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + meControllerMe: async (options: any = {}): Promise => { + const localVarPath = `/me`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MeApi - functional programming interface + * @export + */ +export const MeApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MeApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async meControllerMe(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.meControllerMe(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MeApi - factory interface + * @export + */ +export const MeApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MeApiFp(configuration) + return { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + meControllerMe(options?: any): AxiosPromise { + return localVarFp.meControllerMe(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MeApi - interface + * @export + * @interface MeApi + */ +export interface MeApiInterface { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MeApiInterface + */ + meControllerMe(options?: any): AxiosPromise; + +} + +/** + * MeApi - object-oriented interface + * @export + * @class MeApi + * @extends {BaseAPI} + */ +export class MeApi extends BaseAPI implements MeApiInterface { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MeApi + */ + public meControllerMe(options?: any) { + return MeApiFp(this.configuration).meControllerMe(options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * MediaBoardApi - axios parameter creator + * @export + */ +export const MediaBoardApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerCollapseMediaAvailableLine: async (boardId: string, collapsableBodyParams: CollapsableBodyParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerCollapseMediaAvailableLine', 'boardId', boardId) + // verify required parameter 'collapsableBodyParams' is not null or undefined + assertParamExists('mediaBoardControllerCollapseMediaAvailableLine', 'collapsableBodyParams', collapsableBodyParams) + const localVarPath = `/media-boards/{boardId}/media-available-line/collapse` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(collapsableBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerCreateLine: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerCreateLine', 'boardId', boardId) + const localVarPath = `/media-boards/{boardId}/media-lines` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerGetMediaAvailableLine: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerGetMediaAvailableLine', 'boardId', boardId) + const localVarPath = `/media-boards/{boardId}/media-available-line` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerGetMediaBoardForUser: async (options: any = {}): Promise => { + const localVarPath = `/media-boards/me`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerSetMediaBoardLayout: async (boardId: string, layoutBodyParams: LayoutBodyParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerSetMediaBoardLayout', 'boardId', boardId) + // verify required parameter 'layoutBodyParams' is not null or undefined + assertParamExists('mediaBoardControllerSetMediaBoardLayout', 'layoutBodyParams', layoutBodyParams) + const localVarPath = `/media-boards/{boardId}/layout` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(layoutBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerUpdateMediaAvailableLineColor: async (boardId: string, colorBodyParams: ColorBodyParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerUpdateMediaAvailableLineColor', 'boardId', boardId) + // verify required parameter 'colorBodyParams' is not null or undefined + assertParamExists('mediaBoardControllerUpdateMediaAvailableLineColor', 'colorBodyParams', colorBodyParams) + const localVarPath = `/media-boards/{boardId}/media-available-line/color` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(colorBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MediaBoardApi - functional programming interface + * @export + */ +export const MediaBoardApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MediaBoardApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerCreateLine(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerCreateLine(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerGetMediaAvailableLine(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerGetMediaBoardForUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerGetMediaBoardForUser(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MediaBoardApi - factory interface + * @export + */ +export const MediaBoardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MediaBoardApiFp(configuration) + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerCreateLine(boardId: string, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerCreateLine(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerGetMediaAvailableLine(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerGetMediaBoardForUser(options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerGetMediaBoardForUser(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MediaBoardApi - interface + * @export + * @interface MediaBoardApi + */ +export interface MediaBoardApiInterface { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerCreateLine(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerGetMediaBoardForUser(options?: any): AxiosPromise; + + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise; + +} + +/** + * MediaBoardApi - object-oriented interface + * @export + * @class MediaBoardApi + * @extends {BaseAPI} + */ +export class MediaBoardApi extends BaseAPI implements MediaBoardApiInterface { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerCreateLine(boardId: string, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerCreateLine(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerGetMediaAvailableLine(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerGetMediaBoardForUser(options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerGetMediaBoardForUser(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * MediaElementApi - axios parameter creator + * @export + */ +export const MediaElementApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerCreateElement: async (createMediaElementBodyParams: CreateMediaElementBodyParams, options: any = {}): Promise => { + // verify required parameter 'createMediaElementBodyParams' is not null or undefined + assertParamExists('mediaElementControllerCreateElement', 'createMediaElementBodyParams', createMediaElementBodyParams) + const localVarPath = `/media-elements`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createMediaElementBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerDeleteElement: async (elementId: string, options: any = {}): Promise => { + // verify required parameter 'elementId' is not null or undefined + assertParamExists('mediaElementControllerDeleteElement', 'elementId', elementId) + const localVarPath = `/media-elements/{elementId}` + .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerMoveElement: async (elementId: string, moveElementBodyParams: MoveElementBodyParams, options: any = {}): Promise => { + // verify required parameter 'elementId' is not null or undefined + assertParamExists('mediaElementControllerMoveElement', 'elementId', elementId) + // verify required parameter 'moveElementBodyParams' is not null or undefined + assertParamExists('mediaElementControllerMoveElement', 'moveElementBodyParams', moveElementBodyParams) + const localVarPath = `/media-elements/{elementId}/position` + .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveElementBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MediaElementApi - functional programming interface + * @export + */ +export const MediaElementApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MediaElementApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerCreateElement(createMediaElementBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaElementControllerDeleteElement(elementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerDeleteElement(elementId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerMoveElement(elementId, moveElementBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MediaElementApi - factory interface + * @export + */ +export const MediaElementApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MediaElementApiFp(configuration) + return { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaElementControllerCreateElement(createMediaElementBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerDeleteElement(elementId: string, options?: any): AxiosPromise { + return localVarFp.mediaElementControllerDeleteElement(elementId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaElementControllerMoveElement(elementId, moveElementBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MediaElementApi - interface + * @export + * @interface MediaElementApi + */ +export interface MediaElementApiInterface { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApiInterface + */ + mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApiInterface + */ + mediaElementControllerDeleteElement(elementId: string, options?: any): AxiosPromise; + + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApiInterface + */ + mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): AxiosPromise; + +} + +/** + * MediaElementApi - object-oriented interface + * @export + * @class MediaElementApi + * @extends {BaseAPI} + */ +export class MediaElementApi extends BaseAPI implements MediaElementApiInterface { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApi + */ + public mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any) { + return MediaElementApiFp(this.configuration).mediaElementControllerCreateElement(createMediaElementBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApi + */ + public mediaElementControllerDeleteElement(elementId: string, options?: any) { + return MediaElementApiFp(this.configuration).mediaElementControllerDeleteElement(elementId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApi + */ + public mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any) { + return MediaElementApiFp(this.configuration).mediaElementControllerMoveElement(elementId, moveElementBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * MediaLineApi - axios parameter creator + * @export + */ +export const MediaLineApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerCollapseMediaLine: async (lineId: string, collapsableBodyParams: CollapsableBodyParams, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerCollapseMediaLine', 'lineId', lineId) + // verify required parameter 'collapsableBodyParams' is not null or undefined + assertParamExists('mediaLineControllerCollapseMediaLine', 'collapsableBodyParams', collapsableBodyParams) + const localVarPath = `/media-lines/{lineId}/collapse` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(collapsableBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerDeleteLine: async (lineId: string, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerDeleteLine', 'lineId', lineId) + const localVarPath = `/media-lines/{lineId}` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerMoveLine: async (lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerMoveLine', 'lineId', lineId) + // verify required parameter 'moveColumnBodyParams' is not null or undefined + assertParamExists('mediaLineControllerMoveLine', 'moveColumnBodyParams', moveColumnBodyParams) + const localVarPath = `/media-lines/{lineId}/position` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveColumnBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerUpdateBackgroundColor: async (lineId: string, colorBodyParams: ColorBodyParams, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerUpdateBackgroundColor', 'lineId', lineId) + // verify required parameter 'colorBodyParams' is not null or undefined + assertParamExists('mediaLineControllerUpdateBackgroundColor', 'colorBodyParams', colorBodyParams) + const localVarPath = `/media-lines/{lineId}/color` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(colorBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerUpdateLineTitle: async (lineId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerUpdateLineTitle', 'lineId', lineId) + // verify required parameter 'renameBodyParams' is not null or undefined + assertParamExists('mediaLineControllerUpdateLineTitle', 'renameBodyParams', renameBodyParams) + const localVarPath = `/media-lines/{lineId}/title` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MediaLineApi - functional programming interface + * @export + */ +export const MediaLineApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MediaLineApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerDeleteLine(lineId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerDeleteLine(lineId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MediaLineApi - factory interface + * @export + */ +export const MediaLineApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MediaLineApiFp(configuration) + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerDeleteLine(lineId: string, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerDeleteLine(lineId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MediaLineApi - interface + * @export + * @interface MediaLineApi + */ +export interface MediaLineApiInterface { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerDeleteLine(lineId: string, options?: any): AxiosPromise; + + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; + +} + +/** + * MediaLineApi - object-oriented interface + * @export + * @class MediaLineApi + * @extends {BaseAPI} + */ +export class MediaLineApi extends BaseAPI implements MediaLineApiInterface { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerDeleteLine(lineId: string, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerDeleteLine(lineId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * MetaTagExtractorApi - axios parameter creator + * @export + */ +export const MetaTagExtractorApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + metaTagExtractorControllerGetMetaTags: async (getMetaTagDataBody: GetMetaTagDataBody, options: any = {}): Promise => { + // verify required parameter 'getMetaTagDataBody' is not null or undefined + assertParamExists('metaTagExtractorControllerGetMetaTags', 'getMetaTagDataBody', getMetaTagDataBody) + const localVarPath = `/meta-tag-extractor`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(getMetaTagDataBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MetaTagExtractorApi - functional programming interface + * @export + */ +export const MetaTagExtractorApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MetaTagExtractorApiAxiosParamCreator(configuration) + return { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MetaTagExtractorApi - factory interface + * @export + */ +export const MetaTagExtractorApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MetaTagExtractorApiFp(configuration) + return { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): AxiosPromise { + return localVarFp.metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MetaTagExtractorApi - interface + * @export + * @interface MetaTagExtractorApi + */ +export interface MetaTagExtractorApiInterface { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MetaTagExtractorApiInterface + */ + metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): AxiosPromise; + +} + +/** + * MetaTagExtractorApi - object-oriented interface + * @export + * @class MetaTagExtractorApi + * @extends {BaseAPI} + */ +export class MetaTagExtractorApi extends BaseAPI implements MetaTagExtractorApiInterface { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MetaTagExtractorApi + */ + public metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any) { + return MetaTagExtractorApiFp(this.configuration).metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * NewsApi - axios parameter creator + * @export + */ +export const NewsApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerCreate: async (createNewsParams: CreateNewsParams, options: any = {}): Promise => { + // verify required parameter 'createNewsParams' is not null or undefined + assertParamExists('newsControllerCreate', 'createNewsParams', createNewsParams) + const localVarPath = `/news`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createNewsParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerDelete: async (newsId: string, options: any = {}): Promise => { + // verify required parameter 'newsId' is not null or undefined + assertParamExists('newsControllerDelete', 'newsId', newsId) + const localVarPath = `/news/{newsId}` + .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerFindAll: async (targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/news`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (targetModel !== undefined) { + localVarQueryParameter['targetModel'] = targetModel; + } + + if (targetId !== undefined) { + localVarQueryParameter['targetId'] = targetId; + } + + if (unpublished !== undefined) { + localVarQueryParameter['unpublished'] = unpublished; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerFindOne: async (newsId: string, options: any = {}): Promise => { + // verify required parameter 'newsId' is not null or undefined + assertParamExists('newsControllerFindOne', 'newsId', newsId) + const localVarPath = `/news/{newsId}` + .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerUpdate: async (newsId: string, updateNewsParams: UpdateNewsParams, options: any = {}): Promise => { + // verify required parameter 'newsId' is not null or undefined + assertParamExists('newsControllerUpdate', 'newsId', newsId) + // verify required parameter 'updateNewsParams' is not null or undefined + assertParamExists('newsControllerUpdate', 'updateNewsParams', updateNewsParams) + const localVarPath = `/news/{newsId}` + .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateNewsParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + teamNewsControllerFindAllForTeam: async (teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options: any = {}): Promise => { + // verify required parameter 'teamId' is not null or undefined + assertParamExists('teamNewsControllerFindAllForTeam', 'teamId', teamId) + const localVarPath = `/team/{teamId}/news` + .replace(`{${"teamId"}}`, encodeURIComponent(String(teamId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (targetModel !== undefined) { + localVarQueryParameter['targetModel'] = targetModel; + } + + if (targetId !== undefined) { + localVarQueryParameter['targetId'] = targetId; + } + + if (unpublished !== undefined) { + localVarQueryParameter['unpublished'] = unpublished; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * NewsApi - functional programming interface + * @export + */ +export const NewsApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = NewsApiAxiosParamCreator(configuration) + return { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerCreate(createNewsParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerDelete(newsId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerDelete(newsId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerFindOne(newsId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerFindOne(newsId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerUpdate(newsId, updateNewsParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * NewsApi - factory interface + * @export + */ +export const NewsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = NewsApiFp(configuration) + return { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): AxiosPromise { + return localVarFp.newsControllerCreate(createNewsParams, options).then((request) => request(axios, basePath)); + }, + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerDelete(newsId: string, options?: any): AxiosPromise { + return localVarFp.newsControllerDelete(newsId, options).then((request) => request(axios, basePath)); + }, + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerFindOne(newsId: string, options?: any): AxiosPromise { + return localVarFp.newsControllerFindOne(newsId, options).then((request) => request(axios, basePath)); + }, + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): AxiosPromise { + return localVarFp.newsControllerUpdate(newsId, updateNewsParams, options).then((request) => request(axios, basePath)); + }, + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * NewsApi - interface + * @export + * @interface NewsApi + */ +export interface NewsApiInterface { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): AxiosPromise; + + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerDelete(newsId: string, options?: any): AxiosPromise; + + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerFindOne(newsId: string, options?: any): AxiosPromise; + + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): AxiosPromise; + + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise; + +} + +/** + * NewsApi - object-oriented interface + * @export + * @class NewsApi + * @extends {BaseAPI} + */ +export class NewsApi extends BaseAPI implements NewsApiInterface { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerCreate(createNewsParams: CreateNewsParams, options?: any) { + return NewsApiFp(this.configuration).newsControllerCreate(createNewsParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerDelete(newsId: string, options?: any) { + return NewsApiFp(this.configuration).newsControllerDelete(newsId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any) { + return NewsApiFp(this.configuration).newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerFindOne(newsId: string, options?: any) { + return NewsApiFp(this.configuration).newsControllerFindOne(newsId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any) { + return NewsApiFp(this.configuration).newsControllerUpdate(newsId, updateNewsParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any) { + return NewsApiFp(this.configuration).teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * Oauth2Api - axios parameter creator + * @export + */ +export const Oauth2ApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerAcceptLogoutRequest: async (challenge: string, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerAcceptLogoutRequest', 'challenge', challenge) + const localVarPath = `/oauth2/logoutRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerCreateOAuth2Client: async (oauthClientCreateBody: OauthClientCreateBody, options: any = {}): Promise => { + // verify required parameter 'oauthClientCreateBody' is not null or undefined + assertParamExists('oauthProviderControllerCreateOAuth2Client', 'oauthClientCreateBody', oauthClientCreateBody) + const localVarPath = `/oauth2/clients`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(oauthClientCreateBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerDeleteOAuth2Client: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('oauthProviderControllerDeleteOAuth2Client', 'id', id) + const localVarPath = `/oauth2/clients/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetConsentRequest: async (challenge: string, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerGetConsentRequest', 'challenge', challenge) + const localVarPath = `/oauth2/consentRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetLoginRequest: async (challenge: string, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerGetLoginRequest', 'challenge', challenge) + const localVarPath = `/oauth2/loginRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetOAuth2Client: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('oauthProviderControllerGetOAuth2Client', 'id', id) + const localVarPath = `/oauth2/clients/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerListConsentSessions: async (options: any = {}): Promise => { + const localVarPath = `/oauth2/auth/sessions/consent`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerListOAuth2Clients: async (limit: number, offset: number, clientName: string, owner: string, options: any = {}): Promise => { + // verify required parameter 'limit' is not null or undefined + assertParamExists('oauthProviderControllerListOAuth2Clients', 'limit', limit) + // verify required parameter 'offset' is not null or undefined + assertParamExists('oauthProviderControllerListOAuth2Clients', 'offset', offset) + // verify required parameter 'clientName' is not null or undefined + assertParamExists('oauthProviderControllerListOAuth2Clients', 'clientName', clientName) + // verify required parameter 'owner' is not null or undefined + assertParamExists('oauthProviderControllerListOAuth2Clients', 'owner', owner) + const localVarPath = `/oauth2/clients` + .replace(`{${"limit"}}`, encodeURIComponent(String(limit))) + .replace(`{${"offset"}}`, encodeURIComponent(String(offset))) + .replace(`{${"client_name"}}`, encodeURIComponent(String(clientName))) + .replace(`{${"owner"}}`, encodeURIComponent(String(owner))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerPatchConsentRequest: async (challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerPatchConsentRequest', 'challenge', challenge) + // verify required parameter 'consentRequestBody' is not null or undefined + assertParamExists('oauthProviderControllerPatchConsentRequest', 'consentRequestBody', consentRequestBody) + const localVarPath = `/oauth2/consentRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (accept !== undefined) { + localVarQueryParameter['accept'] = accept; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(consentRequestBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerPatchLoginRequest: async (challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerPatchLoginRequest', 'challenge', challenge) + // verify required parameter 'loginRequestBody' is not null or undefined + assertParamExists('oauthProviderControllerPatchLoginRequest', 'loginRequestBody', loginRequestBody) + const localVarPath = `/oauth2/loginRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (accept !== undefined) { + localVarQueryParameter['accept'] = accept; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(loginRequestBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerRevokeConsentSession: async (client: string, options: any = {}): Promise => { + // verify required parameter 'client' is not null or undefined + assertParamExists('oauthProviderControllerRevokeConsentSession', 'client', client) + const localVarPath = `/oauth2/auth/sessions/consent`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (client !== undefined) { + localVarQueryParameter['client'] = client; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerUpdateOAuth2Client: async (id: string, oauthClientUpdateBody: OauthClientUpdateBody, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('oauthProviderControllerUpdateOAuth2Client', 'id', id) + // verify required parameter 'oauthClientUpdateBody' is not null or undefined + assertParamExists('oauthProviderControllerUpdateOAuth2Client', 'oauthClientUpdateBody', oauthClientUpdateBody) + const localVarPath = `/oauth2/clients/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(oauthClientUpdateBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * Oauth2Api - functional programming interface + * @export + */ +export const Oauth2ApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = Oauth2ApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerAcceptLogoutRequest(challenge, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerDeleteOAuth2Client(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerGetConsentRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetConsentRequest(challenge, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerGetLoginRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetLoginRequest(challenge, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerGetOAuth2Client(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetOAuth2Client(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerListConsentSessions(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerListConsentSessions(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerRevokeConsentSession(client: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerRevokeConsentSession(client, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * Oauth2Api - factory interface + * @export + */ +export const Oauth2ApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = Oauth2ApiFp(configuration) + return { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerAcceptLogoutRequest(challenge, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerDeleteOAuth2Client(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetConsentRequest(challenge: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerGetConsentRequest(challenge, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetLoginRequest(challenge: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerGetLoginRequest(challenge, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetOAuth2Client(id: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerGetOAuth2Client(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerListConsentSessions(options?: any): AxiosPromise> { + return localVarFp.oauthProviderControllerListConsentSessions(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): AxiosPromise> { + return localVarFp.oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerRevokeConsentSession(client: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerRevokeConsentSession(client, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * Oauth2Api - interface + * @export + * @interface Oauth2Api + */ +export interface Oauth2ApiInterface { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): AxiosPromise; + + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): AxiosPromise; + + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): AxiosPromise; + + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerGetConsentRequest(challenge: string, options?: any): AxiosPromise; + + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerGetLoginRequest(challenge: string, options?: any): AxiosPromise; + + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerGetOAuth2Client(id: string, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerListConsentSessions(options?: any): AxiosPromise>; + + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): AxiosPromise>; + + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): AxiosPromise; + + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): AxiosPromise; + + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerRevokeConsentSession(client: string, options?: any): AxiosPromise; + + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): AxiosPromise; + +} + +/** + * Oauth2Api - object-oriented interface + * @export + * @class Oauth2Api + * @extends {BaseAPI} + */ +export class Oauth2Api extends BaseAPI implements Oauth2ApiInterface { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerAcceptLogoutRequest(challenge, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerDeleteOAuth2Client(id: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerDeleteOAuth2Client(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerGetConsentRequest(challenge: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerGetConsentRequest(challenge, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerGetLoginRequest(challenge: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerGetLoginRequest(challenge, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerGetOAuth2Client(id: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerGetOAuth2Client(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerListConsentSessions(options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerListConsentSessions(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerRevokeConsentSession(client: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerRevokeConsentSession(client, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * PseudonymApi - axios parameter creator + * @export + */ +export const PseudonymApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + pseudonymControllerGetPseudonym: async (pseudonym: string, options: any = {}): Promise => { + // verify required parameter 'pseudonym' is not null or undefined + assertParamExists('pseudonymControllerGetPseudonym', 'pseudonym', pseudonym) + const localVarPath = `/pseudonyms/{pseudonym}` + .replace(`{${"pseudonym"}}`, encodeURIComponent(String(pseudonym))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * PseudonymApi - functional programming interface + * @export + */ +export const PseudonymApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = PseudonymApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async pseudonymControllerGetPseudonym(pseudonym: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.pseudonymControllerGetPseudonym(pseudonym, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * PseudonymApi - factory interface + * @export + */ +export const PseudonymApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = PseudonymApiFp(configuration) + return { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + pseudonymControllerGetPseudonym(pseudonym: string, options?: any): AxiosPromise { + return localVarFp.pseudonymControllerGetPseudonym(pseudonym, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * PseudonymApi - interface + * @export + * @interface PseudonymApi + */ +export interface PseudonymApiInterface { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof PseudonymApiInterface + */ + pseudonymControllerGetPseudonym(pseudonym: string, options?: any): AxiosPromise; + +} + +/** + * PseudonymApi - object-oriented interface + * @export + * @class PseudonymApi + * @extends {BaseAPI} + */ +export class PseudonymApi extends BaseAPI implements PseudonymApiInterface { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof PseudonymApi + */ + public pseudonymControllerGetPseudonym(pseudonym: string, options?: any) { + return PseudonymApiFp(this.configuration).pseudonymControllerGetPseudonym(pseudonym, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * RoomsApi - axios parameter creator + * @export + */ +export const RoomsApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerCopyCourse: async (roomId: string, options: any = {}): Promise => { + // verify required parameter 'roomId' is not null or undefined + assertParamExists('roomsControllerCopyCourse', 'roomId', roomId) + const localVarPath = `/rooms/{roomId}/copy` + .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerCopyLesson: async (lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options: any = {}): Promise => { + // verify required parameter 'lessonId' is not null or undefined + assertParamExists('roomsControllerCopyLesson', 'lessonId', lessonId) + // verify required parameter 'lessonCopyApiParams' is not null or undefined + assertParamExists('roomsControllerCopyLesson', 'lessonCopyApiParams', lessonCopyApiParams) + const localVarPath = `/rooms/lessons/{lessonId}/copy` + .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(lessonCopyApiParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerGetRoomBoard: async (roomId: string, options: any = {}): Promise => { + // verify required parameter 'roomId' is not null or undefined + assertParamExists('roomsControllerGetRoomBoard', 'roomId', roomId) + const localVarPath = `/rooms/{roomId}/board` + .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerPatchElementVisibility: async (roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options: any = {}): Promise => { + // verify required parameter 'roomId' is not null or undefined + assertParamExists('roomsControllerPatchElementVisibility', 'roomId', roomId) + // verify required parameter 'elementId' is not null or undefined + assertParamExists('roomsControllerPatchElementVisibility', 'elementId', elementId) + // verify required parameter 'patchVisibilityParams' is not null or undefined + assertParamExists('roomsControllerPatchElementVisibility', 'patchVisibilityParams', patchVisibilityParams) + const localVarPath = `/rooms/{roomId}/elements/{elementId}/visibility` + .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))) + .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchVisibilityParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerPatchOrderingOfElements: async (roomId: string, patchOrderParams: PatchOrderParams, options: any = {}): Promise => { + // verify required parameter 'roomId' is not null or undefined + assertParamExists('roomsControllerPatchOrderingOfElements', 'roomId', roomId) + // verify required parameter 'patchOrderParams' is not null or undefined + assertParamExists('roomsControllerPatchOrderingOfElements', 'patchOrderParams', patchOrderParams) + const localVarPath = `/rooms/{roomId}/board/order` + .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchOrderParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * RoomsApi - functional programming interface + * @export + */ +export const RoomsApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = RoomsApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerCopyCourse(roomId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerCopyCourse(roomId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerGetRoomBoard(roomId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerGetRoomBoard(roomId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * RoomsApi - factory interface + * @export + */ +export const RoomsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = RoomsApiFp(configuration) + return { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerCopyCourse(roomId: string, options?: any): AxiosPromise { + return localVarFp.roomsControllerCopyCourse(roomId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): AxiosPromise { + return localVarFp.roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerGetRoomBoard(roomId: string, options?: any): AxiosPromise { + return localVarFp.roomsControllerGetRoomBoard(roomId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): AxiosPromise { + return localVarFp.roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): AxiosPromise { + return localVarFp.roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * RoomsApi - interface + * @export + * @interface RoomsApi + */ +export interface RoomsApiInterface { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerCopyCourse(roomId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): AxiosPromise; + + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerGetRoomBoard(roomId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): AxiosPromise; + + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): AxiosPromise; + +} + +/** + * RoomsApi - object-oriented interface + * @export + * @class RoomsApi + * @extends {BaseAPI} + */ +export class RoomsApi extends BaseAPI implements RoomsApiInterface { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerCopyCourse(roomId: string, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerCopyCourse(roomId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerGetRoomBoard(roomId: string, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerGetRoomBoard(roomId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * SSOApi - axios parameter creator + * @export + */ +export const SSOApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthSSOControllerGetHydraOauthToken: async (oauthClientId: string, options: any = {}): Promise => { + // verify required parameter 'oauthClientId' is not null or undefined + assertParamExists('oauthSSOControllerGetHydraOauthToken', 'oauthClientId', oauthClientId) + const localVarPath = `/sso/hydra/{oauthClientId}` + .replace(`{${"oauthClientId"}}`, encodeURIComponent(String(oauthClientId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthSSOControllerRequestAuthToken: async (oauthClientId: string, options: any = {}): Promise => { + // verify required parameter 'oauthClientId' is not null or undefined + assertParamExists('oauthSSOControllerRequestAuthToken', 'oauthClientId', oauthClientId) + const localVarPath = `/sso/auth/{oauthClientId}` + .replace(`{${"oauthClientId"}}`, encodeURIComponent(String(oauthClientId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SSOApi - functional programming interface + * @export + */ +export const SSOApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SSOApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthSSOControllerGetHydraOauthToken(oauthClientId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthSSOControllerRequestAuthToken(oauthClientId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * SSOApi - factory interface + * @export + */ +export const SSOApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SSOApiFp(configuration) + return { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): AxiosPromise { + return localVarFp.oauthSSOControllerGetHydraOauthToken(oauthClientId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): AxiosPromise { + return localVarFp.oauthSSOControllerRequestAuthToken(oauthClientId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SSOApi - interface + * @export + * @interface SSOApi + */ +export interface SSOApiInterface { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SSOApiInterface + */ + oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SSOApiInterface + */ + oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): AxiosPromise; + +} + +/** + * SSOApi - object-oriented interface + * @export + * @class SSOApi + * @extends {BaseAPI} + */ +export class SSOApi extends BaseAPI implements SSOApiInterface { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SSOApi + */ + public oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any) { + return SSOApiFp(this.configuration).oauthSSOControllerGetHydraOauthToken(oauthClientId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SSOApi + */ + public oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any) { + return SSOApiFp(this.configuration).oauthSSOControllerRequestAuthToken(oauthClientId, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * SchoolApi - axios parameter creator + * @export + */ +export const SchoolApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerDoesSchoolExist: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerDoesSchoolExist', 'schoolId', schoolId) + const localVarPath = `/school/exists/id/{schoolId}` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetProvisioningOptions: async (schoolId: string, systemId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerGetProvisioningOptions', 'schoolId', schoolId) + // verify required parameter 'systemId' is not null or undefined + assertParamExists('schoolControllerGetProvisioningOptions', 'systemId', systemId) + const localVarPath = `/schools/{schoolId}/systems/{systemId}/provisioning-options` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolById: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerGetSchoolById', 'schoolId', schoolId) + const localVarPath = `/school/id/{schoolId}` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolListForExternalInvite: async (federalStateId?: string, options: any = {}): Promise => { + const localVarPath = `/school/list-for-external-invite`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (federalStateId !== undefined) { + localVarQueryParameter['federalStateId'] = federalStateId; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolListForLadpLogin: async (options: any = {}): Promise => { + const localVarPath = `/school/list-for-ldap-login`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolSystems: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerGetSchoolSystems', 'schoolId', schoolId) + const localVarPath = `/school/{schoolId}/systems` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerRemoveSystemFromSchool: async (schoolId: string, systemId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerRemoveSystemFromSchool', 'schoolId', schoolId) + // verify required parameter 'systemId' is not null or undefined + assertParamExists('schoolControllerRemoveSystemFromSchool', 'systemId', systemId) + const localVarPath = `/school/{schoolId}/system/{systemId}/remove` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerSetProvisioningOptions: async (schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerSetProvisioningOptions', 'schoolId', schoolId) + // verify required parameter 'systemId' is not null or undefined + assertParamExists('schoolControllerSetProvisioningOptions', 'systemId', systemId) + // verify required parameter 'schulConneXProvisioningOptionsParams' is not null or undefined + assertParamExists('schoolControllerSetProvisioningOptions', 'schulConneXProvisioningOptionsParams', schulConneXProvisioningOptionsParams) + const localVarPath = `/schools/{schoolId}/systems/{systemId}/provisioning-options` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(schulConneXProvisioningOptionsParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerUpdateSchool: async (schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerUpdateSchool', 'schoolId', schoolId) + // verify required parameter 'schoolUpdateBodyParams' is not null or undefined + assertParamExists('schoolControllerUpdateSchool', 'schoolUpdateBodyParams', schoolUpdateBodyParams) + const localVarPath = `/school/{schoolId}` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(schoolUpdateBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SchoolApi - functional programming interface + * @export + */ +export const SchoolApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SchoolApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerDoesSchoolExist(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerDoesSchoolExist(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetProvisioningOptions(schoolId, systemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetSchoolById(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolById(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolListForExternalInvite(federalStateId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetSchoolListForLadpLogin(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolListForLadpLogin(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetSchoolSystems(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolSystems(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerRemoveSystemFromSchool(schoolId, systemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * SchoolApi - factory interface + * @export + */ +export const SchoolApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SchoolApiFp(configuration) + return { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerDoesSchoolExist(schoolId: string, options?: any): AxiosPromise { + return localVarFp.schoolControllerDoesSchoolExist(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): AxiosPromise { + return localVarFp.schoolControllerGetProvisioningOptions(schoolId, systemId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolById(schoolId: string, options?: any): AxiosPromise { + return localVarFp.schoolControllerGetSchoolById(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): AxiosPromise> { + return localVarFp.schoolControllerGetSchoolListForExternalInvite(federalStateId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolListForLadpLogin(options?: any): AxiosPromise> { + return localVarFp.schoolControllerGetSchoolListForLadpLogin(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolSystems(schoolId: string, options?: any): AxiosPromise> { + return localVarFp.schoolControllerGetSchoolSystems(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): AxiosPromise { + return localVarFp.schoolControllerRemoveSystemFromSchool(schoolId, systemId, options).then((request) => request(axios, basePath)); + }, + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): AxiosPromise { + return localVarFp.schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): AxiosPromise { + return localVarFp.schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SchoolApi - interface + * @export + * @interface SchoolApi + */ +export interface SchoolApiInterface { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerDoesSchoolExist(schoolId: string, options?: any): AxiosPromise; + + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetSchoolById(schoolId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): AxiosPromise>; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetSchoolListForLadpLogin(options?: any): AxiosPromise>; + + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetSchoolSystems(schoolId: string, options?: any): AxiosPromise>; + + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): AxiosPromise; + + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): AxiosPromise; + + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): AxiosPromise; + +} + +/** + * SchoolApi - object-oriented interface + * @export + * @class SchoolApi + * @extends {BaseAPI} + */ +export class SchoolApi extends BaseAPI implements SchoolApiInterface { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerDoesSchoolExist(schoolId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerDoesSchoolExist(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetProvisioningOptions(schoolId, systemId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetSchoolById(schoolId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetSchoolById(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetSchoolListForExternalInvite(federalStateId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetSchoolListForLadpLogin(options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetSchoolListForLadpLogin(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetSchoolSystems(schoolId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetSchoolSystems(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerRemoveSystemFromSchool(schoolId, systemId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * ShareTokenApi - axios parameter creator + * @export + */ +export const ShareTokenApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerCreateShareToken: async (shareTokenBodyParams: ShareTokenBodyParams, options: any = {}): Promise => { + // verify required parameter 'shareTokenBodyParams' is not null or undefined + assertParamExists('shareTokenControllerCreateShareToken', 'shareTokenBodyParams', shareTokenBodyParams) + const localVarPath = `/sharetoken`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(shareTokenBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerImportShareToken: async (token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options: any = {}): Promise => { + // verify required parameter 'token' is not null or undefined + assertParamExists('shareTokenControllerImportShareToken', 'token', token) + // verify required parameter 'shareTokenImportBodyParams' is not null or undefined + assertParamExists('shareTokenControllerImportShareToken', 'shareTokenImportBodyParams', shareTokenImportBodyParams) + const localVarPath = `/sharetoken/{token}/import` + .replace(`{${"token"}}`, encodeURIComponent(String(token))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(shareTokenImportBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerLookupShareToken: async (token: string, options: any = {}): Promise => { + // verify required parameter 'token' is not null or undefined + assertParamExists('shareTokenControllerLookupShareToken', 'token', token) + const localVarPath = `/sharetoken/{token}` + .replace(`{${"token"}}`, encodeURIComponent(String(token))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * ShareTokenApi - functional programming interface + * @export + */ +export const ShareTokenApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = ShareTokenApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerCreateShareToken(shareTokenBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async shareTokenControllerLookupShareToken(token: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerLookupShareToken(token, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * ShareTokenApi - factory interface + * @export + */ +export const ShareTokenApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = ShareTokenApiFp(configuration) + return { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): AxiosPromise { + return localVarFp.shareTokenControllerCreateShareToken(shareTokenBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): AxiosPromise { + return localVarFp.shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerLookupShareToken(token: string, options?: any): AxiosPromise { + return localVarFp.shareTokenControllerLookupShareToken(token, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * ShareTokenApi - interface + * @export + * @interface ShareTokenApi + */ +export interface ShareTokenApiInterface { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApiInterface + */ + shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApiInterface + */ + shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApiInterface + */ + shareTokenControllerLookupShareToken(token: string, options?: any): AxiosPromise; + +} + +/** + * ShareTokenApi - object-oriented interface + * @export + * @class ShareTokenApi + * @extends {BaseAPI} + */ +export class ShareTokenApi extends BaseAPI implements ShareTokenApiInterface { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApi + */ + public shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any) { + return ShareTokenApiFp(this.configuration).shareTokenControllerCreateShareToken(shareTokenBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApi + */ + public shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any) { + return ShareTokenApiFp(this.configuration).shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApi + */ + public shareTokenControllerLookupShareToken(token: string, options?: any) { + return ShareTokenApiFp(this.configuration).shareTokenControllerLookupShareToken(token, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * SubmissionApi - axios parameter creator + * @export + */ +export const SubmissionApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + submissionControllerDelete: async (submissionId: string, options: any = {}): Promise => { + // verify required parameter 'submissionId' is not null or undefined + assertParamExists('submissionControllerDelete', 'submissionId', submissionId) + const localVarPath = `/submissions/{submissionId}` + .replace(`{${"submissionId"}}`, encodeURIComponent(String(submissionId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + submissionControllerFindStatusesByTask: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('submissionControllerFindStatusesByTask', 'taskId', taskId) + const localVarPath = `/submissions/status/task/{taskId}` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SubmissionApi - functional programming interface + * @export + */ +export const SubmissionApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SubmissionApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async submissionControllerDelete(submissionId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.submissionControllerDelete(submissionId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async submissionControllerFindStatusesByTask(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.submissionControllerFindStatusesByTask(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * SubmissionApi - factory interface + * @export + */ +export const SubmissionApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SubmissionApiFp(configuration) + return { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + submissionControllerDelete(submissionId: string, options?: any): AxiosPromise { + return localVarFp.submissionControllerDelete(submissionId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + submissionControllerFindStatusesByTask(taskId: string, options?: any): AxiosPromise { + return localVarFp.submissionControllerFindStatusesByTask(taskId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SubmissionApi - interface + * @export + * @interface SubmissionApi + */ +export interface SubmissionApiInterface { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SubmissionApiInterface + */ + submissionControllerDelete(submissionId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SubmissionApiInterface + */ + submissionControllerFindStatusesByTask(taskId: string, options?: any): AxiosPromise; + +} + +/** + * SubmissionApi - object-oriented interface + * @export + * @class SubmissionApi + * @extends {BaseAPI} + */ +export class SubmissionApi extends BaseAPI implements SubmissionApiInterface { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SubmissionApi + */ + public submissionControllerDelete(submissionId: string, options?: any) { + return SubmissionApiFp(this.configuration).submissionControllerDelete(submissionId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SubmissionApi + */ + public submissionControllerFindStatusesByTask(taskId: string, options?: any) { + return SubmissionApiFp(this.configuration).submissionControllerFindStatusesByTask(taskId, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * SystemsApi - axios parameter creator + * @export + */ +export const SystemsApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerDeleteSystem: async (systemId: string, options: any = {}): Promise => { + // verify required parameter 'systemId' is not null or undefined + assertParamExists('systemControllerDeleteSystem', 'systemId', systemId) + const localVarPath = `/systems/{systemId}` + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerFind: async (types?: SystemType, options: any = {}): Promise => { + const localVarPath = `/systems/public`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + if (types !== undefined) { + localVarQueryParameter['types'] = types; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerGetSystem: async (systemId: string, options: any = {}): Promise => { + // verify required parameter 'systemId' is not null or undefined + assertParamExists('systemControllerGetSystem', 'systemId', systemId) + const localVarPath = `/systems/public/{systemId}` + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SystemsApi - functional programming interface + * @export + */ +export const SystemsApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SystemsApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async systemControllerDeleteSystem(systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerDeleteSystem(systemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async systemControllerFind(types?: SystemType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerFind(types, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async systemControllerGetSystem(systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerGetSystem(systemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * SystemsApi - factory interface + * @export + */ +export const SystemsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SystemsApiFp(configuration) + return { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerDeleteSystem(systemId: string, options?: any): AxiosPromise { + return localVarFp.systemControllerDeleteSystem(systemId, options).then((request) => request(axios, basePath)); + }, + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerFind(types?: SystemType, options?: any): AxiosPromise { + return localVarFp.systemControllerFind(types, options).then((request) => request(axios, basePath)); + }, + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerGetSystem(systemId: string, options?: any): AxiosPromise { + return localVarFp.systemControllerGetSystem(systemId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SystemsApi - interface + * @export + * @interface SystemsApi + */ +export interface SystemsApiInterface { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApiInterface + */ + systemControllerDeleteSystem(systemId: string, options?: any): AxiosPromise; + + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApiInterface + */ + systemControllerFind(types?: SystemType, options?: any): AxiosPromise; + + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApiInterface + */ + systemControllerGetSystem(systemId: string, options?: any): AxiosPromise; + +} + +/** + * SystemsApi - object-oriented interface + * @export + * @class SystemsApi + * @extends {BaseAPI} + */ +export class SystemsApi extends BaseAPI implements SystemsApiInterface { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApi + */ + public systemControllerDeleteSystem(systemId: string, options?: any) { + return SystemsApiFp(this.configuration).systemControllerDeleteSystem(systemId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApi + */ + public systemControllerFind(types?: SystemType, options?: any) { + return SystemsApiFp(this.configuration).systemControllerFind(types, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApi + */ + public systemControllerGetSystem(systemId: string, options?: any) { + return SystemsApiFp(this.configuration).systemControllerGetSystem(systemId, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * TaskApi - axios parameter creator + * @export + */ +export const TaskApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerCopyTask: async (taskId: string, taskCopyApiParams: TaskCopyApiParams, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerCopyTask', 'taskId', taskId) + // verify required parameter 'taskCopyApiParams' is not null or undefined + assertParamExists('taskControllerCopyTask', 'taskCopyApiParams', taskCopyApiParams) + const localVarPath = `/tasks/{taskId}/copy` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(taskCopyApiParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerDelete: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerDelete', 'taskId', taskId) + const localVarPath = `/tasks/{taskId}` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFindAll: async (skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/tasks`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFindAllFinished: async (skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/tasks/finished`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFinish: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerFinish', 'taskId', taskId) + const localVarPath = `/tasks/{taskId}/finish` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerRestore: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerRestore', 'taskId', taskId) + const localVarPath = `/tasks/{taskId}/restore` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerRevertPublished: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerRevertPublished', 'taskId', taskId) + const localVarPath = `/tasks/{taskId}/revertPublished` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * TaskApi - functional programming interface + * @export + */ +export const TaskApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = TaskApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerCopyTask(taskId, taskCopyApiParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerDelete(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerDelete(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerFindAll(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFindAll(skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFindAllFinished(skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerFinish(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFinish(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerRestore(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerRestore(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerRevertPublished(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerRevertPublished(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * TaskApi - factory interface + * @export + */ +export const TaskApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = TaskApiFp(configuration) + return { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): AxiosPromise { + return localVarFp.taskControllerCopyTask(taskId, taskCopyApiParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerDelete(taskId: string, options?: any): AxiosPromise { + return localVarFp.taskControllerDelete(taskId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFindAll(skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.taskControllerFindAll(skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.taskControllerFindAllFinished(skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFinish(taskId: string, options?: any): AxiosPromise { + return localVarFp.taskControllerFinish(taskId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerRestore(taskId: string, options?: any): AxiosPromise { + return localVarFp.taskControllerRestore(taskId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerRevertPublished(taskId: string, options?: any): AxiosPromise { + return localVarFp.taskControllerRevertPublished(taskId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * TaskApi - interface + * @export + * @interface TaskApi + */ +export interface TaskApiInterface { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerDelete(taskId: string, options?: any): AxiosPromise; + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerFindAll(skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerFinish(taskId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerRestore(taskId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerRevertPublished(taskId: string, options?: any): AxiosPromise; + +} + +/** + * TaskApi - object-oriented interface + * @export + * @class TaskApi + * @extends {BaseAPI} + */ +export class TaskApi extends BaseAPI implements TaskApiInterface { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any) { + return TaskApiFp(this.configuration).taskControllerCopyTask(taskId, taskCopyApiParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerDelete(taskId: string, options?: any) { + return TaskApiFp(this.configuration).taskControllerDelete(taskId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerFindAll(skip?: number, limit?: number, options?: any) { + return TaskApiFp(this.configuration).taskControllerFindAll(skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerFindAllFinished(skip?: number, limit?: number, options?: any) { + return TaskApiFp(this.configuration).taskControllerFindAllFinished(skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerFinish(taskId: string, options?: any) { + return TaskApiFp(this.configuration).taskControllerFinish(taskId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerRestore(taskId: string, options?: any) { + return TaskApiFp(this.configuration).taskControllerRestore(taskId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerRevertPublished(taskId: string, options?: any) { + return TaskApiFp(this.configuration).taskControllerRevertPublished(taskId, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * ToolApi - axios parameter creator + * @export + */ +export const ToolApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetAvailableToolsForContext: async (contextType: any, contextId: string, options: any = {}): Promise => { + // verify required parameter 'contextType' is not null or undefined + assertParamExists('toolConfigurationControllerGetAvailableToolsForContext', 'contextType', contextType) + // verify required parameter 'contextId' is not null or undefined + assertParamExists('toolConfigurationControllerGetAvailableToolsForContext', 'contextId', contextId) + const localVarPath = `/tools/{contextType}/{contextId}/available-tools` + .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))) + .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetAvailableToolsForSchool: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('toolConfigurationControllerGetAvailableToolsForSchool', 'schoolId', schoolId) + const localVarPath = `/tools/school/{schoolId}/available-tools` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetConfigurationTemplateForContext: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolConfigurationControllerGetConfigurationTemplateForContext', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/context-external-tools/{contextExternalToolId}/configuration-template` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetConfigurationTemplateForSchool: async (schoolExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolConfigurationControllerGetConfigurationTemplateForSchool', 'schoolExternalToolId', schoolExternalToolId) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}/configuration-template` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetToolContextTypes: async (options: any = {}): Promise => { + const localVarPath = `/tools/context-types`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerCreateContextExternalTool: async (contextExternalToolPostParams: ContextExternalToolPostParams, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolPostParams' is not null or undefined + assertParamExists('toolContextControllerCreateContextExternalTool', 'contextExternalToolPostParams', contextExternalToolPostParams) + const localVarPath = `/tools/context-external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolPostParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerDeleteContextExternalTool: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolContextControllerDeleteContextExternalTool', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerGetContextExternalTool: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolContextControllerGetContextExternalTool', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerGetContextExternalToolsForContext: async (contextId: string, contextType: ToolContextType, options: any = {}): Promise => { + // verify required parameter 'contextId' is not null or undefined + assertParamExists('toolContextControllerGetContextExternalToolsForContext', 'contextId', contextId) + // verify required parameter 'contextType' is not null or undefined + assertParamExists('toolContextControllerGetContextExternalToolsForContext', 'contextType', contextType) + const localVarPath = `/tools/context-external-tools/{contextType}/{contextId}` + .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))) + .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerUpdateContextExternalTool: async (contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolContextControllerUpdateContextExternalTool', 'contextExternalToolId', contextExternalToolId) + // verify required parameter 'contextExternalToolPostParams' is not null or undefined + assertParamExists('toolContextControllerUpdateContextExternalTool', 'contextExternalToolPostParams', contextExternalToolPostParams) + const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolPostParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerCreateExternalTool: async (externalToolCreateParams: ExternalToolCreateParams, options: any = {}): Promise => { + // verify required parameter 'externalToolCreateParams' is not null or undefined + assertParamExists('toolControllerCreateExternalTool', 'externalToolCreateParams', externalToolCreateParams) + const localVarPath = `/tools/external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(externalToolCreateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerDeleteExternalTool: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerDeleteExternalTool', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerFindExternalTool: async (name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options: any = {}): Promise => { + const localVarPath = `/tools/external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (name !== undefined) { + localVarQueryParameter['name'] = name; + } + + if (clientId !== undefined) { + localVarQueryParameter['clientId'] = clientId; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (sortOrder !== undefined) { + localVarQueryParameter['sortOrder'] = sortOrder; + } + + if (sortBy !== undefined) { + localVarQueryParameter['sortBy'] = sortBy; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetDatasheet: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerGetDatasheet', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}/datasheet` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetExternalTool: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerGetExternalTool', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetExternalToolLogo: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerGetExternalToolLogo', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}/logo` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetMetaDataForExternalTool: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerGetMetaDataForExternalTool', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}/metadata` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerImportExternalTools: async (externalToolBulkCreateParams: ExternalToolBulkCreateParams, options: any = {}): Promise => { + // verify required parameter 'externalToolBulkCreateParams' is not null or undefined + assertParamExists('toolControllerImportExternalTools', 'externalToolBulkCreateParams', externalToolBulkCreateParams) + const localVarPath = `/tools/external-tools/import`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(externalToolBulkCreateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerUpdateExternalTool: async (externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerUpdateExternalTool', 'externalToolId', externalToolId) + // verify required parameter 'externalToolUpdateParams' is not null or undefined + assertParamExists('toolControllerUpdateExternalTool', 'externalToolUpdateParams', externalToolUpdateParams) + const localVarPath = `/tools/external-tools/{externalToolId}` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(externalToolUpdateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolLaunchControllerGetContextExternalToolLaunchRequest: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolLaunchControllerGetContextExternalToolLaunchRequest', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/context/{contextExternalToolId}/launch` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolLaunchControllerGetSchoolExternalToolLaunchRequest: async (schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolLaunchControllerGetSchoolExternalToolLaunchRequest', 'schoolExternalToolId', schoolExternalToolId) + // verify required parameter 'contextExternalToolBodyParams' is not null or undefined + assertParamExists('toolLaunchControllerGetSchoolExternalToolLaunchRequest', 'contextExternalToolBodyParams', contextExternalToolBodyParams) + const localVarPath = `/tools/school/{schoolExternalToolId}/launch` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolReferenceControllerGetToolReference: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolReferenceControllerGetToolReference', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/tool-references/context-external-tools/{contextExternalToolId}` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolReferenceControllerGetToolReferencesForContext: async (contextId: string, contextType: ToolContextType, options: any = {}): Promise => { + // verify required parameter 'contextId' is not null or undefined + assertParamExists('toolReferenceControllerGetToolReferencesForContext', 'contextId', contextId) + // verify required parameter 'contextType' is not null or undefined + assertParamExists('toolReferenceControllerGetToolReferencesForContext', 'contextType', contextType) + const localVarPath = `/tools/tool-references/{contextType}/{contextId}` + .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))) + .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerCreateSchoolExternalTool: async (schoolExternalToolPostParams: SchoolExternalToolPostParams, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolPostParams' is not null or undefined + assertParamExists('toolSchoolControllerCreateSchoolExternalTool', 'schoolExternalToolPostParams', schoolExternalToolPostParams) + const localVarPath = `/tools/school-external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(schoolExternalToolPostParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerDeleteSchoolExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolSchoolControllerDeleteSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetMetaDataForExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolSchoolControllerGetMetaDataForExternalTool', 'schoolExternalToolId', schoolExternalToolId) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}/metadata` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetSchoolExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolSchoolControllerGetSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetSchoolExternalTools: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('toolSchoolControllerGetSchoolExternalTools', 'schoolId', schoolId) + const localVarPath = `/tools/school-external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (schoolId !== undefined) { + localVarQueryParameter['schoolId'] = schoolId; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerUpdateSchoolExternalTool: async (schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolSchoolControllerUpdateSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) + // verify required parameter 'schoolExternalToolPostParams' is not null or undefined + assertParamExists('toolSchoolControllerUpdateSchoolExternalTool', 'schoolExternalToolPostParams', schoolExternalToolPostParams) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(schoolExternalToolPostParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * ToolApi - functional programming interface + * @export + */ +export const ToolApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = ToolApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetToolContextTypes(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetToolContextTypes(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerDeleteContextExternalTool(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerGetContextExternalTool(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerCreateExternalTool(externalToolCreateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerDeleteExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerDeleteExternalTool(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerGetDatasheet(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetDatasheet(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerGetExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetExternalTool(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerGetExternalToolLogo(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetExternalToolLogo(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetMetaDataForExternalTool(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerImportExternalTools(externalToolBulkCreateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolReferenceControllerGetToolReference(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetSchoolExternalTools(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * ToolApi - factory interface + * @export + */ +export const ToolApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = ToolApiFp(configuration) + return { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetToolContextTypes(options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetToolContextTypes(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise { + return localVarFp.toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolContextControllerDeleteContextExternalTool(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolContextControllerGetContextExternalTool(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise { + return localVarFp.toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise { + return localVarFp.toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): AxiosPromise { + return localVarFp.toolControllerCreateExternalTool(externalToolCreateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerDeleteExternalTool(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerDeleteExternalTool(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): AxiosPromise { + return localVarFp.toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetDatasheet(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerGetDatasheet(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetExternalTool(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerGetExternalTool(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetExternalToolLogo(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerGetExternalToolLogo(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerGetMetaDataForExternalTool(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): AxiosPromise { + return localVarFp.toolControllerImportExternalTools(externalToolBulkCreateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): AxiosPromise { + return localVarFp.toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): AxiosPromise { + return localVarFp.toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolReferenceControllerGetToolReference(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise { + return localVarFp.toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerGetSchoolExternalTools(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * ToolApi - interface + * @export + * @interface ToolApi + */ +export interface ToolApiInterface { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): AxiosPromise; + + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetToolContextTypes(options?: any): AxiosPromise; + + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise; + + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise; + + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise; + + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): AxiosPromise; + + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerDeleteExternalTool(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): AxiosPromise; + + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerGetDatasheet(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerGetExternalTool(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerGetExternalToolLogo(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): AxiosPromise; + + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): AxiosPromise; + + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise; + + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise; + + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise; + +} + +/** + * ToolApi - object-oriented interface + * @export + * @class ToolApi + * @extends {BaseAPI} + */ +export class ToolApi extends BaseAPI implements ToolApiInterface { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetToolContextTypes(options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetToolContextTypes(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerDeleteContextExternalTool(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerGetContextExternalTool(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any) { + return ToolApiFp(this.configuration).toolControllerCreateExternalTool(externalToolCreateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerDeleteExternalTool(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerDeleteExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any) { + return ToolApiFp(this.configuration).toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerGetDatasheet(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerGetDatasheet(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerGetExternalTool(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerGetExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerGetExternalToolLogo(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerGetExternalToolLogo(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerGetMetaDataForExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any) { + return ToolApiFp(this.configuration).toolControllerImportExternalTools(externalToolBulkCreateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any) { + return ToolApiFp(this.configuration).toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any) { + return ToolApiFp(this.configuration).toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolReferenceControllerGetToolReference(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any) { + return ToolApiFp(this.configuration).toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerGetSchoolExternalTools(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * UserApi - axios parameter creator + * @export + */ +export const UserApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userControllerChangeLanguage: async (changeLanguageParams: ChangeLanguageParams, options: any = {}): Promise => { + // verify required parameter 'changeLanguageParams' is not null or undefined + assertParamExists('userControllerChangeLanguage', 'changeLanguageParams', changeLanguageParams) + const localVarPath = `/user/language`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(changeLanguageParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userControllerMe: async (options: any = {}): Promise => { + const localVarPath = `/user/me`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * UserApi - functional programming interface + * @export + */ +export const UserApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = UserApiAxiosParamCreator(configuration) + return { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userControllerChangeLanguage(changeLanguageParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userControllerMe(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userControllerMe(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * UserApi - factory interface + * @export + */ +export const UserApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = UserApiFp(configuration) + return { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): AxiosPromise { + return localVarFp.userControllerChangeLanguage(changeLanguageParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userControllerMe(options?: any): AxiosPromise { + return localVarFp.userControllerMe(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * UserApi - interface + * @export + * @interface UserApi + */ +export interface UserApiInterface { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserApiInterface + */ + userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserApiInterface + */ + userControllerMe(options?: any): AxiosPromise; + +} + +/** + * UserApi - object-oriented interface + * @export + * @class UserApi + * @extends {BaseAPI} + */ +export class UserApi extends BaseAPI implements UserApiInterface { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserApi + */ + public userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any) { + return UserApiFp(this.configuration).userControllerChangeLanguage(changeLanguageParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserApi + */ + public userControllerMe(options?: any) { + return UserApiFp(this.configuration).userControllerMe(options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * UserImportApi - axios parameter creator + * @export + */ +export const UserImportApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerCancelMigration: async (options: any = {}): Promise => { + const localVarPath = `/user/import/cancel`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerEndSchoolInMaintenance: async (options: any = {}): Promise => { + const localVarPath = `/user/import/startSync`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerFindAllImportUsers: async (firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/user/import`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (firstName !== undefined) { + localVarQueryParameter['firstName'] = firstName; + } + + if (lastName !== undefined) { + localVarQueryParameter['lastName'] = lastName; + } + + if (loginName !== undefined) { + localVarQueryParameter['loginName'] = loginName; + } + + if (match) { + localVarQueryParameter['match'] = match; + } + + if (flagged !== undefined) { + localVarQueryParameter['flagged'] = flagged; + } + + if (classes !== undefined) { + localVarQueryParameter['classes'] = classes; + } + + if (role !== undefined) { + localVarQueryParameter['role'] = role; + } + + if (sortOrder !== undefined) { + localVarQueryParameter['sortOrder'] = sortOrder; + } + + if (sortBy !== undefined) { + localVarQueryParameter['sortBy'] = sortBy; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerFindAllUnmatchedUsers: async (name?: string, skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/user/import/unassigned`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (name !== undefined) { + localVarQueryParameter['name'] = name; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerPopulateImportUsers: async (options: any = {}): Promise => { + const localVarPath = `/user/import/populate-import-users`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerRemoveMatch: async (importUserId: string, options: any = {}): Promise => { + // verify required parameter 'importUserId' is not null or undefined + assertParamExists('importUserControllerRemoveMatch', 'importUserId', importUserId) + const localVarPath = `/user/import/{importUserId}/match` + .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerSaveAllUsersMatches: async (options: any = {}): Promise => { + const localVarPath = `/user/import/migrate`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerSetMatch: async (importUserId: string, updateMatchParams: UpdateMatchParams, options: any = {}): Promise => { + // verify required parameter 'importUserId' is not null or undefined + assertParamExists('importUserControllerSetMatch', 'importUserId', importUserId) + // verify required parameter 'updateMatchParams' is not null or undefined + assertParamExists('importUserControllerSetMatch', 'updateMatchParams', updateMatchParams) + const localVarPath = `/user/import/{importUserId}/match` + .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateMatchParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerStartSchoolInUserMigration: async (useCentralLdap: boolean, options: any = {}): Promise => { + // verify required parameter 'useCentralLdap' is not null or undefined + assertParamExists('importUserControllerStartSchoolInUserMigration', 'useCentralLdap', useCentralLdap) + const localVarPath = `/user/import/startUserMigration`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (useCentralLdap !== undefined) { + localVarQueryParameter['useCentralLdap'] = useCentralLdap; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerUpdateFlag: async (importUserId: string, updateFlagParams: UpdateFlagParams, options: any = {}): Promise => { + // verify required parameter 'importUserId' is not null or undefined + assertParamExists('importUserControllerUpdateFlag', 'importUserId', importUserId) + // verify required parameter 'updateFlagParams' is not null or undefined + assertParamExists('importUserControllerUpdateFlag', 'updateFlagParams', updateFlagParams) + const localVarPath = `/user/import/{importUserId}/flag` + .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateFlagParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * UserImportApi - functional programming interface + * @export + */ +export const UserImportApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = UserImportApiAxiosParamCreator(configuration) + return { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerCancelMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerCancelMigration(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerEndSchoolInMaintenance(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerEndSchoolInMaintenance(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerFindAllUnmatchedUsers(name, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerPopulateImportUsers(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerPopulateImportUsers(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerRemoveMatch(importUserId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerRemoveMatch(importUserId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerSaveAllUsersMatches(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerSaveAllUsersMatches(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerSetMatch(importUserId, updateMatchParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerStartSchoolInUserMigration(useCentralLdap, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerUpdateFlag(importUserId, updateFlagParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * UserImportApi - factory interface + * @export + */ +export const UserImportApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = UserImportApiFp(configuration) + return { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerCancelMigration(options?: any): AxiosPromise { + return localVarFp.importUserControllerCancelMigration(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerEndSchoolInMaintenance(options?: any): AxiosPromise { + return localVarFp.importUserControllerEndSchoolInMaintenance(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.importUserControllerFindAllUnmatchedUsers(name, skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerPopulateImportUsers(options?: any): AxiosPromise { + return localVarFp.importUserControllerPopulateImportUsers(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerRemoveMatch(importUserId: string, options?: any): AxiosPromise { + return localVarFp.importUserControllerRemoveMatch(importUserId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerSaveAllUsersMatches(options?: any): AxiosPromise { + return localVarFp.importUserControllerSaveAllUsersMatches(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): AxiosPromise { + return localVarFp.importUserControllerSetMatch(importUserId, updateMatchParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): AxiosPromise { + return localVarFp.importUserControllerStartSchoolInUserMigration(useCentralLdap, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): AxiosPromise { + return localVarFp.importUserControllerUpdateFlag(importUserId, updateFlagParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * UserImportApi - interface + * @export + * @interface UserImportApi + */ +export interface UserImportApiInterface { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerCancelMigration(options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerEndSchoolInMaintenance(options?: any): AxiosPromise; + + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerPopulateImportUsers(options?: any): AxiosPromise; + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerRemoveMatch(importUserId: string, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerSaveAllUsersMatches(options?: any): AxiosPromise; + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): AxiosPromise; + + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): AxiosPromise; + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): AxiosPromise; + +} + +/** + * UserImportApi - object-oriented interface + * @export + * @class UserImportApi + * @extends {BaseAPI} + */ +export class UserImportApi extends BaseAPI implements UserImportApiInterface { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerCancelMigration(options?: any) { + return UserImportApiFp(this.configuration).importUserControllerCancelMigration(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerEndSchoolInMaintenance(options?: any) { + return UserImportApiFp(this.configuration).importUserControllerEndSchoolInMaintenance(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerFindAllUnmatchedUsers(name, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerPopulateImportUsers(options?: any) { + return UserImportApiFp(this.configuration).importUserControllerPopulateImportUsers(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerRemoveMatch(importUserId: string, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerRemoveMatch(importUserId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerSaveAllUsersMatches(options?: any) { + return UserImportApiFp(this.configuration).importUserControllerSaveAllUsersMatches(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerSetMatch(importUserId, updateMatchParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerStartSchoolInUserMigration(useCentralLdap, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerUpdateFlag(importUserId, updateFlagParams, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * UserLoginMigrationApi - axios parameter creator + * @export + */ +export const UserLoginMigrationApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerCloseMigration: async (options: any = {}): Promise => { + const localVarPath = `/user-login-migrations/close`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerFindUserLoginMigrationBySchool: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('userLoginMigrationControllerFindUserLoginMigrationBySchool', 'schoolId', schoolId) + const localVarPath = `/user-login-migrations/schools/{schoolId}` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerForceMigration: async (forceMigrationParams: ForceMigrationParams, options: any = {}): Promise => { + // verify required parameter 'forceMigrationParams' is not null or undefined + assertParamExists('userLoginMigrationControllerForceMigration', 'forceMigrationParams', forceMigrationParams) + const localVarPath = `/user-login-migrations/force-migration`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(forceMigrationParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerGetMigrations: async (userId?: string, options: any = {}): Promise => { + const localVarPath = `/user-login-migrations`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (userId !== undefined) { + localVarQueryParameter['userId'] = userId; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerMigrateUserLogin: async (oauth2MigrationParams: Oauth2MigrationParams, options: any = {}): Promise => { + // verify required parameter 'oauth2MigrationParams' is not null or undefined + assertParamExists('userLoginMigrationControllerMigrateUserLogin', 'oauth2MigrationParams', oauth2MigrationParams) + const localVarPath = `/user-login-migrations/migrate-to-oauth2`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(oauth2MigrationParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerRestartMigration: async (options: any = {}): Promise => { + const localVarPath = `/user-login-migrations/restart`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerSetMigrationMandatory: async (userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options: any = {}): Promise => { + // verify required parameter 'userLoginMigrationMandatoryParams' is not null or undefined + assertParamExists('userLoginMigrationControllerSetMigrationMandatory', 'userLoginMigrationMandatoryParams', userLoginMigrationMandatoryParams) + const localVarPath = `/user-login-migrations/mandatory`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(userLoginMigrationMandatoryParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerStartMigration: async (options: any = {}): Promise => { + const localVarPath = `/user-login-migrations/start`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * UserLoginMigrationApi - functional programming interface + * @export + */ +export const UserLoginMigrationApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = UserLoginMigrationApiAxiosParamCreator(configuration) + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerCloseMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerCloseMigration(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerForceMigration(forceMigrationParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerGetMigrations(userId?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerGetMigrations(userId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerRestartMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerRestartMigration(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerStartMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerStartMigration(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * UserLoginMigrationApi - factory interface + * @export + */ +export const UserLoginMigrationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = UserLoginMigrationApiFp(configuration) + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerCloseMigration(options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerCloseMigration(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerForceMigration(forceMigrationParams, options).then((request) => request(axios, basePath)); + }, + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerGetMigrations(userId?: string, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerGetMigrations(userId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerRestartMigration(options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerRestartMigration(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerStartMigration(options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerStartMigration(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * UserLoginMigrationApi - interface + * @export + * @interface UserLoginMigrationApi + */ +export interface UserLoginMigrationApiInterface { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerCloseMigration(options?: any): AxiosPromise; + + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): AxiosPromise; + + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerGetMigrations(userId?: string, options?: any): AxiosPromise; + + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerRestartMigration(options?: any): AxiosPromise; + + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerStartMigration(options?: any): AxiosPromise; + +} + +/** + * UserLoginMigrationApi - object-oriented interface + * @export + * @class UserLoginMigrationApi + * @extends {BaseAPI} + */ +export class UserLoginMigrationApi extends BaseAPI implements UserLoginMigrationApiInterface { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerCloseMigration(options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerCloseMigration(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerForceMigration(forceMigrationParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerGetMigrations(userId?: string, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerGetMigrations(userId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerRestartMigration(options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerRestartMigration(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerStartMigration(options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerStartMigration(options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * UserLoginMigrationRollbackApi - axios parameter creator + * @export + */ +export const UserLoginMigrationRollbackApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationRollbackControllerMigrateUserLogin: async (userId: string, options: any = {}): Promise => { + // verify required parameter 'userId' is not null or undefined + assertParamExists('userLoginMigrationRollbackControllerMigrateUserLogin', 'userId', userId) + const localVarPath = `/user-login-migrations/users/{userId}/rollback-migration` + .replace(`{${"userId"}}`, encodeURIComponent(String(userId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * UserLoginMigrationRollbackApi - functional programming interface + * @export + */ +export const UserLoginMigrationRollbackApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = UserLoginMigrationRollbackApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationRollbackControllerMigrateUserLogin(userId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * UserLoginMigrationRollbackApi - factory interface + * @export + */ +export const UserLoginMigrationRollbackApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = UserLoginMigrationRollbackApiFp(configuration) + return { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationRollbackControllerMigrateUserLogin(userId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * UserLoginMigrationRollbackApi - interface + * @export + * @interface UserLoginMigrationRollbackApi + */ +export interface UserLoginMigrationRollbackApiInterface { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationRollbackApiInterface + */ + userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): AxiosPromise; + +} + +/** + * UserLoginMigrationRollbackApi - object-oriented interface + * @export + * @class UserLoginMigrationRollbackApi + * @extends {BaseAPI} + */ +export class UserLoginMigrationRollbackApi extends BaseAPI implements UserLoginMigrationRollbackApiInterface { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationRollbackApi + */ + public userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any) { + return UserLoginMigrationRollbackApiFp(this.configuration).userLoginMigrationRollbackControllerMigrateUserLogin(userId, options).then((request) => request(this.axios, this.basePath)); + } +} + + +/** + * VideoConferenceApi - axios parameter creator + * @export + */ +export const VideoConferenceApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerEnd: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceControllerEnd', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceControllerEnd', 'scopeId', scopeId) + const localVarPath = `/videoconference2/{scope}/{scopeId}/end` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerInfo: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceControllerInfo', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceControllerInfo', 'scopeId', scopeId) + const localVarPath = `/videoconference2/{scope}/{scopeId}/info` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerJoin: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceControllerJoin', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceControllerJoin', 'scopeId', scopeId) + const localVarPath = `/videoconference2/{scope}/{scopeId}/join` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerStart: async (scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceControllerStart', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceControllerStart', 'scopeId', scopeId) + // verify required parameter 'videoConferenceCreateParams' is not null or undefined + assertParamExists('videoConferenceControllerStart', 'videoConferenceCreateParams', videoConferenceCreateParams) + const localVarPath = `/videoconference2/{scope}/{scopeId}/start` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(videoConferenceCreateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerCreateAndJoin: async (scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'scopeId', scopeId) + // verify required parameter 'videoConferenceCreateParams' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'videoConferenceCreateParams', videoConferenceCreateParams) + const localVarPath = `/videoconference/{scope}/{scopeId}` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(videoConferenceCreateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerEnd: async (scope: string, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerEnd', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerEnd', 'scopeId', scopeId) + const localVarPath = `/videoconference/{scope}/{scopeId}` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerInfo: async (scope: string, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerInfo', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerInfo', 'scopeId', scopeId) + const localVarPath = `/videoconference/{scope}/{scopeId}` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * VideoConferenceApi - functional programming interface + * @export + */ +export const VideoConferenceApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = VideoConferenceApiAxiosParamCreator(configuration) + return { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerEnd(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerInfo(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerJoin(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerEnd(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerInfo(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * VideoConferenceApi - factory interface + * @export + */ +export const VideoConferenceApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = VideoConferenceApiFp(configuration) + return { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceControllerEnd(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceControllerInfo(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceControllerJoin(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise { + return localVarFp.videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise { + return localVarFp.videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceDeprecatedControllerEnd(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceDeprecatedControllerInfo(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * VideoConferenceApi - interface + * @export + * @interface VideoConferenceApi + */ +export interface VideoConferenceApiInterface { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; + + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; + + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; + + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise; + + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise; + + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): AxiosPromise; + +} + +/** + * VideoConferenceApi - object-oriented interface + * @export + * @class VideoConferenceApi + * @extends {BaseAPI} + */ +export class VideoConferenceApi extends BaseAPI implements VideoConferenceApiInterface { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceControllerEnd(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceControllerInfo(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceControllerJoin(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerEnd(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerInfo(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } +} + + diff --git a/src/serverApi/v3/base.ts b/src/serverApi/v3/base.ts new file mode 100644 index 0000000..5cf198d --- /dev/null +++ b/src/serverApi/v3/base.ts @@ -0,0 +1,71 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { Configuration } from "./configuration"; +// Some imports not used depending on template conditions +// @ts-ignore +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; + +export const BASE_PATH = "http://localhost:3030/api/v3".replace(/\/+$/, ""); + +/** + * + * @export + */ +export const COLLECTION_FORMATS = { + csv: ",", + ssv: " ", + tsv: "\t", + pipes: "|", +}; + +/** + * + * @export + * @interface RequestArgs + */ +export interface RequestArgs { + url: string; + options: any; +} + +/** + * + * @export + * @class BaseAPI + */ +export class BaseAPI { + protected configuration: Configuration | undefined; + + constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) { + if (configuration) { + this.configuration = configuration; + this.basePath = configuration.basePath || this.basePath; + } + } +}; + +/** + * + * @export + * @class RequiredError + * @extends {Error} + */ +export class RequiredError extends Error { + name: "RequiredError" = "RequiredError"; + constructor(public field: string, msg?: string) { + super(msg); + } +} diff --git a/src/serverApi/v3/common.ts b/src/serverApi/v3/common.ts new file mode 100644 index 0000000..927bdf8 --- /dev/null +++ b/src/serverApi/v3/common.ts @@ -0,0 +1,138 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { Configuration } from "./configuration"; +import { RequiredError, RequestArgs } from "./base"; +import { AxiosInstance } from 'axios'; + +/** + * + * @export + */ +export const DUMMY_BASE_URL = 'https://example.com' + +/** + * + * @throws {RequiredError} + * @export + */ +export const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) { + if (paramValue === null || paramValue === undefined) { + throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`); + } +} + +/** + * + * @export + */ +export const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) { + if (configuration && configuration.apiKey) { + const localVarApiKeyValue = typeof configuration.apiKey === 'function' + ? await configuration.apiKey(keyParamName) + : await configuration.apiKey; + object[keyParamName] = localVarApiKeyValue; + } +} + +/** + * + * @export + */ +export const setBasicAuthToObject = function (object: any, configuration?: Configuration) { + if (configuration && (configuration.username || configuration.password)) { + object["auth"] = { username: configuration.username, password: configuration.password }; + } +} + +/** + * + * @export + */ +export const setBearerAuthToObject = async function (object: any, configuration?: Configuration) { + if (configuration && configuration.accessToken) { + const accessToken = typeof configuration.accessToken === 'function' + ? await configuration.accessToken() + : await configuration.accessToken; + object["Authorization"] = "Bearer " + accessToken; + } +} + +/** + * + * @export + */ +export const setOAuthToObject = async function (object: any, name: string, scopes: string[], configuration?: Configuration) { + if (configuration && configuration.accessToken) { + const localVarAccessTokenValue = typeof configuration.accessToken === 'function' + ? await configuration.accessToken(name, scopes) + : await configuration.accessToken; + object["Authorization"] = "Bearer " + localVarAccessTokenValue; + } +} + +/** + * + * @export + */ +export const setSearchParams = function (url: URL, ...objects: any[]) { + const searchParams = new URLSearchParams(url.search); + for (const object of objects) { + for (const key in object) { + if (Array.isArray(object[key])) { + searchParams.delete(key); + for (const item of object[key]) { + searchParams.append(key, item); + } + } else { + searchParams.set(key, object[key]); + } + } + } + url.search = searchParams.toString(); +} + +/** + * + * @export + */ +export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) { + const nonString = typeof value !== 'string'; + const needsSerialization = nonString && configuration && configuration.isJsonMime + ? configuration.isJsonMime(requestOptions.headers['Content-Type']) + : nonString; + return needsSerialization + ? JSON.stringify(value !== undefined ? value : {}) + : (value || ""); +} + +/** + * + * @export + */ +export const toPathString = function (url: URL) { + return url.pathname + url.search + url.hash +} + +/** + * + * @export + */ +export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) { + return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { + const axiosRequestArgs = {...axiosArgs.options, url: (configuration?.basePath || basePath) + axiosArgs.url}; + return axios.request(axiosRequestArgs); + }; +} diff --git a/src/serverApi/v3/configuration.ts b/src/serverApi/v3/configuration.ts new file mode 100644 index 0000000..ce202f2 --- /dev/null +++ b/src/serverApi/v3/configuration.ts @@ -0,0 +1,101 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export interface ConfigurationParameters { + apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); + username?: string; + password?: string; + accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); + basePath?: string; + baseOptions?: any; + formDataCtor?: new () => any; +} + +export class Configuration { + /** + * parameter for apiKey security + * @param name security name + * @memberof Configuration + */ + apiKey?: string | Promise | ((name: string) => string) | ((name: string) => Promise); + /** + * parameter for basic security + * + * @type {string} + * @memberof Configuration + */ + username?: string; + /** + * parameter for basic security + * + * @type {string} + * @memberof Configuration + */ + password?: string; + /** + * parameter for oauth2 security + * @param name security name + * @param scopes oauth2 scope + * @memberof Configuration + */ + accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise); + /** + * override base path + * + * @type {string} + * @memberof Configuration + */ + basePath?: string; + /** + * base options for axios calls + * + * @type {any} + * @memberof Configuration + */ + baseOptions?: any; + /** + * The FormData constructor that will be used to create multipart form data + * requests. You can inject this here so that execution environments that + * do not support the FormData class can still run the generated client. + * + * @type {new () => FormData} + */ + formDataCtor?: new () => any; + + constructor(param: ConfigurationParameters = {}) { + this.apiKey = param.apiKey; + this.username = param.username; + this.password = param.password; + this.accessToken = param.accessToken; + this.basePath = param.basePath; + this.baseOptions = param.baseOptions; + this.formDataCtor = param.formDataCtor; + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * application/vnd.company+json + * @param mime - MIME (Multipurpose Internet Mail Extensions) + * @return True if the given MIME is JSON, false otherwise. + */ + public isJsonMime(mime: string): boolean { + const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i'); + return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json'); + } +} diff --git a/src/serverApi/v3/git_push.sh b/src/serverApi/v3/git_push.sh new file mode 100644 index 0000000..ced3be2 --- /dev/null +++ b/src/serverApi/v3/git_push.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=`git remote` +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/src/serverApi/v3/index.ts b/src/serverApi/v3/index.ts new file mode 100644 index 0000000..4c9c31c --- /dev/null +++ b/src/serverApi/v3/index.ts @@ -0,0 +1,18 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export * from "./api"; +export * from "./configuration"; + diff --git a/src/shims-tsx.d.ts b/src/shims-tsx.d.ts new file mode 100644 index 0000000..d884176 --- /dev/null +++ b/src/shims-tsx.d.ts @@ -0,0 +1,19 @@ +import Vue, { VNode } from "vue"; + +declare global { + namespace JSX { + interface Element extends VNode {} + interface ElementClass extends Vue {} + interface IntrinsicElements { + // eslint-disable-next-line no-explicit-any + [elem: string]: any; + } + } + + /** + * See: https://stackoverflow.com/questions/69485778/new-typescript-version-does-not-include-window-navigator-mssaveblob?noredirect=1&lq=1 + */ + interface Navigator { + msSaveBlob: (blob: Blob, fileName: string) => boolean; + } +} diff --git a/src/shims-vue.d.ts b/src/shims-vue.d.ts new file mode 100644 index 0000000..cd54569 --- /dev/null +++ b/src/shims-vue.d.ts @@ -0,0 +1,6 @@ +/* eslint-disable */ +declare module "*.vue" { + import type { DefineComponent } from "vue"; + const component: DefineComponent<{}, {}, any>; + export default component; +} diff --git a/src/shims-vuetify.d.ts b/src/shims-vuetify.d.ts new file mode 100644 index 0000000..d943c5f --- /dev/null +++ b/src/shims-vuetify.d.ts @@ -0,0 +1,4 @@ +declare module "vuetify/lib/framework" { + import Vuetify from "vuetify"; + export default Vuetify; +} diff --git a/src/styles/css-variables/_breakpoints.scss b/src/styles/css-variables/_breakpoints.scss new file mode 100644 index 0000000..350c60e --- /dev/null +++ b/src/styles/css-variables/_breakpoints.scss @@ -0,0 +1,8 @@ +:root { + --size-content-width-min: 30ch; + --size-content-width-max: 80ch; + --breakpoint-tablet: 750px; + --breakpoint-tablet-landscape: 1112px; + --breakpoint-desktop: 991px; + --breakpoint-desktop-lg: 1200px; +} diff --git a/src/styles/css-variables/_durations.scss b/src/styles/css-variables/_durations.scss new file mode 100644 index 0000000..cc0a8ac --- /dev/null +++ b/src/styles/css-variables/_durations.scss @@ -0,0 +1,16 @@ +$transition-base: 0.3s; + +:root { + --duration-transition-slow: calc(#{$transition-base} * 3); + --duration-transition-medium: #{$transition-base}; + --duration-transition-fast: calc(#{$transition-base} * 0.5); +} + +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + transition-duration: 0.001s !important; + animation-duration: 0.001s !important; + } +} diff --git a/src/styles/css-variables/_layers.scss b/src/styles/css-variables/_layers.scss new file mode 100644 index 0000000..3a69997 --- /dev/null +++ b/src/styles/css-variables/_layers.scss @@ -0,0 +1,11 @@ +:root { + --layer-behind: -1; + --layer-page: 1; + --layer-sticky-header: 20; + --layer-dropdown: 30; + --layer-popover: 40; + --layer-tooltip: 50; + --layer-top-menu: 60; + --layer-fab: 100; + --layer-modal: 1000; +} diff --git a/src/styles/css-variables/_sizes.scss b/src/styles/css-variables/_sizes.scss new file mode 100644 index 0000000..442f66a --- /dev/null +++ b/src/styles/css-variables/_sizes.scss @@ -0,0 +1,15 @@ +:root { + --radius-round: 100vmax; + --radius-xs: 0.15rem; + --radius-sm: 0.25rem; + --radius-md: 0.5rem; + --radius-lg: 1rem; + --border-width: 1px; + --border-width-bold: 2px; + --sidebar-width: 240px; + --sidebar-width-tablet: 60px; + --sidebar-item-height: 60px; + --sidebar-sub-item-height: 40px; + --topbar-height: 50px; + --content-max-width-vw: 100vw; +} diff --git a/src/styles/css-variables/_spacing.scss b/src/styles/css-variables/_spacing.scss new file mode 100644 index 0000000..8e01009 --- /dev/null +++ b/src/styles/css-variables/_spacing.scss @@ -0,0 +1,18 @@ +:root { + --space-xs-4: 0.125rem; + --space-xs-3: 0.25rem; + --space-xs-2: 0.375rem; + --space-xs: 0.5rem; + --space-sm: 0.75rem; + --space-md: 1rem; + --space-md-2: 1.25rem; + --space-lg: 1.5rem; + --space-xl: 2rem; + --space-xl-2: 2.5rem; + --space-xl-3: 3.25rem; + --space-xl-4: 5.25rem; + --space-xl-5: 8.5rem; + --space-base-vuetify: 4px; +} + +$spacer: 0.25rem; diff --git a/src/styles/css-variables/_typography.scss b/src/styles/css-variables/_typography.scss new file mode 100644 index 0000000..afd82df --- /dev/null +++ b/src/styles/css-variables/_typography.scss @@ -0,0 +1,41 @@ +@import "./breakpoints"; + +$system-fonts: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, ubuntu, + "Helvetica Neue", arial, sans-serif; + +:root { + --font-primary: "PT Sans", #{$system-fonts}; + --font-accent: "PT Sans Narrow", #{$system-fonts}; + + /* set base values */ + --text-base-size: 1rem; + --text-scale-ratio: 1.2; + --text-device-scale-ratio: 1.125; + + /* heading sizes */ + --heading-1: calc(var(--heading-2) * var(--text-scale-ratio)); + --heading-2: calc(var(--heading-3) * var(--text-scale-ratio)); + --heading-3: calc(var(--heading-4) * var(--text-scale-ratio)); + --heading-4: calc(var(--heading-5) * var(--text-scale-ratio)); + --heading-5: calc(var(--heading-6) * var(--text-scale-ratio)); + --heading-6: calc(var(--text-base-size) * var(--text-scale-ratio)); + + /* text sizes */ + --text-xs: calc( + var(--text-base-size) / var(--text-scale-ratio) / var(--text-scale-ratio) + ); + --text-sm: calc(var(--text-base-size) / var(--text-scale-ratio)); + --text-md: var(--text-base-size); + --text-lg: calc(var(--text-base-size) * var(--text-scale-ratio)); + + /* line-height */ + --line-height-sm: 1.05; + --line-height-md: 1.2; + --line-height-lg: 1.4; + --line-height-xl: 2; + + /* font-weight */ + --font-weight-light: 200; + --font-weight-normal: 400; + --font-weight-bold: 700; +} diff --git a/src/styles/global.scss b/src/styles/global.scss new file mode 100644 index 0000000..85f3e43 --- /dev/null +++ b/src/styles/global.scss @@ -0,0 +1,17 @@ +@import "./utility/breakpoints"; +@import "./utility/colors"; +@import "./utility/fonts"; +@import "./utility/spacing"; +@import "./utility/typography"; +@import "./utility/body"; +@import "./utility/icons"; +@import "./utility/buttons"; +@import "./utility/cards"; +@import "./utility/links"; + +@import "./css-variables/breakpoints"; +@import "./css-variables/durations"; +@import "./css-variables/layers"; +@import "./css-variables/sizes"; +@import "./css-variables/spacing"; +@import "./css-variables/typography"; diff --git a/src/styles/settings.scss b/src/styles/settings.scss new file mode 100644 index 0000000..aa69c6b --- /dev/null +++ b/src/styles/settings.scss @@ -0,0 +1,49 @@ +@forward 'vuetify/settings' with ( + $body-font-family: var(--font-primary), + $heading-font-family: var(--font-accent), + $line-height-root: var(--line-height-md), + + $typography: ( + "h1": ( + "size": var(--heading-1), + "line-height": var(--line-height-sm), + ), + "h2": ( + "size": var(--heading-2), + "line-height": var(--line-height-sm), + ), + "h3": ( + "size": var(--heading-3), + "line-height": var(--line-height-sm), + ), + "h4": ( + "size": var(--heading-4), + "line-height": var(--line-height-sm), + ), + "h5": ( + "size": var(--heading-5), + "line-height": var(--line-height-sm), + "weight": var(--font-weight-bold), + ), + "h6": ( + "size": var(--heading-6), + "line-height": var(--line-height-sm), + "weight": var(--font-weight-bold), + ), + ), + + // v-btn + $button-font-size: 1rem, + $button-text-transform: none, + $button-font-weight: var(--font-weight-bold), + $button-text-letter-spacing: 0.044em, + + // card + $card-text-letter-spacing: normal, + + // list + $list-item-icon-margin-start: 8px, + + // v-label + $label-opacity: var(--v-high-emphasis-opacity) +); diff --git a/src/styles/utility/_body.scss b/src/styles/utility/_body.scss new file mode 100644 index 0000000..5a9fdce --- /dev/null +++ b/src/styles/utility/_body.scss @@ -0,0 +1,56 @@ +body.is-noscroll { + position: fixed; + top: 0; + width: 100%; + overflow-y: hidden; +} + +.d-flex { + display: flex; +} + +textarea.v-field__input { + height: var(--text-base-size); +} + +.justify-content-space-between { + justify-content: space-between; +} + +.justify-content-center { + justify-content: center; +} + +.align-items-center { + align-items: center; +} + +@mixin visually-hidden { + /* https://snook.ca/archives/html_and_css/hiding-content-for-accessibility */ + position: absolute !important; + top: 0; + left: 0; + width: 1px; + height: 1px; + overflow: hidden; + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px, 1px, 1px, 1px); +} + +.visually-hidden { + @include visually-hidden; +} + +::-moz-focus-inner { + border: 0; +} + +:focus { + outline-offset: 2px; +} + +/* width */ + +.w-100 { + width: 100%; +} diff --git a/src/styles/utility/_breakpoints.scss b/src/styles/utility/_breakpoints.scss new file mode 100644 index 0000000..28758ff --- /dev/null +++ b/src/styles/utility/_breakpoints.scss @@ -0,0 +1,23 @@ +$breakpoints: ( + tablet: 750px, + desktop: 991px, + desktop-lg: 1200px, +); + +// Usage: `@include breakpoint(tablet) { ... }` +@mixin breakpoint($breakpoint) { + @if map-has-key($breakpoints, $breakpoint) { + // Get the breakpoint value. + $breakpoint-value: map-get($breakpoints, $breakpoint); + + // Write the media query. + @media (min-width: $breakpoint-value) { + @content; + } + + // If the breakpoint doesn't exist in the map. + } @else { + // Log a warning. + @warn 'Invalid breakpoint: #{$breakpoint}.'; + } +} diff --git a/src/styles/utility/_buttons.scss b/src/styles/utility/_buttons.scss new file mode 100644 index 0000000..659e3f6 --- /dev/null +++ b/src/styles/utility/_buttons.scss @@ -0,0 +1,11 @@ +$button-font-size: 1rem; +.v-btn { + font-family: var(--font-accent); + + &--size-small, + &--size-default, + &--size-large, + &--size-x-large { + font-size: $button-font-size; + } +} \ No newline at end of file diff --git a/src/styles/utility/_cards.scss b/src/styles/utility/_cards.scss new file mode 100644 index 0000000..d48fca8 --- /dev/null +++ b/src/styles/utility/_cards.scss @@ -0,0 +1,3 @@ +.v-card--variant-outlined { + border-color: rgba(0, 0, 0, 0.12) !important; +} diff --git a/src/styles/utility/_colors.scss b/src/styles/utility/_colors.scss new file mode 100644 index 0000000..900c26f --- /dev/null +++ b/src/styles/utility/_colors.scss @@ -0,0 +1,12 @@ +// apply to toasts +.toasted.info { + background-color: rgba(var(--v-theme-info)) !important; +} + +.toasted.success { + background-color: rgba(var(--v-theme-success)) !important; +} + +.toasted.error { + background-color: rgba(var(--v-theme-error))!important; +} diff --git a/src/styles/utility/_fonts.scss b/src/styles/utility/_fonts.scss new file mode 100644 index 0000000..9a7c5e0 --- /dev/null +++ b/src/styles/utility/_fonts.scss @@ -0,0 +1,76 @@ +/* stylelint-disable */ + +@font-face { + font-family: "PT Sans"; + font-style: normal; + font-weight: 400; + src: url("@/assets/fonts/PT_Sans-Web-Regular.eot"); /* IE9 Compat Modes */ + src: local("PT Sans"), local("PTSans-Regular"), + url("@/assets/fonts/PT_Sans-Web-Regular.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("@/assets/fonts/PT_Sans-Web-Regular.woff2") + format("woff2"), + /* Super Modern Browsers */ url("@/assets/fonts/PT_Sans-Web-Regular.woff") + format("woff"), + /* Modern Browsers */ url("@/assets/fonts/PT_Sans-Web-Regular.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("@/assets/fonts/PT_Sans-Web-Regular.svg#PTSans") format("svg"); /* Legacy iOS */ +} + +@font-face { + font-family: "PT Sans"; + font-style: normal; + font-weight: 700; + src: url("@/assets/fonts/PT_Sans-Web-Bold.eot"); /* IE9 Compat Modes */ + src: local("PT Sans Bold"), local("PTSans-Bold"), + url("@/assets/fonts/PT_Sans-Web-Bold.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("@/assets/fonts/PT_Sans-Web-Bold.woff2") format("woff2"), + /* Super Modern Browsers */ url("@/assets/fonts/PT_Sans-Web-Bold.woff") + format("woff"), + /* Modern Browsers */ url("@/assets/fonts/PT_Sans-Web-Bold.ttf") + format("truetype"), + /* Safari, Android, iOS */ url("@/assets/fonts/PT_Sans-Web-Bold.svg#PTSans") + format("svg"); /* Legacy iOS */ +} + +@font-face { + font-family: "PT Sans Narrow"; + font-style: normal; + font-weight: 400; + src: url("@/assets/fonts/PT_Sans-Narrow-Web-Regular.eot"); /* IE9 Compat Modes */ + src: local("PT Sans Narrow"), local("PTSans-Narrow"), + url("@/assets/fonts/PT_Sans-Narrow-Web-Regular.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("@/assets/fonts/PT_Sans-Narrow-Web-Regular.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("@/assets/fonts/PT_Sans-Narrow-Web-Regular.woff") format("woff"), + /* Modern Browsers */ url("@/assets/fonts/PT_Sans-Narrow-Web-Regular.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("@/assets/fonts/PT_Sans-Narrow-Web-Regular.svg#PTSansNarrow") + format("svg"); /* Legacy iOS */ +} + +@font-face { + font-family: "PT Sans Narrow"; + font-style: normal; + font-weight: 700; + src: url("@/assets/fonts/PT_Sans-Narrow-Web-Bold.eot"); /* IE9 Compat Modes */ + src: local("PT Sans Narrow Bold"), local("PTSans-NarrowBold"), + url("@/assets/fonts/PT_Sans-Narrow-Web-Bold.eot?#iefix") + format("embedded-opentype"), + /* IE6-IE8 */ url("@/assets/fonts/PT_Sans-Narrow-Web-Bold.woff2") + format("woff2"), + /* Super Modern Browsers */ + url("@/assets/fonts/PT_Sans-Narrow-Web-Bold.woff") format("woff"), + /* Modern Browsers */ url("@/assets/fonts/PT_Sans-Narrow-Web-Bold.ttf") + format("truetype"), + /* Safari, Android, iOS */ + url("@/assets/fonts/PT_Sans-Narrow-Web-Bold.svg#PTSansNarrow") + format("svg"); /* Legacy iOS */ +} + +/* stylelint-enable */ diff --git a/src/styles/utility/_icons.scss b/src/styles/utility/_icons.scss new file mode 100644 index 0000000..ab68d85 --- /dev/null +++ b/src/styles/utility/_icons.scss @@ -0,0 +1,27 @@ +.icon { + display: inline-block; + width: 1em; + height: 1em; + vertical-align: baseline; +} + +.v-icon { + &.custom-icon { + width: 1em; + /* stylelint-disable-next-line sh-waqar/declaration-use-variable */ + font-size: calc(1em + 4px); + line-height: 100%; + vertical-align: middle; // should this be default? + fill: currentColor; + } + + &.custom-icon svg { + fill: currentColor; + } + + &.material-icon { + // remove material icon margin + width: calc(1em + 4px); + height: calc(1em + 4px); + } +} diff --git a/src/styles/utility/_links.scss b/src/styles/utility/_links.scss new file mode 100644 index 0000000..eaf7a39 --- /dev/null +++ b/src/styles/utility/_links.scss @@ -0,0 +1,3 @@ +a { + color: rgba(var(--v-theme-primary)); +} diff --git a/src/styles/utility/_spacing.scss b/src/styles/utility/_spacing.scss new file mode 100644 index 0000000..0d11ee0 --- /dev/null +++ b/src/styles/utility/_spacing.scss @@ -0,0 +1,50 @@ +/* margins */ + +$space-sizes: 0, auto; +$space-size-vars: xs-4, xs-3, xs-2, xs, sm, md, lg, xl, xl-2, xl-3, xl-4, xl-5; + +@each $size in $space-sizes { + .mt--#{$size} { + margin-top: $size; + } + .mb--#{$size} { + margin-bottom: $size; + } + .ml--#{$size} { + margin-left: $size; + } + .mr--#{$size} { + margin-right: $size; + } + .mx--#{$size} { + margin-right: $size; + margin-left: $size; + } + .my--#{$size} { + margin-top: $size; + margin-bottom: $size; + } +} + +@each $size in $space-size-vars { + .mt--#{$size} { + margin-top: var(--space-#{$size}); + } + .mb--#{$size} { + margin-bottom: var(--space-#{$size}); + } + .ml--#{$size} { + margin-left: var(--space-#{$size}); + } + .mr--#{$size} { + margin-right: var(--space-#{$size}); + } + .mx--#{$size} { + margin-right: var(--space-#{$size}); + margin-left: var(--space-#{$size}); + } + .my--#{$size} { + margin-top: var(--space-#{$size}); + margin-bottom: var(--space-#{$size}); + } +} diff --git a/src/styles/utility/_typography.scss b/src/styles/utility/_typography.scss new file mode 100644 index 0000000..c9a4363 --- /dev/null +++ b/src/styles/utility/_typography.scss @@ -0,0 +1,95 @@ +* { + tab-size: 2; +} + +body { + font-family: var(--font-primary); + font-size: var(--text-base-size); + line-height: var(--line-height-md); +} + +/* heading size */ +@for $i from 1 through 6 { + h#{$i}, + .h#{$i} { + margin-top: var(--space-xl); + margin-bottom: var(--space-sm); + font-family: var(--font-accent); + font-size: var(--heading-#{$i}); + font-weight: var(--font-weight-normal); + line-height: var(--line-height-sm); + } +} + +h1, +.h1 { + &:first-of-type { + margin-top: var(--space-md); + margin-bottom: var(--space-xl); + } +} + +h5, +h6, +.h5, +.h6 { + font-weight: var(--font-weight-bold); +} + +/* text size */ +.text-xs { + font-size: var(--text-xs); +} + +.text-sm { + font-size: var(--text-sm); +} + +.text-md { + font-size: var(--text-md); +} + +.text-lg { + font-size: var(--text-lg); +} + +p { + margin-bottom: var(--space-md); + line-height: var(--line-height-lg); +} + +b, +strong { + font-weight: var(--font-weight-bold); +} + +input, +select, +textarea, +button { + font-family: inherit; + font-size: var(--text-md); +} + +/* utility classes */ + +.truncate { + // truncate text if it exceeds parent + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +@include breakpoint(tablet) { + :root { + --text-base-size: calc(1rem * var(--text-device-scale-ratio)); + } +} + +@include breakpoint(desktop) { + :root { + --text-base-size: calc( + 1rem * var(--text-device-scale-ratio) * var(--text-device-scale-ratio) + ); + } +} diff --git a/src/styles/variables.scss b/src/styles/variables.scss new file mode 100644 index 0000000..b04759e --- /dev/null +++ b/src/styles/variables.scss @@ -0,0 +1,79 @@ +$body-font-family: var(--font-primary); +$heading-font-family: var(--font-accent); +$line-height-root: var(--line-height-md); + +// headings +$headings: ( + "h1": ( + "size": var(--heading-1), + "line-height": var(--line-height-sm), + ), + "h2": ( + "size": var(--heading-2), + "line-height": var(--line-height-sm), + ), + "h3": ( + "size": var(--heading-3), + "line-height": var(--line-height-sm), + ), + "h4": ( + "size": var(--heading-4), + "line-height": var(--line-height-sm), + ), + "h5": ( + "size": var(--heading-5), + "line-height": var(--line-height-sm), + "weight": var(--font-weight-bold), + ), + "h6": ( + "size": var(--heading-6), + "line-height": var(--line-height-sm), + "weight": var(--font-weight-bold), + ), +); + +// v-btn +$button-font-size: 1rem; +$btn-text-transform: none; +$btn-font-weight: var(--font-weight-bold); +$btn-letter-spacing: 0.044em; +$btn-focus-opacity: 0; + +.v-btn { + font-family: var(--font-accent); + + &.v-size--small, + &.v-size--default, + &.v-size--large, + &.v-size--x-large { + font-size: $button-font-size; + } +} + +.v-btn.primary { + &:hover { + background-color: rgba(var(--v-theme-primary-darken-1)) !important; + } +} + +// tabs +$tabs-item-letter-spacing: inherit; + +// table +$data-table-regular-header-font-size: 1rem; +$data-table-regular-row-font-size: 1rem; + +// card +$card-text-letter-spacing: normal; + +// treeview +$treeview-node-margin: 0; +$treeview-node-padding: 0; + +// tooltip +$tooltip-background-color: rgb(66, 66, 66); +$tooltip-text-color: white; +$tooltip-padding: 8px 8px 8px 12px; +$tooltip-transition-enter-duration: 300; +$tooltip-transition-leave-duration: 300; +$tooltip-opacity: 1; diff --git a/src/utils/api/api.ts b/src/utils/api/api.ts new file mode 100644 index 0000000..b037fc0 --- /dev/null +++ b/src/utils/api/api.ts @@ -0,0 +1,45 @@ +import { isObject } from "@vueuse/core"; +import { AxiosInstance, isAxiosError } from "axios"; +import { getCurrentInstance } from "vue"; +import { ApiResponseError, ApiValidationError } from "./types"; + +let $axios: AxiosInstance; + +export const initializeAxios = (axios: AxiosInstance) => { + $axios = axios; + const app = getCurrentInstance()?.appContext.app; + if (app) { + app.config.globalProperties.$axios = axios; + } +}; + +export const mapAxiosErrorToResponseError = ( + error: unknown +): ApiResponseError | ApiValidationError => { + let apiError: ApiResponseError | ApiValidationError = { + message: "UNKNOWN_ERROR", + code: 1, + title: "", + type: "Unknown error", + }; + + if ( + isAxiosError< + ApiValidationError | ApiResponseError, + Record + >(error) + ) { + const errorPayload = error.response?.data; + if (errorPayload && isObject(errorPayload)) { + apiError = errorPayload; + } else if (typeof errorPayload === "string") { + apiError.message = errorPayload; + apiError.code = error.response?.status || apiError.code; + apiError.type = error.code || apiError.type; + apiError.title = error.response?.statusText || apiError.title; + } + } + return apiError; +}; + +export { $axios }; diff --git a/src/utils/api/api.unit.ts b/src/utils/api/api.unit.ts new file mode 100644 index 0000000..604d34f --- /dev/null +++ b/src/utils/api/api.unit.ts @@ -0,0 +1,146 @@ +import { + apiResponseErrorFactory, + axiosErrorFactory, +} from "@@/tests/test-utils/factory"; +import { mount } from "@vue/test-utils"; +import axios, { isAxiosError } from "axios"; +import { $axios, initializeAxios, mapAxiosErrorToResponseError } from "./api"; + +jest.mock("axios"); +const mockedIsAxiosError = jest.mocked(isAxiosError); + +describe("AxiosInstance", () => { + describe("initializeAxios", () => { + it("should set $axios", () => { + initializeAxios(axios); + + expect($axios).toBe(axios); + }); + + it("should set Vue.prototype.$axios", () => { + const wrapper = mount({ + setup() { + initializeAxios(axios); + }, + template: `
`, + }); + + expect(wrapper.vm.$axios).toBe(axios); + }); + }); + + describe("mapAxiosErrorToResponseError", () => { + describe("when response payload is an object", () => { + const setup = () => { + const expectedPayload = apiResponseErrorFactory.build({ + message: "NOT_FOUND", + code: 404, + }); + const responseError = axiosErrorFactory.build({ + response: { data: expectedPayload }, + }); + + return { + responseError, + expectedPayload, + }; + }; + + it("should return correctly payload", () => { + mockedIsAxiosError.mockReturnValueOnce(true); + const { responseError, expectedPayload } = setup(); + + const result = mapAxiosErrorToResponseError(responseError); + + expect(result).toStrictEqual(expectedPayload); + }); + }); + + describe("when response payload is a string", () => { + const setup = () => { + const status = 555; + const statusText = "Test status text"; + const data = "NOT_FOUND"; + const code = "BAD_REQUEST"; + const responseError = axiosErrorFactory.build({ + code, + response: { data, status, statusText }, + }); + const expectedPayload = { + message: data, + code: status, + title: statusText, + type: code, + }; + + return { + responseError, + expectedPayload, + }; + }; + + it("should return correctly payload", () => { + mockedIsAxiosError.mockReturnValueOnce(true); + const { responseError, expectedPayload } = setup(); + + const result = mapAxiosErrorToResponseError(responseError); + + expect(result).toStrictEqual(expectedPayload); + }); + }); + + describe("when response props not set correctly", () => { + const setup = () => { + mockedIsAxiosError.mockReturnValueOnce(true); + + const data = "NOT_FOUND"; + const responseError = axiosErrorFactory.build({ + response: { data }, + }); + + return { + responseError, + }; + }; + + it("should return correctly payload", () => { + const { responseError } = setup(); + + const result = mapAxiosErrorToResponseError(responseError); + + expect(result).toStrictEqual({ + message: "NOT_FOUND", + code: 1, + title: responseError.response?.statusText, + type: "Unknown error", + }); + }); + }); + + describe("when response payload is not AxiosError", () => { + const setup = () => { + const responseError = new Error("Test error"); + const expectedPayload = { + message: "UNKNOWN_ERROR", + code: 1, + title: "", + type: "Unknown error", + }; + + return { + responseError, + expectedPayload, + }; + }; + + it("should return correctly payload", () => { + mockedIsAxiosError.mockReturnValueOnce(true); + const { responseError, expectedPayload } = setup(); + + const result = mapAxiosErrorToResponseError(responseError); + + expect(result).toStrictEqual(expectedPayload); + }); + }); + }); +}); diff --git a/src/utils/api/index.ts b/src/utils/api/index.ts new file mode 100644 index 0000000..9a18f25 --- /dev/null +++ b/src/utils/api/index.ts @@ -0,0 +1,2 @@ +export * from "./types"; +export * from "./api"; diff --git a/src/utils/api/types.ts b/src/utils/api/types.ts new file mode 100644 index 0000000..045aad3 --- /dev/null +++ b/src/utils/api/types.ts @@ -0,0 +1,19 @@ +export type ApiResponseError = { + code: number; + type: string; + title: string; + message: string; +}; + +export type ApiValidationError = { + code: number; + type: string; + title: string; + message: string; + validationErrors: Array; +}; + +export type ErrorDetails = { + field: Array; + errors: Array; +}; diff --git a/src/vue-i18n.d.ts b/src/vue-i18n.d.ts new file mode 100644 index 0000000..8e7513a --- /dev/null +++ b/src/vue-i18n.d.ts @@ -0,0 +1,12 @@ +/** + * vue-i18n global type definitions + */ + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +import { DefineLocaleMessage } from "vue-i18n"; +import { MessageSchema } from "./locales/schema"; + +declare module "vue-i18n" { + // define the locale messages schema + export interface DefineLocaleMessage extends MessageSchema {} +} diff --git a/src/vuetify.options.ts b/src/vuetify.options.ts new file mode 100644 index 0000000..49e9c1c --- /dev/null +++ b/src/vuetify.options.ts @@ -0,0 +1,62 @@ +import * as materialAliases from "@/icons/material"; +import { type ThemeDefinition } from "vuetify"; +import { aliases, mdi } from "vuetify/iconsets/mdi-svg"; + +declare global { + interface Window { + nonce: string; + } +} + +const theme: ThemeDefinition = { + dark: false, + colors: { + primary: "#9e292b", + "primary-darken-1": "#800416", + "primary-lighten": "#f5eaea", + accent: "#e98404", + white: "#ffffff", + info: "#0a7ac9", + "info-darken-1": "#0e8c71", + success: "#13ba98", + "success-darken-1": "#0e8c71", + warning: "#ff8311", + "warning-lighten-1": "#fff0e2", + error: "#ff1134", + "error-darken-1": "#bf0d26", + "surface-variant": "#4E555D", + "on-surface-variant": "#F7F7F8", + "on-surface": "#3a424b", + "on-background": "#3a424b", + "on-white": "#3a424b", + "surface-light": "#f3f4f4", + "on-surface-light": "#3a424b", + }, + variables: { + "high-emphasis-opacity": 1, + "medium-emphasis-opacity": 0.8, + "disabled-opacity": 0.6, + }, +}; + +export default { + theme: { + options: { + customProperties: true, + cspNonce: window.nonce, + }, + themes: { + light: theme, + }, + }, + icons: { + defaultSet: "mdi", + aliases: { + ...aliases, + ...materialAliases, + }, + sets: { + mdi, + }, + }, +}; diff --git a/tests/setup.js b/tests/setup.js new file mode 100644 index 0000000..ac2d601 --- /dev/null +++ b/tests/setup.js @@ -0,0 +1,28 @@ +import { jest } from "@jest/globals"; +import { config, mount, shallowMount } from "@vue/test-utils"; + +// enable rendering of default slot on stubbed components +// see https://test-utils.vuejs.org/migration/#shallowMount-and-renderStubDefaultSlot +config.global.renderStubDefaultSlot = true; + +global.mount = mount; +global.shallowMount = shallowMount; + +/** + * matchMedia is used by useBreakpoints from VueUse to distinguish breakpoints. + * We need to mock it to run tests that rely on useBreakpoints + * @see https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom + */ +Object.defineProperty(window, "matchMedia", { + writable: true, + value: jest.fn().mockImplementation((query) => ({ + matches: false, + media: query, + onchange: null, + addListener: jest.fn(), // deprecated + removeListener: jest.fn(), // deprecated + addEventListener: jest.fn(), + removeEventListener: jest.fn(), + dispatchEvent: jest.fn(), + })), +}); diff --git a/tests/test-utils/factory/api/apiResponseErrorFactory.ts b/tests/test-utils/factory/api/apiResponseErrorFactory.ts new file mode 100644 index 0000000..80c23ae --- /dev/null +++ b/tests/test-utils/factory/api/apiResponseErrorFactory.ts @@ -0,0 +1,11 @@ +import { ApiResponseError } from "@/utils/api"; +import { Factory } from "fishery"; + +export const apiResponseErrorFactory = Factory.define( + ({ sequence }) => ({ + message: `ApiResponseError # ${sequence}`, + code: 0, + title: `ApiResponseError # ${sequence}`, + type: `ApiResponseError`, + }) +); diff --git a/tests/test-utils/factory/api/apiValidationResponseErrorFactory.ts b/tests/test-utils/factory/api/apiValidationResponseErrorFactory.ts new file mode 100644 index 0000000..6a257d2 --- /dev/null +++ b/tests/test-utils/factory/api/apiValidationResponseErrorFactory.ts @@ -0,0 +1,11 @@ +import { ApiValidationError } from "@/utils/api"; +import { Factory } from "fishery"; + +export const apiValidationResponseErrorFactory = + Factory.define(({ sequence }) => ({ + type: "API_VALIDATION_ERROR", + title: "API Validation Error", + message: `ApiValidationError # ${sequence}`, + code: 400, + validationErrors: [], + })); diff --git a/tests/test-utils/factory/api/axiosErrorFactory.ts b/tests/test-utils/factory/api/axiosErrorFactory.ts new file mode 100644 index 0000000..72569d2 --- /dev/null +++ b/tests/test-utils/factory/api/axiosErrorFactory.ts @@ -0,0 +1,18 @@ +import { AxiosError, AxiosHeaders } from "axios"; +import { Factory } from "fishery"; +import { apiResponseErrorFactory } from "./apiResponseErrorFactory"; + +export const axiosErrorFactory = Factory.define(({ sequence }) => ({ + isAxiosError: true, + response: { + data: apiResponseErrorFactory.build(), + status: 0, + statusText: `Error # ${sequence}`, + config: { headers: new AxiosHeaders() }, + headers: {}, + request: {}, + }, + name: `Error # ${sequence}`, + message: `Error # ${sequence}`, + toJSON: async () => JSON.stringify(this), +})); diff --git a/tests/test-utils/factory/api/index.ts b/tests/test-utils/factory/api/index.ts new file mode 100644 index 0000000..82bd459 --- /dev/null +++ b/tests/test-utils/factory/api/index.ts @@ -0,0 +1,3 @@ +export * from "./axiosErrorFactory"; +export * from "./apiResponseErrorFactory"; +export * from "./apiValidationResponseErrorFactory"; diff --git a/tests/test-utils/factory/index.ts b/tests/test-utils/factory/index.ts new file mode 100644 index 0000000..d158c57 --- /dev/null +++ b/tests/test-utils/factory/index.ts @@ -0,0 +1 @@ +export * from "./api"; diff --git a/tests/test-utils/mediaFileMock.js b/tests/test-utils/mediaFileMock.js new file mode 100644 index 0000000..57bece8 --- /dev/null +++ b/tests/test-utils/mediaFileMock.js @@ -0,0 +1,2 @@ +// Mock module for using media files like .png as imports in jest tests, since jest has trouble resolving the urls. +module.exports = "Mocked media file"; diff --git a/tests/test-utils/setup/createTestingI18n.ts b/tests/test-utils/setup/createTestingI18n.ts new file mode 100644 index 0000000..57c5f91 --- /dev/null +++ b/tests/test-utils/setup/createTestingI18n.ts @@ -0,0 +1,20 @@ +import { MessageSchema } from "@/locales/schema"; +import { createI18n } from "vue-i18n"; + +export const createTestingI18n = (options = {}) => { + const i18n = createI18n({ + legacy: false, + locale: "en", + fallbackLocale: ["en"], + // disable log warnings on missing translations + // https://github.com/kazupon/vue-i18n/issues/96 + missingWarn: false, + fallbackWarn: false, + silentTranslationWarn: true, + messages: { + en: {} as MessageSchema, + }, + ...options, + }); + return i18n; +}; diff --git a/tests/test-utils/setup/createTestingVuetify.ts b/tests/test-utils/setup/createTestingVuetify.ts new file mode 100644 index 0000000..af86e5c --- /dev/null +++ b/tests/test-utils/setup/createTestingVuetify.ts @@ -0,0 +1,26 @@ +import * as materialAliases from "@/icons/material"; +import { createVuetify } from "vuetify"; +import * as components from "vuetify/lib/components/index.mjs"; +import * as directives from "vuetify/lib/directives/index.mjs"; +import { aliases, mdi } from "vuetify/lib/iconsets/mdi-svg.mjs"; + +export const createTestingVuetify = (options = {}) => { + const vuetify = createVuetify({ + components: { + ...components, + }, + directives, + icons: { + defaultSet: "mdi", + aliases: { + ...aliases, + ...materialAliases, + }, + sets: { + mdi, + }, + }, + ...options, + }); + return vuetify; +}; diff --git a/tests/test-utils/setup/index.ts b/tests/test-utils/setup/index.ts new file mode 100644 index 0000000..8e989fc --- /dev/null +++ b/tests/test-utils/setup/index.ts @@ -0,0 +1,2 @@ +export * from "./createTestingI18n"; +export * from "./createTestingVuetify"; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..c8f93d1 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "src/**/*.unit.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e17ead9 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,38 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "strict": true, + "jsx": "preserve", + "importHelpers": true, + "moduleResolution": "node", + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "allowJs": true, + "forceConsistentCasingInFileNames": true, + "useDefineForClassFields": true, + "sourceMap": true, + "experimentalDecorators": true, + "baseUrl": ".", + "types": ["webpack-env", "jest"], + "paths": { + "@data/*": ["src/modules/data/*"], + "@feature/*": ["src/modules/feature/*"], + "@ui/*": ["src/modules/ui/*"], + "@util/*": ["src/modules/util/*"], + "@page/*": ["src/modules/page/*"], + "@/*": ["src/*"], + "@@/*": ["*"] + }, + "lib": ["esnext", "dom", "dom.iterable", "scripthost"] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx", + "src/**/*.vue", + "tests/**/*.ts", + "tests/**/*.tsx" + ], + "exclude": ["node_modules"] +} diff --git a/vue.config.js b/vue.config.js new file mode 100644 index 0000000..b770711 --- /dev/null +++ b/vue.config.js @@ -0,0 +1,102 @@ +const { defineConfig } = require("@vue/cli-service"); +const path = require("path"); +const NoncePlaceholderPlugin = require("./webpack-config/nonce-placeholder-plugin"); +const { VuetifyPlugin } = require("webpack-plugin-vuetify"); + +const TSCONFIG_PATH = path.resolve(__dirname, "./tsconfig.build.json"); + +const getDir = (subPath) => path.resolve(__dirname, subPath); + +module.exports = defineConfig({ + runtimeCompiler: true, + + transpileDependencies: ["vuetify"], + + configureWebpack: { + plugins: [ + new VuetifyPlugin({ + styles: { configFile: "src/styles/settings.scss" }, + }), + new NoncePlaceholderPlugin(), + ], + resolve: { + alias: { + "@data": getDir("src/modules/data"), + "@feature": getDir("src/modules/feature"), + "@ui": getDir("src/modules/ui"), + "@util": getDir("src/modules/util"), + "@page": getDir("src/modules/page"), + }, + extensions: [".js", ".ts", ".vue", ".json"], + }, + module: { + rules: [ + { + test: /\.ts$/, + type: "javascript/auto", + loader: path.resolve(__dirname, "webpack-config/vue-i18n-loader.js"), + include: [path.resolve(__dirname, "src/locales")], + }, + ], + }, + }, + + // use custom tsconfig for webpack builds + // to e.g. exclude test files + // https://github.com/vuejs/vue-cli/issues/2421 + chainWebpack: (config) => { + config.module + .rule("ts") + .use("ts-loader") + .merge({ + options: { + configFile: TSCONFIG_PATH, + }, + }); + // avoid auto format on vue-loader to fix prettier errors + config.module + .rule("vue") + .use("vue-loader") + .tap((options) => { + options.prettify = false; + return options; + }); + config.plugin("fork-ts-checker").tap((args) => { + args[0].typescript.configFile = TSCONFIG_PATH; + return args; + }); + config.plugin("html").tap((args) => { + args[0].template = "./index.html"; + args[0].title = "Superhero-Dashboard"; + args[0].favicon = `./public/favicon.png`; + return args; + }); + config.plugin("copy").tap((args) => { + args[0].patterns[0].globOptions.ignore.push( + path.resolve(__dirname, "./public/themes/**/*") + ); + return args; + }); + }, + + pluginOptions: { + i18n: { + locale: "de", + fallbackLocale: "de", + localeDir: "locales", + enableInSFC: true, + enableBridge: false, + }, + }, + + devServer: + process.env.NODE_ENV === "development" + ? { + port: 4100, + allowedHosts: "all", + client: { + overlay: false, + }, + } + : {}, +}); diff --git a/webpack-config/nonce-placeholder-plugin.js b/webpack-config/nonce-placeholder-plugin.js new file mode 100644 index 0000000..6d8e422 --- /dev/null +++ b/webpack-config/nonce-placeholder-plugin.js @@ -0,0 +1,25 @@ +// This is inspired by the excellent article on Content Security Policy by Quest Henkart +// https://towardsdatascience.com/content-security-policy-how-to-create-an-iron-clad-nonce-based-csp3-policy-with-webpack-and-nginx-ce5a4605db90 + +const HtmlWebpackPlugin = require("html-webpack-plugin"); +class NoncePlaceholderPlugin { + apply(compiler) { + compiler.hooks.thisCompilation.tap( + "NoncePlaceholderPlugin", + (compilation) => { + HtmlWebpackPlugin.getHooks(compilation).afterTemplateExecution.tapAsync( + "NoncePlaceholderPlugin", + (data, cb) => { + const { headTags } = data; + headTags.forEach((x) => { + x.attributes.nonce = "**CSP_NONCE**"; + }); + cb(null, data); + } + ); + } + ); + } +} + +module.exports = NoncePlaceholderPlugin; diff --git a/webpack-config/vue-i18n-loader.js b/webpack-config/vue-i18n-loader.js new file mode 100644 index 0000000..b3ba2bc --- /dev/null +++ b/webpack-config/vue-i18n-loader.js @@ -0,0 +1,39 @@ +const { generateJavaScript } = require("@intlify/bundle-utils"); + +const loader = function (source, sourceMap) { + // eslint-disable-next-line @typescript-eslint/no-this-alias + const loaderContext = this; + const options = { + filename: loaderContext.resourcePath, + bridge: false, + sourceMap: false, + inSourceMap: sourceMap, + forceStringify: false, + useClassComponent: false, + strictMessage: false, + escapeHtml: false, + env: loaderContext.mode, + type: "plain", + isGlobal: false, + onWarn: (msg) => { + loaderContext.emitWarning( + new Error(`[vue-i18n-loader]: ${loaderContext.resourcePath} ${msg}`) + ); + }, + onError: (msg) => { + loaderContext.emitError( + new Error(`[vue-i18n-loader]: ${loaderContext.resourcePath} ${msg}`) + ); + }, + }; + + try { + this.cacheable && this.cacheable(); + const { code, map } = generateJavaScript(source, options); + this.callback(null, code, map); + } catch (err) { + loaderContext.emitError(new Error(`[vue-i18n-loader]: ${err.message}`)); + } +}; + +module.exports = loader; From 8fb2db26abca4ba8b568025b28d5d9bc4ff2423f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 14:19:15 +0200 Subject: [PATCH 02/26] fix lint and workflow --- .github/workflows/push.yml | 13 ++++--------- package.json | 2 +- src/shims-tsx.d.ts | 2 +- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 6ee96ed..f5b0964 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -28,9 +28,6 @@ jobs: - branch_meta permissions: packages: write - strategy: - matrix: - tenants: [default, brb, n21, thr] steps: - uses: actions/checkout@v4 with: @@ -39,7 +36,7 @@ jobs: id: docker_meta_img uses: docker/metadata-action@v5 with: - images: ghcr.io/${{ github.repository }}-${{ matrix.tenants }} + images: ghcr.io/${{ github.repository }} tags: | type=ref,event=branch,enable=false,priority=600 type=sha,enable=true,priority=600,prefix= @@ -53,7 +50,7 @@ jobs: - name: test image exists run: | - echo "IMAGE_EXISTS=$(docker manifest inspect ghcr.io/${{ github.repository }}-${{ matrix.tenants }}:${{ needs.branch_meta.outputs.sha }} > /dev/null && echo 1 || echo 0)" >> $GITHUB_ENV + echo "IMAGE_EXISTS=$(docker manifest inspect ghcr.io/${{ github.repository }}:${{ needs.branch_meta.outputs.sha }} > /dev/null && echo 1 || echo 0)" >> $GITHUB_ENV - name: Set up Docker Buildx if: ${{ env.IMAGE_EXISTS == 0 }} @@ -63,14 +60,12 @@ jobs: if: ${{ env.IMAGE_EXISTS == 0 }} uses: docker/build-push-action@v5 with: - build-args: | - SC_THEME=${{ matrix.tenants }} context: . file: ./Dockerfile platforms: linux/amd64 push: true pull: true - tags: ghcr.io/${{ github.repository }}-${{ matrix.tenants }}:${{ needs.branch_meta.outputs.sha }} + tags: ghcr.io/${{ github.repository }}:${{ needs.branch_meta.outputs.sha }} labels: ${{ steps.docker_meta_img.outputs.labels }} - name: Send Notification to Rocket Chat if docker image build failed @@ -139,7 +134,7 @@ jobs: - name: run trivy vulnerability scanner uses: aquasecurity/trivy-action@1f6384b6ceecbbc6673526f865b818a2a06b07c9 with: - image-ref: "ghcr.io/${{ github.repository }}-default:${{ needs.branch_meta.outputs.sha }}" + image-ref: "ghcr.io/${{ github.repository }}:${{ needs.branch_meta.outputs.sha }}" format: "sarif" output: "trivy-results.sarif" severity: "CRITICAL,HIGH" diff --git a/package.json b/package.json index 23a4026..d520427 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@vue/cli-plugin-router": "~5.0.8", "@vue/cli-plugin-typescript": "~5.0.8", "@vue/cli-plugin-unit-jest": "~5.0.8", - "@vue/cli-service": "^5.0.8", + "@vue/cli-service": "~5.0.8", "@vue/eslint-config-typescript": "^12.0.0", "@vue/test-utils": "^2.4.6", "@vue/vue3-jest": "^27.0.0", diff --git a/src/shims-tsx.d.ts b/src/shims-tsx.d.ts index d884176..1c94be3 100644 --- a/src/shims-tsx.d.ts +++ b/src/shims-tsx.d.ts @@ -5,7 +5,7 @@ declare global { interface Element extends VNode {} interface ElementClass extends Vue {} interface IntrinsicElements { - // eslint-disable-next-line no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any [elem: string]: any; } } From c9ae46f0d2a398cc94c645d378cbd1396d362ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 14:24:19 +0200 Subject: [PATCH 03/26] fix dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 0ebb24c..f6e118e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci -COPY babel.config.js .eslintrc.js LICENSE.md .prettierrc.js tsconfig.json tsconfig.build.json vue.config.js .eslintignore .prettierignore ./ +COPY babel.config.js .eslintrc.js LICENSE.md .prettierrc.json tsconfig.json tsconfig.build.json vue.config.js .eslintignore .prettierignore ./ COPY public ./public COPY src ./src COPY webpack-config ./webpack-config From 72bde9bae869680799e3f53afab88f36e641aab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 14:26:52 +0200 Subject: [PATCH 04/26] fix dockerfile --- LICENSE => LICENSE.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE => LICENSE.md (100%) diff --git a/LICENSE b/LICENSE.md similarity index 100% rename from LICENSE rename to LICENSE.md From c131c4c32ce4a4a4b007d473a4c039d11d5bcfc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 14:41:50 +0200 Subject: [PATCH 05/26] fix dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f6e118e..e769f4d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci -COPY babel.config.js .eslintrc.js LICENSE.md .prettierrc.json tsconfig.json tsconfig.build.json vue.config.js .eslintignore .prettierignore ./ +COPY babel.config.js .eslintrc.js LICENSE.md .prettierrc.json tsconfig.json tsconfig.build.json vue.config.js .eslintignore .prettierignore index.html ./ COPY public ./public COPY src ./src COPY webpack-config ./webpack-config From c9b497aa3a302c6ed11504b1774d41bc5f3526ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 15:21:21 +0200 Subject: [PATCH 06/26] fix deployment --- ansible/group_vars/all/shd-client.yml | 2 + ansible/group_vars/develop/shd-client.yml | 2 + ansible/roles/shd-client-core/tasks/main.yml | 6 +++ .../templates/configmap.yml.j2 | 2 +- .../shd-client-core/templates/ingress.yml.j2 | 40 +++++++++++++++++++ .../shd-client-core/templates/svc.yml.j2 | 2 +- 6 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 ansible/roles/shd-client-core/templates/ingress.yml.j2 diff --git a/ansible/group_vars/all/shd-client.yml b/ansible/group_vars/all/shd-client.yml index f8d349c..9dd752b 100644 --- a/ansible/group_vars/all/shd-client.yml +++ b/ansible/group_vars/all/shd-client.yml @@ -1,2 +1,4 @@ --- +PORT: 4100 SHD_CLIENT_IMAGE: quay.io/schulcloudverbund/shd-client +SHD_CLIENT_PREFIX: dashboard2. diff --git a/ansible/group_vars/develop/shd-client.yml b/ansible/group_vars/develop/shd-client.yml index f1e7574..a3f9a28 100644 --- a/ansible/group_vars/develop/shd-client.yml +++ b/ansible/group_vars/develop/shd-client.yml @@ -1,2 +1,4 @@ --- +PORT: 4100 SHD_CLIENT_IMAGE: ghcr.io/hpi-schul-cloud/shd-client +SHD_CLIENT_PREFIX: shd2- \ No newline at end of file diff --git a/ansible/roles/shd-client-core/tasks/main.yml b/ansible/roles/shd-client-core/tasks/main.yml index 3c28690..b37580d 100644 --- a/ansible/roles/shd-client-core/tasks/main.yml +++ b/ansible/roles/shd-client-core/tasks/main.yml @@ -16,3 +16,9 @@ kubeconfig: ~/.kube/config namespace: "{{ NAMESPACE }}" template: deployment.yml.j2 + +- name: Ingress + kubernetes.core.k8s: + kubeconfig: ~/.kube/config + namespace: "{{ NAMESPACE }}" + template: ingress.yml.j2 diff --git a/ansible/roles/shd-client-core/templates/configmap.yml.j2 b/ansible/roles/shd-client-core/templates/configmap.yml.j2 index 0a6af83..8a8dba4 100644 --- a/ansible/roles/shd-client-core/templates/configmap.yml.j2 +++ b/ansible/roles/shd-client-core/templates/configmap.yml.j2 @@ -10,4 +10,4 @@ data: # general NODE_ENV: "production" TZ: "Europe/Berlin" - API_URL: {{ API_URL }} + API_URL: "https://{{ DOMAIN }}/api" diff --git a/ansible/roles/shd-client-core/templates/ingress.yml.j2 b/ansible/roles/shd-client-core/templates/ingress.yml.j2 new file mode 100644 index 0000000..4af2346 --- /dev/null +++ b/ansible/roles/shd-client-core/templates/ingress.yml.j2 @@ -0,0 +1,40 @@ +#jinja2: trim_blocks: "True", lstrip_blocks: "True" +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ NAMESPACE }}-shd-client-ingress + namespace: {{ NAMESPACE }} + annotations: + nginx.ingress.kubernetes.io/ssl-redirect: "{{ TLS_ENABLED|default("false") }}" + # type of authentication + nginx.ingress.kubernetes.io/auth-type: basic + # name of the secret that contains the user/password definitions + nginx.ingress.kubernetes.io/auth-secret: shd-basic-auth-secret + # message to display with an appropriate context why the authentication is required + nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required' +{% if CLUSTER_ISSUER is defined %} + cert-manager.io/cluster-issuer: {{ CLUSTER_ISSUER }} +{% endif %} + +spec: + ingressClassName: {{ INGRESS_CLASS }} +{% if CLUSTER_ISSUER is defined or (TLS_ENABLED is defined and TLS_ENABLED|bool) %} + tls: + - hosts: + - {{ SHD_CLIENT_PREFIX }}{{ DOMAIN }} +{% if CLUSTER_ISSUER is defined %} + secretName: {{ SHD_CLIENT_PREFIX }}{{ DOMAIN }}-tls +{% endif %} +{% endif %} + rules: + - host: {{ SHD_CLIENT_PREFIX }}{{ DOMAIN }} + http: + paths: + ### SHD + - path: / + pathType: Prefix + backend: + service: + name: shd-client-svc + port: + number: {{ PORT }} diff --git a/ansible/roles/shd-client-core/templates/svc.yml.j2 b/ansible/roles/shd-client-core/templates/svc.yml.j2 index 59c3f5e..6ab25a6 100644 --- a/ansible/roles/shd-client-core/templates/svc.yml.j2 +++ b/ansible/roles/shd-client-core/templates/svc.yml.j2 @@ -8,7 +8,7 @@ metadata: spec: type: ClusterIP ports: - - port: 4100 + - port: {{ PORT }} targetPort: 4100 protocol: TCP name: shd-client From 5c209912d2b4de83c57c13010f2eb2563692ee6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 15:42:48 +0200 Subject: [PATCH 07/26] fix csp --- dockerconf/nginx.conf.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerconf/nginx.conf.template b/dockerconf/nginx.conf.template index cb8fe7a..b501492 100644 --- a/dockerconf/nginx.conf.template +++ b/dockerconf/nginx.conf.template @@ -2,7 +2,7 @@ server { listen 4100; server_name localhost; - set $csp "default-src 'self'; base-uri 'self'; script-src 'nonce-$request_id' 'strict-dynamic' 'unsafe-inline' https:; object-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' https://docs.dbildungscloud.de/"; + set $csp "default-src 'self' ${API_URL}; base-uri 'self'; script-src 'nonce-$request_id' 'strict-dynamic' 'unsafe-inline' https:; object-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' https://docs.dbildungscloud.de/"; location /status { stub_status; From 2689eb969889b4f642fae1f7eeaed48a9b836a9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 16:11:18 +0200 Subject: [PATCH 08/26] fix csp --- dockerconf/nginx.conf.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerconf/nginx.conf.template b/dockerconf/nginx.conf.template index b501492..4ab4ca2 100644 --- a/dockerconf/nginx.conf.template +++ b/dockerconf/nginx.conf.template @@ -2,7 +2,7 @@ server { listen 4100; server_name localhost; - set $csp "default-src 'self' ${API_URL}; base-uri 'self'; script-src 'nonce-$request_id' 'strict-dynamic' 'unsafe-inline' https:; object-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' https://docs.dbildungscloud.de/"; + set $csp "default-src 'self' ${API_URL}/*; base-uri 'self'; script-src 'nonce-$request_id' 'strict-dynamic' 'unsafe-inline' https:; object-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' https://docs.dbildungscloud.de/"; location /status { stub_status; From ae5e45e248adb26051dc187dcedac01533af2126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 16:51:14 +0200 Subject: [PATCH 09/26] try to use branch deploy script --- .github/workflows/push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index f5b0964..3c7b3b3 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -100,7 +100,7 @@ jobs: needs: - build_and_push - branch_meta - uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@main + uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@${{ github.ref_name }} with: branch: ${{ needs.branch_meta.outputs.branch }} secrets: From 4a6d86ecca29ddc4555b9412b531eea094d3cc21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 16:59:19 +0200 Subject: [PATCH 10/26] try again --- .github/workflows/push.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 3c7b3b3..8cb182f 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -100,7 +100,7 @@ jobs: needs: - build_and_push - branch_meta - uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@${{ github.ref_name }} + uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@n21-2104-setup with: branch: ${{ needs.branch_meta.outputs.branch }} secrets: From cf388b39e6be0afb51067bce69d0d1a297da0773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 17:01:44 +0200 Subject: [PATCH 11/26] try again --- .github/workflows/push.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 8cb182f..f71545a 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -96,11 +96,12 @@ jobs: echo "sha=${{ github.sha }}" >> $GITHUB_OUTPUT fi +# TODO use deploy.yml@main deploy: needs: - build_and_push - branch_meta - uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@n21-2104-setup + uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@N21-2104-setup with: branch: ${{ needs.branch_meta.outputs.branch }} secrets: From ab93b58d569fd691a045cca9f60d854cb47ec5c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 1 Aug 2024 17:17:41 +0200 Subject: [PATCH 12/26] try again --- .github/workflows/push.yml | 3 +-- dockerconf/nginx.conf.template | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index f71545a..f5b0964 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -96,12 +96,11 @@ jobs: echo "sha=${{ github.sha }}" >> $GITHUB_OUTPUT fi -# TODO use deploy.yml@main deploy: needs: - build_and_push - branch_meta - uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@N21-2104-setup + uses: hpi-schul-cloud/dof_app_deploy/.github/workflows/deploy.yml@main with: branch: ${{ needs.branch_meta.outputs.branch }} secrets: diff --git a/dockerconf/nginx.conf.template b/dockerconf/nginx.conf.template index 4ab4ca2..f5f423f 100644 --- a/dockerconf/nginx.conf.template +++ b/dockerconf/nginx.conf.template @@ -2,7 +2,7 @@ server { listen 4100; server_name localhost; - set $csp "default-src 'self' ${API_URL}/*; base-uri 'self'; script-src 'nonce-$request_id' 'strict-dynamic' 'unsafe-inline' https:; object-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' https://docs.dbildungscloud.de/"; + set $csp "default-src 'self' ${API_URL}/; base-uri 'self'; script-src 'nonce-$request_id' 'strict-dynamic' 'unsafe-inline' https:; object-src 'none'; font-src 'self' data:; img-src 'self' data:; style-src 'self' 'unsafe-inline'; frame-src 'self' https://docs.dbildungscloud.de/"; location /status { stub_status; From 6ad3364bf119f728a227acc5ec50cdf63b6a7355 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Fri, 2 Aug 2024 12:15:03 +0200 Subject: [PATCH 13/26] tests --- jest.config.js | 6 +- package-lock.json | 128 ++++++++++++++++-- package.json | 2 + src/locales/de.ts | 3 +- src/locales/en.ts | 3 +- src/locales/es.ts | 3 +- src/locales/uk.ts | 3 +- src/main.ts | 2 +- .../applicationError.store.ts | 3 +- .../applicationError.store.unit.ts | 36 +++++ src/modules/data/auth/auth.store.ts | 9 +- src/modules/data/auth/auth.store.unit.ts | 91 +++++++++++++ .../data/env-config/envConfig.store.ts | 11 +- .../data/env-config/envConfig.store.unit.ts | 72 ++++++++++ src/modules/data/env-config/index.ts | 1 + .../feature/render-html/RenderHTML.unit.ts | 9 +- src/modules/page/AboutView.unit.ts | 18 +++ src/modules/page/HomeView.unit.ts | 18 +++ ...-handler.ts => applicationErrorHandler.ts} | 14 +- src/plugins/applicationErrorHandler.unit.ts | 91 +++++++++++++ src/plugins/i18n.ts | 21 ++- src/plugins/i18n.unit.js | 70 ---------- src/plugins/i18n.unit.ts | 71 ++++++++++ .../factory/applicationErrorFactory.ts | 11 ++ tests/test-utils/factory/envsFactory.ts | 7 + tests/test-utils/factory/index.ts | 3 + tests/test-utils/factory/meResponseFactory.ts | 25 ++++ tests/test-utils/index.ts | 1 + tests/test-utils/mockApiResponse.ts | 16 +++ 29 files changed, 636 insertions(+), 112 deletions(-) create mode 100644 src/modules/data/application-error/applicationError.store.unit.ts create mode 100644 src/modules/data/auth/auth.store.unit.ts create mode 100644 src/modules/data/env-config/envConfig.store.unit.ts create mode 100644 src/modules/page/AboutView.unit.ts create mode 100644 src/modules/page/HomeView.unit.ts rename src/plugins/{application-error-handler.ts => applicationErrorHandler.ts} (79%) create mode 100644 src/plugins/applicationErrorHandler.unit.ts delete mode 100644 src/plugins/i18n.unit.js create mode 100644 src/plugins/i18n.unit.ts create mode 100644 tests/test-utils/factory/applicationErrorFactory.ts create mode 100644 tests/test-utils/factory/envsFactory.ts create mode 100644 tests/test-utils/factory/meResponseFactory.ts create mode 100644 tests/test-utils/index.ts create mode 100644 tests/test-utils/mockApiResponse.ts diff --git a/jest.config.js b/jest.config.js index f4965b9..42a9721 100644 --- a/jest.config.js +++ b/jest.config.js @@ -29,8 +29,12 @@ const config = deepmerge(defaultPreset, { "/src/layouts/**/*.{js,ts,vue}", "/src/modules/**/*.{js,ts,vue}", "/src/plugins/**/*.(js|ts)", - "/src/router/**/*.(js|ts)", + // "/src/router/guards/**/*.(js|ts)", "/src/utils/**/*.(js|ts)", + + // Exclude + "!/src/**/index.(js|ts)", + "!/src/plugins/vuetify.ts", ], }); diff --git a/package-lock.json b/package-lock.json index 6c5986f..509a96b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "axios": "^1.7.2", "dayjs": "^1.11.12", "pinia": "^2.2.0", + "ts-node": "^10.9.2", "universal-cookie": "^7.2.0", "vue": "^3.4.34", "vue-dompurify-html": "^5.1.0", @@ -32,7 +33,7 @@ "@vue/cli-plugin-router": "~5.0.8", "@vue/cli-plugin-typescript": "~5.0.8", "@vue/cli-plugin-unit-jest": "~5.0.8", - "@vue/cli-service": "^5.0.8", + "@vue/cli-service": "~5.0.8", "@vue/eslint-config-typescript": "^12.0.0", "@vue/test-utils": "^2.4.6", "@vue/vue3-jest": "^27.0.0", @@ -50,6 +51,7 @@ "sass-loader": "^13.3.3", "ts-jest": "^27.1.5", "typescript": "^4.9.5", + "vue-component-type-helpers": "^2.0.29", "webpack-plugin-vuetify": "^2.0.1" }, "engines": { @@ -1854,6 +1856,26 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -3060,7 +3082,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "devOptional": true, "engines": { "node": ">=6.0.0" } @@ -3674,6 +3695,26 @@ "node": ">=10.13.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3894,7 +3935,6 @@ "version": "22.0.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz", "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==", - "devOptional": true, "dependencies": { "undici-types": "~6.11.1" } @@ -5908,7 +5948,6 @@ "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -5969,7 +6008,6 @@ "version": "8.3.3", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dev": true, "dependencies": { "acorn": "^8.11.0" }, @@ -7587,6 +7625,11 @@ "node": ">=8" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -8272,6 +8315,14 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", @@ -14138,8 +14189,7 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/makeerror": { "version": "1.0.12", @@ -17871,6 +17921,53 @@ "node": ">=8" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, "node_modules/tsconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", @@ -17966,7 +18063,6 @@ "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -17996,8 +18092,7 @@ "node_modules/undici-types": { "version": "6.11.1", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", - "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==", - "devOptional": true + "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -18155,6 +18250,11 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "node_modules/v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -19298,6 +19398,14 @@ "node": ">=10" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index d520427..b7a1796 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "axios": "^1.7.2", "dayjs": "^1.11.12", "pinia": "^2.2.0", + "ts-node": "^10.9.2", "universal-cookie": "^7.2.0", "vue": "^3.4.34", "vue-dompurify-html": "^5.1.0", @@ -59,6 +60,7 @@ "sass-loader": "^13.3.3", "ts-jest": "^27.1.5", "typescript": "^4.9.5", + "vue-component-type-helpers": "^2.0.29", "webpack-plugin-vuetify": "^2.0.1" }, "engines": { diff --git a/src/locales/de.ts b/src/locales/de.ts index e3ae192..455453b 100644 --- a/src/locales/de.ts +++ b/src/locales/de.ts @@ -1,3 +1,4 @@ export default { - test: "Transaltion test", + "error.generic": "Ein Fehler ist aufgetreten", + "error.load": "Fehler beim Laden der Daten.", }; diff --git a/src/locales/en.ts b/src/locales/en.ts index e3ae192..2dbe1d4 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -1,3 +1,4 @@ export default { - test: "Transaltion test", + "error.generic": "An error has occurred", + "error.load": "Error while loading the data.", }; diff --git a/src/locales/es.ts b/src/locales/es.ts index e3ae192..2e52cb3 100644 --- a/src/locales/es.ts +++ b/src/locales/es.ts @@ -1,3 +1,4 @@ export default { - test: "Transaltion test", + "error.generic": "Se ha producido un error", + "error.load": "Error al cargar los datos.", }; diff --git a/src/locales/uk.ts b/src/locales/uk.ts index e3ae192..2fa7655 100644 --- a/src/locales/uk.ts +++ b/src/locales/uk.ts @@ -1,3 +1,4 @@ export default { - test: "Transaltion test", + "error.generic": "ВиĐŊиĐēĐģĐ° ĐŋĐžĐŧиĐģĐēĐ°", + "error.load": "ПоĐŧиĐģĐēĐ° ĐŋŅ–Đ´ Ņ‡Đ°Ņ СаваĐŊŅ‚Đ°ĐļĐĩĐŊĐŊŅ Đ´Đ°ĐŊиŅ….", }; diff --git a/src/main.ts b/src/main.ts index 58e5b92..c3fd629 100644 --- a/src/main.ts +++ b/src/main.ts @@ -45,7 +45,7 @@ app.use(VueDOMPurifyHTML, { if (jwt) { axios.defaults.headers.common["Authorization"] = "Bearer " + jwt; try { - await useAuthStore().login(jwt); + await useAuthStore().login(); } catch (e) { // eslint-disable-next-line no-console console.error("### JWT invalid: ", e); diff --git a/src/modules/data/application-error/applicationError.store.ts b/src/modules/data/application-error/applicationError.store.ts index eb1da08..91f6a4a 100644 --- a/src/modules/data/application-error/applicationError.store.ts +++ b/src/modules/data/application-error/applicationError.store.ts @@ -1,5 +1,5 @@ import { defineStore } from "pinia"; -import { Ref, ref } from "vue"; +import { readonly, Ref, ref } from "vue"; import { ApplicationError } from "./applicationError"; export const useApplicationErrorStore = defineStore("applicationError", () => { @@ -10,6 +10,7 @@ export const useApplicationErrorStore = defineStore("applicationError", () => { }; return { + getError: readonly(error), setError, }; }); diff --git a/src/modules/data/application-error/applicationError.store.unit.ts b/src/modules/data/application-error/applicationError.store.unit.ts new file mode 100644 index 0000000..13492cb --- /dev/null +++ b/src/modules/data/application-error/applicationError.store.unit.ts @@ -0,0 +1,36 @@ +import { applicationErrorFactory } from "@@/tests/test-utils/factory"; +import { createPinia, setActivePinia } from "pinia"; +import { useApplicationErrorStore } from "./applicationError.store"; + +describe("EnvConfigStore", () => { + beforeEach(() => { + setActivePinia(createPinia()); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe("setError", () => { + describe("when loading envs", () => { + const setup = () => { + const store = useApplicationErrorStore(); + + const error = applicationErrorFactory.build(); + + return { + store, + error, + }; + }; + + it("should set the error", async () => { + const { store, error } = setup(); + + store.setError(error); + + expect(store.getError).toEqual(error); + }); + }); + }); +}); diff --git a/src/modules/data/auth/auth.store.ts b/src/modules/data/auth/auth.store.ts index 7797973..fbb091b 100644 --- a/src/modules/data/auth/auth.store.ts +++ b/src/modules/data/auth/auth.store.ts @@ -1,28 +1,27 @@ import { MeApiFactory, MeApiInterface, MeResponse } from "@/serverApi/v3"; -import { $axios } from "@/utils/api/api"; +import { $axios } from "@/utils/api"; import { defineStore } from "pinia"; import { computed, ComputedRef, Ref, ref } from "vue"; export const useAuthStore = defineStore("auth", () => { const me: Ref = ref(null); - const accessToken: Ref = ref(null); const meApi = (): MeApiInterface => { return MeApiFactory(undefined, "v3", $axios); }; - const login = async (jwt: string): Promise => { + const login = async (): Promise => { const { data } = await meApi().meControllerMe(); me.value = data; - accessToken.value = jwt; }; const isLoggedIn: ComputedRef = computed(() => { - return true; + return me.value !== null; }); return { + me, login, isLoggedIn, }; diff --git a/src/modules/data/auth/auth.store.unit.ts b/src/modules/data/auth/auth.store.unit.ts new file mode 100644 index 0000000..1fa7bc5 --- /dev/null +++ b/src/modules/data/auth/auth.store.unit.ts @@ -0,0 +1,91 @@ +import * as serverApi from "@/serverApi/v3/api"; +import { meResponseFactory } from "@@/tests/test-utils/factory"; +import { mockApiResponse } from "@@/tests/test-utils/mockApiResponse"; +import { createMock, DeepMocked } from "@golevelup/ts-jest"; +import { createPinia, setActivePinia } from "pinia"; +import { useAuthStore } from "./auth.store"; + +describe("AuthStore", () => { + let meApi: DeepMocked; + + beforeEach(() => { + setActivePinia(createPinia()); + + meApi = createMock(); + + jest.spyOn(serverApi, "MeApiFactory").mockReturnValue(meApi); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe("login", () => { + describe("when logging in", () => { + const setup = () => { + const store = useAuthStore(); + + const meResponse = meResponseFactory.build(); + + meApi.meControllerMe.mockResolvedValueOnce( + mockApiResponse({ data: meResponse }) + ); + + return { + store, + meResponse, + }; + }; + + it("should set me", async () => { + const { store, meResponse } = setup(); + + await store.login(); + + expect(store.me).toEqual(meResponse); + }); + }); + }); + + describe("isLoggedIn", () => { + describe("when logged in", () => { + const setup = () => { + const store = useAuthStore(); + + const meResponse = meResponseFactory.build(); + + meApi.meControllerMe.mockResolvedValueOnce( + mockApiResponse({ data: meResponse }) + ); + + return { + store, + }; + }; + + it("should return true", async () => { + const { store } = setup(); + + await store.login(); + + expect(store.isLoggedIn).toEqual(true); + }); + }); + + describe("when not logged in", () => { + const setup = () => { + const store = useAuthStore(); + + return { + store, + }; + }; + + it("should return false", () => { + const { store } = setup(); + + expect(store.isLoggedIn).toEqual(false); + }); + }); + }); +}); diff --git a/src/modules/data/env-config/envConfig.store.ts b/src/modules/data/env-config/envConfig.store.ts index 6a3bc6f..884d9f4 100644 --- a/src/modules/data/env-config/envConfig.store.ts +++ b/src/modules/data/env-config/envConfig.store.ts @@ -16,13 +16,20 @@ export const useEnvConfigStore = defineStore("envConfig", () => { }; const loadConfig = async (): Promise => { - const serverConfig = await serverApi().serverConfigControllerPublicConfig(); + const { data } = await serverApi().serverConfigControllerPublicConfig(); - envs.value = serverConfig.data; + envs.value = data; + }; + + const setEnvs = (value: ConfigResponse): ConfigResponse => { + envs.value = value; + + return envs.value; }; return { getEnvs: readonly(envs), + setEnvs, loadConfig, }; }); diff --git a/src/modules/data/env-config/envConfig.store.unit.ts b/src/modules/data/env-config/envConfig.store.unit.ts new file mode 100644 index 0000000..00cc9e6 --- /dev/null +++ b/src/modules/data/env-config/envConfig.store.unit.ts @@ -0,0 +1,72 @@ +import * as serverApi from "@/serverApi/v3/api"; +import { envsFactory } from "@@/tests/test-utils/factory"; +import { mockApiResponse } from "@@/tests/test-utils/mockApiResponse"; +import { createMock, DeepMocked } from "@golevelup/ts-jest"; +import { createPinia, setActivePinia } from "pinia"; +import { useEnvConfigStore } from "./envConfig.store"; + +describe("EnvConfigStore", () => { + let defaultApi: DeepMocked; + + beforeEach(() => { + setActivePinia(createPinia()); + + defaultApi = createMock(); + + jest.spyOn(serverApi, "DefaultApiFactory").mockReturnValue(defaultApi); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe("loadConfig", () => { + describe("when loading envs", () => { + const setup = () => { + const store = useEnvConfigStore(); + + const envs = envsFactory.build(); + + defaultApi.serverConfigControllerPublicConfig.mockResolvedValueOnce( + mockApiResponse({ data: envs }) + ); + + return { + store, + envs, + }; + }; + + it("should set envs", async () => { + const { store, envs } = setup(); + + await store.loadConfig(); + + expect(store.getEnvs).toEqual(envs); + }); + }); + }); + + describe("setEnvs", () => { + describe("when setting envs", () => { + const setup = () => { + const store = useEnvConfigStore(); + + const envs = envsFactory.build(); + + return { + store, + envs, + }; + }; + + it("should set envs", () => { + const { store, envs } = setup(); + + store.setEnvs(envs); + + expect(store.getEnvs).toEqual(envs); + }); + }); + }); +}); diff --git a/src/modules/data/env-config/index.ts b/src/modules/data/env-config/index.ts index 20b04e0..768d8cc 100644 --- a/src/modules/data/env-config/index.ts +++ b/src/modules/data/env-config/index.ts @@ -1 +1,2 @@ export { useEnvConfigStore } from "./envConfig.store"; +export { defaultConfigEnvs } from "./envConfigDefaults"; diff --git a/src/modules/feature/render-html/RenderHTML.unit.ts b/src/modules/feature/render-html/RenderHTML.unit.ts index 5c77aa0..83a2c5b 100644 --- a/src/modules/feature/render-html/RenderHTML.unit.ts +++ b/src/modules/feature/render-html/RenderHTML.unit.ts @@ -1,14 +1,11 @@ import { mount } from "@vue/test-utils"; -import RenderHTML from "./RenderHTML.vue"; +import { ComponentProps } from "vue-component-type-helpers"; import vueDompurifyHTMLPlugin from "vue-dompurify-html"; import { default as htmlConfig } from "./config"; +import RenderHTML from "./RenderHTML.vue"; describe("RenderHTML", () => { - const setup = (props: { - html: string; - component?: string; - config?: string; - }) => { + const setup = (props: ComponentProps) => { const wrapper = mount(RenderHTML, { global: { plugins: [ diff --git a/src/modules/page/AboutView.unit.ts b/src/modules/page/AboutView.unit.ts new file mode 100644 index 0000000..52da33a --- /dev/null +++ b/src/modules/page/AboutView.unit.ts @@ -0,0 +1,18 @@ +import { mount } from "@vue/test-utils"; +import AboutView from "./AboutView.vue"; + +describe("AboutView", () => { + const getWrapper = () => { + const wrapper = mount(AboutView); + + return { + wrapper, + }; + }; + + it("should improve the code coverage", () => { + const { wrapper } = getWrapper(); + + expect(wrapper).toBeDefined(); + }); +}); diff --git a/src/modules/page/HomeView.unit.ts b/src/modules/page/HomeView.unit.ts new file mode 100644 index 0000000..3c7dca8 --- /dev/null +++ b/src/modules/page/HomeView.unit.ts @@ -0,0 +1,18 @@ +import { mount } from "@vue/test-utils"; +import HomeView from "./HomeView.vue"; + +describe("HomeView", () => { + const getWrapper = () => { + const wrapper = mount(HomeView); + + return { + wrapper, + }; + }; + + it("should improve the code coverage", () => { + const { wrapper } = getWrapper(); + + expect(wrapper).toBeDefined(); + }); +}); diff --git a/src/plugins/application-error-handler.ts b/src/plugins/applicationErrorHandler.ts similarity index 79% rename from src/plugins/application-error-handler.ts rename to src/plugins/applicationErrorHandler.ts index aa10c1a..52c1def 100644 --- a/src/plugins/application-error-handler.ts +++ b/src/plugins/applicationErrorHandler.ts @@ -16,12 +16,12 @@ export const handleApplicationError = (err: unknown) => { const applicationError = err as ApplicationError; if (applicationError.name === ApplicationError.name) { applicationErrorStore.setError(applicationError); - return; + } else { + applicationErrorStore.setError( + new ApplicationError({ + statusCode: 500, + translationKey: "error.generic", + }) + ); } - applicationErrorStore.setError( - new ApplicationError({ - statusCode: 500, - translationKey: "error.generic", - }) - ); }; diff --git a/src/plugins/applicationErrorHandler.unit.ts b/src/plugins/applicationErrorHandler.unit.ts new file mode 100644 index 0000000..e0424ff --- /dev/null +++ b/src/plugins/applicationErrorHandler.unit.ts @@ -0,0 +1,91 @@ +import { applicationErrorFactory } from "@@/tests/test-utils/factory"; +import { + ApplicationError, + HttpStatusCode, + useApplicationErrorStore, +} from "@data/application-error"; +import { createTestingPinia } from "@pinia/testing"; +import { setActivePinia } from "pinia"; +import { handleApplicationError } from "./applicationErrorHandler"; + +describe("applicationErrorHandler", () => { + let consoleErrorSpy: jest.SpyInstance; + + beforeEach(() => { + setActivePinia(createTestingPinia()); + + consoleErrorSpy = jest.spyOn(console, "error"); + consoleErrorSpy.mockImplementation(); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe("handleApplicationError", () => { + describe("when handling application errors", () => { + const setup = () => { + const applicationErrorStore = useApplicationErrorStore(); + + const applicationError = applicationErrorFactory.build(); + + return { + applicationErrorStore, + applicationError, + }; + }; + + it("should log the error to the console", async () => { + const { applicationError } = setup(); + + handleApplicationError(applicationError); + + expect(consoleErrorSpy).toHaveBeenCalledWith(applicationError); + }); + + it("should set the error in the store", async () => { + const { applicationErrorStore, applicationError } = setup(); + + handleApplicationError(applicationError); + + expect(applicationErrorStore.setError).toHaveBeenCalledWith( + applicationError + ); + }); + }); + + describe("when handling other errors", () => { + const setup = () => { + const applicationErrorStore = useApplicationErrorStore(); + + const error = new Error(); + + return { + applicationErrorStore, + error, + }; + }; + + it("should log the error to the console", async () => { + const { error } = setup(); + + handleApplicationError(error); + + expect(consoleErrorSpy).toHaveBeenCalledWith(error); + }); + + it("should set the error in the store", async () => { + const { applicationErrorStore, error } = setup(); + + handleApplicationError(error); + + expect(applicationErrorStore.setError).toHaveBeenCalledWith( + new ApplicationError({ + statusCode: HttpStatusCode.InternalServerError, + translationKey: "error.generic", + }) + ); + }); + }); + }); +}); diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 0ce691f..488725f 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -3,11 +3,20 @@ import enGB from "@/locales/en"; import esES from "@/locales/es"; import { MessageSchema } from "@/locales/schema"; import ukUA from "@/locales/uk"; +import { useEnvConfigStore } from "@data/env-config"; +import { NumberFormatOptions } from "@intlify/core-base"; import { createI18n } from "vue-i18n"; -declare type SupportedLanguages = "en" | "de" | "es" | "uk"; +export type SupportedLanguages = "en" | "de" | "es" | "uk"; -const messages: Record = { +export type LocaleMessages = Record; + +export type LocaleNumberFormat = Record< + SupportedLanguages, + Record +>; + +const messages: LocaleMessages = { en: enGB, de: deDE, es: esES, @@ -18,7 +27,7 @@ const fileSizeFormat = { maximumFractionDigits: 2, }; -const numberFormats = { +const numberFormats: LocaleNumberFormat = { de: { fileSize: fileSizeFormat, }, @@ -34,12 +43,14 @@ const numberFormats = { }; const localCreateI18n = () => { + const envConfigStore = useEnvConfigStore(); + // If false, the type is a Composer instance for the Composition API, if true, the type is a VueI18n instance for the legacy API // https://vue-i18n.intlify.dev/guide/advanced/typescript#global-resource-schema-type-definition const i18n = createI18n({ legacy: false, - locale: "de", - fallbackLocale: "de", + locale: envConfigStore.getEnvs.I18N__DEFAULT_LANGUAGE || "de", + fallbackLocale: envConfigStore.getEnvs.I18N__FALLBACK_LANGUAGE || "de", messages: messages, numberFormats, }); diff --git a/src/plugins/i18n.unit.js b/src/plugins/i18n.unit.js deleted file mode 100644 index 91d7cc3..0000000 --- a/src/plugins/i18n.unit.js +++ /dev/null @@ -1,70 +0,0 @@ -import { SchulcloudTheme } from "@/serverApi/v3"; -import { authModule, envConfigModule } from "@/store"; -import AuthModule from "@/store/auth"; -import EnvConfigModule from "@/store/env-config"; -import { envsFactory } from "@@/tests/test-utils"; -import setupStores from "@@/tests/test-utils/setupStores"; -import { unref } from "vue"; -import { createI18n } from "./i18n"; -// TODO refactor to ts -const envs = { - FALLBACK_DISABLED: false, - NOT_AUTHENTICATED_REDIRECT_URL: "/login", - JWT_SHOW_TIMEOUT_WARNING_SECONDS: 3600, - JWT_TIMEOUT_SECONDS: 7200, - SC_THEME: SchulcloudTheme.Default, - ADMIN_TABLES_DISPLAY_CONSENT_COLUMN: null, - FEATURE_ES_COLLECTIONS_ENABLED: null, - FEATURE_EXTENSIONS_ENABLED: null, - FEATURE_TEAMS_ENABLED: null, - I18N__AVAILABLE_LANGUAGES: [], - I18N__DEFAULT_LANGUAGE: "", - I18N__DEFAULT_TIMEZONE: "", - I18N__FALLBACK_LANGUAGE: "", - DOCUMENT_BASE_DIR: "", - SC_TITLE: "", -}; - -describe("i18n plugin", () => { - beforeEach(() => { - setupStores({ authModule: AuthModule, envConfigModule: EnvConfigModule }); - }); - - it("sets locale to the locale computed in the auth store module", () => { - authModule.setLocale("fi"); - const envBuild = envsFactory.build({ - ...envs, - I18N__FALLBACK_LANGUAGE: "da", - }); - envConfigModule.setEnvs(envBuild); - - const i18n = createI18n(); - - expect(unref(i18n.global.locale)).toBe("fi"); - expect(unref(i18n.global.fallbackLocale)).toBe("da"); - }); - - it("sets the number formats for all supported languages correctly", () => { - authModule.setLocale("fi"); - const envBuild = envsFactory.build({ - ...envs, - I18N__FALLBACK_LANGUAGE: "da", - }); - envConfigModule.setEnvs(envBuild); - - const i18n = createI18n(); - - expect( - unref(i18n.global.numberFormats).de.fileSize.maximumFractionDigits - ).toBe(2); - expect( - unref(i18n.global.numberFormats).en.fileSize.maximumFractionDigits - ).toBe(2); - expect( - unref(i18n.global.numberFormats).es.fileSize.maximumFractionDigits - ).toBe(2); - expect( - unref(i18n.global.numberFormats).uk.fileSize.maximumFractionDigits - ).toBe(2); - }); -}); diff --git a/src/plugins/i18n.unit.ts b/src/plugins/i18n.unit.ts new file mode 100644 index 0000000..caeb5db --- /dev/null +++ b/src/plugins/i18n.unit.ts @@ -0,0 +1,71 @@ +import { LanguageType } from "@/serverApi/v3"; +import { envsFactory } from "@@/tests/test-utils/factory"; +import { useEnvConfigStore } from "@data/env-config"; +import { createPinia, setActivePinia } from "pinia"; +import { unref } from "vue"; +import { createI18n, LocaleNumberFormat } from "./i18n"; + +describe("i18n plugin", () => { + beforeEach(() => { + setActivePinia(createPinia()); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe("when creating the i18n plugin", () => { + const setup = () => { + const envs = envsFactory.build({ + I18N__DEFAULT_LANGUAGE: LanguageType.De, + I18N__FALLBACK_LANGUAGE: LanguageType.En, + }); + + useEnvConfigStore().setEnvs(envs); + }; + + it("should set the locales from the config", () => { + setup(); + + const i18n = createI18n(); + + expect(unref(i18n.global.locale)).toEqual(LanguageType.De); + expect(unref(i18n.global.fallbackLocale)).toEqual(LanguageType.En); + }); + + it("sets the number formats for all supported languages correctly", () => { + setup(); + + const i18n = createI18n(); + + const numberFormats = unref( + i18n.global.numberFormats + ) as LocaleNumberFormat; + + expect(unref(numberFormats).de.fileSize.maximumFractionDigits).toEqual(2); + expect(unref(numberFormats).en.fileSize.maximumFractionDigits).toEqual(2); + expect(unref(numberFormats).es.fileSize.maximumFractionDigits).toEqual(2); + expect(unref(numberFormats).uk.fileSize.maximumFractionDigits).toEqual(2); + }); + }); + + describe("when the envs are undefined", () => { + const setup = () => { + const envs = envsFactory.build({ + I18N__DEFAULT_LANGUAGE: undefined, + I18N__FALLBACK_LANGUAGE: undefined, + }); + + useEnvConfigStore().setEnvs(envs); + }; + + it("should set the locale to 'de'", () => { + setup(); + + const i18n = createI18n(); + + expect(unref(i18n.global.locale)).toEqual("de"); + expect(unref(i18n.global.fallbackLocale)).toEqual("de"); + }); + }); +}); diff --git a/tests/test-utils/factory/applicationErrorFactory.ts b/tests/test-utils/factory/applicationErrorFactory.ts new file mode 100644 index 0000000..e33f65d --- /dev/null +++ b/tests/test-utils/factory/applicationErrorFactory.ts @@ -0,0 +1,11 @@ +import { ApplicationError, HttpStatusCode } from "@data/application-error"; +import { Factory } from "fishery"; + +export const applicationErrorFactory = Factory.define( + () => + new ApplicationError({ + statusCode: HttpStatusCode.IAmATeapot, + translationKey: "test.translation.key", + message: "testMessage", + }) +); diff --git a/tests/test-utils/factory/envsFactory.ts b/tests/test-utils/factory/envsFactory.ts new file mode 100644 index 0000000..d01abe0 --- /dev/null +++ b/tests/test-utils/factory/envsFactory.ts @@ -0,0 +1,7 @@ +import { ConfigResponse } from "@/serverApi/v3"; +import { defaultConfigEnvs } from "@data/env-config"; +import { Factory } from "fishery"; + +export const envsFactory = Factory.define( + () => defaultConfigEnvs +); diff --git a/tests/test-utils/factory/index.ts b/tests/test-utils/factory/index.ts index d158c57..95fe836 100644 --- a/tests/test-utils/factory/index.ts +++ b/tests/test-utils/factory/index.ts @@ -1 +1,4 @@ export * from "./api"; +export * from "./envsFactory"; +export * from "./meResponseFactory"; +export * from "./applicationErrorFactory"; diff --git a/tests/test-utils/factory/meResponseFactory.ts b/tests/test-utils/factory/meResponseFactory.ts new file mode 100644 index 0000000..3b4e19d --- /dev/null +++ b/tests/test-utils/factory/meResponseFactory.ts @@ -0,0 +1,25 @@ +import { LanguageType, MeResponse } from "@/serverApi/v3"; +import { Factory } from "fishery"; + +export const meResponseFactory = Factory.define(({ sequence }) => ({ + user: { + id: `user-${sequence}`, + firstName: `firstName${sequence}`, + lastName: `lastName${sequence}`, + customAvatarBackgroundColor: `customAvatarBackgroundColor${sequence}`, + }, + school: { + id: `school-${sequence}`, + name: `schoolName${sequence}`, + logo: { + url: `logoUrl${sequence}`, + name: `logoName${sequence}`, + }, + }, + roles: [], + permissions: [], + language: LanguageType.De, + account: { + id: `account-${sequence}`, + }, +})); diff --git a/tests/test-utils/index.ts b/tests/test-utils/index.ts new file mode 100644 index 0000000..42dca9a --- /dev/null +++ b/tests/test-utils/index.ts @@ -0,0 +1 @@ +export * from "./mockApiResponse"; diff --git a/tests/test-utils/mockApiResponse.ts b/tests/test-utils/mockApiResponse.ts new file mode 100644 index 0000000..d8a9e6f --- /dev/null +++ b/tests/test-utils/mockApiResponse.ts @@ -0,0 +1,16 @@ +import { createMock } from "@golevelup/ts-jest"; +import { AxiosHeaders, AxiosResponse, AxiosResponseHeaders } from "axios"; + +export const mockApiResponse = ( + values: Partial> +): AxiosResponse => { + const response: AxiosResponse = { + data: {} as unknown as T, + status: 200, + statusText: "", + headers: createMock(), + config: { headers: createMock() }, + ...values, + }; + return response; +}; From 9e82a5d94ff2b3c5a0aa85cda0baa3b99f4d6471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Fri, 2 Aug 2024 13:54:52 +0200 Subject: [PATCH 14/26] fix import --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index c3fd629..a379b1f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,4 @@ -import { handleApplicationError } from "@/plugins/application-error-handler"; +import { handleApplicationError } from "@/plugins/applicationErrorHandler"; import { createI18n } from "@/plugins/i18n"; import vuetify from "@/plugins/vuetify"; import router from "@/router"; From b9ed1dd82bb7cae6252b9f8223865ce0ee279e93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Mon, 5 Aug 2024 13:25:42 +0200 Subject: [PATCH 15/26] change node to v20, setup sonar --- .dockerignore | 1 - .github/workflows/test.yml | 11 +---------- .nvmrc | 2 +- .pullapprove.yml | 19 ------------------- Dockerfile | 2 +- package-lock.json | 11 ++++++----- package.json | 4 ++-- sonar-project.properties | 14 ++++++++++++++ 8 files changed, 25 insertions(+), 39 deletions(-) delete mode 100644 .pullapprove.yml create mode 100644 sonar-project.properties diff --git a/.dockerignore b/.dockerignore index d11cac7..27e01c1 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,7 +2,6 @@ .vscode deploy node_modules -.travis.yml* Dockerfile.* **/*.unit.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c52b4e1..90cd99c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ permissions: contents: read env: - node: 18 + node: 20 jobs: unit: runs-on: ubuntu-latest @@ -35,15 +35,6 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }} - with: - args: > - -Dsonar.organization=schulcloud-verbund - -Dsonar.projectKey=hpi-schul-cloud_shd-client - -Dsonar.sources=. - -Dsonar.exclusions=src/serverApi/**/*.* - -Dsonar.coverage.exclusions=tests/**/*.*,**/*.unit.ts,**/*.unit.js - -Dsonar.cpd.exclusions=tests/**/*.*,**/*.unit.ts,**/*.unit.js,**/locales/*.ts - -Dsonar.javascript.lcov.reportPaths=./coverage/lcov.info lint: runs-on: ubuntu-latest diff --git a/.nvmrc b/.nvmrc index 3c03207..209e3ef 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18 +20 diff --git a/.pullapprove.yml b/.pullapprove.yml deleted file mode 100644 index da65480..0000000 --- a/.pullapprove.yml +++ /dev/null @@ -1,19 +0,0 @@ -version: 3 - -pullapprove_conditions: -- condition: "'WIP' not in labels" - unmet_status: pending - explanation: "Work in progress" -- condition: "'- [ ]' not in body" - unmet_status: failure - explanation: "Please finish all the required checklist tasks" - - -notifications: -- when: pull_request.opened - comment: | - Hey @{{ author }}, thanks for the PR! The review will start once - the tests, CI checks and PR requirements (see checklist in your PR) have passed. -- when: pullapprove.approved - if: "author_association == 'CONTRIBUTOR'" - comment: "The review is completed. Thanks @{{ author }}, we'll take it from here." diff --git a/Dockerfile b/Dockerfile index e769f4d..d9c7285 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # build stage -FROM docker.io/node:18-bullseye AS build-stage +FROM docker.io/node:20-bullseye AS build-stage ## add libraries needed for installing canvas npm package RUN apt update && apt install -y g++ libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev; diff --git a/package-lock.json b/package-lock.json index 509a96b..be33661 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,7 +47,7 @@ "fishery": "^2.2.2", "jest": "^27.5.1", "prettier": "^3.3.3", - "sass": "^1.77.8", + "sass": "^1.67.0", "sass-loader": "^13.3.3", "ts-jest": "^27.1.5", "typescript": "^4.9.5", @@ -55,7 +55,7 @@ "webpack-plugin-vuetify": "^2.0.1" }, "engines": { - "node": "18", + "node": "20", "npm": ">=9" } }, @@ -16599,10 +16599,11 @@ "dev": true }, "node_modules/sass": { - "version": "1.77.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", - "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "version": "1.67.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.67.0.tgz", + "integrity": "sha512-SVrO9ZeX/QQyEGtuZYCVxoeAL5vGlYjJ9p4i4HFuekWl8y/LtJ7tJc10Z+ck1c8xOuoBm2MYzcLfTAffD0pl/A==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", diff --git a/package.json b/package.json index b7a1796..04141d5 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "fishery": "^2.2.2", "jest": "^27.5.1", "prettier": "^3.3.3", - "sass": "^1.77.8", + "sass": "^1.67.0", "sass-loader": "^13.3.3", "ts-jest": "^27.1.5", "typescript": "^4.9.5", @@ -64,7 +64,7 @@ "webpack-plugin-vuetify": "^2.0.1" }, "engines": { - "node": "18", + "node": "20", "npm": ">=9" } } diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..dc2722e --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,14 @@ +sonar.organization=schulcloud-verbund +sonar.projectKey=hpi-schul-cloud_nuxt-client + +sonar.sources=. +sonar.tests=. + +# Exclude test files, locales and generated code from source scope +sonar.exclusions=tests/**/*,**/*.unit.ts,**/*.unit.js,src/serverApi/**/*,**/locales/**.ts + +# Include test files in test scope +sonar.test.inclusions=tests/**/*,**/*.unit.ts,**/*.unit.js + +# Coverage report directory of jest +sonar.javascript.lcov.reportPaths=./coverage/lcov.info \ No newline at end of file From 25d5be694c4e067e659e31e61c988d16a66e0eeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Mon, 5 Aug 2024 13:29:25 +0200 Subject: [PATCH 16/26] fix sonar project key --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index dc2722e..91163d7 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,5 +1,5 @@ sonar.organization=schulcloud-verbund -sonar.projectKey=hpi-schul-cloud_nuxt-client +sonar.projectKey=hpi-schul-cloud_shd-client sonar.sources=. sonar.tests=. From d5c20c2095e5c3cea0b4a93370e56faab0589e98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Mon, 5 Aug 2024 16:22:44 +0200 Subject: [PATCH 17/26] adjust sonar, add route guard tests --- jest.config.js | 6 +- sonar-project.properties | 6 +- src/modules/page/AboutView.unit.ts | 13 +- src/modules/page/AboutView.vue | 7 +- src/router/guards/is-authenticated.guard.ts | 2 +- src/router/guards/is-authenticated.unit.ts | 121 ++++++++++++++++++ src/router/{ => guards}/login-redirect-url.ts | 2 +- src/router/guards/login-redirect-url.unit.ts | 87 +++++++++++++ src/utils/api/api.ts | 6 +- src/utils/api/api.unit.ts | 4 +- 10 files changed, 237 insertions(+), 17 deletions(-) create mode 100644 src/router/guards/is-authenticated.unit.ts rename src/router/{ => guards}/login-redirect-url.ts (94%) create mode 100644 src/router/guards/login-redirect-url.unit.ts diff --git a/jest.config.js b/jest.config.js index 42a9721..5dd25b5 100644 --- a/jest.config.js +++ b/jest.config.js @@ -26,10 +26,10 @@ const config = deepmerge(defaultPreset, { collectCoverageFrom: [ // Include - "/src/layouts/**/*.{js,ts,vue}", - "/src/modules/**/*.{js,ts,vue}", + "/src/layouts/**/*.{js,ts}", // add vue files + "/src/modules/**/*.{js,ts}", // add vue files "/src/plugins/**/*.(js|ts)", - // "/src/router/guards/**/*.(js|ts)", + "/src/router/guards/**/*.(js|ts)", "/src/utils/**/*.(js|ts)", // Exclude diff --git a/sonar-project.properties b/sonar-project.properties index 91163d7..89679c1 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,12 +2,12 @@ sonar.organization=schulcloud-verbund sonar.projectKey=hpi-schul-cloud_shd-client sonar.sources=. -sonar.tests=. +sonar.tests=src/ # Exclude test files, locales and generated code from source scope -sonar.exclusions=tests/**/*,**/*.unit.ts,**/*.unit.js,src/serverApi/**/*,**/locales/**.ts +sonar.exclusions=src/serverApi/**/*,**/locales/**.ts -# Include test files in test scope +# Include test files and test utils in test scope sonar.test.inclusions=tests/**/*,**/*.unit.ts,**/*.unit.js # Coverage report directory of jest diff --git a/src/modules/page/AboutView.unit.ts b/src/modules/page/AboutView.unit.ts index 52da33a..4b458b3 100644 --- a/src/modules/page/AboutView.unit.ts +++ b/src/modules/page/AboutView.unit.ts @@ -1,18 +1,25 @@ +import { createTestingVuetify } from "@@/tests/test-utils/setup"; import { mount } from "@vue/test-utils"; +import { VBtn } from "vuetify/lib/components/index.mjs"; import AboutView from "./AboutView.vue"; describe("AboutView", () => { const getWrapper = () => { - const wrapper = mount(AboutView); + const wrapper = mount(AboutView, { + global: { plugins: [createTestingVuetify()] }, + }); return { wrapper, }; }; - it("should improve the code coverage", () => { + it("should increase the counter button on click", async () => { const { wrapper } = getWrapper(); - expect(wrapper).toBeDefined(); + const counter = wrapper.getComponent(VBtn); + await counter.trigger("click"); + + expect(counter.text()).toEqual("1"); }); }); diff --git a/src/modules/page/AboutView.vue b/src/modules/page/AboutView.vue index aa18656..c45afce 100644 --- a/src/modules/page/AboutView.vue +++ b/src/modules/page/AboutView.vue @@ -1,7 +1,12 @@ - + diff --git a/src/router/guards/is-authenticated.guard.ts b/src/router/guards/is-authenticated.guard.ts index b68c52d..fe8eadc 100644 --- a/src/router/guards/is-authenticated.guard.ts +++ b/src/router/guards/is-authenticated.guard.ts @@ -1,6 +1,6 @@ import { useAuthStore } from "@data/auth"; import { NavigationGuardNext, RouteLocationNormalized } from "vue-router"; -import { getLoginUrlWithRedirect } from "../login-redirect-url"; +import { getLoginUrlWithRedirect } from "./login-redirect-url"; export const isAuthenticatedGuard = ( to: RouteLocationNormalized, diff --git a/src/router/guards/is-authenticated.unit.ts b/src/router/guards/is-authenticated.unit.ts new file mode 100644 index 0000000..d500338 --- /dev/null +++ b/src/router/guards/is-authenticated.unit.ts @@ -0,0 +1,121 @@ +import { meResponseFactory } from "@@/tests/test-utils/factory"; +import { useAuthStore } from "@data/auth"; +import { createTestingPinia } from "@pinia/testing"; +import { setActivePinia } from "pinia"; +import { RouteLocationNormalized } from "vue-router"; +import { isAuthenticatedGuard } from "./is-authenticated.guard"; + +jest.mock("./login-redirect-url", () => ({ + getLoginUrlWithRedirect: () => "login-url", +})); + +describe("Authentication Guard", () => { + beforeEach(() => { + setActivePinia(createTestingPinia()); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe("isAuthenticatedGuard", () => { + describe("when authenticated", () => { + const setup = () => { + const to: RouteLocationNormalized = { + fullPath: "/test", + } as RouteLocationNormalized; + const from: RouteLocationNormalized = {} as RouteLocationNormalized; + const next = jest.fn(); + const authStore = useAuthStore(); + + authStore.me = meResponseFactory.build(); + + return { + to, + from, + next, + }; + }; + + it("should pass", () => { + const { to, from, next } = setup(); + + isAuthenticatedGuard(to, from, next); + + expect(next).toHaveBeenCalled(); + }); + }); + + describe("when the url is public", () => { + const setup = () => { + const to: RouteLocationNormalized = { + fullPath: "/test", + meta: { + isPublic: true, + }, + } as unknown as RouteLocationNormalized; + const from: RouteLocationNormalized = {} as RouteLocationNormalized; + const next = jest.fn(); + const authStore = useAuthStore(); + + authStore.me = null; + + return { + to, + from, + next, + }; + }; + + it("should pass", () => { + const { to, from, next } = setup(); + + isAuthenticatedGuard(to, from, next); + + expect(next).toHaveBeenCalled(); + }); + }); + + describe("when not authenticated and the url is not public", () => { + const setup = () => { + const to: RouteLocationNormalized = { + fullPath: "/test", + } as RouteLocationNormalized; + const from: RouteLocationNormalized = {} as RouteLocationNormalized; + const next = jest.fn(); + const authStore = useAuthStore(); + + authStore.me = null; + + const assign = jest.fn(); + Object.defineProperty(window, "location", { + configurable: true, + value: { assign }, + }); + + return { + to, + from, + next, + assign, + }; + }; + + it("should redirect to login", () => { + const { to, from, next, assign } = setup(); + + isAuthenticatedGuard(to, from, next); + + expect(assign).toHaveBeenCalledWith("login-url"); + }); + + it("should not pass", () => { + const { to, from, next } = setup(); + + isAuthenticatedGuard(to, from, next); + + expect(next).not.toHaveBeenCalled(); + }); + }); + }); +}); diff --git a/src/router/login-redirect-url.ts b/src/router/guards/login-redirect-url.ts similarity index 94% rename from src/router/login-redirect-url.ts rename to src/router/guards/login-redirect-url.ts index 09c4483..32d9aee 100644 --- a/src/router/login-redirect-url.ts +++ b/src/router/guards/login-redirect-url.ts @@ -1,6 +1,6 @@ import { useEnvConfigStore } from "@data/env-config"; -export const getLoginUrlWithRedirect = (targetPath: string) => { +export const getLoginUrlWithRedirect = (targetPath: string): string => { const currentOrigin = window.location.origin; const currentUrl = new URL(targetPath, currentOrigin); diff --git a/src/router/guards/login-redirect-url.unit.ts b/src/router/guards/login-redirect-url.unit.ts new file mode 100644 index 0000000..dd1d479 --- /dev/null +++ b/src/router/guards/login-redirect-url.unit.ts @@ -0,0 +1,87 @@ +import { envsFactory } from "@@/tests/test-utils/factory"; +import { useEnvConfigStore } from "@data/env-config"; +import { createPinia, setActivePinia } from "pinia"; +import { getLoginUrlWithRedirect } from "./login-redirect-url"; + +describe("Login Redirect Util", () => { + beforeEach(() => { + setActivePinia(createPinia()); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe("getLoginUrlWithRedirect", () => { + describe("when redirecting to internal login before redirecting to the target url", () => { + const setup = () => { + const loginUrl = "https://test.com/login"; + const targetPath = "/dashboard"; + const origin = "https://test.com"; + const envConfigStore = useEnvConfigStore(); + + envConfigStore.setEnvs( + envsFactory.build({ + NOT_AUTHENTICATED_REDIRECT_URL: loginUrl, + }) + ); + + jest.spyOn(window, "location", "get").mockReturnValue({ + origin: origin, + } as Location); + + return { + loginUrl, + targetPath, + origin, + }; + }; + + it("should redirect to internal login with post-login-redirect to internal target url", () => { + const { loginUrl, targetPath, origin } = setup(); + + const result = getLoginUrlWithRedirect(targetPath); + + expect(result).toEqual( + `${loginUrl}?redirect=${encodeURIComponent(`${origin}${targetPath}`)}` + ); + }); + }); + + describe("when redirecting to an external login before redirecting to the target url", () => { + const setup = () => { + const origin = "https://test.com"; + const loginUrl = `https://external-login.thr/login?service=${encodeURIComponent(origin)}`; + const targetPath = "/dashboard"; + const envConfigStore = useEnvConfigStore(); + + envConfigStore.setEnvs( + envsFactory.build({ + NOT_AUTHENTICATED_REDIRECT_URL: loginUrl, + }) + ); + + jest.spyOn(window, "location", "get").mockReturnValue({ + origin: origin, + } as Location); + + return { + loginUrl, + targetPath, + origin, + }; + }; + + it("should redirect to external login with post-login-redirect to internal target url", () => { + const { loginUrl, targetPath, origin } = setup(); + + const result = getLoginUrlWithRedirect(targetPath); + + const redirectUri = encodeURIComponent(`${origin}${targetPath}`); + expect(result).toEqual( + `${loginUrl}${encodeURIComponent(`/?redirect=${redirectUri}`)}` + ); + }); + }); + }); +}); diff --git a/src/utils/api/api.ts b/src/utils/api/api.ts index b037fc0..16bb944 100644 --- a/src/utils/api/api.ts +++ b/src/utils/api/api.ts @@ -34,9 +34,9 @@ export const mapAxiosErrorToResponseError = ( apiError = errorPayload; } else if (typeof errorPayload === "string") { apiError.message = errorPayload; - apiError.code = error.response?.status || apiError.code; - apiError.type = error.code || apiError.type; - apiError.title = error.response?.statusText || apiError.title; + apiError.code = error.response?.status ?? apiError.code; + apiError.type = error.code ?? apiError.type; + apiError.title = error.response?.statusText ?? apiError.title; } } return apiError; diff --git a/src/utils/api/api.unit.ts b/src/utils/api/api.unit.ts index 604d34f..778c1fa 100644 --- a/src/utils/api/api.unit.ts +++ b/src/utils/api/api.unit.ts @@ -95,7 +95,7 @@ describe("AxiosInstance", () => { const data = "NOT_FOUND"; const responseError = axiosErrorFactory.build({ - response: { data }, + response: { data, status: undefined, statusText: undefined }, }); return { @@ -111,7 +111,7 @@ describe("AxiosInstance", () => { expect(result).toStrictEqual({ message: "NOT_FOUND", code: 1, - title: responseError.response?.statusText, + title: "", type: "Unknown error", }); }); From e08c5155d791ad9356e59ce8e89a569dca3f2ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Mon, 5 Aug 2024 17:14:27 +0200 Subject: [PATCH 18/26] add integration test for vuetify plugin, remove setup scripts from coverage --- jest.config.js | 1 - sonar-project.properties | 5 +++- src/{ => plugins}/vuetify.options.ts | 0 src/plugins/vuetify.ts | 2 +- src/plugins/vuetify.unit.ts | 41 ++++++++++++++++++++++++++++ tests/test-utils/mountComposable.ts | 20 ++++++++++++++ 6 files changed, 66 insertions(+), 3 deletions(-) rename src/{ => plugins}/vuetify.options.ts (100%) create mode 100644 src/plugins/vuetify.unit.ts create mode 100644 tests/test-utils/mountComposable.ts diff --git a/jest.config.js b/jest.config.js index 5dd25b5..7da59af 100644 --- a/jest.config.js +++ b/jest.config.js @@ -34,7 +34,6 @@ const config = deepmerge(defaultPreset, { // Exclude "!/src/**/index.(js|ts)", - "!/src/plugins/vuetify.ts", ], }); diff --git a/sonar-project.properties b/sonar-project.properties index 89679c1..1befaf6 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,11 +2,14 @@ sonar.organization=schulcloud-verbund sonar.projectKey=hpi-schul-cloud_shd-client sonar.sources=. -sonar.tests=src/ +sonar.tests=. # Exclude test files, locales and generated code from source scope sonar.exclusions=src/serverApi/**/*,**/locales/**.ts +# Exclude scripts from root folder, app setup scripts from src and route config from coverage +sonar.coverage.exclusions=./*,src/*,src/router/* + # Include test files and test utils in test scope sonar.test.inclusions=tests/**/*,**/*.unit.ts,**/*.unit.js diff --git a/src/vuetify.options.ts b/src/plugins/vuetify.options.ts similarity index 100% rename from src/vuetify.options.ts rename to src/plugins/vuetify.options.ts diff --git a/src/plugins/vuetify.ts b/src/plugins/vuetify.ts index fcf0fee..0ec8762 100644 --- a/src/plugins/vuetify.ts +++ b/src/plugins/vuetify.ts @@ -1,7 +1,7 @@ import "vuetify/styles"; import { createVuetify } from "vuetify"; -import theme from "@/vuetify.options"; +import theme from "./vuetify.options"; export default createVuetify({ ...theme, diff --git a/src/plugins/vuetify.unit.ts b/src/plugins/vuetify.unit.ts new file mode 100644 index 0000000..9ec23a2 --- /dev/null +++ b/src/plugins/vuetify.unit.ts @@ -0,0 +1,41 @@ +import { mount } from "@vue/test-utils"; +import { defineComponent } from "vue"; +import { VBtn } from "vuetify/lib/components/index.mjs"; +import vuetify from "./vuetify"; + +jest.mock("vuetify/styles", () => ({}), { virtual: true }); +jest.mock( + "vuetify/iconsets/mdi-svg", + () => ({ + aliases: [], + mdi: [], + }), + { virtual: true } +); + +describe("vuetify plugin", () => { + describe("when creating the vuetify plugin", () => { + const setup = () => { + const TestComponent = defineComponent({ + template: "", + components: { VBtn }, + }); + + const wrapper = mount(TestComponent, { + global: { plugins: [vuetify] }, + }); + + return { + wrapper, + }; + }; + + it("should make vuetify components available", () => { + const { wrapper } = setup(); + + const button = wrapper.findComponent(VBtn); + + expect(button.exists()).toEqual(true); + }); + }); +}); diff --git a/tests/test-utils/mountComposable.ts b/tests/test-utils/mountComposable.ts new file mode 100644 index 0000000..38fb83e --- /dev/null +++ b/tests/test-utils/mountComposable.ts @@ -0,0 +1,20 @@ +import { ComponentMountingOptions, mount } from "@vue/test-utils"; +import { DefineComponent, defineComponent } from "vue"; + +export const mountComposable = ( + composable: () => T, + options?: ComponentMountingOptions +): T => { + const TestComponent = defineComponent({ + setup() { + const result = composable(); + return { result }; + }, + template: "
", + }); + + const wrapper = mount(TestComponent, options); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + return wrapper.vm.result; +}; From 4be97a8daaf6d8dd308e2b4c7621b7abb9f24560 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Mon, 5 Aug 2024 17:22:41 +0200 Subject: [PATCH 19/26] exclude root from coverage --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index 1befaf6..a59f1bc 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -8,7 +8,7 @@ sonar.tests=. sonar.exclusions=src/serverApi/**/*,**/locales/**.ts # Exclude scripts from root folder, app setup scripts from src and route config from coverage -sonar.coverage.exclusions=./*,src/*,src/router/* +sonar.coverage.exclusions=/*,src/*,src/router/* # Include test files and test utils in test scope sonar.test.inclusions=tests/**/*,**/*.unit.ts,**/*.unit.js From 2bc1f7e59dd4bcfee7836232d5efa7911b167496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Tue, 6 Aug 2024 09:28:02 +0200 Subject: [PATCH 20/26] exclude webpack scripts and vue files from coverage --- jest.config.js | 1 + sonar-project.properties | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/jest.config.js b/jest.config.js index 7da59af..223fbe9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -26,6 +26,7 @@ const config = deepmerge(defaultPreset, { collectCoverageFrom: [ // Include + // TODO Vue files are excluded for now, since they don't report the correct coverage "/src/layouts/**/*.{js,ts}", // add vue files "/src/modules/**/*.{js,ts}", // add vue files "/src/plugins/**/*.(js|ts)", diff --git a/sonar-project.properties b/sonar-project.properties index a59f1bc..a3794e3 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -8,7 +8,8 @@ sonar.tests=. sonar.exclusions=src/serverApi/**/*,**/locales/**.ts # Exclude scripts from root folder, app setup scripts from src and route config from coverage -sonar.coverage.exclusions=/*,src/*,src/router/* +# TODO Vue files are excluded for now, since they don't report the correct coverage +sonar.coverage.exclusions=/*,src/*,src/router/*,webpack-config/**/*,**/*.vue # Include test files and test utils in test scope sonar.test.inclusions=tests/**/*,**/*.unit.ts,**/*.unit.js From 21d57fc9060a3b1c8bb49ecb28045f37fb726828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Tue, 6 Aug 2024 10:35:57 +0200 Subject: [PATCH 21/26] deactivate authentication guard --- src/router/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/router/index.ts b/src/router/index.ts index c70d9ff..3bb9e1c 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,5 +1,4 @@ import { createRouter, createWebHistory } from "vue-router"; -import { isAuthenticatedGuard } from "./guards"; import { routes } from "./routes"; const router = createRouter({ @@ -7,6 +6,7 @@ const router = createRouter({ routes, }); -router.beforeEach(isAuthenticatedGuard); +// TODO add authentication +// router.beforeEach(isAuthenticatedGuard); export default router; From d3d515051466f424dee85256c4b420cc0210cf69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 8 Aug 2024 13:03:09 +0200 Subject: [PATCH 22/26] adjust generated api --- openapitools-for-server.json | 7 +- .../data/env-config/envConfigDefaults.ts | 10 +- src/plugins/i18n.unit.ts | 8 +- src/serverApi/v3/.openapi-generator/FILES | 297 + src/serverApi/v3/api.ts | 25770 +--------------- src/serverApi/v3/api/account-api.ts | 614 + src/serverApi/v3/api/admin-students-api.ts | 293 + src/serverApi/v3/api/admin-teachers-api.ts | 293 + src/serverApi/v3/api/alert-api.ts | 137 + src/serverApi/v3/api/authentication-api.ts | 315 + src/serverApi/v3/api/authorization-api.ts | 155 + src/serverApi/v3/api/board-api.ts | 754 + src/serverApi/v3/api/board-card-api.ts | 619 + src/serverApi/v3/api/board-column-api.ts | 428 + src/serverApi/v3/api/board-element-api.ts | 523 + src/serverApi/v3/api/board-submission-api.ts | 422 + .../v3/api/collaborative-storage-api.ts | 162 + .../v3/api/collaborative-text-editor-api.ts | 234 + src/serverApi/v3/api/courses-api.ts | 503 + src/serverApi/v3/api/dashboard-api.ts | 334 + src/serverApi/v3/api/default-api.ts | 206 + src/serverApi/v3/api/group-api.ts | 397 + src/serverApi/v3/api/lesson-api.ts | 298 + src/serverApi/v3/api/me-api.ts | 141 + src/serverApi/v3/api/media-board-api.ts | 588 + src/serverApi/v3/api/media-element-api.ts | 329 + src/serverApi/v3/api/media-line-api.ts | 521 + .../v3/api/meta-tag-extractor-api.ts | 153 + src/serverApi/v3/api/news-api.ts | 624 + src/serverApi/v3/api/oauth2-api.ts | 1061 + src/serverApi/v3/api/pseudonym-api.ts | 149 + src/serverApi/v3/api/rooms-api.ts | 494 + src/serverApi/v3/api/school-api.ts | 807 + src/serverApi/v3/api/share-token-api.ts | 333 + src/serverApi/v3/api/ssoapi.ts | 220 + src/serverApi/v3/api/submission-api.ts | 220 + src/serverApi/v3/api/systems-api.ts | 308 + src/serverApi/v3/api/task-api.ts | 636 + src/serverApi/v3/api/tool-api.ts | 2576 ++ src/serverApi/v3/api/user-api.ts | 218 + src/serverApi/v3/api/user-import-api.ts | 947 + .../v3/api/user-login-migration-api.ts | 677 + .../api/user-login-migration-rollback-api.ts | 147 + src/serverApi/v3/api/video-conference-api.ts | 717 + src/serverApi/v3/index.ts | 2 +- .../v3/models/account-by-id-body-params.ts | 43 + src/serverApi/v3/models/account-response.ts | 55 + .../v3/models/account-search-list-response.ts | 50 + src/serverApi/v3/models/action.ts | 28 + src/serverApi/v3/models/alert-response.ts | 32 + .../v3/models/api-validation-error.ts | 55 + .../v3/models/authorization-body-params.ts | 65 + .../v3/models/authorization-context-params.ts | 39 + src/serverApi/v3/models/authorized-reponse.ts | 37 + .../v3/models/basic-tool-config-params.ts | 37 + .../v3/models/board-context-response.ts | 38 + .../v3/models/board-element-response.ts | 48 + .../models/board-external-reference-type.ts | 28 + src/serverApi/v3/models/board-layout.ts | 29 + src/serverApi/v3/models/board-parent-type.ts | 28 + src/serverApi/v3/models/board-response.ts | 63 + src/serverApi/v3/models/card-list-response.ts | 32 + src/serverApi/v3/models/card-response.ts | 70 + .../v3/models/card-skeleton-response.ts | 37 + .../v3/models/change-language-params.ts | 32 + .../v3/models/class-info-response.ts | 90 + .../models/class-info-search-list-response.ts | 50 + .../v3/models/class-request-context.ts | 28 + src/serverApi/v3/models/class-response.ts | 37 + .../v3/models/class-sort-query-type.ts | 31 + ...laborative-text-editor-element-response.ts | 51 + .../collaborative-text-editor-parent-type.ts | 27 + .../collaborative-text-editor-response.ts | 31 + .../v3/models/collapsable-body-params.ts | 31 + src/serverApi/v3/models/color-body-params.ts | 32 + src/serverApi/v3/models/column-response.ts | 51 + src/serverApi/v3/models/config-response.ts | 430 + .../v3/models/consent-request-body.ts | 73 + src/serverApi/v3/models/consent-response.ts | 105 + .../v3/models/consent-session-response.ts | 43 + src/serverApi/v3/models/consents-response.ts | 39 + .../v3/models/content-element-type.ts | 33 + .../context-external-tool-body-params.ts | 38 + ...rnal-tool-configuration-status-response.ts | 61 + ...ol-configuration-template-list-response.ts | 32 + ...al-tool-configuration-template-response.ts | 62 + ...xternal-tool-count-per-context-response.ts | 43 + .../context-external-tool-post-params.ts | 56 + .../models/context-external-tool-response.ts | 79 + ...text-external-tool-search-list-response.ts | 32 + src/serverApi/v3/models/copy-api-response.ts | 119 + src/serverApi/v3/models/county-response.ts | 49 + .../v3/models/course-export-body-params.ts | 43 + .../v3/models/course-info-response.ts | 37 + .../models/course-metadata-list-response.ts | 50 + .../v3/models/course-metadata-response.ts | 67 + .../v3/models/create-board-body-params.ts | 51 + .../v3/models/create-board-response.ts | 31 + .../v3/models/create-card-body-params.ts | 46 + .../create-content-element-body-params.ts | 38 + .../create-media-element-body-params.ts | 43 + src/serverApi/v3/models/create-news-params.ts | 66 + .../create-submission-item-body-params.ts | 31 + .../v3/models/custom-parameter-entry-param.ts | 37 + .../models/custom-parameter-entry-response.ts | 37 + .../v3/models/custom-parameter-post-params.ts | 91 + .../v3/models/custom-parameter-response.ts | 126 + .../models/dashboard-grid-element-response.ts | 86 + .../dashboard-grid-sub-element-response.ts | 49 + src/serverApi/v3/models/dashboard-response.ts | 38 + .../v3/models/drawing-content-body.ts | 31 + .../v3/models/drawing-element-content-body.ts | 39 + .../v3/models/drawing-element-content.ts | 31 + .../v3/models/drawing-element-response.ts | 52 + .../v3/models/entity-not-found-error.ts | 55 + .../v3/models/external-source-response.ts | 37 + .../external-tool-bulk-create-params.ts | 32 + .../v3/models/external-tool-content-body.ts | 31 + .../v3/models/external-tool-create-params.ts | 103 + .../external-tool-element-content-body.ts | 39 + .../models/external-tool-element-content.ts | 31 + .../models/external-tool-element-response.ts | 52 + .../v3/models/external-tool-medium-params.ts | 43 + .../models/external-tool-medium-response.ts | 43 + .../models/external-tool-metadata-response.ts | 38 + .../v3/models/external-tool-response.ts | 109 + .../external-tool-search-list-response.ts | 50 + .../v3/models/external-tool-update-params.ts | 109 + .../v3/models/federal-state-response.ts | 56 + src/serverApi/v3/models/file-content-body.ts | 37 + .../v3/models/file-element-content-body.ts | 39 + .../v3/models/file-element-content.ts | 37 + .../v3/models/file-element-response.ts | 52 + src/serverApi/v3/models/file-storage-type.ts | 27 + .../v3/models/forbidden-operation-error.ts | 55 + .../v3/models/force-migration-params.ts | 43 + .../v3/models/get-meta-tag-data-body.ts | 31 + .../v3/models/group-list-response.ts | 50 + src/serverApi/v3/models/group-response.ts | 74 + .../v3/models/group-user-response.ts | 50 + .../v3/models/import-user-list-response.ts | 50 + .../v3/models/import-user-response.ts | 85 + src/serverApi/v3/models/index.ts | 257 + src/serverApi/v3/models/instance-feature.ts | 27 + src/serverApi/v3/models/language-type.ts | 30 + src/serverApi/v3/models/layout-body-params.ts | 32 + .../models/ldap-authorization-body-params.ts | 49 + .../v3/models/lesson-content-response.ts | 76 + .../v3/models/lesson-copy-api-params.ts | 31 + .../models/lesson-metadata-list-response.ts | 50 + .../v3/models/lesson-metadata-response.ts | 37 + src/serverApi/v3/models/lesson-response.ts | 82 + src/serverApi/v3/models/link-content-body.ts | 49 + .../v3/models/link-element-content-body.ts | 39 + .../v3/models/link-element-content.ts | 49 + .../v3/models/link-element-response.ts | 52 + .../models/local-authorization-body-params.ts | 37 + src/serverApi/v3/models/login-request-body.ts | 67 + src/serverApi/v3/models/login-response.ts | 87 + src/serverApi/v3/models/lti-message-type.ts | 27 + .../v3/models/lti-privacy-permission.ts | 31 + .../models/lti11-tool-config-create-params.ts | 70 + .../models/lti11-tool-config-update-params.ts | 70 + src/serverApi/v3/models/material-response.ts | 73 + .../v3/models/me-account-response.ts | 31 + src/serverApi/v3/models/me-response.ts | 66 + src/serverApi/v3/models/me-role-response.ts | 37 + .../v3/models/me-school-logo-response.ts | 37 + src/serverApi/v3/models/me-school-response.ts | 44 + src/serverApi/v3/models/me-user-response.ts | 49 + .../media-available-line-element-response.ts | 55 + .../models/media-available-line-response.ts | 45 + src/serverApi/v3/models/media-board-colors.ts | 46 + .../v3/models/media-board-layout-type.ts | 29 + .../v3/models/media-board-response.ts | 52 + .../media-external-tool-element-content.ts | 31 + .../media-external-tool-element-response.ts | 45 + .../v3/models/media-line-response.ts | 64 + src/serverApi/v3/models/message-origin.ts | 37 + src/serverApi/v3/models/message.ts | 68 + .../v3/models/meta-tag-extractor-response.ts | 67 + .../v3/models/move-card-body-params.ts | 37 + .../v3/models/move-column-body-params.ts | 37 + .../v3/models/move-content-element-body.ts | 37 + .../v3/models/move-element-body-params.ts | 37 + .../v3/models/move-element-params.ts | 38 + .../v3/models/move-element-position-params.ts | 43 + src/serverApi/v3/models/news-list-response.ts | 50 + src/serverApi/v3/models/news-response.ts | 129 + src/serverApi/v3/models/news-target-model.ts | 29 + .../v3/models/oauth-client-create-body.ts | 85 + .../v3/models/oauth-client-response.ts | 301 + .../v3/models/oauth-client-update-body.ts | 79 + .../v3/models/oauth-config-response.ts | 97 + src/serverApi/v3/models/oauth-token-dto.ts | 43 + .../oauth2-authorization-body-params.ts | 43 + .../v3/models/oauth2-migration-params.ts | 43 + .../oauth2-tool-config-create-params.ts | 79 + .../oauth2-tool-config-update-params.ts | 79 + .../v3/models/oidc-context-response.ts | 55 + .../v3/models/parent-consent-response.ts | 61 + src/serverApi/v3/models/patch-group-params.ts | 31 + .../v3/models/patch-my-account-params.ts | 55 + .../v3/models/patch-my-password-params.ts | 37 + src/serverApi/v3/models/patch-order-params.ts | 31 + .../v3/models/patch-visibility-params.ts | 31 + src/serverApi/v3/models/permission.ts | 186 + .../v3/models/provider-config-response.ts | 31 + src/serverApi/v3/models/pseudonym-response.ts | 43 + .../v3/models/public-system-list-response.ts | 32 + .../v3/models/public-system-response.ts | 56 + src/serverApi/v3/models/redirect-response.ts | 31 + src/serverApi/v3/models/rename-body-params.ts | 31 + .../v3/models/resolved-user-response.ts | 73 + .../v3/models/rich-text-content-body.ts | 37 + .../models/rich-text-element-content-body.ts | 39 + .../v3/models/rich-text-element-content.ts | 37 + .../v3/models/rich-text-element-response.ts | 52 + src/serverApi/v3/models/rich-text.ts | 49 + src/serverApi/v3/models/role-name.ts | 45 + .../v3/models/school-exists-response.ts | 31 + ...rnal-tool-configuration-status-response.ts | 37 + ...ol-configuration-template-list-response.ts | 32 + ...al-tool-configuration-template-response.ts | 56 + .../school-external-tool-metadata-response.ts | 32 + .../school-external-tool-post-params.ts | 50 + .../models/school-external-tool-response.ts | 69 + ...hool-external-tool-search-list-response.ts | 32 + src/serverApi/v3/models/school-feature.ts | 35 + .../school-for-external-invite-response.ts | 37 + .../models/school-for-ldap-login-response.ts | 44 + .../v3/models/school-info-response.ts | 37 + src/serverApi/v3/models/school-logo.ts | 37 + .../v3/models/school-permissions-params.ts | 39 + src/serverApi/v3/models/school-purpose.ts | 31 + src/serverApi/v3/models/school-response.ts | 160 + .../v3/models/school-system-response.ts | 56 + .../v3/models/school-update-body-params.ts | 92 + .../v3/models/school-year-query-type.ts | 29 + .../v3/models/school-year-response.ts | 49 + ...chul-conne-xprovisioning-options-params.ts | 49 + ...ul-conne-xprovisioning-options-response.ts | 49 + src/serverApi/v3/models/schulcloud-theme.ts | 30 + .../v3/models/set-height-body-params.ts | 31 + .../v3/models/share-token-body-params.ts | 61 + .../models/share-token-import-body-params.ts | 37 + .../v3/models/share-token-info-response.ts | 55 + .../v3/models/share-token-payload-response.ts | 49 + .../v3/models/share-token-response.ts | 44 + .../v3/models/single-column-board-response.ts | 62 + .../v3/models/student-permission-params.ts | 31 + .../submission-container-content-body.ts | 31 + ...bmission-container-element-content-body.ts | 39 + .../submission-container-element-content.ts | 31 + .../submission-container-element-response.ts | 52 + .../v3/models/submission-item-response.ts | 58 + .../models/submission-status-list-response.ts | 32 + .../v3/models/submission-status-response.ts | 61 + .../v3/models/submissions-response.ts | 39 + .../v3/models/successful-response.ts | 31 + .../models/system-for-ldap-login-response.ts | 43 + src/serverApi/v3/models/system-type.ts | 36 + .../v3/models/target-info-response.ts | 37 + .../v3/models/task-copy-api-params.ts | 37 + src/serverApi/v3/models/task-list-response.ts | 50 + src/serverApi/v3/models/task-response.ts | 105 + .../v3/models/task-status-response.ts | 61 + .../v3/models/teacher-permission-params.ts | 31 + .../v3/models/team-permissions-body.ts | 55 + .../v3/models/timestamps-response.ts | 43 + src/serverApi/v3/models/timezone.ts | 27 + src/serverApi/v3/models/tool-config-type.ts | 29 + src/serverApi/v3/models/tool-context-type.ts | 29 + .../tool-context-types-list-response.ts | 32 + .../v3/models/tool-launch-request-response.ts | 59 + .../v3/models/tool-reference-list-response.ts | 32 + .../v3/models/tool-reference-response.ts | 68 + .../v3/models/update-board-title-params.ts | 31 + .../update-element-content-body-params.ts | 37 + src/serverApi/v3/models/update-flag-params.ts | 31 + .../v3/models/update-match-params.ts | 31 + src/serverApi/v3/models/update-news-params.ts | 43 + .../update-submission-item-body-params.ts | 31 + .../v3/models/user-consent-response.ts | 55 + src/serverApi/v3/models/user-data-response.ts | 43 + src/serverApi/v3/models/user-info-response.ts | 43 + src/serverApi/v3/models/user-list-response.ts | 50 + .../user-login-migration-mandatory-params.ts | 31 + .../models/user-login-migration-response.ts | 67 + ...er-login-migration-search-list-response.ts | 50 + .../v3/models/user-match-list-response.ts | 50 + .../v3/models/user-match-response.ts | 80 + src/serverApi/v3/models/user-response.ts | 105 + src/serverApi/v3/models/validation-error.ts | 55 + .../models/video-conference-create-params.ts | 49 + .../models/video-conference-info-response.ts | 39 + .../models/video-conference-join-response.ts | 31 + .../video-conference-options-response.ts | 43 + .../v3/models/video-conference-scope.ts | 28 + .../models/video-conference-state-response.ts | 29 + .../v3/models/visibility-body-params.ts | 31 + .../v3/models/visibility-settings-response.ts | 31 + src/serverApi/v3/models/years-response.ts | 50 + tests/test-utils/factory/meResponseFactory.ts | 2 +- 304 files changed, 32333 insertions(+), 25742 deletions(-) create mode 100644 src/serverApi/v3/api/account-api.ts create mode 100644 src/serverApi/v3/api/admin-students-api.ts create mode 100644 src/serverApi/v3/api/admin-teachers-api.ts create mode 100644 src/serverApi/v3/api/alert-api.ts create mode 100644 src/serverApi/v3/api/authentication-api.ts create mode 100644 src/serverApi/v3/api/authorization-api.ts create mode 100644 src/serverApi/v3/api/board-api.ts create mode 100644 src/serverApi/v3/api/board-card-api.ts create mode 100644 src/serverApi/v3/api/board-column-api.ts create mode 100644 src/serverApi/v3/api/board-element-api.ts create mode 100644 src/serverApi/v3/api/board-submission-api.ts create mode 100644 src/serverApi/v3/api/collaborative-storage-api.ts create mode 100644 src/serverApi/v3/api/collaborative-text-editor-api.ts create mode 100644 src/serverApi/v3/api/courses-api.ts create mode 100644 src/serverApi/v3/api/dashboard-api.ts create mode 100644 src/serverApi/v3/api/default-api.ts create mode 100644 src/serverApi/v3/api/group-api.ts create mode 100644 src/serverApi/v3/api/lesson-api.ts create mode 100644 src/serverApi/v3/api/me-api.ts create mode 100644 src/serverApi/v3/api/media-board-api.ts create mode 100644 src/serverApi/v3/api/media-element-api.ts create mode 100644 src/serverApi/v3/api/media-line-api.ts create mode 100644 src/serverApi/v3/api/meta-tag-extractor-api.ts create mode 100644 src/serverApi/v3/api/news-api.ts create mode 100644 src/serverApi/v3/api/oauth2-api.ts create mode 100644 src/serverApi/v3/api/pseudonym-api.ts create mode 100644 src/serverApi/v3/api/rooms-api.ts create mode 100644 src/serverApi/v3/api/school-api.ts create mode 100644 src/serverApi/v3/api/share-token-api.ts create mode 100644 src/serverApi/v3/api/ssoapi.ts create mode 100644 src/serverApi/v3/api/submission-api.ts create mode 100644 src/serverApi/v3/api/systems-api.ts create mode 100644 src/serverApi/v3/api/task-api.ts create mode 100644 src/serverApi/v3/api/tool-api.ts create mode 100644 src/serverApi/v3/api/user-api.ts create mode 100644 src/serverApi/v3/api/user-import-api.ts create mode 100644 src/serverApi/v3/api/user-login-migration-api.ts create mode 100644 src/serverApi/v3/api/user-login-migration-rollback-api.ts create mode 100644 src/serverApi/v3/api/video-conference-api.ts create mode 100644 src/serverApi/v3/models/account-by-id-body-params.ts create mode 100644 src/serverApi/v3/models/account-response.ts create mode 100644 src/serverApi/v3/models/account-search-list-response.ts create mode 100644 src/serverApi/v3/models/action.ts create mode 100644 src/serverApi/v3/models/alert-response.ts create mode 100644 src/serverApi/v3/models/api-validation-error.ts create mode 100644 src/serverApi/v3/models/authorization-body-params.ts create mode 100644 src/serverApi/v3/models/authorization-context-params.ts create mode 100644 src/serverApi/v3/models/authorized-reponse.ts create mode 100644 src/serverApi/v3/models/basic-tool-config-params.ts create mode 100644 src/serverApi/v3/models/board-context-response.ts create mode 100644 src/serverApi/v3/models/board-element-response.ts create mode 100644 src/serverApi/v3/models/board-external-reference-type.ts create mode 100644 src/serverApi/v3/models/board-layout.ts create mode 100644 src/serverApi/v3/models/board-parent-type.ts create mode 100644 src/serverApi/v3/models/board-response.ts create mode 100644 src/serverApi/v3/models/card-list-response.ts create mode 100644 src/serverApi/v3/models/card-response.ts create mode 100644 src/serverApi/v3/models/card-skeleton-response.ts create mode 100644 src/serverApi/v3/models/change-language-params.ts create mode 100644 src/serverApi/v3/models/class-info-response.ts create mode 100644 src/serverApi/v3/models/class-info-search-list-response.ts create mode 100644 src/serverApi/v3/models/class-request-context.ts create mode 100644 src/serverApi/v3/models/class-response.ts create mode 100644 src/serverApi/v3/models/class-sort-query-type.ts create mode 100644 src/serverApi/v3/models/collaborative-text-editor-element-response.ts create mode 100644 src/serverApi/v3/models/collaborative-text-editor-parent-type.ts create mode 100644 src/serverApi/v3/models/collaborative-text-editor-response.ts create mode 100644 src/serverApi/v3/models/collapsable-body-params.ts create mode 100644 src/serverApi/v3/models/color-body-params.ts create mode 100644 src/serverApi/v3/models/column-response.ts create mode 100644 src/serverApi/v3/models/config-response.ts create mode 100644 src/serverApi/v3/models/consent-request-body.ts create mode 100644 src/serverApi/v3/models/consent-response.ts create mode 100644 src/serverApi/v3/models/consent-session-response.ts create mode 100644 src/serverApi/v3/models/consents-response.ts create mode 100644 src/serverApi/v3/models/content-element-type.ts create mode 100644 src/serverApi/v3/models/context-external-tool-body-params.ts create mode 100644 src/serverApi/v3/models/context-external-tool-configuration-status-response.ts create mode 100644 src/serverApi/v3/models/context-external-tool-configuration-template-list-response.ts create mode 100644 src/serverApi/v3/models/context-external-tool-configuration-template-response.ts create mode 100644 src/serverApi/v3/models/context-external-tool-count-per-context-response.ts create mode 100644 src/serverApi/v3/models/context-external-tool-post-params.ts create mode 100644 src/serverApi/v3/models/context-external-tool-response.ts create mode 100644 src/serverApi/v3/models/context-external-tool-search-list-response.ts create mode 100644 src/serverApi/v3/models/copy-api-response.ts create mode 100644 src/serverApi/v3/models/county-response.ts create mode 100644 src/serverApi/v3/models/course-export-body-params.ts create mode 100644 src/serverApi/v3/models/course-info-response.ts create mode 100644 src/serverApi/v3/models/course-metadata-list-response.ts create mode 100644 src/serverApi/v3/models/course-metadata-response.ts create mode 100644 src/serverApi/v3/models/create-board-body-params.ts create mode 100644 src/serverApi/v3/models/create-board-response.ts create mode 100644 src/serverApi/v3/models/create-card-body-params.ts create mode 100644 src/serverApi/v3/models/create-content-element-body-params.ts create mode 100644 src/serverApi/v3/models/create-media-element-body-params.ts create mode 100644 src/serverApi/v3/models/create-news-params.ts create mode 100644 src/serverApi/v3/models/create-submission-item-body-params.ts create mode 100644 src/serverApi/v3/models/custom-parameter-entry-param.ts create mode 100644 src/serverApi/v3/models/custom-parameter-entry-response.ts create mode 100644 src/serverApi/v3/models/custom-parameter-post-params.ts create mode 100644 src/serverApi/v3/models/custom-parameter-response.ts create mode 100644 src/serverApi/v3/models/dashboard-grid-element-response.ts create mode 100644 src/serverApi/v3/models/dashboard-grid-sub-element-response.ts create mode 100644 src/serverApi/v3/models/dashboard-response.ts create mode 100644 src/serverApi/v3/models/drawing-content-body.ts create mode 100644 src/serverApi/v3/models/drawing-element-content-body.ts create mode 100644 src/serverApi/v3/models/drawing-element-content.ts create mode 100644 src/serverApi/v3/models/drawing-element-response.ts create mode 100644 src/serverApi/v3/models/entity-not-found-error.ts create mode 100644 src/serverApi/v3/models/external-source-response.ts create mode 100644 src/serverApi/v3/models/external-tool-bulk-create-params.ts create mode 100644 src/serverApi/v3/models/external-tool-content-body.ts create mode 100644 src/serverApi/v3/models/external-tool-create-params.ts create mode 100644 src/serverApi/v3/models/external-tool-element-content-body.ts create mode 100644 src/serverApi/v3/models/external-tool-element-content.ts create mode 100644 src/serverApi/v3/models/external-tool-element-response.ts create mode 100644 src/serverApi/v3/models/external-tool-medium-params.ts create mode 100644 src/serverApi/v3/models/external-tool-medium-response.ts create mode 100644 src/serverApi/v3/models/external-tool-metadata-response.ts create mode 100644 src/serverApi/v3/models/external-tool-response.ts create mode 100644 src/serverApi/v3/models/external-tool-search-list-response.ts create mode 100644 src/serverApi/v3/models/external-tool-update-params.ts create mode 100644 src/serverApi/v3/models/federal-state-response.ts create mode 100644 src/serverApi/v3/models/file-content-body.ts create mode 100644 src/serverApi/v3/models/file-element-content-body.ts create mode 100644 src/serverApi/v3/models/file-element-content.ts create mode 100644 src/serverApi/v3/models/file-element-response.ts create mode 100644 src/serverApi/v3/models/file-storage-type.ts create mode 100644 src/serverApi/v3/models/forbidden-operation-error.ts create mode 100644 src/serverApi/v3/models/force-migration-params.ts create mode 100644 src/serverApi/v3/models/get-meta-tag-data-body.ts create mode 100644 src/serverApi/v3/models/group-list-response.ts create mode 100644 src/serverApi/v3/models/group-response.ts create mode 100644 src/serverApi/v3/models/group-user-response.ts create mode 100644 src/serverApi/v3/models/import-user-list-response.ts create mode 100644 src/serverApi/v3/models/import-user-response.ts create mode 100644 src/serverApi/v3/models/index.ts create mode 100644 src/serverApi/v3/models/instance-feature.ts create mode 100644 src/serverApi/v3/models/language-type.ts create mode 100644 src/serverApi/v3/models/layout-body-params.ts create mode 100644 src/serverApi/v3/models/ldap-authorization-body-params.ts create mode 100644 src/serverApi/v3/models/lesson-content-response.ts create mode 100644 src/serverApi/v3/models/lesson-copy-api-params.ts create mode 100644 src/serverApi/v3/models/lesson-metadata-list-response.ts create mode 100644 src/serverApi/v3/models/lesson-metadata-response.ts create mode 100644 src/serverApi/v3/models/lesson-response.ts create mode 100644 src/serverApi/v3/models/link-content-body.ts create mode 100644 src/serverApi/v3/models/link-element-content-body.ts create mode 100644 src/serverApi/v3/models/link-element-content.ts create mode 100644 src/serverApi/v3/models/link-element-response.ts create mode 100644 src/serverApi/v3/models/local-authorization-body-params.ts create mode 100644 src/serverApi/v3/models/login-request-body.ts create mode 100644 src/serverApi/v3/models/login-response.ts create mode 100644 src/serverApi/v3/models/lti-message-type.ts create mode 100644 src/serverApi/v3/models/lti-privacy-permission.ts create mode 100644 src/serverApi/v3/models/lti11-tool-config-create-params.ts create mode 100644 src/serverApi/v3/models/lti11-tool-config-update-params.ts create mode 100644 src/serverApi/v3/models/material-response.ts create mode 100644 src/serverApi/v3/models/me-account-response.ts create mode 100644 src/serverApi/v3/models/me-response.ts create mode 100644 src/serverApi/v3/models/me-role-response.ts create mode 100644 src/serverApi/v3/models/me-school-logo-response.ts create mode 100644 src/serverApi/v3/models/me-school-response.ts create mode 100644 src/serverApi/v3/models/me-user-response.ts create mode 100644 src/serverApi/v3/models/media-available-line-element-response.ts create mode 100644 src/serverApi/v3/models/media-available-line-response.ts create mode 100644 src/serverApi/v3/models/media-board-colors.ts create mode 100644 src/serverApi/v3/models/media-board-layout-type.ts create mode 100644 src/serverApi/v3/models/media-board-response.ts create mode 100644 src/serverApi/v3/models/media-external-tool-element-content.ts create mode 100644 src/serverApi/v3/models/media-external-tool-element-response.ts create mode 100644 src/serverApi/v3/models/media-line-response.ts create mode 100644 src/serverApi/v3/models/message-origin.ts create mode 100644 src/serverApi/v3/models/message.ts create mode 100644 src/serverApi/v3/models/meta-tag-extractor-response.ts create mode 100644 src/serverApi/v3/models/move-card-body-params.ts create mode 100644 src/serverApi/v3/models/move-column-body-params.ts create mode 100644 src/serverApi/v3/models/move-content-element-body.ts create mode 100644 src/serverApi/v3/models/move-element-body-params.ts create mode 100644 src/serverApi/v3/models/move-element-params.ts create mode 100644 src/serverApi/v3/models/move-element-position-params.ts create mode 100644 src/serverApi/v3/models/news-list-response.ts create mode 100644 src/serverApi/v3/models/news-response.ts create mode 100644 src/serverApi/v3/models/news-target-model.ts create mode 100644 src/serverApi/v3/models/oauth-client-create-body.ts create mode 100644 src/serverApi/v3/models/oauth-client-response.ts create mode 100644 src/serverApi/v3/models/oauth-client-update-body.ts create mode 100644 src/serverApi/v3/models/oauth-config-response.ts create mode 100644 src/serverApi/v3/models/oauth-token-dto.ts create mode 100644 src/serverApi/v3/models/oauth2-authorization-body-params.ts create mode 100644 src/serverApi/v3/models/oauth2-migration-params.ts create mode 100644 src/serverApi/v3/models/oauth2-tool-config-create-params.ts create mode 100644 src/serverApi/v3/models/oauth2-tool-config-update-params.ts create mode 100644 src/serverApi/v3/models/oidc-context-response.ts create mode 100644 src/serverApi/v3/models/parent-consent-response.ts create mode 100644 src/serverApi/v3/models/patch-group-params.ts create mode 100644 src/serverApi/v3/models/patch-my-account-params.ts create mode 100644 src/serverApi/v3/models/patch-my-password-params.ts create mode 100644 src/serverApi/v3/models/patch-order-params.ts create mode 100644 src/serverApi/v3/models/patch-visibility-params.ts create mode 100644 src/serverApi/v3/models/permission.ts create mode 100644 src/serverApi/v3/models/provider-config-response.ts create mode 100644 src/serverApi/v3/models/pseudonym-response.ts create mode 100644 src/serverApi/v3/models/public-system-list-response.ts create mode 100644 src/serverApi/v3/models/public-system-response.ts create mode 100644 src/serverApi/v3/models/redirect-response.ts create mode 100644 src/serverApi/v3/models/rename-body-params.ts create mode 100644 src/serverApi/v3/models/resolved-user-response.ts create mode 100644 src/serverApi/v3/models/rich-text-content-body.ts create mode 100644 src/serverApi/v3/models/rich-text-element-content-body.ts create mode 100644 src/serverApi/v3/models/rich-text-element-content.ts create mode 100644 src/serverApi/v3/models/rich-text-element-response.ts create mode 100644 src/serverApi/v3/models/rich-text.ts create mode 100644 src/serverApi/v3/models/role-name.ts create mode 100644 src/serverApi/v3/models/school-exists-response.ts create mode 100644 src/serverApi/v3/models/school-external-tool-configuration-status-response.ts create mode 100644 src/serverApi/v3/models/school-external-tool-configuration-template-list-response.ts create mode 100644 src/serverApi/v3/models/school-external-tool-configuration-template-response.ts create mode 100644 src/serverApi/v3/models/school-external-tool-metadata-response.ts create mode 100644 src/serverApi/v3/models/school-external-tool-post-params.ts create mode 100644 src/serverApi/v3/models/school-external-tool-response.ts create mode 100644 src/serverApi/v3/models/school-external-tool-search-list-response.ts create mode 100644 src/serverApi/v3/models/school-feature.ts create mode 100644 src/serverApi/v3/models/school-for-external-invite-response.ts create mode 100644 src/serverApi/v3/models/school-for-ldap-login-response.ts create mode 100644 src/serverApi/v3/models/school-info-response.ts create mode 100644 src/serverApi/v3/models/school-logo.ts create mode 100644 src/serverApi/v3/models/school-permissions-params.ts create mode 100644 src/serverApi/v3/models/school-purpose.ts create mode 100644 src/serverApi/v3/models/school-response.ts create mode 100644 src/serverApi/v3/models/school-system-response.ts create mode 100644 src/serverApi/v3/models/school-update-body-params.ts create mode 100644 src/serverApi/v3/models/school-year-query-type.ts create mode 100644 src/serverApi/v3/models/school-year-response.ts create mode 100644 src/serverApi/v3/models/schul-conne-xprovisioning-options-params.ts create mode 100644 src/serverApi/v3/models/schul-conne-xprovisioning-options-response.ts create mode 100644 src/serverApi/v3/models/schulcloud-theme.ts create mode 100644 src/serverApi/v3/models/set-height-body-params.ts create mode 100644 src/serverApi/v3/models/share-token-body-params.ts create mode 100644 src/serverApi/v3/models/share-token-import-body-params.ts create mode 100644 src/serverApi/v3/models/share-token-info-response.ts create mode 100644 src/serverApi/v3/models/share-token-payload-response.ts create mode 100644 src/serverApi/v3/models/share-token-response.ts create mode 100644 src/serverApi/v3/models/single-column-board-response.ts create mode 100644 src/serverApi/v3/models/student-permission-params.ts create mode 100644 src/serverApi/v3/models/submission-container-content-body.ts create mode 100644 src/serverApi/v3/models/submission-container-element-content-body.ts create mode 100644 src/serverApi/v3/models/submission-container-element-content.ts create mode 100644 src/serverApi/v3/models/submission-container-element-response.ts create mode 100644 src/serverApi/v3/models/submission-item-response.ts create mode 100644 src/serverApi/v3/models/submission-status-list-response.ts create mode 100644 src/serverApi/v3/models/submission-status-response.ts create mode 100644 src/serverApi/v3/models/submissions-response.ts create mode 100644 src/serverApi/v3/models/successful-response.ts create mode 100644 src/serverApi/v3/models/system-for-ldap-login-response.ts create mode 100644 src/serverApi/v3/models/system-type.ts create mode 100644 src/serverApi/v3/models/target-info-response.ts create mode 100644 src/serverApi/v3/models/task-copy-api-params.ts create mode 100644 src/serverApi/v3/models/task-list-response.ts create mode 100644 src/serverApi/v3/models/task-response.ts create mode 100644 src/serverApi/v3/models/task-status-response.ts create mode 100644 src/serverApi/v3/models/teacher-permission-params.ts create mode 100644 src/serverApi/v3/models/team-permissions-body.ts create mode 100644 src/serverApi/v3/models/timestamps-response.ts create mode 100644 src/serverApi/v3/models/timezone.ts create mode 100644 src/serverApi/v3/models/tool-config-type.ts create mode 100644 src/serverApi/v3/models/tool-context-type.ts create mode 100644 src/serverApi/v3/models/tool-context-types-list-response.ts create mode 100644 src/serverApi/v3/models/tool-launch-request-response.ts create mode 100644 src/serverApi/v3/models/tool-reference-list-response.ts create mode 100644 src/serverApi/v3/models/tool-reference-response.ts create mode 100644 src/serverApi/v3/models/update-board-title-params.ts create mode 100644 src/serverApi/v3/models/update-element-content-body-params.ts create mode 100644 src/serverApi/v3/models/update-flag-params.ts create mode 100644 src/serverApi/v3/models/update-match-params.ts create mode 100644 src/serverApi/v3/models/update-news-params.ts create mode 100644 src/serverApi/v3/models/update-submission-item-body-params.ts create mode 100644 src/serverApi/v3/models/user-consent-response.ts create mode 100644 src/serverApi/v3/models/user-data-response.ts create mode 100644 src/serverApi/v3/models/user-info-response.ts create mode 100644 src/serverApi/v3/models/user-list-response.ts create mode 100644 src/serverApi/v3/models/user-login-migration-mandatory-params.ts create mode 100644 src/serverApi/v3/models/user-login-migration-response.ts create mode 100644 src/serverApi/v3/models/user-login-migration-search-list-response.ts create mode 100644 src/serverApi/v3/models/user-match-list-response.ts create mode 100644 src/serverApi/v3/models/user-match-response.ts create mode 100644 src/serverApi/v3/models/user-response.ts create mode 100644 src/serverApi/v3/models/validation-error.ts create mode 100644 src/serverApi/v3/models/video-conference-create-params.ts create mode 100644 src/serverApi/v3/models/video-conference-info-response.ts create mode 100644 src/serverApi/v3/models/video-conference-join-response.ts create mode 100644 src/serverApi/v3/models/video-conference-options-response.ts create mode 100644 src/serverApi/v3/models/video-conference-scope.ts create mode 100644 src/serverApi/v3/models/video-conference-state-response.ts create mode 100644 src/serverApi/v3/models/visibility-body-params.ts create mode 100644 src/serverApi/v3/models/visibility-settings-response.ts create mode 100644 src/serverApi/v3/models/years-response.ts diff --git a/openapitools-for-server.json b/openapitools-for-server.json index a838baf..3570d97 100644 --- a/openapitools-for-server.json +++ b/openapitools-for-server.json @@ -1,4 +1,9 @@ { + "apiPackage": "api", + "enumNameSuffix": "", + "enumPropertyNaming": "UPPERCASE", + "modelPackage": "models", "supportsES6": true, - "withInterfaces": true + "withInterfaces": true, + "withSeparateModelsAndApi": true } diff --git a/src/modules/data/env-config/envConfigDefaults.ts b/src/modules/data/env-config/envConfigDefaults.ts index e13fe25..d02c96d 100644 --- a/src/modules/data/env-config/envConfigDefaults.ts +++ b/src/modules/data/env-config/envConfigDefaults.ts @@ -7,7 +7,7 @@ import { export const defaultConfigEnvs: ConfigResponse = { NOT_AUTHENTICATED_REDIRECT_URL: "", - SC_THEME: SchulcloudTheme.Default, + SC_THEME: SchulcloudTheme.DEFAULT, JWT_TIMEOUT_SECONDS: -1, JWT_SHOW_TIMEOUT_WARNING_SECONDS: -1, FEATURE_LERNSTORE_ENABLED: false, @@ -18,9 +18,9 @@ export const defaultConfigEnvs: ConfigResponse = { FEATURE_SCHOOL_SANIS_USER_MIGRATION_ENABLED: false, GHOST_BASE_URL: "", I18N__AVAILABLE_LANGUAGES: [], - I18N__FALLBACK_LANGUAGE: LanguageType.De, - I18N__DEFAULT_LANGUAGE: LanguageType.De, - I18N__DEFAULT_TIMEZONE: Timezone.EuropeBerlin, + I18N__FALLBACK_LANGUAGE: LanguageType.DE, + I18N__DEFAULT_LANGUAGE: LanguageType.DE, + I18N__DEFAULT_TIMEZONE: Timezone.EUROPE_BERLIN, SC_TITLE: "", FEATURE_SHOW_OUTDATED_USERS: false, FEATURE_ENABLE_LDAP_SYNC_DURING_MIGRATION: false, @@ -70,4 +70,6 @@ export const defaultConfigEnvs: ConfigResponse = { FEATURE_MEDIA_SHELF_ENABLED: false, BOARD_COLLABORATION_URI: "ws://localhost:4450", FEATURE_SCHULCONNEX_MEDIA_LICENSE_ENABLED: false, + FEATURE_AI_TUTOR_ENABLED: false, + TRAINING_URL: "https://lernen.dbildungscloud.de", }; diff --git a/src/plugins/i18n.unit.ts b/src/plugins/i18n.unit.ts index caeb5db..5094dc3 100644 --- a/src/plugins/i18n.unit.ts +++ b/src/plugins/i18n.unit.ts @@ -17,8 +17,8 @@ describe("i18n plugin", () => { describe("when creating the i18n plugin", () => { const setup = () => { const envs = envsFactory.build({ - I18N__DEFAULT_LANGUAGE: LanguageType.De, - I18N__FALLBACK_LANGUAGE: LanguageType.En, + I18N__DEFAULT_LANGUAGE: LanguageType.DE, + I18N__FALLBACK_LANGUAGE: LanguageType.EN, }); useEnvConfigStore().setEnvs(envs); @@ -29,8 +29,8 @@ describe("i18n plugin", () => { const i18n = createI18n(); - expect(unref(i18n.global.locale)).toEqual(LanguageType.De); - expect(unref(i18n.global.fallbackLocale)).toEqual(LanguageType.En); + expect(unref(i18n.global.locale)).toEqual(LanguageType.DE); + expect(unref(i18n.global.fallbackLocale)).toEqual(LanguageType.EN); }); it("sets the number formats for all supported languages correctly", () => { diff --git a/src/serverApi/v3/.openapi-generator/FILES b/src/serverApi/v3/.openapi-generator/FILES index 16b445e..2d22a2f 100644 --- a/src/serverApi/v3/.openapi-generator/FILES +++ b/src/serverApi/v3/.openapi-generator/FILES @@ -2,8 +2,305 @@ .npmignore .openapi-generator-ignore api.ts +api/account-api.ts +api/admin-students-api.ts +api/admin-teachers-api.ts +api/alert-api.ts +api/authentication-api.ts +api/authorization-api.ts +api/board-api.ts +api/board-card-api.ts +api/board-column-api.ts +api/board-element-api.ts +api/board-submission-api.ts +api/collaborative-storage-api.ts +api/collaborative-text-editor-api.ts +api/courses-api.ts +api/dashboard-api.ts +api/default-api.ts +api/group-api.ts +api/lesson-api.ts +api/me-api.ts +api/media-board-api.ts +api/media-element-api.ts +api/media-line-api.ts +api/meta-tag-extractor-api.ts +api/news-api.ts +api/oauth2-api.ts +api/pseudonym-api.ts +api/rooms-api.ts +api/school-api.ts +api/share-token-api.ts +api/ssoapi.ts +api/submission-api.ts +api/systems-api.ts +api/task-api.ts +api/tool-api.ts +api/user-api.ts +api/user-import-api.ts +api/user-login-migration-api.ts +api/user-login-migration-rollback-api.ts +api/video-conference-api.ts base.ts common.ts configuration.ts git_push.sh index.ts +models/account-by-id-body-params.ts +models/account-response.ts +models/account-search-list-response.ts +models/action.ts +models/alert-response.ts +models/api-validation-error.ts +models/authorization-body-params.ts +models/authorization-context-params.ts +models/authorized-reponse.ts +models/basic-tool-config-params.ts +models/board-context-response.ts +models/board-element-response.ts +models/board-external-reference-type.ts +models/board-layout.ts +models/board-parent-type.ts +models/board-response.ts +models/card-list-response.ts +models/card-response.ts +models/card-skeleton-response.ts +models/change-language-params.ts +models/class-info-response.ts +models/class-info-search-list-response.ts +models/class-request-context.ts +models/class-response.ts +models/class-sort-query-type.ts +models/collaborative-text-editor-element-response.ts +models/collaborative-text-editor-parent-type.ts +models/collaborative-text-editor-response.ts +models/collapsable-body-params.ts +models/color-body-params.ts +models/column-response.ts +models/config-response.ts +models/consent-request-body.ts +models/consent-response.ts +models/consent-session-response.ts +models/consents-response.ts +models/content-element-type.ts +models/context-external-tool-body-params.ts +models/context-external-tool-configuration-status-response.ts +models/context-external-tool-configuration-template-list-response.ts +models/context-external-tool-configuration-template-response.ts +models/context-external-tool-count-per-context-response.ts +models/context-external-tool-post-params.ts +models/context-external-tool-response.ts +models/context-external-tool-search-list-response.ts +models/copy-api-response.ts +models/county-response.ts +models/course-export-body-params.ts +models/course-info-response.ts +models/course-metadata-list-response.ts +models/course-metadata-response.ts +models/create-board-body-params.ts +models/create-board-response.ts +models/create-card-body-params.ts +models/create-content-element-body-params.ts +models/create-media-element-body-params.ts +models/create-news-params.ts +models/create-submission-item-body-params.ts +models/custom-parameter-entry-param.ts +models/custom-parameter-entry-response.ts +models/custom-parameter-post-params.ts +models/custom-parameter-response.ts +models/dashboard-grid-element-response.ts +models/dashboard-grid-sub-element-response.ts +models/dashboard-response.ts +models/drawing-content-body.ts +models/drawing-element-content-body.ts +models/drawing-element-content.ts +models/drawing-element-response.ts +models/entity-not-found-error.ts +models/external-source-response.ts +models/external-tool-bulk-create-params.ts +models/external-tool-content-body.ts +models/external-tool-create-params.ts +models/external-tool-element-content-body.ts +models/external-tool-element-content.ts +models/external-tool-element-response.ts +models/external-tool-medium-params.ts +models/external-tool-medium-response.ts +models/external-tool-metadata-response.ts +models/external-tool-response.ts +models/external-tool-search-list-response.ts +models/external-tool-update-params.ts +models/federal-state-response.ts +models/file-content-body.ts +models/file-element-content-body.ts +models/file-element-content.ts +models/file-element-response.ts +models/file-storage-type.ts +models/forbidden-operation-error.ts +models/force-migration-params.ts +models/get-meta-tag-data-body.ts +models/group-list-response.ts +models/group-response.ts +models/group-user-response.ts +models/import-user-list-response.ts +models/import-user-response.ts +models/index.ts +models/instance-feature.ts +models/language-type.ts +models/layout-body-params.ts +models/ldap-authorization-body-params.ts +models/lesson-content-response.ts +models/lesson-copy-api-params.ts +models/lesson-metadata-list-response.ts +models/lesson-metadata-response.ts +models/lesson-response.ts +models/link-content-body.ts +models/link-element-content-body.ts +models/link-element-content.ts +models/link-element-response.ts +models/local-authorization-body-params.ts +models/login-request-body.ts +models/login-response.ts +models/lti-message-type.ts +models/lti-privacy-permission.ts +models/lti11-tool-config-create-params.ts +models/lti11-tool-config-update-params.ts +models/material-response.ts +models/me-account-response.ts +models/me-response.ts +models/me-role-response.ts +models/me-school-logo-response.ts +models/me-school-response.ts +models/me-user-response.ts +models/media-available-line-element-response.ts +models/media-available-line-response.ts +models/media-board-colors.ts +models/media-board-layout-type.ts +models/media-board-response.ts +models/media-external-tool-element-content.ts +models/media-external-tool-element-response.ts +models/media-line-response.ts +models/message-origin.ts +models/message.ts +models/meta-tag-extractor-response.ts +models/move-card-body-params.ts +models/move-column-body-params.ts +models/move-content-element-body.ts +models/move-element-body-params.ts +models/move-element-params.ts +models/move-element-position-params.ts +models/news-list-response.ts +models/news-response.ts +models/news-target-model.ts +models/oauth-client-create-body.ts +models/oauth-client-response.ts +models/oauth-client-update-body.ts +models/oauth-config-response.ts +models/oauth-token-dto.ts +models/oauth2-authorization-body-params.ts +models/oauth2-migration-params.ts +models/oauth2-tool-config-create-params.ts +models/oauth2-tool-config-update-params.ts +models/oidc-context-response.ts +models/parent-consent-response.ts +models/patch-group-params.ts +models/patch-my-account-params.ts +models/patch-my-password-params.ts +models/patch-order-params.ts +models/patch-visibility-params.ts +models/permission.ts +models/provider-config-response.ts +models/pseudonym-response.ts +models/public-system-list-response.ts +models/public-system-response.ts +models/redirect-response.ts +models/rename-body-params.ts +models/resolved-user-response.ts +models/rich-text-content-body.ts +models/rich-text-element-content-body.ts +models/rich-text-element-content.ts +models/rich-text-element-response.ts +models/rich-text.ts +models/role-name.ts +models/school-exists-response.ts +models/school-external-tool-configuration-status-response.ts +models/school-external-tool-configuration-template-list-response.ts +models/school-external-tool-configuration-template-response.ts +models/school-external-tool-metadata-response.ts +models/school-external-tool-post-params.ts +models/school-external-tool-response.ts +models/school-external-tool-search-list-response.ts +models/school-feature.ts +models/school-for-external-invite-response.ts +models/school-for-ldap-login-response.ts +models/school-info-response.ts +models/school-logo.ts +models/school-permissions-params.ts +models/school-purpose.ts +models/school-response.ts +models/school-system-response.ts +models/school-update-body-params.ts +models/school-year-query-type.ts +models/school-year-response.ts +models/schul-conne-xprovisioning-options-params.ts +models/schul-conne-xprovisioning-options-response.ts +models/schulcloud-theme.ts +models/set-height-body-params.ts +models/share-token-body-params.ts +models/share-token-import-body-params.ts +models/share-token-info-response.ts +models/share-token-payload-response.ts +models/share-token-response.ts +models/single-column-board-response.ts +models/student-permission-params.ts +models/submission-container-content-body.ts +models/submission-container-element-content-body.ts +models/submission-container-element-content.ts +models/submission-container-element-response.ts +models/submission-item-response.ts +models/submission-status-list-response.ts +models/submission-status-response.ts +models/submissions-response.ts +models/successful-response.ts +models/system-for-ldap-login-response.ts +models/system-type.ts +models/target-info-response.ts +models/task-copy-api-params.ts +models/task-list-response.ts +models/task-response.ts +models/task-status-response.ts +models/teacher-permission-params.ts +models/team-permissions-body.ts +models/timestamps-response.ts +models/timezone.ts +models/tool-config-type.ts +models/tool-context-type.ts +models/tool-context-types-list-response.ts +models/tool-launch-request-response.ts +models/tool-reference-list-response.ts +models/tool-reference-response.ts +models/update-board-title-params.ts +models/update-element-content-body-params.ts +models/update-flag-params.ts +models/update-match-params.ts +models/update-news-params.ts +models/update-submission-item-body-params.ts +models/user-consent-response.ts +models/user-data-response.ts +models/user-info-response.ts +models/user-list-response.ts +models/user-login-migration-mandatory-params.ts +models/user-login-migration-response.ts +models/user-login-migration-search-list-response.ts +models/user-match-list-response.ts +models/user-match-response.ts +models/user-response.ts +models/validation-error.ts +models/video-conference-create-params.ts +models/video-conference-info-response.ts +models/video-conference-join-response.ts +models/video-conference-options-response.ts +models/video-conference-scope.ts +models/video-conference-state-response.ts +models/visibility-body-params.ts +models/visibility-settings-response.ts +models/years-response.ts diff --git a/src/serverApi/v3/api.ts b/src/serverApi/v3/api.ts index 19b13fb..3107427 100644 --- a/src/serverApi/v3/api.ts +++ b/src/serverApi/v3/api.ts @@ -13,25736 +13,44 @@ */ -import { Configuration } from './configuration'; -import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; -// Some imports not used depending on template conditions -// @ts-ignore -import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common'; -// @ts-ignore -import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from './base'; - -/** - * - * @export - * @interface AccountByIdBodyParams - */ -export interface AccountByIdBodyParams { - /** - * The new user name for the user. - * @type {string} - * @memberof AccountByIdBodyParams - */ - username?: string | null; - /** - * The new password for the user. - * @type {string} - * @memberof AccountByIdBodyParams - */ - password?: string | null; - /** - * The new activation state of the user. - * @type {boolean} - * @memberof AccountByIdBodyParams - */ - activated?: boolean | null; -} -/** - * - * @export - * @interface AccountResponse - */ -export interface AccountResponse { - /** - * - * @type {string} - * @memberof AccountResponse - */ - id: string; - /** - * - * @type {string} - * @memberof AccountResponse - */ - username: string; - /** - * - * @type {string} - * @memberof AccountResponse - */ - userId: string; - /** - * - * @type {boolean} - * @memberof AccountResponse - */ - activated: boolean; - /** - * - * @type {string} - * @memberof AccountResponse - */ - updatedAt: string; -} -/** - * - * @export - * @interface AccountSearchListResponse - */ -export interface AccountSearchListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof AccountSearchListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof AccountSearchListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof AccountSearchListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof AccountSearchListResponse - */ - limit: number; -} -/** - * - * @export - * @enum {string} - */ -export enum Action { - Read = 'read', - Write = 'write' -} - -/** - * - * @export - * @interface AlertResponse - */ -export interface AlertResponse { - /** - * - * @type {Array} - * @memberof AlertResponse - */ - data: Array; -} -/** - * - * @export - * @interface ApiValidationError - */ -export interface ApiValidationError { - /** - * The response status code. - * @type {number} - * @memberof ApiValidationError - */ - code: number; - /** - * The error type. - * @type {string} - * @memberof ApiValidationError - */ - type: string; - /** - * The error title. - * @type {string} - * @memberof ApiValidationError - */ - title: string; - /** - * The error message. - * @type {string} - * @memberof ApiValidationError - */ - message: string; - /** - * The error details. - * @type {object} - * @memberof ApiValidationError - */ - details?: object; -} -/** - * - * @export - * @interface AuthorizationBodyParams - */ -export interface AuthorizationBodyParams { - /** - * - * @type {AuthorizationContextParams} - * @memberof AuthorizationBodyParams - */ - context: AuthorizationContextParams; - /** - * The entity or domain object the operation should be performed on. - * @type {string} - * @memberof AuthorizationBodyParams - */ - referenceType: AuthorizationBodyParamsReferenceTypeEnum; - /** - * The id of the entity/domain object of the defined referenceType. - * @type {string} - * @memberof AuthorizationBodyParams - */ - referenceId: string; -} - -/** - * @export - * @enum {string} - */ -export enum AuthorizationBodyParamsReferenceTypeEnum { - Users = 'users', - Schools = 'schools', - Courses = 'courses', - Coursegroups = 'coursegroups', - Tasks = 'tasks', - Lessons = 'lessons', - Teams = 'teams', - Submissions = 'submissions', - SchoolExternalTools = 'school-external-tools', - Boardnodes = 'boardnodes', - ContextExternalTools = 'context-external-tools', - ExternalTools = 'external-tools', - Instances = 'instances' -} - -/** - * - * @export - * @interface AuthorizationContextParams - */ -export interface AuthorizationContextParams { - /** - * - * @type {Action} - * @memberof AuthorizationContextParams - */ - action: Action; - /** - * User permissions that are needed to execute the operation. - * @type {Array} - * @memberof AuthorizationContextParams - */ - requiredPermissions: Array; -} -/** - * - * @export - * @interface AuthorizedReponse - */ -export interface AuthorizedReponse { - /** - * - * @type {string} - * @memberof AuthorizedReponse - */ - userId: string; - /** - * - * @type {boolean} - * @memberof AuthorizedReponse - */ - isAuthorized: boolean; -} -/** - * - * @export - * @interface BasicToolConfigParams - */ -export interface BasicToolConfigParams { - /** - * - * @type {string} - * @memberof BasicToolConfigParams - */ - type: string; - /** - * - * @type {string} - * @memberof BasicToolConfigParams - */ - baseUrl: string; -} -/** - * - * @export - * @interface BoardContextResponse - */ -export interface BoardContextResponse { - /** - * - * @type {string} - * @memberof BoardContextResponse - */ - id: string; - /** - * - * @type {BoardExternalReferenceType} - * @memberof BoardContextResponse - */ - type: BoardExternalReferenceType; -} -/** - * - * @export - * @interface BoardElementResponse - */ -export interface BoardElementResponse { - /** - * the type of the element in the content. For possible types, please refer to the enum - * @type {string} - * @memberof BoardElementResponse - */ - type: BoardElementResponseTypeEnum; - /** - * Content of the Board, either: a task or a lesson specific for the board - * @type {object} - * @memberof BoardElementResponse - */ - content: object; -} - -/** - * @export - * @enum {string} - */ -export enum BoardElementResponseTypeEnum { - Task = 'task', - Lesson = 'lesson', - ColumnBoard = 'column-board' -} - -/** - * - * @export - * @enum {string} - */ -export enum BoardExternalReferenceType { - Course = 'course', - User = 'user' -} - -/** - * - * @export - * @enum {string} - */ -export enum BoardLayout { - Columns = 'columns', - List = 'list', - Grid = 'grid' -} - -/** - * - * @export - * @enum {string} - */ -export enum BoardParentType { - Course = 'course', - User = 'user' -} - -/** - * - * @export - * @interface BoardResponse - */ -export interface BoardResponse { - /** - * - * @type {string} - * @memberof BoardResponse - */ - id: string; - /** - * - * @type {string} - * @memberof BoardResponse - */ - title: string; - /** - * - * @type {Array} - * @memberof BoardResponse - */ - columns: Array; - /** - * - * @type {TimestampsResponse} - * @memberof BoardResponse - */ - timestamps: TimestampsResponse; - /** - * - * @type {boolean} - * @memberof BoardResponse - */ - isVisible: boolean; - /** - * - * @type {string} - * @memberof BoardResponse - */ - layout: string; -} -/** - * - * @export - * @interface CardListResponse - */ -export interface CardListResponse { - /** - * - * @type {Array} - * @memberof CardListResponse - */ - data: Array; -} -/** - * - * @export - * @interface CardResponse - */ -export interface CardResponse { - /** - * - * @type {string} - * @memberof CardResponse - */ - id: string; - /** - * - * @type {string} - * @memberof CardResponse - */ - title?: string; - /** - * - * @type {number} - * @memberof CardResponse - */ - height: number; - /** - * - * @type {Array} - * @memberof CardResponse - */ - elements: Array; - /** - * - * @type {VisibilitySettingsResponse} - * @memberof CardResponse - */ - visibilitySettings: VisibilitySettingsResponse; - /** - * - * @type {TimestampsResponse} - * @memberof CardResponse - */ - timestamps: TimestampsResponse; -} -/** - * - * @export - * @interface CardSkeletonResponse - */ -export interface CardSkeletonResponse { - /** - * - * @type {string} - * @memberof CardSkeletonResponse - */ - cardId: string; - /** - * The approximate height of the referenced card. Intended to be used for prerendering purposes. Note, that different devices can lead to this value not being precise - * @type {number} - * @memberof CardSkeletonResponse - */ - height: number; -} -/** - * - * @export - * @interface ChangeLanguageParams - */ -export interface ChangeLanguageParams { - /** - * - * @type {LanguageType} - * @memberof ChangeLanguageParams - */ - language: LanguageType; -} -/** - * - * @export - * @interface ClassInfoResponse - */ -export interface ClassInfoResponse { - /** - * - * @type {string} - * @memberof ClassInfoResponse - */ - id: string; - /** - * - * @type {string} - * @memberof ClassInfoResponse - */ - type: ClassInfoResponseTypeEnum; - /** - * - * @type {string} - * @memberof ClassInfoResponse - */ - name: string; - /** - * - * @type {string} - * @memberof ClassInfoResponse - */ - externalSourceName?: string; - /** - * - * @type {Array} - * @memberof ClassInfoResponse - */ - teacherNames: Array; - /** - * - * @type {string} - * @memberof ClassInfoResponse - */ - schoolYear?: string; - /** - * - * @type {boolean} - * @memberof ClassInfoResponse - */ - isUpgradable?: boolean; - /** - * - * @type {number} - * @memberof ClassInfoResponse - */ - studentCount: number; - /** - * - * @type {Array} - * @memberof ClassInfoResponse - */ - synchronizedCourses?: Array; -} - -/** - * @export - * @enum {string} - */ -export enum ClassInfoResponseTypeEnum { - Class = 'class', - Group = 'group' -} - -/** - * - * @export - * @interface ClassInfoSearchListResponse - */ -export interface ClassInfoSearchListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof ClassInfoSearchListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof ClassInfoSearchListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof ClassInfoSearchListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof ClassInfoSearchListResponse - */ - limit: number; -} -/** - * - * @export - * @enum {string} - */ -export enum ClassRequestContext { - Course = 'course', - ClassOverview = 'class-overview' -} - -/** - * - * @export - * @interface ClassResponse - */ -export interface ClassResponse { - /** - * - * @type {string} - * @memberof ClassResponse - */ - name: string; - /** - * - * @type {number} - * @memberof ClassResponse - */ - gradeLevel: number; -} -/** - * - * @export - * @enum {string} - */ -export enum ClassSortQueryType { - Name = 'name', - ExternalSourceName = 'externalSourceName', - SynchronizedCourses = 'synchronizedCourses', - StudentCount = 'studentCount', - TeacherNames = 'teacherNames' -} - -/** - * - * @export - * @interface CollaborativeTextEditorElementResponse - */ -export interface CollaborativeTextEditorElementResponse { - /** - * - * @type {string} - * @memberof CollaborativeTextEditorElementResponse - */ - id: string; - /** - * - * @type {ContentElementType} - * @memberof CollaborativeTextEditorElementResponse - */ - type: ContentElementType; - /** - * - * @type {TimestampsResponse} - * @memberof CollaborativeTextEditorElementResponse - */ - timestamps: TimestampsResponse; - /** - * - * @type {object} - * @memberof CollaborativeTextEditorElementResponse - */ - content: object; -} -/** - * - * @export - * @enum {string} - */ -export enum CollaborativeTextEditorParentType { - ContentElement = 'content-element' -} - -/** - * - * @export - * @interface CollaborativeTextEditorResponse - */ -export interface CollaborativeTextEditorResponse { - /** - * - * @type {string} - * @memberof CollaborativeTextEditorResponse - */ - url: string; -} -/** - * - * @export - * @interface CollapsableBodyParams - */ -export interface CollapsableBodyParams { - /** - * - * @type {boolean} - * @memberof CollapsableBodyParams - */ - collapsed: boolean; -} -/** - * - * @export - * @interface ColorBodyParams - */ -export interface ColorBodyParams { - /** - * - * @type {MediaBoardColors} - * @memberof ColorBodyParams - */ - backgroundColor: MediaBoardColors; -} -/** - * - * @export - * @interface ColumnResponse - */ -export interface ColumnResponse { - /** - * - * @type {string} - * @memberof ColumnResponse - */ - id: string; - /** - * - * @type {string} - * @memberof ColumnResponse - */ - title: string; - /** - * - * @type {Array} - * @memberof ColumnResponse - */ - cards: Array; - /** - * - * @type {TimestampsResponse} - * @memberof ColumnResponse - */ - timestamps: TimestampsResponse; -} -/** - * - * @export - * @interface ConfigResponse - */ -export interface ConfigResponse { - /** - * - * @type {string} - * @memberof ConfigResponse - */ - ACCESSIBILITY_REPORT_EMAIL: string; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_NEW_SCHOOL_ADMINISTRATION_PAGE_AS_DEFAULT_ENABLED: boolean; - /** - * - * @type {number} - * @memberof ConfigResponse - */ - MIGRATION_END_GRACE_PERIOD_MS: number; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_CTL_TOOLS_TAB_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_LTI_TOOLS_TAB_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_SHOW_OUTDATED_USERS: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_ENABLE_LDAP_SYNC_DURING_MIGRATION: boolean; - /** - * - * @type {number} - * @memberof ConfigResponse - */ - CTL_TOOLS_RELOAD_TIME_MS: number; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_CTL_TOOLS_COPY_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_SHOW_MIGRATION_WIZARD: boolean; - /** - * - * @type {string} - * @memberof ConfigResponse - */ - MIGRATION_WIZARD_DOCUMENTATION_LINK?: string; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_TLDRAW_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - TLDRAW__ASSETS_ENABLED: boolean; - /** - * - * @type {number} - * @memberof ConfigResponse - */ - TLDRAW__ASSETS_MAX_SIZE: number; - /** - * - * @type {Array} - * @memberof ConfigResponse - */ - TLDRAW__ASSETS_ALLOWED_MIME_TYPES_LIST: Array; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - ADMIN_TABLES_DISPLAY_CONSENT_COLUMN: boolean; - /** - * - * @type {string} - * @memberof ConfigResponse - */ - ALERT_STATUS_URL: string | null; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_ES_COLLECTIONS_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_EXTENSIONS_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_TEAMS_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_LERNSTORE_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_ADMIN_TOGGLE_STUDENT_LERNSTORE_VIEW_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - TEACHER_STUDENT_VISIBILITY__IS_CONFIGURABLE: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - TEACHER_STUDENT_VISIBILITY__IS_ENABLED_BY_DEFAULT: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - TEACHER_STUDENT_VISIBILITY__IS_VISIBLE: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_SCHOOL_POLICY_ENABLED_NEW: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_SCHOOL_TERMS_OF_USE_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_NEXBOARD_COPY_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_VIDEOCONFERENCE_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COLUMN_BOARD_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COLUMN_BOARD_SUBMISSIONS_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COLUMN_BOARD_COLLABORATIVE_TEXT_EDITOR_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COLUMN_BOARD_LINK_ELEMENT_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COLUMN_BOARD_EXTERNAL_TOOLS_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COLUMN_BOARD_SHARE: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COLUMN_BOARD_SOCKET_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COURSE_SHARE: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_LOGIN_LINK_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_LESSON_SHARE: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_TASK_SHARE: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_BOARD_LAYOUT_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_USER_MIGRATION_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COPY_SERVICE_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_CONSENT_NECESSARY: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COMMON_CARTRIDGE_COURSE_EXPORT_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_COMMON_CARTRIDGE_COURSE_IMPORT_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_SCHOOL_SANIS_USER_MIGRATION_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_SCHULCONNEX_COURSE_SYNC_ENABLED: boolean; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_ALLOW_INSECURE_LDAP_URL_ENABLED: boolean; - /** - * - * @type {string} - * @memberof ConfigResponse - */ - GHOST_BASE_URL: string; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - ROCKETCHAT_SERVICE_ENABLED: boolean; - /** - * - * @type {Array} - * @memberof ConfigResponse - */ - I18N__AVAILABLE_LANGUAGES: Array; - /** - * - * @type {LanguageType} - * @memberof ConfigResponse - */ - I18N__DEFAULT_LANGUAGE: LanguageType; - /** - * - * @type {LanguageType} - * @memberof ConfigResponse - */ - I18N__FALLBACK_LANGUAGE: LanguageType; - /** - * - * @type {Timezone} - * @memberof ConfigResponse - */ - I18N__DEFAULT_TIMEZONE: Timezone; - /** - * - * @type {number} - * @memberof ConfigResponse - */ - JWT_SHOW_TIMEOUT_WARNING_SECONDS: number; - /** - * - * @type {number} - * @memberof ConfigResponse - */ - JWT_TIMEOUT_SECONDS: number; - /** - * - * @type {string} - * @memberof ConfigResponse - */ - NOT_AUTHENTICATED_REDIRECT_URL: string; - /** - * - * @type {string} - * @memberof ConfigResponse - */ - DOCUMENT_BASE_DIR: string; - /** - * - * @type {SchulcloudTheme} - * @memberof ConfigResponse - */ - SC_THEME: SchulcloudTheme; - /** - * - * @type {string} - * @memberof ConfigResponse - */ - SC_TITLE: string; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_MEDIA_SHELF_ENABLED: boolean; - /** - * - * @type {string} - * @memberof ConfigResponse - */ - BOARD_COLLABORATION_URI: string; - /** - * - * @type {boolean} - * @memberof ConfigResponse - */ - FEATURE_SCHULCONNEX_MEDIA_LICENSE_ENABLED: boolean; -} -/** - * - * @export - * @interface ConsentRequestBody - */ -export interface ConsentRequestBody { - /** - * The error should follow the OAuth2 error format (e.g. invalid_request, login_required). Defaults to request_denied. - * @type {string} - * @memberof ConsentRequestBody - */ - error?: string; - /** - * Debug contains information to help resolve the problem as a developer. Usually not exposed to the public but only in the server logs. - * @type {string} - * @memberof ConsentRequestBody - */ - error_debug?: string; - /** - * Description of the error in a human readable format. - * @type {string} - * @memberof ConsentRequestBody - */ - error_description?: string; - /** - * Hint to help resolve the error. - * @type {string} - * @memberof ConsentRequestBody - */ - error_hint?: string; - /** - * Represents the HTTP status code of the error (e.g. 401 or 403). Defaults to 400. - * @type {number} - * @memberof ConsentRequestBody - */ - status_code?: number; - /** - * The Oauth2 client id. - * @type {Array} - * @memberof ConsentRequestBody - */ - grant_scope?: Array; - /** - * Remember, if set to true, tells the oauth provider to remember this consent authorization and reuse it if the same client asks the same user for the same, or a subset of, scope. - * @type {boolean} - * @memberof ConsentRequestBody - */ - remember?: boolean; - /** - * RememberFor sets how long the consent authorization should be remembered for in seconds. If set to 0, the authorization will be remembered indefinitely. - * @type {number} - * @memberof ConsentRequestBody - */ - remember_for?: number; -} -/** - * - * @export - * @interface ConsentResponse - */ -export interface ConsentResponse { - /** - * ACR represents the Authentication AuthorizationContext Class Reference value for this authentication session - * @type {string} - * @memberof ConsentResponse - */ - acr: string; - /** - * - * @type {Array} - * @memberof ConsentResponse - */ - amr?: Array; - /** - * Is the id/authorization challenge of the consent authorization request. It is used to identify the session. - * @type {string} - * @memberof ConsentResponse - */ - challenge: string; - /** - * - * @type {OauthClientResponse} - * @memberof ConsentResponse - */ - client: OauthClientResponse; - /** - * - * @type {object} - * @memberof ConsentResponse - */ - context: object; - /** - * LoginChallenge is the login challenge this consent challenge belongs to. - * @type {string} - * @memberof ConsentResponse - */ - login_challenge: string; - /** - * LoginSessionID is the login session ID. - * @type {string} - * @memberof ConsentResponse - */ - login_session_id: string; - /** - * - * @type {OidcContextResponse} - * @memberof ConsentResponse - */ - oidc_context: OidcContextResponse; - /** - * RequestUrl is the original OAuth 2.0 Authorization URL requested by the OAuth 2.0 client. - * @type {string} - * @memberof ConsentResponse - */ - request_url: string; - /** - * - * @type {Array} - * @memberof ConsentResponse - */ - requested_access_token_audience?: Array; - /** - * The request scopes of the login request. - * @type {Array} - * @memberof ConsentResponse - */ - requested_scope?: Array; - /** - * Skip, if true, implies that the client has requested the same scopes from the same user previously. - * @type {boolean} - * @memberof ConsentResponse - */ - skip: boolean; - /** - * Subject is the user id of the end-user that is authenticated. - * @type {string} - * @memberof ConsentResponse - */ - subject: string; -} -/** - * - * @export - * @interface ConsentSessionResponse - */ -export interface ConsentSessionResponse { - /** - * The id of the client. - * @type {string} - * @memberof ConsentSessionResponse - */ - client_id: string; - /** - * The name of the client. - * @type {string} - * @memberof ConsentSessionResponse - */ - client_name: string; - /** - * The id/challenge of the consent authorization request. - * @type {string} - * @memberof ConsentSessionResponse - */ - challenge: string; -} -/** - * - * @export - * @interface ConsentsResponse - */ -export interface ConsentsResponse { - /** - * - * @type {UserConsentResponse} - * @memberof ConsentsResponse - */ - userConsent: UserConsentResponse; - /** - * - * @type {Array} - * @memberof ConsentsResponse - */ - parentConsents: Array; -} -/** - * - * @export - * @enum {string} - */ -export enum ContentElementType { - File = 'file', - Drawing = 'drawing', - Link = 'link', - RichText = 'richText', - SubmissionContainer = 'submissionContainer', - ExternalTool = 'externalTool', - CollaborativeTextEditor = 'collaborativeTextEditor' -} - -/** - * - * @export - * @interface ContextExternalToolBodyParams - */ -export interface ContextExternalToolBodyParams { - /** - * - * @type {string} - * @memberof ContextExternalToolBodyParams - */ - contextId: string; - /** - * - * @type {ToolContextType} - * @memberof ContextExternalToolBodyParams - */ - contextType: ToolContextType; -} -/** - * - * @export - * @interface ContextExternalToolConfigurationStatusResponse - */ -export interface ContextExternalToolConfigurationStatusResponse { - /** - * Is the tool outdated on school scope, because of non matching versions or required parameter changes on ExternalTool? - * @type {boolean} - * @memberof ContextExternalToolConfigurationStatusResponse - */ - isOutdatedOnScopeSchool: boolean; - /** - * Is the tool outdated on context scope, because of non matching versions or required parameter changes on SchoolExternalTool? - * @type {boolean} - * @memberof ContextExternalToolConfigurationStatusResponse - */ - isOutdatedOnScopeContext: boolean; - /** - * True, if a mandatory parameter on the context external tool is missing a value - * @type {boolean} - * @memberof ContextExternalToolConfigurationStatusResponse - */ - isIncompleteOnScopeContext: boolean; - /** - * True, if a optional parameter on the context external tool is missing a value. This is happening, when course is copied. - * @type {boolean} - * @memberof ContextExternalToolConfigurationStatusResponse - */ - isIncompleteOperationalOnScopeContext: boolean; - /** - * Is the tool deactivated, because of superhero or school administrator - * @type {boolean} - * @memberof ContextExternalToolConfigurationStatusResponse - */ - isDeactivated: boolean; - /** - * True if the tool is not licensed for user - * @type {boolean} - * @memberof ContextExternalToolConfigurationStatusResponse - */ - isNotLicensed: boolean; -} -/** - * - * @export - * @interface ContextExternalToolConfigurationTemplateListResponse - */ -export interface ContextExternalToolConfigurationTemplateListResponse { - /** - * - * @type {Array} - * @memberof ContextExternalToolConfigurationTemplateListResponse - */ - data: Array; -} -/** - * - * @export - * @interface ContextExternalToolConfigurationTemplateResponse - */ -export interface ContextExternalToolConfigurationTemplateResponse { - /** - * - * @type {string} - * @memberof ContextExternalToolConfigurationTemplateResponse - */ - externalToolId: string; - /** - * - * @type {string} - * @memberof ContextExternalToolConfigurationTemplateResponse - */ - schoolExternalToolId: string; - /** - * - * @type {string} - * @memberof ContextExternalToolConfigurationTemplateResponse - */ - name: string; - /** - * - * @type {string} - * @memberof ContextExternalToolConfigurationTemplateResponse - */ - baseUrl: string; - /** - * - * @type {string} - * @memberof ContextExternalToolConfigurationTemplateResponse - */ - logoUrl?: string; - /** - * - * @type {Array} - * @memberof ContextExternalToolConfigurationTemplateResponse - */ - parameters: Array; -} -/** - * - * @export - * @interface ContextExternalToolCountPerContextResponse - */ -export interface ContextExternalToolCountPerContextResponse { - /** - * - * @type {number} - * @memberof ContextExternalToolCountPerContextResponse - */ - course: number; - /** - * - * @type {number} - * @memberof ContextExternalToolCountPerContextResponse - */ - boardElement: number; - /** - * - * @type {number} - * @memberof ContextExternalToolCountPerContextResponse - */ - mediaBoard: number; -} -/** - * - * @export - * @interface ContextExternalToolPostParams - */ -export interface ContextExternalToolPostParams { - /** - * - * @type {string} - * @memberof ContextExternalToolPostParams - */ - schoolToolId: string; - /** - * - * @type {string} - * @memberof ContextExternalToolPostParams - */ - contextId: string; - /** - * - * @type {string} - * @memberof ContextExternalToolPostParams - */ - contextType: string; - /** - * - * @type {string} - * @memberof ContextExternalToolPostParams - */ - displayName?: string; - /** - * - * @type {Array} - * @memberof ContextExternalToolPostParams - */ - parameters?: Array; -} -/** - * - * @export - * @interface ContextExternalToolResponse - */ -export interface ContextExternalToolResponse { - /** - * - * @type {string} - * @memberof ContextExternalToolResponse - */ - id: string; - /** - * - * @type {string} - * @memberof ContextExternalToolResponse - */ - schoolToolId: string; - /** - * - * @type {string} - * @memberof ContextExternalToolResponse - */ - contextId: string; - /** - * - * @type {string} - * @memberof ContextExternalToolResponse - */ - contextType: ContextExternalToolResponseContextTypeEnum; - /** - * - * @type {string} - * @memberof ContextExternalToolResponse - */ - displayName?: string; - /** - * - * @type {Array} - * @memberof ContextExternalToolResponse - */ - parameters: Array; - /** - * - * @type {string} - * @memberof ContextExternalToolResponse - */ - logoUrl?: string; -} - -/** - * @export - * @enum {string} - */ -export enum ContextExternalToolResponseContextTypeEnum { - Course = 'course', - BoardElement = 'board-element', - MediaBoard = 'media-board' -} - -/** - * - * @export - * @interface ContextExternalToolSearchListResponse - */ -export interface ContextExternalToolSearchListResponse { - /** - * - * @type {Array} - * @memberof ContextExternalToolSearchListResponse - */ - data: Array; -} -/** - * - * @export - * @interface CopyApiResponse - */ -export interface CopyApiResponse { - /** - * Id of copied element - * @type {string} - * @memberof CopyApiResponse - */ - id?: string; - /** - * Title of copied element - * @type {string} - * @memberof CopyApiResponse - */ - title?: string; - /** - * Type of copied element - * @type {string} - * @memberof CopyApiResponse - */ - type: CopyApiResponseTypeEnum; - /** - * Id of destination course - * @type {string} - * @memberof CopyApiResponse - */ - destinationCourseId?: string; - /** - * Copy progress status of copied element - * @type {string} - * @memberof CopyApiResponse - */ - status: CopyApiResponseStatusEnum; - /** - * List of included sub elements with recursive type structure - * @type {Array} - * @memberof CopyApiResponse - */ - elements?: Array; -} - -/** - * @export - * @enum {string} - */ -export enum CopyApiResponseTypeEnum { - Board = 'BOARD', - Card = 'CARD', - CollaborativeTextEditorElement = 'COLLABORATIVE_TEXT_EDITOR_ELEMENT', - Column = 'COLUMN', - Columnboard = 'COLUMNBOARD', - Content = 'CONTENT', - Course = 'COURSE', - CoursegroupGroup = 'COURSEGROUP_GROUP', - ExternalTool = 'EXTERNAL_TOOL', - ExternalToolElement = 'EXTERNAL_TOOL_ELEMENT', - File = 'FILE', - FileElement = 'FILE_ELEMENT', - DrawingElement = 'DRAWING_ELEMENT', - FileGroup = 'FILE_GROUP', - Leaf = 'LEAF', - Lesson = 'LESSON', - LessonContentEtherpad = 'LESSON_CONTENT_ETHERPAD', - LessonContentGeogebra = 'LESSON_CONTENT_GEOGEBRA', - LessonContentGroup = 'LESSON_CONTENT_GROUP', - LessonContentLernstore = 'LESSON_CONTENT_LERNSTORE', - LessonContentNexboard = 'LESSON_CONTENT_NEXBOARD', - LessonContentTask = 'LESSON_CONTENT_TASK', - LessonContentText = 'LESSON_CONTENT_TEXT', - LernstoreMaterial = 'LERNSTORE_MATERIAL', - LernstoreMaterialGroup = 'LERNSTORE_MATERIAL_GROUP', - LinkElement = 'LINK_ELEMENT', - LtitoolGroup = 'LTITOOL_GROUP', - MediaBoard = 'MEDIA_BOARD', - MediaLine = 'MEDIA_LINE', - MediaExternalToolElement = 'MEDIA_EXTERNAL_TOOL_ELEMENT', - Metadata = 'METADATA', - RichtextElement = 'RICHTEXT_ELEMENT', - SubmissionContainerElement = 'SUBMISSION_CONTAINER_ELEMENT', - SubmissionItem = 'SUBMISSION_ITEM', - SubmissionGroup = 'SUBMISSION_GROUP', - Task = 'TASK', - TaskGroup = 'TASK_GROUP', - TimeGroup = 'TIME_GROUP', - UserGroup = 'USER_GROUP' -} -/** - * @export - * @enum {string} - */ -export enum CopyApiResponseStatusEnum { - Success = 'success', - Failure = 'failure', - NotDoing = 'not-doing', - NotImplemented = 'not-implemented', - Partial = 'partial' -} - -/** - * - * @export - * @interface CountyResponse - */ -export interface CountyResponse { - /** - * - * @type {string} - * @memberof CountyResponse - */ - id: string; - /** - * - * @type {string} - * @memberof CountyResponse - */ - name: string; - /** - * - * @type {number} - * @memberof CountyResponse - */ - countyId: number; - /** - * - * @type {string} - * @memberof CountyResponse - */ - antaresKey: string; -} -/** - * - * @export - * @interface CourseExportBodyParams - */ -export interface CourseExportBodyParams { - /** - * The list of ids of topics which should be exported. If empty no topics are exported. - * @type {Array} - * @memberof CourseExportBodyParams - */ - topics: Array; - /** - * The list of ids of tasks which should be exported. If empty no tasks are exported. - * @type {Array} - * @memberof CourseExportBodyParams - */ - tasks: Array; - /** - * The list of ids of column boards which should be exported. If empty no column boards are exported. - * @type {Array} - * @memberof CourseExportBodyParams - */ - columnBoards: Array; -} -/** - * - * @export - * @interface CourseInfoResponse - */ -export interface CourseInfoResponse { - /** - * - * @type {string} - * @memberof CourseInfoResponse - */ - id: string; - /** - * - * @type {string} - * @memberof CourseInfoResponse - */ - name: string; -} -/** - * - * @export - * @interface CourseMetadataListResponse - */ -export interface CourseMetadataListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof CourseMetadataListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof CourseMetadataListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof CourseMetadataListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof CourseMetadataListResponse - */ - limit: number; -} -/** - * - * @export - * @interface CourseMetadataResponse - */ -export interface CourseMetadataResponse { - /** - * The id of the Grid element - * @type {string} - * @memberof CourseMetadataResponse - */ - id: string; - /** - * Title of the Grid element - * @type {string} - * @memberof CourseMetadataResponse - */ - title: string; - /** - * Short title of the Grid element - * @type {string} - * @memberof CourseMetadataResponse - */ - shortTitle: string; - /** - * Color of the Grid element - * @type {string} - * @memberof CourseMetadataResponse - */ - displayColor: string; - /** - * Start date of the course - * @type {string} - * @memberof CourseMetadataResponse - */ - startDate?: string; - /** - * End date of the course. After this the course counts as archived - * @type {string} - * @memberof CourseMetadataResponse - */ - untilDate?: string; - /** - * Start of the copying process if it is still ongoing - otherwise property is not set. - * @type {string} - * @memberof CourseMetadataResponse - */ - copyingSince?: string; -} -/** - * - * @export - * @interface CreateBoardBodyParams - */ -export interface CreateBoardBodyParams { - /** - * The title of the board - * @type {string} - * @memberof CreateBoardBodyParams - */ - title: string; - /** - * The id of the parent - * @type {string} - * @memberof CreateBoardBodyParams - */ - parentId: string; - /** - * - * @type {BoardParentType} - * @memberof CreateBoardBodyParams - */ - parentType: BoardParentType; - /** - * - * @type {BoardLayout} - * @memberof CreateBoardBodyParams - */ - layout: BoardLayout; -} -/** - * - * @export - * @interface CreateBoardResponse - */ -export interface CreateBoardResponse { - /** - * - * @type {string} - * @memberof CreateBoardResponse - */ - id: string; -} -/** - * - * @export - * @interface CreateCardBodyParams - */ -export interface CreateCardBodyParams { - /** - * - * @type {Array} - * @memberof CreateCardBodyParams - */ - requiredEmptyElements?: Array; -} - -/** - * @export - * @enum {string} - */ -export enum CreateCardBodyParamsRequiredEmptyElementsEnum { - File = 'file', - Drawing = 'drawing', - Link = 'link', - RichText = 'richText', - SubmissionContainer = 'submissionContainer', - ExternalTool = 'externalTool', - CollaborativeTextEditor = 'collaborativeTextEditor' -} - -/** - * - * @export - * @interface CreateContentElementBodyParams - */ -export interface CreateContentElementBodyParams { - /** - * - * @type {ContentElementType} - * @memberof CreateContentElementBodyParams - */ - type: ContentElementType; - /** - * to bring element to a specific position, default is last position - * @type {number} - * @memberof CreateContentElementBodyParams - */ - toPosition?: number; -} -/** - * - * @export - * @interface CreateMediaElementBodyParams - */ -export interface CreateMediaElementBodyParams { - /** - * The id of the line where the element is created - * @type {string} - * @memberof CreateMediaElementBodyParams - */ - lineId: string; - /** - * The position where the element is created - * @type {number} - * @memberof CreateMediaElementBodyParams - */ - position: number; - /** - * The id of the school external tool - * @type {string} - * @memberof CreateMediaElementBodyParams - */ - schoolExternalToolId: string; -} -/** - * - * @export - * @interface CreateNewsParams - */ -export interface CreateNewsParams { - /** - * Title of the News entity - * @type {string} - * @memberof CreateNewsParams - */ - title: string; - /** - * Content of the News entity - * @type {string} - * @memberof CreateNewsParams - */ - content: string; - /** - * The point in time from when the News entity schould be displayed. Defaults to now so that the news is published - * @type {string} - * @memberof CreateNewsParams - */ - displayAt?: string; - /** - * Target model to which the News entity is related - * @type {string} - * @memberof CreateNewsParams - */ - targetModel: CreateNewsParamsTargetModelEnum; - /** - * Specific target id to which the News entity is related - * @type {string} - * @memberof CreateNewsParams - */ - targetId: string; -} - -/** - * @export - * @enum {string} - */ -export enum CreateNewsParamsTargetModelEnum { - Schools = 'schools', - Courses = 'courses', - Teams = 'teams' -} - -/** - * - * @export - * @interface CreateSubmissionItemBodyParams - */ -export interface CreateSubmissionItemBodyParams { - /** - * Boolean indicating whether the submission is completed. - * @type {boolean} - * @memberof CreateSubmissionItemBodyParams - */ - completed: boolean; -} -/** - * - * @export - * @interface CustomParameterEntryParam - */ -export interface CustomParameterEntryParam { - /** - * - * @type {string} - * @memberof CustomParameterEntryParam - */ - name: string; - /** - * - * @type {string} - * @memberof CustomParameterEntryParam - */ - value?: string; -} -/** - * - * @export - * @interface CustomParameterEntryResponse - */ -export interface CustomParameterEntryResponse { - /** - * - * @type {string} - * @memberof CustomParameterEntryResponse - */ - name: string; - /** - * - * @type {string} - * @memberof CustomParameterEntryResponse - */ - value?: string; -} -/** - * - * @export - * @interface CustomParameterPostParams - */ -export interface CustomParameterPostParams { - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - name: string; - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - displayName: string; - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - description?: string; - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - defaultValue?: string; - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - regex?: string; - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - regexComment?: string; - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - scope: string; - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - location: string; - /** - * - * @type {string} - * @memberof CustomParameterPostParams - */ - type: string; - /** - * - * @type {boolean} - * @memberof CustomParameterPostParams - */ - isOptional: boolean; - /** - * - * @type {boolean} - * @memberof CustomParameterPostParams - */ - isProtected: boolean; -} -/** - * - * @export - * @interface CustomParameterResponse - */ -export interface CustomParameterResponse { - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - name: string; - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - displayName: string; - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - description?: string; - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - defaultValue?: string; - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - regex?: string; - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - regexComment?: string; - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - scope: CustomParameterResponseScopeEnum; - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - location: CustomParameterResponseLocationEnum; - /** - * - * @type {string} - * @memberof CustomParameterResponse - */ - type: CustomParameterResponseTypeEnum; - /** - * - * @type {boolean} - * @memberof CustomParameterResponse - */ - isOptional: boolean; - /** - * - * @type {boolean} - * @memberof CustomParameterResponse - */ - isProtected: boolean; -} - -/** - * @export - * @enum {string} - */ -export enum CustomParameterResponseScopeEnum { - Global = 'global', - School = 'school', - Context = 'context' -} -/** - * @export - * @enum {string} - */ -export enum CustomParameterResponseLocationEnum { - Path = 'path', - Body = 'body', - Query = 'query' -} -/** - * @export - * @enum {string} - */ -export enum CustomParameterResponseTypeEnum { - String = 'string', - Number = 'number', - Boolean = 'boolean', - AutoContextid = 'auto_contextid', - AutoContextname = 'auto_contextname', - AutoSchoolid = 'auto_schoolid', - AutoSchoolnumber = 'auto_schoolnumber', - AutoMediumid = 'auto_mediumid' -} - -/** - * - * @export - * @interface DashboardGridElementResponse - */ -export interface DashboardGridElementResponse { - /** - * The id of the Grid element - * @type {string} - * @memberof DashboardGridElementResponse - */ - id: string; - /** - * Title of the Grid element - * @type {string} - * @memberof DashboardGridElementResponse - */ - title: string; - /** - * Short title of the Grid element - * @type {string} - * @memberof DashboardGridElementResponse - */ - shortTitle: string; - /** - * Color of the Grid element - * @type {string} - * @memberof DashboardGridElementResponse - */ - displayColor: string; - /** - * X position of the Grid element - * @type {number} - * @memberof DashboardGridElementResponse - */ - xPosition: number; - /** - * Y position of the Grid element - * @type {number} - * @memberof DashboardGridElementResponse - */ - yPosition: number; - /** - * The id of the group element - * @type {string} - * @memberof DashboardGridElementResponse - */ - groupId: string; - /** - * List of all subelements in the group - * @type {Array} - * @memberof DashboardGridElementResponse - */ - groupElements: Array; - /** - * Start of the copying process if it is still ongoing - otherwise property is not set. - * @type {string} - * @memberof DashboardGridElementResponse - */ - copyingSince: string; - /** - * Is the course synchronized with a group? - * @type {boolean} - * @memberof DashboardGridElementResponse - */ - isSynchronized: boolean; -} -/** - * - * @export - * @interface DashboardGridSubElementResponse - */ -export interface DashboardGridSubElementResponse { - /** - * The id of the Grid element - * @type {string} - * @memberof DashboardGridSubElementResponse - */ - id: string; - /** - * Title of the Grid element - * @type {string} - * @memberof DashboardGridSubElementResponse - */ - title: string; - /** - * Short title of the Grid element - * @type {string} - * @memberof DashboardGridSubElementResponse - */ - shortTitle: string; - /** - * Color of the Grid element - * @type {string} - * @memberof DashboardGridSubElementResponse - */ - displayColor: string; -} -/** - * - * @export - * @interface DashboardResponse - */ -export interface DashboardResponse { - /** - * The id of the Dashboard entity - * @type {string} - * @memberof DashboardResponse - */ - id: string; - /** - * List of all elements visible on the dashboard - * @type {Array} - * @memberof DashboardResponse - */ - gridElements: Array; -} -/** - * - * @export - * @interface DrawingContentBody - */ -export interface DrawingContentBody { - /** - * - * @type {string} - * @memberof DrawingContentBody - */ - description: string; -} -/** - * - * @export - * @interface DrawingElementContent - */ -export interface DrawingElementContent { - /** - * - * @type {string} - * @memberof DrawingElementContent - */ - description: string; -} -/** - * - * @export - * @interface DrawingElementContentBody - */ -export interface DrawingElementContentBody { - /** - * - * @type {ContentElementType} - * @memberof DrawingElementContentBody - */ - type: ContentElementType; - /** - * - * @type {DrawingContentBody} - * @memberof DrawingElementContentBody - */ - content: DrawingContentBody; -} -/** - * - * @export - * @interface DrawingElementResponse - */ -export interface DrawingElementResponse { - /** - * - * @type {string} - * @memberof DrawingElementResponse - */ - id: string; - /** - * - * @type {ContentElementType} - * @memberof DrawingElementResponse - */ - type: ContentElementType; - /** - * - * @type {TimestampsResponse} - * @memberof DrawingElementResponse - */ - timestamps: TimestampsResponse; - /** - * - * @type {DrawingElementContent} - * @memberof DrawingElementResponse - */ - content: DrawingElementContent; -} -/** - * - * @export - * @interface EntityNotFoundError - */ -export interface EntityNotFoundError { - /** - * The response status code. - * @type {number} - * @memberof EntityNotFoundError - */ - code: number; - /** - * The error type. - * @type {string} - * @memberof EntityNotFoundError - */ - type: string; - /** - * The error title. - * @type {string} - * @memberof EntityNotFoundError - */ - title: string; - /** - * The error message. - * @type {string} - * @memberof EntityNotFoundError - */ - message: string; - /** - * The error details. - * @type {object} - * @memberof EntityNotFoundError - */ - details?: object; -} -/** - * - * @export - * @interface ExternalSourceResponse - */ -export interface ExternalSourceResponse { - /** - * - * @type {string} - * @memberof ExternalSourceResponse - */ - externalId: string; - /** - * - * @type {string} - * @memberof ExternalSourceResponse - */ - systemId: string; -} -/** - * - * @export - * @interface ExternalToolBulkCreateParams - */ -export interface ExternalToolBulkCreateParams { - /** - * List of external tools - * @type {Array} - * @memberof ExternalToolBulkCreateParams - */ - data: Array; -} -/** - * - * @export - * @interface ExternalToolContentBody - */ -export interface ExternalToolContentBody { - /** - * - * @type {string} - * @memberof ExternalToolContentBody - */ - contextExternalToolId?: string; -} -/** - * - * @export - * @interface ExternalToolCreateParams - */ -export interface ExternalToolCreateParams { - /** - * Name of the external tool - * @type {string} - * @memberof ExternalToolCreateParams - */ - name: string; - /** - * Description of the external tool - * @type {string} - * @memberof ExternalToolCreateParams - */ - description?: string; - /** - * URL of the external tool - * @type {string} - * @memberof ExternalToolCreateParams - */ - url?: string; - /** - * URL of the logo of the external tool - * @type {string} - * @memberof ExternalToolCreateParams - */ - logoUrl?: string; - /** - * URL of the thumbnail of the external tool - * @type {string} - * @memberof ExternalToolCreateParams - */ - thumbnailUrl?: string; - /** - * Configuration of the external tool - * @type {BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams} - * @memberof ExternalToolCreateParams - */ - config: BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams; - /** - * Custom parameters of the external tool - * @type {Array} - * @memberof ExternalToolCreateParams - */ - parameters?: Array; - /** - * Tool can be hidden, those tools cant be added to e.g. school, course or board - * @type {boolean} - * @memberof ExternalToolCreateParams - */ - isHidden: boolean; - /** - * Tool can be deactivated, related tools can not be added to e.g. school, course or board anymore - * @type {boolean} - * @memberof ExternalToolCreateParams - */ - isDeactivated: boolean; - /** - * Tool should be opened in a new tab - * @type {boolean} - * @memberof ExternalToolCreateParams - */ - openNewTab: boolean; - /** - * Restrict tools to specific contexts - * @type {Array} - * @memberof ExternalToolCreateParams - */ - restrictToContexts?: Array; - /** - * Medium of the external tool - * @type {ExternalToolMediumParams} - * @memberof ExternalToolCreateParams - */ - medium?: ExternalToolMediumParams; -} -/** - * - * @export - * @interface ExternalToolElementContent - */ -export interface ExternalToolElementContent { - /** - * - * @type {string} - * @memberof ExternalToolElementContent - */ - contextExternalToolId: string | null; -} -/** - * - * @export - * @interface ExternalToolElementContentBody - */ -export interface ExternalToolElementContentBody { - /** - * - * @type {ContentElementType} - * @memberof ExternalToolElementContentBody - */ - type: ContentElementType; - /** - * - * @type {ExternalToolContentBody} - * @memberof ExternalToolElementContentBody - */ - content: ExternalToolContentBody; -} -/** - * - * @export - * @interface ExternalToolElementResponse - */ -export interface ExternalToolElementResponse { - /** - * - * @type {string} - * @memberof ExternalToolElementResponse - */ - id: string; - /** - * - * @type {ContentElementType} - * @memberof ExternalToolElementResponse - */ - type: ContentElementType; - /** - * - * @type {ExternalToolElementContent} - * @memberof ExternalToolElementResponse - */ - content: ExternalToolElementContent; - /** - * - * @type {TimestampsResponse} - * @memberof ExternalToolElementResponse - */ - timestamps: TimestampsResponse; -} -/** - * - * @export - * @interface ExternalToolMediumParams - */ -export interface ExternalToolMediumParams { - /** - * Id of the medium - * @type {string} - * @memberof ExternalToolMediumParams - */ - mediumId: string; - /** - * Publisher of the medium - * @type {string} - * @memberof ExternalToolMediumParams - */ - publisher?: string; - /** - * The id of the media source - * @type {string} - * @memberof ExternalToolMediumParams - */ - mediaSourceId?: string; -} -/** - * - * @export - * @interface ExternalToolMediumResponse - */ -export interface ExternalToolMediumResponse { - /** - * Id of the medium - * @type {string} - * @memberof ExternalToolMediumResponse - */ - mediumId: string; - /** - * Publisher of the medium - * @type {string} - * @memberof ExternalToolMediumResponse - */ - publisher?: string; - /** - * The id of the media source - * @type {string} - * @memberof ExternalToolMediumResponse - */ - mediaSourceId?: string; -} -/** - * - * @export - * @interface ExternalToolMetadataResponse - */ -export interface ExternalToolMetadataResponse { - /** - * - * @type {number} - * @memberof ExternalToolMetadataResponse - */ - schoolExternalToolCount: number; - /** - * - * @type {ContextExternalToolCountPerContextResponse} - * @memberof ExternalToolMetadataResponse - */ - contextExternalToolCountPerContext: ContextExternalToolCountPerContextResponse; -} -/** - * - * @export - * @interface ExternalToolResponse - */ -export interface ExternalToolResponse { - /** - * Id of the external tool - * @type {string} - * @memberof ExternalToolResponse - */ - id: string; - /** - * Name of the external tool - * @type {string} - * @memberof ExternalToolResponse - */ - name: string; - /** - * Description of the external tool - * @type {string} - * @memberof ExternalToolResponse - */ - description?: string; - /** - * URL of the external tool - * @type {string} - * @memberof ExternalToolResponse - */ - url?: string; - /** - * URL of the logo of the external tool - * @type {string} - * @memberof ExternalToolResponse - */ - logoUrl?: string; - /** - * URL of the thumbnail of the external tool - * @type {string} - * @memberof ExternalToolResponse - */ - thumbnailUrl?: string; - /** - * Configuration of the external tool - * @type {BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams} - * @memberof ExternalToolResponse - */ - config: BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams; - /** - * Custom parameters of the external tool - * @type {Array} - * @memberof ExternalToolResponse - */ - parameters: Array; - /** - * Is the external tool hidden - * @type {boolean} - * @memberof ExternalToolResponse - */ - isHidden: boolean; - /** - * Is the external tool deactivated - * @type {boolean} - * @memberof ExternalToolResponse - */ - isDeactivated: boolean; - /** - * Should the external tool be opened in a new tab - * @type {boolean} - * @memberof ExternalToolResponse - */ - openNewTab: boolean; - /** - * Contexts in which the external tool is restricted - * @type {Array} - * @memberof ExternalToolResponse - */ - restrictToContexts?: Array; - /** - * Medium of the external tool - * @type {ExternalToolMediumResponse} - * @memberof ExternalToolResponse - */ - medium?: ExternalToolMediumResponse; -} -/** - * - * @export - * @interface ExternalToolSearchListResponse - */ -export interface ExternalToolSearchListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof ExternalToolSearchListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof ExternalToolSearchListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof ExternalToolSearchListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof ExternalToolSearchListResponse - */ - limit: number; -} -/** - * - * @export - * @interface ExternalToolUpdateParams - */ -export interface ExternalToolUpdateParams { - /** - * ID of the external tool - * @type {string} - * @memberof ExternalToolUpdateParams - */ - id: string; - /** - * - * @type {string} - * @memberof ExternalToolUpdateParams - */ - name: string; - /** - * Description of the external tool - * @type {string} - * @memberof ExternalToolUpdateParams - */ - description?: string; - /** - * URL of the external tool - * @type {string} - * @memberof ExternalToolUpdateParams - */ - url?: string; - /** - * URL of the logo of the external tool - * @type {string} - * @memberof ExternalToolUpdateParams - */ - logoUrl?: string; - /** - * URL of the thumbnail of the external tool - * @type {string} - * @memberof ExternalToolUpdateParams - */ - thumbnailUrl?: string; - /** - * Configuration of the external tool - * @type {BasicToolConfigParams | Lti11ToolConfigUpdateParams | Oauth2ToolConfigUpdateParams} - * @memberof ExternalToolUpdateParams - */ - config: BasicToolConfigParams | Lti11ToolConfigUpdateParams | Oauth2ToolConfigUpdateParams; - /** - * Custom parameters of the external tool - * @type {Array} - * @memberof ExternalToolUpdateParams - */ - parameters?: Array; - /** - * - * @type {boolean} - * @memberof ExternalToolUpdateParams - */ - isHidden: boolean; - /** - * Tool can be deactivated, related tools can not be added to e.g. school, course or board anymore - * @type {boolean} - * @memberof ExternalToolUpdateParams - */ - isDeactivated: boolean; - /** - * Open the tool in a new tab - * @type {boolean} - * @memberof ExternalToolUpdateParams - */ - openNewTab: boolean; - /** - * Restrict the tool to certain contexts - * @type {Array} - * @memberof ExternalToolUpdateParams - */ - restrictToContexts?: Array; - /** - * Medium of the external tool - * @type {ExternalToolMediumParams} - * @memberof ExternalToolUpdateParams - */ - medium?: ExternalToolMediumParams; -} -/** - * - * @export - * @interface FederalStateResponse - */ -export interface FederalStateResponse { - /** - * - * @type {string} - * @memberof FederalStateResponse - */ - id: string; - /** - * - * @type {string} - * @memberof FederalStateResponse - */ - name: string; - /** - * - * @type {string} - * @memberof FederalStateResponse - */ - abbreviation: string; - /** - * - * @type {string} - * @memberof FederalStateResponse - */ - logoUrl: string; - /** - * - * @type {Array} - * @memberof FederalStateResponse - */ - counties: Array; -} -/** - * - * @export - * @interface FileContentBody - */ -export interface FileContentBody { - /** - * - * @type {string} - * @memberof FileContentBody - */ - caption: string; - /** - * - * @type {string} - * @memberof FileContentBody - */ - alternativeText: string; -} -/** - * - * @export - * @interface FileElementContent - */ -export interface FileElementContent { - /** - * - * @type {string} - * @memberof FileElementContent - */ - caption: string; - /** - * - * @type {string} - * @memberof FileElementContent - */ - alternativeText: string; -} -/** - * - * @export - * @interface FileElementContentBody - */ -export interface FileElementContentBody { - /** - * - * @type {ContentElementType} - * @memberof FileElementContentBody - */ - type: ContentElementType; - /** - * - * @type {FileContentBody} - * @memberof FileElementContentBody - */ - content: FileContentBody; -} -/** - * - * @export - * @interface FileElementResponse - */ -export interface FileElementResponse { - /** - * - * @type {string} - * @memberof FileElementResponse - */ - id: string; - /** - * - * @type {ContentElementType} - * @memberof FileElementResponse - */ - type: ContentElementType; - /** - * - * @type {FileElementContent} - * @memberof FileElementResponse - */ - content: FileElementContent; - /** - * - * @type {TimestampsResponse} - * @memberof FileElementResponse - */ - timestamps: TimestampsResponse; -} -/** - * - * @export - * @enum {string} - */ -export enum FileStorageType { - AwsS3 = 'awsS3' -} - -/** - * - * @export - * @interface ForbiddenOperationError - */ -export interface ForbiddenOperationError { - /** - * The response status code. - * @type {number} - * @memberof ForbiddenOperationError - */ - code: number; - /** - * The error type. - * @type {string} - * @memberof ForbiddenOperationError - */ - type: string; - /** - * The error title. - * @type {string} - * @memberof ForbiddenOperationError - */ - title: string; - /** - * The error message. - * @type {string} - * @memberof ForbiddenOperationError - */ - message: string; - /** - * The error details. - * @type {object} - * @memberof ForbiddenOperationError - */ - details?: object; -} -/** - * - * @export - * @interface ForceMigrationParams - */ -export interface ForceMigrationParams { - /** - * Email of the administrator - * @type {string} - * @memberof ForceMigrationParams - */ - email: string; - /** - * Target externalId to link it with an external account - * @type {string} - * @memberof ForceMigrationParams - */ - externalUserId: string; - /** - * Target externalId to link it with an external school - * @type {string} - * @memberof ForceMigrationParams - */ - externalSchoolId: string; -} -/** - * - * @export - * @interface GetMetaTagDataBody - */ -export interface GetMetaTagDataBody { - /** - * - * @type {string} - * @memberof GetMetaTagDataBody - */ - url: string; -} -/** - * - * @export - * @interface GroupListResponse - */ -export interface GroupListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof GroupListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof GroupListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof GroupListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof GroupListResponse - */ - limit: number; -} -/** - * - * @export - * @interface GroupResponse - */ -export interface GroupResponse { - /** - * - * @type {string} - * @memberof GroupResponse - */ - id: string; - /** - * - * @type {string} - * @memberof GroupResponse - */ - name: string; - /** - * - * @type {string} - * @memberof GroupResponse - */ - type: GroupResponseTypeEnum; - /** - * - * @type {Array} - * @memberof GroupResponse - */ - users: Array; - /** - * - * @type {ExternalSourceResponse} - * @memberof GroupResponse - */ - externalSource?: ExternalSourceResponse; - /** - * - * @type {string} - * @memberof GroupResponse - */ - organizationId?: string; -} - -/** - * @export - * @enum {string} - */ -export enum GroupResponseTypeEnum { - Class = 'class', - Course = 'course', - Other = 'other' -} - -/** - * - * @export - * @interface GroupUserResponse - */ -export interface GroupUserResponse { - /** - * - * @type {string} - * @memberof GroupUserResponse - */ - id: string; - /** - * - * @type {string} - * @memberof GroupUserResponse - */ - firstName: string; - /** - * - * @type {string} - * @memberof GroupUserResponse - */ - lastName: string; - /** - * - * @type {RoleName} - * @memberof GroupUserResponse - */ - role: RoleName; -} -/** - * - * @export - * @interface ImportUserListResponse - */ -export interface ImportUserListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof ImportUserListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof ImportUserListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof ImportUserListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof ImportUserListResponse - */ - limit: number; -} -/** - * - * @export - * @interface ImportUserResponse - */ -export interface ImportUserResponse { - /** - * id reference to a import user - * @type {string} - * @memberof ImportUserResponse - */ - importUserId: string; - /** - * login name from external system - * @type {string} - * @memberof ImportUserResponse - */ - loginName: string; - /** - * external systems user firstname - * @type {string} - * @memberof ImportUserResponse - */ - firstName: string; - /** - * external systems user lastname - * @type {string} - * @memberof ImportUserResponse - */ - lastName: string; - /** - * list of user roles from external system: student, teacher, admin - * @type {Array} - * @memberof ImportUserResponse - */ - roleNames: Array; - /** - * names of classes the user attends from external system - * @type {Array} - * @memberof ImportUserResponse - */ - classNames: Array; - /** - * assignemnt to a local user account - * @type {UserMatchResponse} - * @memberof ImportUserResponse - */ - match?: UserMatchResponse; - /** - * manual flag to apply it as filter - * @type {boolean} - * @memberof ImportUserResponse - */ - flagged: boolean; -} - -/** - * @export - * @enum {string} - */ -export enum ImportUserResponseRoleNamesEnum { - Student = 'student', - Teacher = 'teacher', - Admin = 'admin' -} - -/** - * - * @export - * @enum {string} - */ -export enum InstanceFeature { - IsTeamCreationByStudentsEnabled = 'isTeamCreationByStudentsEnabled' -} - -/** - * - * @export - * @enum {string} - */ -export enum LanguageType { - De = 'de', - En = 'en', - Es = 'es', - Uk = 'uk' -} - -/** - * - * @export - * @interface LayoutBodyParams - */ -export interface LayoutBodyParams { - /** - * - * @type {MediaBoardLayoutType} - * @memberof LayoutBodyParams - */ - layout: MediaBoardLayoutType; -} -/** - * - * @export - * @interface LdapAuthorizationBodyParams - */ -export interface LdapAuthorizationBodyParams { - /** - * - * @type {string} - * @memberof LdapAuthorizationBodyParams - */ - systemId: string; - /** - * - * @type {string} - * @memberof LdapAuthorizationBodyParams - */ - username: string; - /** - * - * @type {string} - * @memberof LdapAuthorizationBodyParams - */ - password: string; - /** - * - * @type {string} - * @memberof LdapAuthorizationBodyParams - */ - schoolId: string; -} -/** - * - * @export - * @interface LessonContentResponse - */ -export interface LessonContentResponse { - /** - * - * @type {object} - * @memberof LessonContentResponse - */ - content: object; - /** - * The id of the Material entity - * @type {string} - * @memberof LessonContentResponse - * @deprecated - */ - _id: string; - /** - * The id of the Material entity - * @type {string} - * @memberof LessonContentResponse - */ - id: string; - /** - * Title of the Material entity - * @type {string} - * @memberof LessonContentResponse - */ - title: string; - /** - * - * @type {string} - * @memberof LessonContentResponse - */ - component: LessonContentResponseComponentEnum; - /** - * - * @type {boolean} - * @memberof LessonContentResponse - */ - hidden: boolean; -} - -/** - * @export - * @enum {string} - */ -export enum LessonContentResponseComponentEnum { - Etherpad = 'Etherpad', - GeoGebra = 'geoGebra', - Internal = 'internal', - Resources = 'resources', - Text = 'text', - NeXboard = 'neXboard' -} - -/** - * - * @export - * @interface LessonCopyApiParams - */ -export interface LessonCopyApiParams { - /** - * Destination course parent Id the lesson is copied to - * @type {string} - * @memberof LessonCopyApiParams - */ - courseId?: string; -} -/** - * - * @export - * @interface LessonMetadataListResponse - */ -export interface LessonMetadataListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof LessonMetadataListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof LessonMetadataListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof LessonMetadataListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof LessonMetadataListResponse - */ - limit: number; -} -/** - * - * @export - * @interface LessonMetadataResponse - */ -export interface LessonMetadataResponse { - /** - * The id of the Lesson entity - * @type {string} - * @memberof LessonMetadataResponse - */ - _id: string; - /** - * Name of the Lesson entity - * @type {string} - * @memberof LessonMetadataResponse - */ - name: string; -} -/** - * - * @export - * @interface LessonResponse - */ -export interface LessonResponse { - /** - * The id of the Lesson entity - * @type {string} - * @memberof LessonResponse - * @deprecated - */ - _id: string; - /** - * The id of the Lesson entity - * @type {string} - * @memberof LessonResponse - */ - id: string; - /** - * Name of the Lesson entity - * @type {string} - * @memberof LessonResponse - */ - name: string; - /** - * The id of the Course entity - * @type {string} - * @memberof LessonResponse - */ - courseId?: string; - /** - * The id of the Course-group entity - * @type {string} - * @memberof LessonResponse - */ - courseGroupId?: string; - /** - * Hidden status of the Lesson entity - * @type {boolean} - * @memberof LessonResponse - */ - hidden: boolean; - /** - * Position of the Lesson entity - * @type {number} - * @memberof LessonResponse - */ - position: number; - /** - * Contents of the Lesson entity - * @type {Array} - * @memberof LessonResponse - */ - contents: Array; - /** - * Materials of the Lesson entity - * @type {Array} - * @memberof LessonResponse - */ - materials: Array; -} -/** - * - * @export - * @interface LinkContentBody - */ -export interface LinkContentBody { - /** - * - * @type {string} - * @memberof LinkContentBody - */ - url: string; - /** - * - * @type {string} - * @memberof LinkContentBody - */ - title: string; - /** - * - * @type {string} - * @memberof LinkContentBody - */ - description: string; - /** - * - * @type {string} - * @memberof LinkContentBody - */ - imageUrl: string; -} -/** - * - * @export - * @interface LinkElementContent - */ -export interface LinkElementContent { - /** - * - * @type {string} - * @memberof LinkElementContent - */ - url: string; - /** - * - * @type {string} - * @memberof LinkElementContent - */ - title: string; - /** - * - * @type {string} - * @memberof LinkElementContent - */ - description?: string; - /** - * - * @type {string} - * @memberof LinkElementContent - */ - imageUrl?: string; -} -/** - * - * @export - * @interface LinkElementContentBody - */ -export interface LinkElementContentBody { - /** - * - * @type {ContentElementType} - * @memberof LinkElementContentBody - */ - type: ContentElementType; - /** - * - * @type {LinkContentBody} - * @memberof LinkElementContentBody - */ - content: LinkContentBody; -} -/** - * - * @export - * @interface LinkElementResponse - */ -export interface LinkElementResponse { - /** - * - * @type {string} - * @memberof LinkElementResponse - */ - id: string; - /** - * - * @type {ContentElementType} - * @memberof LinkElementResponse - */ - type: ContentElementType; - /** - * - * @type {LinkElementContent} - * @memberof LinkElementResponse - */ - content: LinkElementContent; - /** - * - * @type {TimestampsResponse} - * @memberof LinkElementResponse - */ - timestamps: TimestampsResponse; -} -/** - * - * @export - * @interface LocalAuthorizationBodyParams - */ -export interface LocalAuthorizationBodyParams { - /** - * - * @type {string} - * @memberof LocalAuthorizationBodyParams - */ - username: string; - /** - * - * @type {string} - * @memberof LocalAuthorizationBodyParams - */ - password: string; -} -/** - * - * @export - * @interface LoginRequestBody - */ -export interface LoginRequestBody { - /** - * The error should follow the OAuth2 error format (e.g. invalid_request, login_required). Defaults to request_denied. - * @type {string} - * @memberof LoginRequestBody - */ - error?: string; - /** - * Debug contains information to help resolve the problem as a developer. Usually not exposed to the public but only in the server logs. - * @type {string} - * @memberof LoginRequestBody - */ - error_debug?: string; - /** - * Description of the error in a human readable format. - * @type {string} - * @memberof LoginRequestBody - */ - error_description?: string; - /** - * Hint to help resolve the error. - * @type {string} - * @memberof LoginRequestBody - */ - error_hint?: string; - /** - * Represents the HTTP status code of the error (e.g. 401 or 403). Defaults to 400. - * @type {number} - * @memberof LoginRequestBody - */ - status_code?: number; - /** - * Remember, if set to true, tells the oauth provider to remember this consent authorization and reuse it if the same client asks the same user for the same, or a subset of, scope. - * @type {boolean} - * @memberof LoginRequestBody - */ - remember?: boolean; - /** - * RememberFor sets how long the consent authorization should be remembered for in seconds. If set to 0, the authorization will be remembered indefinitely. - * @type {number} - * @memberof LoginRequestBody - */ - remember_for?: number; -} -/** - * - * @export - * @interface LoginResponse - */ -export interface LoginResponse { - /** - * Id of the corresponding client. - * @type {string} - * @memberof LoginResponse - */ - client_id: string; - /** - * The id/challenge of the consent login request. - * @type {string} - * @memberof LoginResponse - */ - challenge: string; - /** - * - * @type {OauthClientResponse} - * @memberof LoginResponse - */ - client: OauthClientResponse; - /** - * - * @type {OidcContextResponse} - * @memberof LoginResponse - */ - oidc_context: OidcContextResponse; - /** - * The original oauth2.0 authorization url request by the client. - * @type {string} - * @memberof LoginResponse - */ - request_url: string; - /** - * - * @type {Array} - * @memberof LoginResponse - */ - requested_access_token_audience: Array; - /** - * The request scopes of the login request. - * @type {Array} - * @memberof LoginResponse - */ - requested_scope?: Array; - /** - * The login session id. This parameter is used as sid for the oidc front-/backchannel logout. - * @type {string} - * @memberof LoginResponse - */ - session_id: string; - /** - * Skip, if true, implies that the client has requested the same scopes from the same user previously. - * @type {boolean} - * @memberof LoginResponse - */ - skip: boolean; - /** - * User id of the end-user that is authenticated. - * @type {string} - * @memberof LoginResponse - */ - subject: string; -} -/** - * - * @export - * @interface Lti11ToolConfigCreateParams - */ -export interface Lti11ToolConfigCreateParams { - /** - * - * @type {ToolConfigType} - * @memberof Lti11ToolConfigCreateParams - */ - type: ToolConfigType; - /** - * - * @type {string} - * @memberof Lti11ToolConfigCreateParams - */ - baseUrl: string; - /** - * - * @type {string} - * @memberof Lti11ToolConfigCreateParams - */ - key: string; - /** - * - * @type {string} - * @memberof Lti11ToolConfigCreateParams - */ - secret: string; - /** - * - * @type {LtiMessageType} - * @memberof Lti11ToolConfigCreateParams - */ - lti_message_type: LtiMessageType; - /** - * - * @type {LtiPrivacyPermission} - * @memberof Lti11ToolConfigCreateParams - */ - privacy_permission: LtiPrivacyPermission; - /** - * - * @type {string} - * @memberof Lti11ToolConfigCreateParams - */ - launch_presentation_locale: string; -} -/** - * - * @export - * @interface Lti11ToolConfigUpdateParams - */ -export interface Lti11ToolConfigUpdateParams { - /** - * - * @type {ToolConfigType} - * @memberof Lti11ToolConfigUpdateParams - */ - type: ToolConfigType; - /** - * - * @type {string} - * @memberof Lti11ToolConfigUpdateParams - */ - baseUrl: string; - /** - * - * @type {string} - * @memberof Lti11ToolConfigUpdateParams - */ - key: string; - /** - * - * @type {string} - * @memberof Lti11ToolConfigUpdateParams - */ - secret?: string; - /** - * - * @type {LtiMessageType} - * @memberof Lti11ToolConfigUpdateParams - */ - lti_message_type: LtiMessageType; - /** - * - * @type {LtiPrivacyPermission} - * @memberof Lti11ToolConfigUpdateParams - */ - privacy_permission: LtiPrivacyPermission; - /** - * - * @type {string} - * @memberof Lti11ToolConfigUpdateParams - */ - launch_presentation_locale: string; -} -/** - * - * @export - * @enum {string} - */ -export enum LtiMessageType { - BasicLtiLaunchRequest = 'basic-lti-launch-request' -} - -/** - * - * @export - * @enum {string} - */ -export enum LtiPrivacyPermission { - Anonymous = 'anonymous', - EMail = 'e-mail', - Name = 'name', - Public = 'public', - Pseudonymous = 'pseudonymous' -} - -/** - * - * @export - * @interface MaterialResponse - */ -export interface MaterialResponse { - /** - * The id of the Material entity - * @type {string} - * @memberof MaterialResponse - */ - _id: string; - /** - * The id of the Material entity - * @type {string} - * @memberof MaterialResponse - */ - id: string; - /** - * Title of the Material entity - * @type {string} - * @memberof MaterialResponse - */ - title: string; - /** - * ? - * @type {Array} - * @memberof MaterialResponse - */ - relatedResources: Array; - /** - * Url of the material - * @type {string} - * @memberof MaterialResponse - */ - url: string; - /** - * Position of the Lesson entity - * @type {string} - * @memberof MaterialResponse - */ - client: string; - /** - * Description of the material license - * @type {Array} - * @memberof MaterialResponse - */ - license: Array; - /** - * For material from Merlin, the Merlin reference - * @type {string} - * @memberof MaterialResponse - */ - merlinReference: string; -} -/** - * - * @export - * @interface MeAccountResponse - */ -export interface MeAccountResponse { - /** - * - * @type {string} - * @memberof MeAccountResponse - */ - id: string; -} -/** - * - * @export - * @interface MeResponse - */ -export interface MeResponse { - /** - * - * @type {MeSchoolResponse} - * @memberof MeResponse - */ - school: MeSchoolResponse; - /** - * - * @type {MeUserResponse} - * @memberof MeResponse - */ - user: MeUserResponse; - /** - * - * @type {Array} - * @memberof MeResponse - */ - roles: Array; - /** - * - * @type {Array} - * @memberof MeResponse - */ - permissions: Array; - /** - * - * @type {LanguageType} - * @memberof MeResponse - */ - language: LanguageType; - /** - * - * @type {MeAccountResponse} - * @memberof MeResponse - */ - account: MeAccountResponse; -} -/** - * - * @export - * @interface MeRoleResponse - */ -export interface MeRoleResponse { - /** - * - * @type {string} - * @memberof MeRoleResponse - */ - id: string; - /** - * - * @type {string} - * @memberof MeRoleResponse - */ - name: string; -} -/** - * - * @export - * @interface MeSchoolLogoResponse - */ -export interface MeSchoolLogoResponse { - /** - * - * @type {string} - * @memberof MeSchoolLogoResponse - */ - url?: string; - /** - * - * @type {string} - * @memberof MeSchoolLogoResponse - */ - name?: string; -} -/** - * - * @export - * @interface MeSchoolResponse - */ -export interface MeSchoolResponse { - /** - * - * @type {string} - * @memberof MeSchoolResponse - */ - id: string; - /** - * - * @type {string} - * @memberof MeSchoolResponse - */ - name: string; - /** - * - * @type {MeSchoolLogoResponse} - * @memberof MeSchoolResponse - */ - logo: MeSchoolLogoResponse; -} -/** - * - * @export - * @interface MeUserResponse - */ -export interface MeUserResponse { - /** - * - * @type {string} - * @memberof MeUserResponse - */ - id: string; - /** - * - * @type {string} - * @memberof MeUserResponse - */ - firstName: string; - /** - * - * @type {string} - * @memberof MeUserResponse - */ - lastName: string; - /** - * - * @type {string} - * @memberof MeUserResponse - */ - customAvatarBackgroundColor?: string; -} -/** - * - * @export - * @interface MediaAvailableLineElementResponse - */ -export interface MediaAvailableLineElementResponse { - /** - * School External tool id of the media available line element - * @type {string} - * @memberof MediaAvailableLineElementResponse - */ - schoolExternalToolId: string; - /** - * Name of the media available line element - * @type {string} - * @memberof MediaAvailableLineElementResponse - */ - name: string; - /** - * Description of the media available line element - * @type {string} - * @memberof MediaAvailableLineElementResponse - */ - description?: string; - /** - * Logo url of the media available line element - * @type {string} - * @memberof MediaAvailableLineElementResponse - */ - logoUrl?: string; - /** - * Thumbnail url of the media available line element - * @type {string} - * @memberof MediaAvailableLineElementResponse - */ - thumbnailUrl?: string; -} -/** - * - * @export - * @interface MediaAvailableLineResponse - */ -export interface MediaAvailableLineResponse { - /** - * Available media elements in the line - * @type {Array} - * @memberof MediaAvailableLineResponse - */ - elements: Array; - /** - * - * @type {MediaBoardColors} - * @memberof MediaAvailableLineResponse - */ - backgroundColor: MediaBoardColors; - /** - * Collapse available media line - * @type {boolean} - * @memberof MediaAvailableLineResponse - */ - collapsed: boolean; -} -/** - * - * @export - * @enum {string} - */ -export enum MediaBoardColors { - Transparent = 'transparent', - Red = 'red', - Pink = 'pink', - Purple = 'purple', - DeepPurple = 'deepPurple', - Indigo = 'indigo', - Blue = 'blue', - LightBlue = 'lightBlue', - Cyan = 'cyan', - Teal = 'teal', - Green = 'green', - LightGreen = 'lightGreen', - Lime = 'lime', - Yellow = 'yellow', - Amber = 'amber', - Orange = 'orange', - DeepOrange = 'deepOrange', - Brown = 'brown', - Grey = 'grey', - BlueGrey = 'blueGrey' -} - -/** - * - * @export - * @enum {string} - */ -export enum MediaBoardLayoutType { - Columns = 'columns', - List = 'list', - Grid = 'grid' -} - -/** - * - * @export - * @interface MediaBoardResponse - */ -export interface MediaBoardResponse { - /** - * The id of the media board - * @type {string} - * @memberof MediaBoardResponse - */ - id: string; - /** - * The lines of the media board - * @type {Array} - * @memberof MediaBoardResponse - */ - lines: Array; - /** - * The timestamps of the media board - * @type {TimestampsResponse} - * @memberof MediaBoardResponse - */ - timestamps: TimestampsResponse; - /** - * - * @type {MediaBoardLayoutType} - * @memberof MediaBoardResponse - */ - layout: MediaBoardLayoutType; -} -/** - * - * @export - * @interface MediaExternalToolElementContent - */ -export interface MediaExternalToolElementContent { - /** - * The id of the context external tool - * @type {string} - * @memberof MediaExternalToolElementContent - */ - contextExternalToolId: string; -} -/** - * - * @export - * @interface MediaExternalToolElementResponse - */ -export interface MediaExternalToolElementResponse { - /** - * The id of the media external tool element - * @type {string} - * @memberof MediaExternalToolElementResponse - */ - id: string; - /** - * The content of the media external tool element - * @type {MediaExternalToolElementContent} - * @memberof MediaExternalToolElementResponse - */ - content: MediaExternalToolElementContent; - /** - * The timestamps of the media external tool element - * @type {TimestampsResponse} - * @memberof MediaExternalToolElementResponse - */ - timestamps: TimestampsResponse; -} -/** - * - * @export - * @interface MediaLineResponse - */ -export interface MediaLineResponse { - /** - * The id of the media line - * @type {string} - * @memberof MediaLineResponse - */ - id: string; - /** - * The title of the media line - * @type {string} - * @memberof MediaLineResponse - */ - title: string; - /** - * The elements of the media line - * @type {Array} - * @memberof MediaLineResponse - */ - elements: Array; - /** - * The timestamps of the media line - * @type {TimestampsResponse} - * @memberof MediaLineResponse - */ - timestamps: TimestampsResponse; - /** - * - * @type {MediaBoardColors} - * @memberof MediaLineResponse - */ - backgroundColor: MediaBoardColors; - /** - * Collapse the media line - * @type {boolean} - * @memberof MediaLineResponse - */ - collapsed: boolean; -} -/** - * - * @export - * @interface Message - */ -export interface Message { - /** - * - * @type {string} - * @memberof Message - */ - title: string; - /** - * - * @type {string} - * @memberof Message - */ - text: string; - /** - * - * @type {string} - * @memberof Message - */ - timestamp: string; - /** - * - * @type {MessageOrigin} - * @memberof Message - */ - origin: MessageOrigin; - /** - * - * @type {string} - * @memberof Message - */ - url: string; - /** - * - * @type {string} - * @memberof Message - */ - status: string; - /** - * - * @type {string} - * @memberof Message - */ - createdAt: string; -} -/** - * - * @export - * @interface MessageOrigin - */ -export interface MessageOrigin { - /** - * - * @type {number} - * @memberof MessageOrigin - */ - message_id: number; - /** - * - * @type {string} - * @memberof MessageOrigin - */ - page: string; -} -/** - * - * @export - * @interface MetaTagExtractorResponse - */ -export interface MetaTagExtractorResponse { - /** - * - * @type {string} - * @memberof MetaTagExtractorResponse - */ - url: string; - /** - * - * @type {string} - * @memberof MetaTagExtractorResponse - */ - title: string; - /** - * - * @type {string} - * @memberof MetaTagExtractorResponse - */ - description: string; - /** - * - * @type {string} - * @memberof MetaTagExtractorResponse - */ - imageUrl: string; - /** - * - * @type {string} - * @memberof MetaTagExtractorResponse - */ - type: string; - /** - * - * @type {string} - * @memberof MetaTagExtractorResponse - */ - parentTitle: string; - /** - * - * @type {string} - * @memberof MetaTagExtractorResponse - */ - parentType: string; -} -/** - * - * @export - * @interface MoveCardBodyParams - */ -export interface MoveCardBodyParams { - /** - * - * @type {string} - * @memberof MoveCardBodyParams - */ - toColumnId: string; - /** - * - * @type {number} - * @memberof MoveCardBodyParams - */ - toPosition: number; -} -/** - * - * @export - * @interface MoveColumnBodyParams - */ -export interface MoveColumnBodyParams { - /** - * The id of the target board - * @type {string} - * @memberof MoveColumnBodyParams - */ - toBoardId: string; - /** - * - * @type {number} - * @memberof MoveColumnBodyParams - */ - toPosition: number; -} -/** - * - * @export - * @interface MoveContentElementBody - */ -export interface MoveContentElementBody { - /** - * - * @type {string} - * @memberof MoveContentElementBody - */ - toCardId: string; - /** - * - * @type {number} - * @memberof MoveContentElementBody - */ - toPosition: number; -} -/** - * - * @export - * @interface MoveElementBodyParams - */ -export interface MoveElementBodyParams { - /** - * The id of the line where the element is moved to - * @type {string} - * @memberof MoveElementBodyParams - */ - toLineId: string; - /** - * The position where the element is moved to - * @type {number} - * @memberof MoveElementBodyParams - */ - toPosition: number; -} -/** - * - * @export - * @interface MoveElementParams - */ -export interface MoveElementParams { - /** - * - * @type {MoveElementPositionParams} - * @memberof MoveElementParams - */ - from: MoveElementPositionParams; - /** - * - * @type {MoveElementPositionParams} - * @memberof MoveElementParams - */ - to: MoveElementPositionParams; -} -/** - * - * @export - * @interface MoveElementPositionParams - */ -export interface MoveElementPositionParams { - /** - * - * @type {number} - * @memberof MoveElementPositionParams - */ - x: number; - /** - * - * @type {number} - * @memberof MoveElementPositionParams - */ - y: number; - /** - * used to identify a position within a group. - * @type {number} - * @memberof MoveElementPositionParams - */ - groupIndex?: number; -} -/** - * - * @export - * @interface NewsListResponse - */ -export interface NewsListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof NewsListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof NewsListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof NewsListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof NewsListResponse - */ - limit: number; -} -/** - * - * @export - * @interface NewsResponse - */ -export interface NewsResponse { - /** - * The id of the News entity - * @type {string} - * @memberof NewsResponse - */ - id: string; - /** - * Title of the News entity - * @type {string} - * @memberof NewsResponse - */ - title: string; - /** - * Content of the News entity - * @type {string} - * @memberof NewsResponse - */ - content: string; - /** - * The point in time from when the News entity schould be displayed - * @type {string} - * @memberof NewsResponse - */ - displayAt: string; - /** - * The type of source of the News entity - * @type {string} - * @memberof NewsResponse - */ - source?: NewsResponseSourceEnum; - /** - * The source description of the News entity - * @type {string} - * @memberof NewsResponse - */ - sourceDescription?: string; - /** - * - * @type {NewsTargetModel} - * @memberof NewsResponse - */ - targetModel: NewsTargetModel; - /** - * Specific target id to which the News entity is related - * @type {string} - * @memberof NewsResponse - */ - targetId: string; - /** - * The target object with id and name, could be the school, team, or course name - * @type {TargetInfoResponse} - * @memberof NewsResponse - */ - target: TargetInfoResponse; - /** - * The School ownership - * @type {SchoolInfoResponse} - * @memberof NewsResponse - */ - school: SchoolInfoResponse; - /** - * Reference to the User that created the News entity - * @type {UserInfoResponse} - * @memberof NewsResponse - */ - creator: UserInfoResponse; - /** - * Reference to the User that updated the News entity - * @type {UserInfoResponse} - * @memberof NewsResponse - */ - updater?: UserInfoResponse; - /** - * The creation timestamp - * @type {string} - * @memberof NewsResponse - */ - createdAt: string; - /** - * The update timestamp - * @type {string} - * @memberof NewsResponse - */ - updatedAt: string; - /** - * List of permissions the current user has for the News entity - * @type {Array} - * @memberof NewsResponse - */ - permissions: Array; -} - -/** - * @export - * @enum {string} - */ -export enum NewsResponseSourceEnum { - Internal = 'internal', - Rss = 'rss' -} - -/** - * - * @export - * @enum {string} - */ -export enum NewsTargetModel { - Schools = 'schools', - Courses = 'courses', - Teams = 'teams' -} - -/** - * - * @export - * @interface OAuthTokenDto - */ -export interface OAuthTokenDto { - /** - * - * @type {string} - * @memberof OAuthTokenDto - */ - idToken: string; - /** - * - * @type {string} - * @memberof OAuthTokenDto - */ - refreshToken: string; - /** - * - * @type {string} - * @memberof OAuthTokenDto - */ - accessToken: string; -} -/** - * - * @export - * @interface Oauth2AuthorizationBodyParams - */ -export interface Oauth2AuthorizationBodyParams { - /** - * - * @type {string} - * @memberof Oauth2AuthorizationBodyParams - */ - redirectUri: string; - /** - * - * @type {string} - * @memberof Oauth2AuthorizationBodyParams - */ - code: string; - /** - * - * @type {string} - * @memberof Oauth2AuthorizationBodyParams - */ - systemId: string; -} -/** - * - * @export - * @interface Oauth2MigrationParams - */ -export interface Oauth2MigrationParams { - /** - * - * @type {string} - * @memberof Oauth2MigrationParams - */ - redirectUri: string; - /** - * - * @type {string} - * @memberof Oauth2MigrationParams - */ - code: string; - /** - * - * @type {string} - * @memberof Oauth2MigrationParams - */ - systemId: string; -} -/** - * - * @export - * @interface Oauth2ToolConfigCreateParams - */ -export interface Oauth2ToolConfigCreateParams { - /** - * - * @type {string} - * @memberof Oauth2ToolConfigCreateParams - */ - type: string; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigCreateParams - */ - baseUrl: string; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigCreateParams - */ - clientId: string; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigCreateParams - */ - clientSecret: string; - /** - * - * @type {boolean} - * @memberof Oauth2ToolConfigCreateParams - */ - skipConsent: boolean; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigCreateParams - */ - frontchannelLogoutUri?: string; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigCreateParams - */ - scope?: string; - /** - * - * @type {Array} - * @memberof Oauth2ToolConfigCreateParams - */ - redirectUris: Array; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigCreateParams - */ - tokenEndpointAuthMethod: string; -} -/** - * - * @export - * @interface Oauth2ToolConfigUpdateParams - */ -export interface Oauth2ToolConfigUpdateParams { - /** - * - * @type {string} - * @memberof Oauth2ToolConfigUpdateParams - */ - type: string; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigUpdateParams - */ - baseUrl: string; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigUpdateParams - */ - clientId: string; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigUpdateParams - */ - clientSecret?: string; - /** - * - * @type {boolean} - * @memberof Oauth2ToolConfigUpdateParams - */ - skipConsent: boolean; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigUpdateParams - */ - frontchannelLogoutUri?: string; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigUpdateParams - */ - scope?: string; - /** - * - * @type {Array} - * @memberof Oauth2ToolConfigUpdateParams - */ - redirectUris: Array; - /** - * - * @type {string} - * @memberof Oauth2ToolConfigUpdateParams - */ - tokenEndpointAuthMethod: string; -} -/** - * - * @export - * @interface OauthClientCreateBody - */ -export interface OauthClientCreateBody { - /** - * The Oauth2 client id. - * @type {string} - * @memberof OauthClientCreateBody - */ - client_id: string; - /** - * The Oauth2 client name. - * @type {string} - * @memberof OauthClientCreateBody - */ - client_name: string; - /** - * The Oauth2 client secret. - * @type {string} - * @memberof OauthClientCreateBody - */ - client_secret: string; - /** - * The allowed redirect urls of the Oauth2 client. - * @type {Array} - * @memberof OauthClientCreateBody - */ - redirect_uris?: Array; - /** - * Requested Client Authentication method for the Token Endpoint. The options are client_secret_post, client_secret_basic, private_key_jwt, and none. - * @type {string} - * @memberof OauthClientCreateBody - */ - token_endpoint_auth_method: string; - /** - * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. - * @type {string} - * @memberof OauthClientCreateBody - */ - subject_type: string; - /** - * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. - * @type {string} - * @memberof OauthClientCreateBody - */ - scope?: string; - /** - * Thr frontchannel logout uri. - * @type {string} - * @memberof OauthClientCreateBody - */ - frontchannel_logout_uri?: string; - /** - * The grant types of the Oauth2 client. - * @type {Array} - * @memberof OauthClientCreateBody - */ - grant_types?: Array; - /** - * The response types of the Oauth2 client. - * @type {Array} - * @memberof OauthClientCreateBody - */ - response_types?: Array; -} -/** - * - * @export - * @interface OauthClientResponse - */ -export interface OauthClientResponse { - /** - * - * @type {Array} - * @memberof OauthClientResponse - */ - allowed_cors_origins?: Array; - /** - * - * @type {Array} - * @memberof OauthClientResponse - */ - audience: Array; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - authorization_code_grant_access_token_lifespan: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - authorization_code_grant_id_token_lifespan: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - authorization_code_grant_refresh_token_lifespan: string; - /** - * Boolean value specifying whether the RP requires that a sid (session ID) Claim. - * @type {boolean} - * @memberof OauthClientResponse - */ - backchannel_logout_session_required: boolean; - /** - * RP URL that will cause the RP to log itself out when sent a Logout Token by the OP. - * @type {string} - * @memberof OauthClientResponse - */ - backchannel_logout_uri: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - client_credentials_grant_access_token_lifespan: string; - /** - * Id of the client. - * @type {string} - * @memberof OauthClientResponse - */ - client_id: string; - /** - * Human-readable string name of the client presented to the end-user. - * @type {string} - * @memberof OauthClientResponse - */ - client_name: string; - /** - * SecretExpiresAt is an integer holding the time at which the client secret will expire or 0 if it will not expire. - * @type {number} - * @memberof OauthClientResponse - */ - client_secret_expires_at: number; - /** - * ClientUri is an URL string of a web page providing information about the client. - * @type {string} - * @memberof OauthClientResponse - */ - client_uri: string; - /** - * - * @type {Array} - * @memberof OauthClientResponse - */ - contacts?: Array; - /** - * CreatedAt returns the timestamp of the clients creation. - * @type {string} - * @memberof OauthClientResponse - */ - created_at: string; - /** - * Boolean value specifying whether the RP requires that iss (issuer) and sid (session ID) query parameters. - * @type {boolean} - * @memberof OauthClientResponse - */ - frontchannel_logout_session_required: boolean; - /** - * RP URL that will cause the RP to log itself out when rendered in an iframe by the OP. - * @type {string} - * @memberof OauthClientResponse - */ - frontchannel_logout_uri: string; - /** - * The grant types of the Oauth2 client. - * @type {Array} - * @memberof OauthClientResponse - */ - grant_types?: Array; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - implicit_grant_access_token_lifespan: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - implicit_grant_id_token_lifespan: string; - /** - * - * @type {object} - * @memberof OauthClientResponse - */ - jwks: object; - /** - * URL for the clients JSON Web Key Set [JWK] document - * @type {string} - * @memberof OauthClientResponse - */ - jwks_uri: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - jwt_bearer_grant_access_token_lifespan: string; - /** - * LogoUri is an URL string that references a logo for the client. - * @type {string} - * @memberof OauthClientResponse - */ - logo_uri: string; - /** - * - * @type {object} - * @memberof OauthClientResponse - */ - metadata: object; - /** - * Owner is a string identifying the owner of the OAuth 2.0 Client. - * @type {string} - * @memberof OauthClientResponse - */ - owner: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - password_grant_access_token_lifespan: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - password_grant_refresh_token_lifespan: string; - /** - * PolicyUri is a URL string that points to a human-readable privacy policy document - * @type {string} - * @memberof OauthClientResponse - */ - policy_uri: string; - /** - * - * @type {Array} - * @memberof OauthClientResponse - */ - post_logout_redirect_uris?: Array; - /** - * - * @type {Array} - * @memberof OauthClientResponse - */ - redirect_uris?: Array; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - refresh_token_grant_access_token_lifespan: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - refresh_token_grant_id_token_lifespan: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - refresh_token_grant_refresh_token_lifespan: string; - /** - * RegistrationAccessToken can be used to update, get, or delete the OAuth2 Client. - * @type {string} - * @memberof OauthClientResponse - */ - registration_access_token: string; - /** - * RegistrationClientURI is the URL used to update, get, or delete the OAuth2 Client. - * @type {string} - * @memberof OauthClientResponse - */ - registration_client_uri: string; - /** - * JWS [JWS] alg algorithm [JWA] that MUST be used for signing Request Objects sent to the OP. - * @type {string} - * @memberof OauthClientResponse - */ - request_object_signing_alg: string; - /** - * - * @type {Array} - * @memberof OauthClientResponse - */ - request_uris?: Array; - /** - * The response types of the Oauth2 client. - * @type {Array} - * @memberof OauthClientResponse - */ - response_types?: Array; - /** - * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. - * @type {string} - * @memberof OauthClientResponse - */ - scope: string; - /** - * URL using the https scheme to be used in calculating Pseudonymous Identifiers by the OP. - * @type {string} - * @memberof OauthClientResponse - */ - sector_identifier_uri: string; - /** - * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. - * @type {string} - * @memberof OauthClientResponse - */ - subject_type: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - token_endpoint_auth_method: string; - /** - * - * @type {string} - * @memberof OauthClientResponse - */ - token_endpoint_auth_signing_alg: string; - /** - * TermsOfServiceUri is a URL string that points to a human-readable terms of service document for the client. - * @type {string} - * @memberof OauthClientResponse - */ - tos_uri: string; - /** - * UpdatedAt returns the timestamp of the last update. - * @type {string} - * @memberof OauthClientResponse - */ - updated_at: string; - /** - * JWS alg algorithm [JWA] REQUIRED for signing UserInfo Responses. - * @type {string} - * @memberof OauthClientResponse - */ - userinfo_signed_response_alg: string; -} -/** - * - * @export - * @interface OauthClientUpdateBody - */ -export interface OauthClientUpdateBody { - /** - * The Oauth2 client name. - * @type {string} - * @memberof OauthClientUpdateBody - */ - client_name: string; - /** - * The Oauth2 client secret. - * @type {string} - * @memberof OauthClientUpdateBody - */ - client_secret?: string; - /** - * The allowed redirect urls of the Oauth2 client. - * @type {Array} - * @memberof OauthClientUpdateBody - */ - redirect_uris?: Array; - /** - * Requested Client Authentication method for the Token Endpoint. The options are client_secret_post, client_secret_basic, private_key_jwt, and none. - * @type {string} - * @memberof OauthClientUpdateBody - */ - token_endpoint_auth_method: string; - /** - * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. - * @type {string} - * @memberof OauthClientUpdateBody - */ - subject_type: string; - /** - * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. - * @type {string} - * @memberof OauthClientUpdateBody - */ - scope?: string; - /** - * Thr frontchannel logout uri. - * @type {string} - * @memberof OauthClientUpdateBody - */ - frontchannel_logout_uri?: string; - /** - * The grant types of the Oauth2 client. - * @type {Array} - * @memberof OauthClientUpdateBody - */ - grant_types?: Array; - /** - * The response types of the Oauth2 client. - * @type {Array} - * @memberof OauthClientUpdateBody - */ - response_types?: Array; -} -/** - * - * @export - * @interface OauthConfigResponse - */ -export interface OauthConfigResponse { - /** - * Client id - * @type {string} - * @memberof OauthConfigResponse - */ - clientId: string; - /** - * Hint for idp redirects (optional) - * @type {string} - * @memberof OauthConfigResponse - */ - idpHint?: string | null; - /** - * Redirect uri - * @type {string} - * @memberof OauthConfigResponse - */ - redirectUri: string; - /** - * Grant type - * @type {string} - * @memberof OauthConfigResponse - */ - grantType: string; - /** - * Token endpoint - * @type {string} - * @memberof OauthConfigResponse - */ - tokenEndpoint: string; - /** - * Auth endpoint - * @type {string} - * @memberof OauthConfigResponse - */ - authEndpoint: string; - /** - * Response type - * @type {string} - * @memberof OauthConfigResponse - */ - responseType: string; - /** - * Scope - * @type {string} - * @memberof OauthConfigResponse - */ - scope: string; - /** - * Provider - * @type {string} - * @memberof OauthConfigResponse - */ - provider: string; - /** - * Logout endpoint - * @type {string} - * @memberof OauthConfigResponse - */ - logoutEndpoint?: string; - /** - * Issuer - * @type {string} - * @memberof OauthConfigResponse - */ - issuer: string; - /** - * Jwks endpoint - * @type {string} - * @memberof OauthConfigResponse - */ - jwksEndpoint: string; -} -/** - * - * @export - * @interface OidcContextResponse - */ -export interface OidcContextResponse { - /** - * - * @type {Array} - * @memberof OidcContextResponse - */ - acr_values: Array; - /** - * - * @type {string} - * @memberof OidcContextResponse - */ - display: string; - /** - * - * @type {object} - * @memberof OidcContextResponse - */ - id_token_hint_claims: object; - /** - * - * @type {string} - * @memberof OidcContextResponse - */ - login_hint: string; - /** - * - * @type {Array} - * @memberof OidcContextResponse - */ - ui_locales: Array; -} -/** - * - * @export - * @interface ParentConsentResponse - */ -export interface ParentConsentResponse { - /** - * - * @type {string} - * @memberof ParentConsentResponse - */ - form: string; - /** - * - * @type {boolean} - * @memberof ParentConsentResponse - */ - privacyConsent: boolean; - /** - * - * @type {boolean} - * @memberof ParentConsentResponse - */ - termsOfUseConsent: boolean; - /** - * - * @type {string} - * @memberof ParentConsentResponse - */ - dateOfPrivacyConsent: string; - /** - * - * @type {string} - * @memberof ParentConsentResponse - */ - dateOfTermsOfUseConsent: string; - /** - * - * @type {string} - * @memberof ParentConsentResponse - */ - _id: string; -} -/** - * - * @export - * @interface PatchGroupParams - */ -export interface PatchGroupParams { - /** - * Title of the Group grid element - * @type {string} - * @memberof PatchGroupParams - */ - title: string; -} -/** - * - * @export - * @interface PatchMyAccountParams - */ -export interface PatchMyAccountParams { - /** - * The current user password to authorize the update action. - * @type {string} - * @memberof PatchMyAccountParams - */ - passwordOld: string; - /** - * The new password for the current user. - * @type {string} - * @memberof PatchMyAccountParams - */ - passwordNew?: string | null; - /** - * The new email address for the current user. - * @type {string} - * @memberof PatchMyAccountParams - */ - email?: string | null; - /** - * The new first name for the current user. - * @type {string} - * @memberof PatchMyAccountParams - */ - firstName?: string | null; - /** - * The new last name for the current user. - * @type {string} - * @memberof PatchMyAccountParams - */ - lastName?: string | null; -} -/** - * - * @export - * @interface PatchMyPasswordParams - */ -export interface PatchMyPasswordParams { - /** - * The new user password. - * @type {string} - * @memberof PatchMyPasswordParams - */ - password: string; - /** - * The confirmed new user password. Must match the password field. - * @type {string} - * @memberof PatchMyPasswordParams - */ - confirmPassword: string; -} -/** - * - * @export - * @interface PatchOrderParams - */ -export interface PatchOrderParams { - /** - * Array ids determining the new order - * @type {Array} - * @memberof PatchOrderParams - */ - elements: Array; -} -/** - * - * @export - * @interface PatchVisibilityParams - */ -export interface PatchVisibilityParams { - /** - * true to publish the element, false to unpublish - * @type {boolean} - * @memberof PatchVisibilityParams - */ - visibility: boolean; -} -/** - * - * @export - * @enum {string} - */ -export enum Permission { - AccountCreate = 'ACCOUNT_CREATE', - AccountDelete = 'ACCOUNT_DELETE', - AccountEdit = 'ACCOUNT_EDIT', - AccountView = 'ACCOUNT_VIEW', - AddSchoolMembers = 'ADD_SCHOOL_MEMBERS', - AdminEdit = 'ADMIN_EDIT', - AdminView = 'ADMIN_VIEW', - BaseView = 'BASE_VIEW', - CalendarCreate = 'CALENDAR_CREATE', - CalendarEdit = 'CALENDAR_EDIT', - CalendarView = 'CALENDAR_VIEW', - ChangeTeamRoles = 'CHANGE_TEAM_ROLES', - ClassCreate = 'CLASS_CREATE', - ClassEdit = 'CLASS_EDIT', - ClassFullAdmin = 'CLASS_FULL_ADMIN', - ClassList = 'CLASS_LIST', - ClassRemove = 'CLASS_REMOVE', - ClassView = 'CLASS_VIEW', - CommentsCreate = 'COMMENTS_CREATE', - CommentsEdit = 'COMMENTS_EDIT', - CommentsView = 'COMMENTS_VIEW', - ContentNonOerView = 'CONTENT_NON_OER_VIEW', - ContentView = 'CONTENT_VIEW', - ContextToolAdmin = 'CONTEXT_TOOL_ADMIN', - ContextToolUser = 'CONTEXT_TOOL_USER', - CoursegroupCreate = 'COURSEGROUP_CREATE', - CoursegroupEdit = 'COURSEGROUP_EDIT', - CourseCreate = 'COURSE_CREATE', - CourseDelete = 'COURSE_DELETE', - CourseEdit = 'COURSE_EDIT', - CourseRemove = 'COURSE_REMOVE', - CourseView = 'COURSE_VIEW', - CreateSupportJwt = 'CREATE_SUPPORT_JWT', - CreateTopicsAndTasks = 'CREATE_TOPICS_AND_TASKS', - DashboardView = 'DASHBOARD_VIEW', - DatasourcesCreate = 'DATASOURCES_CREATE', - DatasourcesDelete = 'DATASOURCES_DELETE', - DatasourcesEdit = 'DATASOURCES_EDIT', - DatasourcesRun = 'DATASOURCES_RUN', - DatasourcesRunView = 'DATASOURCES_RUN_VIEW', - DatasourcesView = 'DATASOURCES_VIEW', - DefaultFilePermissions = 'DEFAULT_FILE_PERMISSIONS', - DeleteTeam = 'DELETE_TEAM', - EditAllFiles = 'EDIT_ALL_FILES', - EnterthecloudStart = 'ENTERTHECLOUD_START', - FederalstateCreate = 'FEDERALSTATE_CREATE', - FederalstateEdit = 'FEDERALSTATE_EDIT', - FederalstateView = 'FEDERALSTATE_VIEW', - FilestorageCreate = 'FILESTORAGE_CREATE', - FilestorageEdit = 'FILESTORAGE_EDIT', - FilestorageRemove = 'FILESTORAGE_REMOVE', - FilestorageView = 'FILESTORAGE_VIEW', - FileCreate = 'FILE_CREATE', - FileDelete = 'FILE_DELETE', - FileMove = 'FILE_MOVE', - FolderCreate = 'FOLDER_CREATE', - FolderDelete = 'FOLDER_DELETE', - GroupList = 'GROUP_LIST', - GroupFullAdmin = 'GROUP_FULL_ADMIN', - GroupView = 'GROUP_VIEW', - HelpdeskCreate = 'HELPDESK_CREATE', - HelpdeskEdit = 'HELPDESK_EDIT', - HelpdeskView = 'HELPDESK_VIEW', - HomeworkCreate = 'HOMEWORK_CREATE', - HomeworkEdit = 'HOMEWORK_EDIT', - HomeworkView = 'HOMEWORK_VIEW', - ImportUserMigrate = 'IMPORT_USER_MIGRATE', - ImportUserUpdate = 'IMPORT_USER_UPDATE', - ImportUserView = 'IMPORT_USER_VIEW', - InstanceView = 'INSTANCE_VIEW', - InviteAdministrators = 'INVITE_ADMINISTRATORS', - InviteExperts = 'INVITE_EXPERTS', - JoinMeeting = 'JOIN_MEETING', - LeaveTeam = 'LEAVE_TEAM', - LernstoreView = 'LERNSTORE_VIEW', - LessonsCreate = 'LESSONS_CREATE', - LessonsView = 'LESSONS_VIEW', - LinkCreate = 'LINK_CREATE', - NewsCreate = 'NEWS_CREATE', - NewsEdit = 'NEWS_EDIT', - NewsView = 'NEWS_VIEW', - NextcloudUser = 'NEXTCLOUD_USER', - NotificationCreate = 'NOTIFICATION_CREATE', - NotificationEdit = 'NOTIFICATION_EDIT', - NotificationView = 'NOTIFICATION_VIEW', - OauthClientEdit = 'OAUTH_CLIENT_EDIT', - OauthClientView = 'OAUTH_CLIENT_VIEW', - PasswordEdit = 'PASSWORD_EDIT', - PwrecoveryCreate = 'PWRECOVERY_CREATE', - PwrecoveryEdit = 'PWRECOVERY_EDIT', - PwrecoveryView = 'PWRECOVERY_VIEW', - ReleasesCreate = 'RELEASES_CREATE', - ReleasesEdit = 'RELEASES_EDIT', - ReleasesView = 'RELEASES_VIEW', - RemoveMembers = 'REMOVE_MEMBERS', - RenameTeam = 'RENAME_TEAM', - RequestConsents = 'REQUEST_CONSENTS', - RoleCreate = 'ROLE_CREATE', - RoleEdit = 'ROLE_EDIT', - RoleView = 'ROLE_VIEW', - SchoolChatManage = 'SCHOOL_CHAT_MANAGE', - SchoolCreate = 'SCHOOL_CREATE', - SchoolEdit = 'SCHOOL_EDIT', - SchoolLogoManage = 'SCHOOL_LOGO_MANAGE', - SchoolNewsEdit = 'SCHOOL_NEWS_EDIT', - SchoolPermissionChange = 'SCHOOL_PERMISSION_CHANGE', - SchoolPermissionView = 'SCHOOL_PERMISSION_VIEW', - SchoolStudentTeamManage = 'SCHOOL_STUDENT_TEAM_MANAGE', - SchoolSystemEdit = 'SCHOOL_SYSTEM_EDIT', - SchoolSystemView = 'SCHOOL_SYSTEM_VIEW', - SchoolToolAdmin = 'SCHOOL_TOOL_ADMIN', - ScopePermissionsView = 'SCOPE_PERMISSIONS_VIEW', - StartMeeting = 'START_MEETING', - StudentCreate = 'STUDENT_CREATE', - StudentDelete = 'STUDENT_DELETE', - StudentEdit = 'STUDENT_EDIT', - StudentList = 'STUDENT_LIST', - StudentSkipRegistration = 'STUDENT_SKIP_REGISTRATION', - SubmissionsCreate = 'SUBMISSIONS_CREATE', - SubmissionsEdit = 'SUBMISSIONS_EDIT', - SubmissionsSchoolView = 'SUBMISSIONS_SCHOOL_VIEW', - SubmissionsView = 'SUBMISSIONS_VIEW', - SyncStart = 'SYNC_START', - SystemCreate = 'SYSTEM_CREATE', - SystemEdit = 'SYSTEM_EDIT', - SystemView = 'SYSTEM_VIEW', - TaskDashboardTeacherViewV3 = 'TASK_DASHBOARD_TEACHER_VIEW_V3', - TaskDashboardViewV3 = 'TASK_DASHBOARD_VIEW_V3', - TeacherCreate = 'TEACHER_CREATE', - TeacherDelete = 'TEACHER_DELETE', - TeacherEdit = 'TEACHER_EDIT', - TeacherList = 'TEACHER_LIST', - TeacherSkipRegistration = 'TEACHER_SKIP_REGISTRATION', - TeamCreate = 'TEAM_CREATE', - ToolCreateEtherpad = 'TOOL_CREATE_ETHERPAD', - TeamEdit = 'TEAM_EDIT', - TeamInviteExternal = 'TEAM_INVITE_EXTERNAL', - TeamView = 'TEAM_VIEW', - ToolAdmin = 'TOOL_ADMIN', - ToolCreate = 'TOOL_CREATE', - ToolEdit = 'TOOL_EDIT', - ToolNewView = 'TOOL_NEW_VIEW', - ToolView = 'TOOL_VIEW', - TopicCreate = 'TOPIC_CREATE', - TopicEdit = 'TOPIC_EDIT', - TopicView = 'TOPIC_VIEW', - UploadFiles = 'UPLOAD_FILES', - UseLibreoffice = 'USE_LIBREOFFICE', - UseRocketchat = 'USE_ROCKETCHAT', - UsergroupCreate = 'USERGROUP_CREATE', - UsergroupEdit = 'USERGROUP_EDIT', - UsergroupView = 'USERGROUP_VIEW', - UserChangeOwnName = 'USER_CHANGE_OWN_NAME', - UserCreate = 'USER_CREATE', - UserLoginMigrationAdmin = 'USER_LOGIN_MIGRATION_ADMIN', - UserLoginMigrationRollback = 'USER_LOGIN_MIGRATION_ROLLBACK', - UserLoginMigrationForce = 'USER_LOGIN_MIGRATION_FORCE', - UserMigrate = 'USER_MIGRATE', - UserUpdate = 'USER_UPDATE', - YearsEdit = 'YEARS_EDIT' -} - -/** - * - * @export - * @interface ProviderConfigResponse - */ -export interface ProviderConfigResponse { - /** - * - * @type {string} - * @memberof ProviderConfigResponse - */ - provider: string; -} -/** - * - * @export - * @interface PseudonymResponse - */ -export interface PseudonymResponse { - /** - * - * @type {string} - * @memberof PseudonymResponse - */ - id: string; - /** - * - * @type {string} - * @memberof PseudonymResponse - */ - toolId: string; - /** - * - * @type {string} - * @memberof PseudonymResponse - */ - userId: string; -} -/** - * - * @export - * @interface PublicSystemListResponse - */ -export interface PublicSystemListResponse { - /** - * - * @type {Array} - * @memberof PublicSystemListResponse - */ - data: Array; -} -/** - * - * @export - * @interface PublicSystemResponse - */ -export interface PublicSystemResponse { - /** - * Id of the system. - * @type {string} - * @memberof PublicSystemResponse - */ - id: string; - /** - * Flag to request only systems with oauth-config. - * @type {string} - * @memberof PublicSystemResponse - */ - type?: string | null; - /** - * Alias of the system. - * @type {string} - * @memberof PublicSystemResponse - */ - alias?: string | null; - /** - * Display name of the system. - * @type {string} - * @memberof PublicSystemResponse - */ - displayName?: string | null; - /** - * Oauth config of the system. - * @type {OauthConfigResponse} - * @memberof PublicSystemResponse - */ - oauthConfig?: OauthConfigResponse | null; -} -/** - * - * @export - * @interface RedirectResponse - */ -export interface RedirectResponse { - /** - * RedirectURL is the URL which you should redirect the user to once the authentication process is completed. - * @type {string} - * @memberof RedirectResponse - */ - redirect_to: string; -} -/** - * - * @export - * @interface RenameBodyParams - */ -export interface RenameBodyParams { - /** - * - * @type {string} - * @memberof RenameBodyParams - */ - title: string; -} -/** - * - * @export - * @interface ResolvedUserResponse - */ -export interface ResolvedUserResponse { - /** - * - * @type {string} - * @memberof ResolvedUserResponse - */ - firstName: string; - /** - * - * @type {string} - * @memberof ResolvedUserResponse - */ - lastName: string; - /** - * - * @type {string} - * @memberof ResolvedUserResponse - */ - id: string; - /** - * - * @type {string} - * @memberof ResolvedUserResponse - */ - createdAt: string; - /** - * - * @type {string} - * @memberof ResolvedUserResponse - */ - updatedAt: string; - /** - * - * @type {Array} - * @memberof ResolvedUserResponse - */ - roles: Array; - /** - * - * @type {Array} - * @memberof ResolvedUserResponse - */ - permissions: Array; - /** - * - * @type {string} - * @memberof ResolvedUserResponse - */ - schoolId: string; -} -/** - * - * @export - * @interface RichText - */ -export interface RichText { - /** - * Content of the rich text element - * @type {string} - * @memberof RichText - */ - content: string; - /** - * Input format of the rich text element - * @type {string} - * @memberof RichText - */ - type: RichTextTypeEnum; -} - -/** - * @export - * @enum {string} - */ -export enum RichTextTypeEnum { - PlainText = 'plainText', - RichTextCk5Simple = 'richTextCk5Simple', - RichTextCk4 = 'richTextCk4', - RichTextCk5 = 'richTextCk5' -} - -/** - * - * @export - * @interface RichTextContentBody - */ -export interface RichTextContentBody { - /** - * - * @type {string} - * @memberof RichTextContentBody - */ - text: string; - /** - * - * @type {string} - * @memberof RichTextContentBody - */ - inputFormat: string; -} -/** - * - * @export - * @interface RichTextElementContent - */ -export interface RichTextElementContent { - /** - * - * @type {string} - * @memberof RichTextElementContent - */ - text: string; - /** - * - * @type {string} - * @memberof RichTextElementContent - */ - inputFormat: string; -} -/** - * - * @export - * @interface RichTextElementContentBody - */ -export interface RichTextElementContentBody { - /** - * - * @type {ContentElementType} - * @memberof RichTextElementContentBody - */ - type: ContentElementType; - /** - * - * @type {RichTextContentBody} - * @memberof RichTextElementContentBody - */ - content: RichTextContentBody; -} -/** - * - * @export - * @interface RichTextElementResponse - */ -export interface RichTextElementResponse { - /** - * - * @type {string} - * @memberof RichTextElementResponse - */ - id: string; - /** - * - * @type {ContentElementType} - * @memberof RichTextElementResponse - */ - type: ContentElementType; - /** - * - * @type {RichTextElementContent} - * @memberof RichTextElementResponse - */ - content: RichTextElementContent; - /** - * - * @type {TimestampsResponse} - * @memberof RichTextElementResponse - */ - timestamps: TimestampsResponse; -} -/** - * - * @export - * @enum {string} - */ -export enum RoleName { - Administrator = 'administrator', - CourseAdministrator = 'courseAdministrator', - CourseStudent = 'courseStudent', - CourseSubstitutionTeacher = 'courseSubstitutionTeacher', - CourseTeacher = 'courseTeacher', - Demo = 'demo', - DemoStudent = 'demoStudent', - DemoTeacher = 'demoTeacher', - Expert = 'expert', - Helpdesk = 'helpdesk', - Student = 'student', - Superhero = 'superhero', - Teacher = 'teacher', - Teamadministrator = 'teamadministrator', - Teamexpert = 'teamexpert', - Teamleader = 'teamleader', - Teammember = 'teammember', - Teamowner = 'teamowner', - User = 'user' -} - -/** - * - * @export - * @interface SchoolExistsResponse - */ -export interface SchoolExistsResponse { - /** - * - * @type {boolean} - * @memberof SchoolExistsResponse - */ - exists: boolean; -} -/** - * - * @export - * @interface SchoolExternalToolConfigurationStatusResponse - */ -export interface SchoolExternalToolConfigurationStatusResponse { - /** - * Is the tool outdated on school scope, because of non matching versions or required parameter changes on ExternalTool? - * @type {boolean} - * @memberof SchoolExternalToolConfigurationStatusResponse - */ - isOutdatedOnScopeSchool: boolean; - /** - * Is the tool deactivated, because of instance administrator? - * @type {boolean} - * @memberof SchoolExternalToolConfigurationStatusResponse - */ - isGloballyDeactivated: boolean; -} -/** - * - * @export - * @interface SchoolExternalToolConfigurationTemplateListResponse - */ -export interface SchoolExternalToolConfigurationTemplateListResponse { - /** - * - * @type {Array} - * @memberof SchoolExternalToolConfigurationTemplateListResponse - */ - data: Array; -} -/** - * - * @export - * @interface SchoolExternalToolConfigurationTemplateResponse - */ -export interface SchoolExternalToolConfigurationTemplateResponse { - /** - * - * @type {string} - * @memberof SchoolExternalToolConfigurationTemplateResponse - */ - externalToolId: string; - /** - * - * @type {string} - * @memberof SchoolExternalToolConfigurationTemplateResponse - */ - name: string; - /** - * - * @type {string} - * @memberof SchoolExternalToolConfigurationTemplateResponse - */ - baseUrl: string; - /** - * - * @type {string} - * @memberof SchoolExternalToolConfigurationTemplateResponse - */ - logoUrl?: string; - /** - * - * @type {Array} - * @memberof SchoolExternalToolConfigurationTemplateResponse - */ - parameters: Array; -} -/** - * - * @export - * @interface SchoolExternalToolMetadataResponse - */ -export interface SchoolExternalToolMetadataResponse { - /** - * - * @type {ContextExternalToolCountPerContextResponse} - * @memberof SchoolExternalToolMetadataResponse - */ - contextExternalToolCountPerContext: ContextExternalToolCountPerContextResponse; -} -/** - * - * @export - * @interface SchoolExternalToolPostParams - */ -export interface SchoolExternalToolPostParams { - /** - * - * @type {string} - * @memberof SchoolExternalToolPostParams - */ - toolId: string; - /** - * - * @type {string} - * @memberof SchoolExternalToolPostParams - */ - schoolId: string; - /** - * - * @type {Array} - * @memberof SchoolExternalToolPostParams - */ - parameters?: Array; - /** - * Tool can be deactivated, related tools can not be added to e.g. course or board anymore - * @type {boolean} - * @memberof SchoolExternalToolPostParams - */ - isDeactivated: boolean; -} -/** - * - * @export - * @interface SchoolExternalToolResponse - */ -export interface SchoolExternalToolResponse { - /** - * - * @type {string} - * @memberof SchoolExternalToolResponse - */ - id: string; - /** - * - * @type {string} - * @memberof SchoolExternalToolResponse - */ - name: string; - /** - * - * @type {string} - * @memberof SchoolExternalToolResponse - */ - toolId: string; - /** - * - * @type {string} - * @memberof SchoolExternalToolResponse - */ - schoolId: string; - /** - * - * @type {boolean} - * @memberof SchoolExternalToolResponse - */ - isDeactivated: boolean; - /** - * - * @type {Array} - * @memberof SchoolExternalToolResponse - */ - parameters: Array; - /** - * - * @type {SchoolExternalToolConfigurationStatusResponse} - * @memberof SchoolExternalToolResponse - */ - status: SchoolExternalToolConfigurationStatusResponse; -} -/** - * - * @export - * @interface SchoolExternalToolSearchListResponse - */ -export interface SchoolExternalToolSearchListResponse { - /** - * - * @type {Array} - * @memberof SchoolExternalToolSearchListResponse - */ - data: Array; -} -/** - * - * @export - * @enum {string} - */ -export enum SchoolFeature { - RocketChat = 'rocketChat', - Videoconference = 'videoconference', - Nextcloud = 'nextcloud', - StudentVisibility = 'studentVisibility', - LdapUniventionMigrationSchool = 'ldapUniventionMigrationSchool', - OauthProvisioningEnabled = 'oauthProvisioningEnabled', - ShowOutdatedUsers = 'showOutdatedUsers', - EnableLdapSyncDuringMigration = 'enableLdapSyncDuringMigration' -} - -/** - * - * @export - * @interface SchoolForExternalInviteResponse - */ -export interface SchoolForExternalInviteResponse { - /** - * - * @type {string} - * @memberof SchoolForExternalInviteResponse - */ - id: string; - /** - * - * @type {string} - * @memberof SchoolForExternalInviteResponse - */ - name: string; -} -/** - * - * @export - * @interface SchoolForLdapLoginResponse - */ -export interface SchoolForLdapLoginResponse { - /** - * - * @type {string} - * @memberof SchoolForLdapLoginResponse - */ - id: string; - /** - * - * @type {string} - * @memberof SchoolForLdapLoginResponse - */ - name: string; - /** - * - * @type {Array} - * @memberof SchoolForLdapLoginResponse - */ - systems: Array; -} -/** - * - * @export - * @interface SchoolInfoResponse - */ -export interface SchoolInfoResponse { - /** - * The id of the School entity - * @type {string} - * @memberof SchoolInfoResponse - */ - id: string; - /** - * The name of the School entity - * @type {string} - * @memberof SchoolInfoResponse - */ - name: string; -} -/** - * - * @export - * @interface SchoolLogo - */ -export interface SchoolLogo { - /** - * - * @type {string} - * @memberof SchoolLogo - */ - dataUrl?: string; - /** - * - * @type {string} - * @memberof SchoolLogo - */ - name?: string; -} -/** - * - * @export - * @interface SchoolPermissionsParams - */ -export interface SchoolPermissionsParams { - /** - * - * @type {TeacherPermissionParams} - * @memberof SchoolPermissionsParams - */ - teacher?: TeacherPermissionParams; - /** - * - * @type {StudentPermissionParams} - * @memberof SchoolPermissionsParams - */ - student?: StudentPermissionParams; -} -/** - * - * @export - * @enum {string} - */ -export enum SchoolPurpose { - Expert = 'expert', - Tombstone = 'tombstone', - Demo = 'demo', - Test = 'test', - MintEc = 'MINT-EC' -} - -/** - * - * @export - * @interface SchoolResponse - */ -export interface SchoolResponse { - /** - * - * @type {string} - * @memberof SchoolResponse - */ - id: string; - /** - * - * @type {string} - * @memberof SchoolResponse - */ - createdAt: string; - /** - * - * @type {string} - * @memberof SchoolResponse - */ - updatedAt: string; - /** - * - * @type {string} - * @memberof SchoolResponse - */ - name: string; - /** - * - * @type {string} - * @memberof SchoolResponse - */ - officialSchoolNumber?: string; - /** - * - * @type {SchoolYearResponse} - * @memberof SchoolResponse - */ - currentYear?: SchoolYearResponse; - /** - * - * @type {FederalStateResponse} - * @memberof SchoolResponse - */ - federalState: FederalStateResponse; - /** - * - * @type {CountyResponse} - * @memberof SchoolResponse - */ - county?: CountyResponse; - /** - * - * @type {SchoolPurpose} - * @memberof SchoolResponse - */ - purpose?: SchoolPurpose; - /** - * - * @type {Array} - * @memberof SchoolResponse - */ - features: Array; - /** - * - * @type {Array} - * @memberof SchoolResponse - */ - systemIds: Array; - /** - * - * @type {boolean} - * @memberof SchoolResponse - */ - inUserMigration?: boolean; - /** - * - * @type {boolean} - * @memberof SchoolResponse - */ - inMaintenance: boolean; - /** - * - * @type {boolean} - * @memberof SchoolResponse - */ - isExternal: boolean; - /** - * - * @type {SchoolLogo} - * @memberof SchoolResponse - */ - logo?: SchoolLogo; - /** - * - * @type {FileStorageType} - * @memberof SchoolResponse - */ - fileStorageType?: FileStorageType; - /** - * - * @type {string} - * @memberof SchoolResponse - */ - language?: string; - /** - * - * @type {string} - * @memberof SchoolResponse - */ - timezone?: string; - /** - * - * @type {object} - * @memberof SchoolResponse - */ - permissions?: object; - /** - * - * @type {YearsResponse} - * @memberof SchoolResponse - */ - years: YearsResponse; - /** - * - * @type {Array} - * @memberof SchoolResponse - */ - instanceFeatures: Array; -} -/** - * - * @export - * @interface SchoolSystemResponse - */ -export interface SchoolSystemResponse { - /** - * - * @type {string} - * @memberof SchoolSystemResponse - */ - id: string; - /** - * - * @type {string} - * @memberof SchoolSystemResponse - */ - type: string; - /** - * - * @type {string} - * @memberof SchoolSystemResponse - */ - alias?: string; - /** - * - * @type {ProviderConfigResponse} - * @memberof SchoolSystemResponse - */ - ldapConfig?: ProviderConfigResponse; - /** - * - * @type {ProviderConfigResponse} - * @memberof SchoolSystemResponse - */ - oauthConfig?: ProviderConfigResponse; -} -/** - * - * @export - * @interface SchoolUpdateBodyParams - */ -export interface SchoolUpdateBodyParams { - /** - * - * @type {string} - * @memberof SchoolUpdateBodyParams - */ - name?: string; - /** - * - * @type {string} - * @memberof SchoolUpdateBodyParams - */ - officialSchoolNumber?: string; - /** - * - * @type {SchoolLogo} - * @memberof SchoolUpdateBodyParams - */ - logo?: SchoolLogo; - /** - * - * @type {string} - * @memberof SchoolUpdateBodyParams - */ - fileStorageType?: SchoolUpdateBodyParamsFileStorageTypeEnum; - /** - * - * @type {LanguageType} - * @memberof SchoolUpdateBodyParams - */ - language?: LanguageType; - /** - * - * @type {Array} - * @memberof SchoolUpdateBodyParams - */ - features?: Array; - /** - * - * @type {SchoolPermissionsParams} - * @memberof SchoolUpdateBodyParams - */ - permissions?: SchoolPermissionsParams; - /** - * - * @type {string} - * @memberof SchoolUpdateBodyParams - */ - countyId?: string; - /** - * - * @type {boolean} - * @memberof SchoolUpdateBodyParams - */ - enableStudentTeamCreation?: boolean; -} - -/** - * @export - * @enum {string} - */ -export enum SchoolUpdateBodyParamsFileStorageTypeEnum { - AwsS3 = 'awsS3' -} - -/** - * - * @export - * @enum {string} - */ -export enum SchoolYearQueryType { - NextYear = 'nextYear', - CurrentYear = 'currentYear', - PreviousYears = 'previousYears' -} - -/** - * - * @export - * @interface SchoolYearResponse - */ -export interface SchoolYearResponse { - /** - * - * @type {string} - * @memberof SchoolYearResponse - */ - id: string; - /** - * - * @type {string} - * @memberof SchoolYearResponse - */ - name: string; - /** - * - * @type {string} - * @memberof SchoolYearResponse - */ - startDate: string; - /** - * - * @type {string} - * @memberof SchoolYearResponse - */ - endDate: string; -} -/** - * - * @export - * @interface SchulConneXProvisioningOptionsParams - */ -export interface SchulConneXProvisioningOptionsParams { - /** - * - * @type {boolean} - * @memberof SchulConneXProvisioningOptionsParams - */ - groupProvisioningClassesEnabled: boolean; - /** - * - * @type {boolean} - * @memberof SchulConneXProvisioningOptionsParams - */ - groupProvisioningCoursesEnabled: boolean; - /** - * - * @type {boolean} - * @memberof SchulConneXProvisioningOptionsParams - */ - groupProvisioningOtherEnabled: boolean; - /** - * - * @type {boolean} - * @memberof SchulConneXProvisioningOptionsParams - */ - schoolExternalToolProvisioningEnabled: boolean; -} -/** - * - * @export - * @interface SchulConneXProvisioningOptionsResponse - */ -export interface SchulConneXProvisioningOptionsResponse { - /** - * - * @type {boolean} - * @memberof SchulConneXProvisioningOptionsResponse - */ - groupProvisioningClassesEnabled: boolean; - /** - * - * @type {boolean} - * @memberof SchulConneXProvisioningOptionsResponse - */ - groupProvisioningCoursesEnabled: boolean; - /** - * - * @type {boolean} - * @memberof SchulConneXProvisioningOptionsResponse - */ - groupProvisioningOtherEnabled: boolean; - /** - * - * @type {boolean} - * @memberof SchulConneXProvisioningOptionsResponse - */ - schoolExternalToolProvisioningEnabled: boolean; -} -/** - * - * @export - * @enum {string} - */ -export enum SchulcloudTheme { - Brb = 'brb', - Default = 'default', - N21 = 'n21', - Thr = 'thr' -} - -/** - * - * @export - * @interface SetHeightBodyParams - */ -export interface SetHeightBodyParams { - /** - * - * @type {number} - * @memberof SetHeightBodyParams - */ - height: number; -} -/** - * - * @export - * @interface ShareTokenBodyParams - */ -export interface ShareTokenBodyParams { - /** - * the type of the object being shared - * @type {string} - * @memberof ShareTokenBodyParams - */ - parentType: ShareTokenBodyParamsParentTypeEnum; - /** - * the id of the object being shared. - * @type {string} - * @memberof ShareTokenBodyParams - */ - parentId: string; - /** - * when defined, the sharetoken will expire after the given number of days. - * @type {number} - * @memberof ShareTokenBodyParams - */ - expiresInDays?: number | null; - /** - * when defined, the sharetoken will be usable exclusively by members of the users school. - * @type {boolean} - * @memberof ShareTokenBodyParams - */ - schoolExclusive?: boolean | null; -} - -/** - * @export - * @enum {string} - */ -export enum ShareTokenBodyParamsParentTypeEnum { - Courses = 'courses', - Tasks = 'tasks', - Lessons = 'lessons', - ColumnBoard = 'columnBoard' -} - -/** - * - * @export - * @interface ShareTokenImportBodyParams - */ -export interface ShareTokenImportBodyParams { - /** - * the new name of the imported object. - * @type {string} - * @memberof ShareTokenImportBodyParams - */ - newName: string; - /** - * Id of the course to which the lesson/task will be added - * @type {string} - * @memberof ShareTokenImportBodyParams - */ - destinationCourseId?: string | null; -} -/** - * - * @export - * @interface ShareTokenInfoResponse - */ -export interface ShareTokenInfoResponse { - /** - * - * @type {string} - * @memberof ShareTokenInfoResponse - */ - token: string; - /** - * - * @type {string} - * @memberof ShareTokenInfoResponse - */ - parentType: ShareTokenInfoResponseParentTypeEnum; - /** - * - * @type {string} - * @memberof ShareTokenInfoResponse - */ - parentName: string; -} - -/** - * @export - * @enum {string} - */ -export enum ShareTokenInfoResponseParentTypeEnum { - Courses = 'courses', - Tasks = 'tasks', - Lessons = 'lessons', - ColumnBoard = 'columnBoard' -} - -/** - * - * @export - * @interface ShareTokenPayloadResponse - */ -export interface ShareTokenPayloadResponse { - /** - * - * @type {string} - * @memberof ShareTokenPayloadResponse - */ - parentType: ShareTokenPayloadResponseParentTypeEnum; - /** - * - * @type {string} - * @memberof ShareTokenPayloadResponse - */ - parentId: string; -} - -/** - * @export - * @enum {string} - */ -export enum ShareTokenPayloadResponseParentTypeEnum { - Courses = 'courses', - Tasks = 'tasks', - Lessons = 'lessons', - ColumnBoard = 'columnBoard' -} - -/** - * - * @export - * @interface ShareTokenResponse - */ -export interface ShareTokenResponse { - /** - * - * @type {string} - * @memberof ShareTokenResponse - */ - token: string; - /** - * - * @type {ShareTokenPayloadResponse} - * @memberof ShareTokenResponse - */ - payload: ShareTokenPayloadResponse; - /** - * - * @type {string} - * @memberof ShareTokenResponse - */ - expiresAt?: string; -} -/** - * - * @export - * @interface SingleColumnBoardResponse - */ -export interface SingleColumnBoardResponse { - /** - * The id of the room this board belongs to - * @type {string} - * @memberof SingleColumnBoardResponse - */ - roomId: string; - /** - * Title of the Board - * @type {string} - * @memberof SingleColumnBoardResponse - */ - title: string; - /** - * Color of the Board - * @type {string} - * @memberof SingleColumnBoardResponse - */ - displayColor: string; - /** - * Array of board specific tasks or lessons with matching type property - * @type {Array} - * @memberof SingleColumnBoardResponse - */ - elements: Array; - /** - * Boolean if the room this board belongs to is archived - * @type {boolean} - * @memberof SingleColumnBoardResponse - */ - isArchived: boolean; - /** - * Is the course synchronized with a group? - * @type {boolean} - * @memberof SingleColumnBoardResponse - */ - isSynchronized: boolean; -} -/** - * - * @export - * @interface StudentPermissionParams - */ -export interface StudentPermissionParams { - /** - * - * @type {boolean} - * @memberof StudentPermissionParams - */ - LERNSTORE_VIEW?: boolean; -} -/** - * - * @export - * @interface SubmissionContainerContentBody - */ -export interface SubmissionContainerContentBody { - /** - * The point in time until when a submission can be handed in. - * @type {string} - * @memberof SubmissionContainerContentBody - */ - dueDate?: string; -} -/** - * - * @export - * @interface SubmissionContainerElementContent - */ -export interface SubmissionContainerElementContent { - /** - * The dueDate as date string or null of not set - * @type {string} - * @memberof SubmissionContainerElementContent - */ - dueDate: string; -} -/** - * - * @export - * @interface SubmissionContainerElementContentBody - */ -export interface SubmissionContainerElementContentBody { - /** - * - * @type {ContentElementType} - * @memberof SubmissionContainerElementContentBody - */ - type: ContentElementType; - /** - * - * @type {SubmissionContainerContentBody} - * @memberof SubmissionContainerElementContentBody - */ - content: SubmissionContainerContentBody; -} -/** - * - * @export - * @interface SubmissionContainerElementResponse - */ -export interface SubmissionContainerElementResponse { - /** - * - * @type {string} - * @memberof SubmissionContainerElementResponse - */ - id: string; - /** - * - * @type {ContentElementType} - * @memberof SubmissionContainerElementResponse - */ - type: ContentElementType; - /** - * - * @type {SubmissionContainerElementContent} - * @memberof SubmissionContainerElementResponse - */ - content: SubmissionContainerElementContent; - /** - * - * @type {TimestampsResponse} - * @memberof SubmissionContainerElementResponse - */ - timestamps: TimestampsResponse; -} -/** - * - * @export - * @interface SubmissionItemResponse - */ -export interface SubmissionItemResponse { - /** - * - * @type {string} - * @memberof SubmissionItemResponse - */ - id: string; - /** - * - * @type {TimestampsResponse} - * @memberof SubmissionItemResponse - */ - timestamps: TimestampsResponse; - /** - * - * @type {boolean} - * @memberof SubmissionItemResponse - */ - completed: boolean; - /** - * - * @type {string} - * @memberof SubmissionItemResponse - */ - userId: string; - /** - * - * @type {Array} - * @memberof SubmissionItemResponse - */ - elements: Array; -} -/** - * - * @export - * @interface SubmissionStatusListResponse - */ -export interface SubmissionStatusListResponse { - /** - * - * @type {Array} - * @memberof SubmissionStatusListResponse - */ - data: Array; -} -/** - * - * @export - * @interface SubmissionStatusResponse - */ -export interface SubmissionStatusResponse { - /** - * - * @type {string} - * @memberof SubmissionStatusResponse - */ - id: string; - /** - * - * @type {Array} - * @memberof SubmissionStatusResponse - */ - submitters: Array; - /** - * - * @type {boolean} - * @memberof SubmissionStatusResponse - */ - isSubmitted: boolean; - /** - * - * @type {number} - * @memberof SubmissionStatusResponse - */ - grade?: number; - /** - * - * @type {boolean} - * @memberof SubmissionStatusResponse - */ - isGraded: boolean; - /** - * - * @type {string} - * @memberof SubmissionStatusResponse - */ - submittingCourseGroupName?: string; -} -/** - * - * @export - * @interface SubmissionsResponse - */ -export interface SubmissionsResponse { - /** - * - * @type {Array} - * @memberof SubmissionsResponse - */ - submissionItemsResponse: Array; - /** - * - * @type {Array} - * @memberof SubmissionsResponse - */ - users: Array; -} -/** - * - * @export - * @interface SuccessfulResponse - */ -export interface SuccessfulResponse { - /** - * - * @type {boolean} - * @memberof SuccessfulResponse - */ - successful: boolean; -} -/** - * - * @export - * @interface SystemForLdapLoginResponse - */ -export interface SystemForLdapLoginResponse { - /** - * - * @type {string} - * @memberof SystemForLdapLoginResponse - */ - id: string; - /** - * - * @type {string} - * @memberof SystemForLdapLoginResponse - */ - type: string; - /** - * - * @type {string} - * @memberof SystemForLdapLoginResponse - */ - alias: string; -} -/** - * - * @export - * @enum {string} - */ -export enum SystemType { - Oauth = 'oauth', - Ldap = 'ldap', - Oidc = 'oidc', - TspBase = 'tsp-base', - TspSchool = 'tsp-school', - Local = 'local', - Iserv = 'iserv', - Lernsax = 'lernsax', - Itslearning = 'itslearning', - Moodle = 'moodle' -} - -/** - * - * @export - * @interface TargetInfoResponse - */ -export interface TargetInfoResponse { - /** - * The id of the Target entity - * @type {string} - * @memberof TargetInfoResponse - */ - id: string; - /** - * The name of the Target entity - * @type {string} - * @memberof TargetInfoResponse - */ - name: string; -} -/** - * - * @export - * @interface TaskCopyApiParams - */ -export interface TaskCopyApiParams { - /** - * Destination course parent Id the task is copied to - * @type {string} - * @memberof TaskCopyApiParams - */ - courseId?: string; - /** - * Destination lesson parent Id the task is copied to - * @type {string} - * @memberof TaskCopyApiParams - */ - lessonId?: string; -} -/** - * - * @export - * @interface TaskListResponse - */ -export interface TaskListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof TaskListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof TaskListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof TaskListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof TaskListResponse - */ - limit: number; -} -/** - * - * @export - * @interface TaskResponse - */ -export interface TaskResponse { - /** - * - * @type {string} - * @memberof TaskResponse - */ - id: string; - /** - * - * @type {string} - * @memberof TaskResponse - */ - name: string; - /** - * - * @type {string} - * @memberof TaskResponse - */ - availableDate?: string; - /** - * - * @type {string} - * @memberof TaskResponse - */ - dueDate?: string; - /** - * - * @type {string} - * @memberof TaskResponse - */ - courseName: string; - /** - * - * @type {string} - * @memberof TaskResponse - */ - lessonName?: string; - /** - * - * @type {string} - * @memberof TaskResponse - */ - courseId: string; - /** - * Task description object, with props content: string and type: input format types - * @type {RichText} - * @memberof TaskResponse - */ - description?: RichText; - /** - * - * @type {boolean} - * @memberof TaskResponse - */ - lessonHidden: boolean; - /** - * - * @type {string} - * @memberof TaskResponse - */ - displayColor?: string; - /** - * - * @type {string} - * @memberof TaskResponse - */ - createdAt: string; - /** - * - * @type {string} - * @memberof TaskResponse - */ - updatedAt: string; - /** - * - * @type {TaskStatusResponse} - * @memberof TaskResponse - */ - status: TaskStatusResponse; -} -/** - * - * @export - * @interface TaskStatusResponse - */ -export interface TaskStatusResponse { - /** - * - * @type {number} - * @memberof TaskStatusResponse - */ - submitted: number; - /** - * - * @type {number} - * @memberof TaskStatusResponse - */ - maxSubmissions: number; - /** - * - * @type {number} - * @memberof TaskStatusResponse - */ - graded: number; - /** - * - * @type {boolean} - * @memberof TaskStatusResponse - */ - isDraft: boolean; - /** - * - * @type {boolean} - * @memberof TaskStatusResponse - */ - isSubstitutionTeacher: boolean; - /** - * - * @type {boolean} - * @memberof TaskStatusResponse - */ - isFinished: boolean; -} -/** - * - * @export - * @interface TeacherPermissionParams - */ -export interface TeacherPermissionParams { - /** - * - * @type {boolean} - * @memberof TeacherPermissionParams - */ - STUDENT_LIST?: boolean; -} -/** - * - * @export - * @interface TeamPermissionsBody - */ -export interface TeamPermissionsBody { - /** - * - * @type {boolean} - * @memberof TeamPermissionsBody - */ - read: boolean; - /** - * - * @type {boolean} - * @memberof TeamPermissionsBody - */ - write: boolean; - /** - * - * @type {boolean} - * @memberof TeamPermissionsBody - */ - create: boolean; - /** - * - * @type {boolean} - * @memberof TeamPermissionsBody - */ - _delete: boolean; - /** - * - * @type {boolean} - * @memberof TeamPermissionsBody - */ - share: boolean; -} -/** - * - * @export - * @interface TimestampsResponse - */ -export interface TimestampsResponse { - /** - * - * @type {string} - * @memberof TimestampsResponse - */ - lastUpdatedAt: string; - /** - * - * @type {string} - * @memberof TimestampsResponse - */ - createdAt: string; - /** - * - * @type {string} - * @memberof TimestampsResponse - */ - deletedAt?: string; -} -/** - * - * @export - * @enum {string} - */ -export enum Timezone { - EuropeBerlin = 'Europe/Berlin' -} - -/** - * - * @export - * @enum {string} - */ -export enum ToolConfigType { - Basic = 'basic', - Oauth2 = 'oauth2', - Lti11 = 'lti11' -} - -/** - * - * @export - * @enum {string} - */ -export enum ToolContextType { - Course = 'course', - BoardElement = 'board-element', - MediaBoard = 'media-board' -} - -/** - * - * @export - * @interface ToolContextTypesListResponse - */ -export interface ToolContextTypesListResponse { - /** - * - * @type {Array} - * @memberof ToolContextTypesListResponse - */ - data: Array; -} -/** - * - * @export - * @interface ToolLaunchRequestResponse - */ -export interface ToolLaunchRequestResponse { - /** - * The Launch Request method (GET or POST) - * @type {string} - * @memberof ToolLaunchRequestResponse - */ - method: ToolLaunchRequestResponseMethodEnum; - /** - * The URL for the Tool Launch Request - * @type {string} - * @memberof ToolLaunchRequestResponse - */ - url: string; - /** - * The payload for the Tool Launch Request (optional) - * @type {string} - * @memberof ToolLaunchRequestResponse - */ - payload?: string; - /** - * Specifies whether the Tool should be launched in a new tab - * @type {boolean} - * @memberof ToolLaunchRequestResponse - */ - openNewTab?: boolean; -} - -/** - * @export - * @enum {string} - */ -export enum ToolLaunchRequestResponseMethodEnum { - Get = 'GET', - Post = 'POST' -} - -/** - * - * @export - * @interface ToolReferenceListResponse - */ -export interface ToolReferenceListResponse { - /** - * - * @type {Array} - * @memberof ToolReferenceListResponse - */ - data: Array; -} -/** - * - * @export - * @interface ToolReferenceResponse - */ -export interface ToolReferenceResponse { - /** - * The id of the tool in the context - * @type {string} - * @memberof ToolReferenceResponse - */ - contextToolId: string; - /** - * The description of the tool - * @type {string} - * @memberof ToolReferenceResponse - */ - description?: string; - /** - * The url of the logo which is stored in the db - * @type {string} - * @memberof ToolReferenceResponse - */ - logoUrl?: string; - /** - * The url of the thumbnail which is stored in the db - * @type {string} - * @memberof ToolReferenceResponse - */ - thumbnailUrl?: string; - /** - * The display name of the tool - * @type {string} - * @memberof ToolReferenceResponse - */ - displayName: string; - /** - * Whether the tool should be opened in a new tab - * @type {boolean} - * @memberof ToolReferenceResponse - */ - openInNewTab: boolean; - /** - * The status of the tool - * @type {ContextExternalToolConfigurationStatusResponse} - * @memberof ToolReferenceResponse - */ - status: ContextExternalToolConfigurationStatusResponse; -} -/** - * - * @export - * @interface UpdateBoardTitleParams - */ -export interface UpdateBoardTitleParams { - /** - * - * @type {string} - * @memberof UpdateBoardTitleParams - */ - title: string; -} -/** - * - * @export - * @interface UpdateElementContentBodyParams - */ -export interface UpdateElementContentBodyParams { - /** - * - * @type {FileElementContentBody | LinkElementContentBody | RichTextElementContentBody | SubmissionContainerElementContentBody | ExternalToolElementContentBody | DrawingElementContentBody} - * @memberof UpdateElementContentBodyParams - */ - data: FileElementContentBody | LinkElementContentBody | RichTextElementContentBody | SubmissionContainerElementContentBody | ExternalToolElementContentBody | DrawingElementContentBody; -} -/** - * - * @export - * @interface UpdateFlagParams - */ -export interface UpdateFlagParams { - /** - * updates flag for an import user - * @type {boolean} - * @memberof UpdateFlagParams - */ - flagged: boolean; -} -/** - * - * @export - * @interface UpdateMatchParams - */ -export interface UpdateMatchParams { - /** - * updates local user reference for an import user - * @type {string} - * @memberof UpdateMatchParams - */ - userId: string; -} -/** - * - * @export - * @interface UpdateNewsParams - */ -export interface UpdateNewsParams { - /** - * Title of the News entity - * @type {string} - * @memberof UpdateNewsParams - */ - title?: string; - /** - * Content of the News entity - * @type {string} - * @memberof UpdateNewsParams - */ - content?: string; - /** - * The point in time from when the News entity schould be displayed - * @type {string} - * @memberof UpdateNewsParams - */ - displayAt?: string; -} -/** - * - * @export - * @interface UpdateSubmissionItemBodyParams - */ -export interface UpdateSubmissionItemBodyParams { - /** - * Boolean indicating whether the submission is completed. - * @type {boolean} - * @memberof UpdateSubmissionItemBodyParams - */ - completed: boolean; -} -/** - * - * @export - * @interface UserConsentResponse - */ -export interface UserConsentResponse { - /** - * - * @type {string} - * @memberof UserConsentResponse - */ - form: string; - /** - * - * @type {boolean} - * @memberof UserConsentResponse - */ - privacyConsent: boolean; - /** - * - * @type {boolean} - * @memberof UserConsentResponse - */ - termsOfUseConsent: boolean; - /** - * - * @type {string} - * @memberof UserConsentResponse - */ - dateOfPrivacyConsent: string; - /** - * - * @type {string} - * @memberof UserConsentResponse - */ - dateOfTermsOfUseConsent: string; -} -/** - * - * @export - * @interface UserDataResponse - */ -export interface UserDataResponse { - /** - * - * @type {string} - * @memberof UserDataResponse - */ - firstName: string; - /** - * - * @type {string} - * @memberof UserDataResponse - */ - lastName: string; - /** - * - * @type {string} - * @memberof UserDataResponse - */ - userId: string; -} -/** - * - * @export - * @interface UserInfoResponse - */ -export interface UserInfoResponse { - /** - * The id of the User entity - * @type {string} - * @memberof UserInfoResponse - */ - id: string; - /** - * First name of the user - * @type {string} - * @memberof UserInfoResponse - */ - firstName?: string; - /** - * Last name of the user - * @type {string} - * @memberof UserInfoResponse - */ - lastName?: string; -} -/** - * - * @export - * @interface UserListResponse - */ -export interface UserListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof UserListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof UserListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof UserListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof UserListResponse - */ - limit: number; -} -/** - * - * @export - * @interface UserLoginMigrationMandatoryParams - */ -export interface UserLoginMigrationMandatoryParams { - /** - * - * @type {boolean} - * @memberof UserLoginMigrationMandatoryParams - */ - mandatory: boolean; -} -/** - * - * @export - * @interface UserLoginMigrationResponse - */ -export interface UserLoginMigrationResponse { - /** - * Id of the migration - * @type {string} - * @memberof UserLoginMigrationResponse - */ - id: string; - /** - * Id of the system which is the origin of the migration - * @type {string} - * @memberof UserLoginMigrationResponse - */ - sourceSystemId?: string; - /** - * Id of the system which is the target of the migration - * @type {string} - * @memberof UserLoginMigrationResponse - */ - targetSystemId: string; - /** - * Date when the migration was marked as required - * @type {string} - * @memberof UserLoginMigrationResponse - */ - mandatorySince?: string; - /** - * Date when the migration was started - * @type {string} - * @memberof UserLoginMigrationResponse - */ - startedAt: string; - /** - * Date when the migration was completed - * @type {string} - * @memberof UserLoginMigrationResponse - */ - closedAt?: string; - /** - * Date when the migration was completed including the grace period - * @type {string} - * @memberof UserLoginMigrationResponse - */ - finishedAt?: string; -} -/** - * - * @export - * @interface UserLoginMigrationSearchListResponse - */ -export interface UserLoginMigrationSearchListResponse { - /** - * Contains user login migration responses - * @type {Array} - * @memberof UserLoginMigrationSearchListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof UserLoginMigrationSearchListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof UserLoginMigrationSearchListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof UserLoginMigrationSearchListResponse - */ - limit: number; -} -/** - * - * @export - * @interface UserMatchListResponse - */ -export interface UserMatchListResponse { - /** - * The items for the current page. - * @type {Array} - * @memberof UserMatchListResponse - */ - data: Array; - /** - * The total amount of items. - * @type {number} - * @memberof UserMatchListResponse - */ - total: number; - /** - * The amount of items skipped from the start. - * @type {number} - * @memberof UserMatchListResponse - */ - skip: number; - /** - * The page size of the response. - * @type {number} - * @memberof UserMatchListResponse - */ - limit: number; -} -/** - * - * @export - * @interface UserMatchResponse - */ -export interface UserMatchResponse { - /** - * local user id - * @type {string} - * @memberof UserMatchResponse - */ - userId: string; - /** - * login name of local user - * @type {string} - * @memberof UserMatchResponse - */ - loginName: string; - /** - * firstname of local user - * @type {string} - * @memberof UserMatchResponse - */ - firstName: string; - /** - * lastname of local user - * @type {string} - * @memberof UserMatchResponse - */ - lastName: string; - /** - * list of user roles from external system: student, teacher, admin - * @type {Array} - * @memberof UserMatchResponse - */ - roleNames: Array; - /** - * match type: admin (manual) or auto (set, when names match exactly for a single user - * @type {string} - * @memberof UserMatchResponse - */ - matchedBy?: UserMatchResponseMatchedByEnum; -} - -/** - * @export - * @enum {string} - */ -export enum UserMatchResponseRoleNamesEnum { - Student = 'student', - Teacher = 'teacher', - Admin = 'admin' -} -/** - * @export - * @enum {string} - */ -export enum UserMatchResponseMatchedByEnum { - Auto = 'auto', - Admin = 'admin' -} - -/** - * - * @export - * @interface UserResponse - */ -export interface UserResponse { - /** - * - * @type {string} - * @memberof UserResponse - */ - _id: string; - /** - * - * @type {string} - * @memberof UserResponse - */ - firstName: string; - /** - * - * @type {string} - * @memberof UserResponse - */ - lastName: string; - /** - * - * @type {string} - * @memberof UserResponse - */ - email: string; - /** - * - * @type {string} - * @memberof UserResponse - */ - createdAt: string; - /** - * - * @type {string} - * @memberof UserResponse - */ - birthday: string; - /** - * - * @type {object} - * @memberof UserResponse - */ - preferences: object; - /** - * - * @type {string} - * @memberof UserResponse - */ - consentStatus: string; - /** - * - * @type {ConsentsResponse} - * @memberof UserResponse - */ - consent: ConsentsResponse; - /** - * - * @type {Array} - * @memberof UserResponse - */ - classes: Array; - /** - * - * @type {string} - * @memberof UserResponse - */ - importHash: string; - /** - * - * @type {string} - * @memberof UserResponse - */ - lastLoginSystemChange: string; - /** - * - * @type {string} - * @memberof UserResponse - */ - outdatedSince: string; -} -/** - * - * @export - * @interface ValidationError - */ -export interface ValidationError { - /** - * The response status code. - * @type {number} - * @memberof ValidationError - */ - code: number; - /** - * The error type. - * @type {string} - * @memberof ValidationError - */ - type: string; - /** - * The error title. - * @type {string} - * @memberof ValidationError - */ - title: string; - /** - * The error message. - * @type {string} - * @memberof ValidationError - */ - message: string; - /** - * The error details. - * @type {object} - * @memberof ValidationError - */ - details?: object; -} -/** - * - * @export - * @interface VideoConferenceCreateParams - */ -export interface VideoConferenceCreateParams { - /** - * - * @type {boolean} - * @memberof VideoConferenceCreateParams - */ - everyAttendeeJoinsMuted?: boolean; - /** - * - * @type {boolean} - * @memberof VideoConferenceCreateParams - */ - everybodyJoinsAsModerator?: boolean; - /** - * - * @type {boolean} - * @memberof VideoConferenceCreateParams - */ - moderatorMustApproveJoinRequests?: boolean; - /** - * The URL that the BigBlueButton client will go to after users click the OK button on the ‘You have been logged out’ or ’This session was ended’ message. Has to be a URL from the same domain that the conference is started from. - * @type {string} - * @memberof VideoConferenceCreateParams - */ - logoutUrl?: string; -} -/** - * - * @export - * @interface VideoConferenceInfoResponse - */ -export interface VideoConferenceInfoResponse { - /** - * - * @type {VideoConferenceStateResponse} - * @memberof VideoConferenceInfoResponse - */ - state: VideoConferenceStateResponse; - /** - * The options for the video conference. - * @type {VideoConferenceOptionsResponse} - * @memberof VideoConferenceInfoResponse - */ - options: VideoConferenceOptionsResponse; -} -/** - * - * @export - * @interface VideoConferenceJoinResponse - */ -export interface VideoConferenceJoinResponse { - /** - * The URL to join the video conference. - * @type {string} - * @memberof VideoConferenceJoinResponse - */ - url: string; -} -/** - * - * @export - * @interface VideoConferenceOptionsResponse - */ -export interface VideoConferenceOptionsResponse { - /** - * Every attendee joins muted - * @type {boolean} - * @memberof VideoConferenceOptionsResponse - */ - everyAttendeeJoinsMuted: boolean; - /** - * Every attendee joins as a moderator - * @type {boolean} - * @memberof VideoConferenceOptionsResponse - */ - everybodyJoinsAsModerator: boolean; - /** - * Moderator must approve join requests - * @type {boolean} - * @memberof VideoConferenceOptionsResponse - */ - moderatorMustApproveJoinRequests: boolean; -} -/** - * - * @export - * @enum {string} - */ -export enum VideoConferenceScope { - Course = 'course', - Event = 'event' -} - -/** - * - * @export - * @enum {string} - */ -export enum VideoConferenceStateResponse { - NotStarted = 'NOT_STARTED', - Running = 'RUNNING', - Finished = 'FINISHED' -} - -/** - * - * @export - * @interface VisibilityBodyParams - */ -export interface VisibilityBodyParams { - /** - * - * @type {boolean} - * @memberof VisibilityBodyParams - */ - isVisible: boolean; -} -/** - * - * @export - * @interface VisibilitySettingsResponse - */ -export interface VisibilitySettingsResponse { - /** - * - * @type {string} - * @memberof VisibilitySettingsResponse - */ - publishedAt?: string; -} -/** - * - * @export - * @interface YearsResponse - */ -export interface YearsResponse { - /** - * - * @type {Array} - * @memberof YearsResponse - */ - schoolYears: Array; - /** - * - * @type {SchoolYearResponse} - * @memberof YearsResponse - */ - activeYear: SchoolYearResponse; - /** - * - * @type {SchoolYearResponse} - * @memberof YearsResponse - */ - lastYear: SchoolYearResponse; - /** - * - * @type {SchoolYearResponse} - * @memberof YearsResponse - */ - nextYear: SchoolYearResponse; -} - -/** - * AccountApi - axios parameter creator - * @export - */ -export const AccountApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Deletes an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerDeleteAccountById: async (id: string, options: any = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('accountControllerDeleteAccountById', 'id', id) - const localVarPath = `/account/{id}` - .replace(`{${"id"}}`, encodeURIComponent(String(id))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerFindAccountById: async (id: string, options: any = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('accountControllerFindAccountById', 'id', id) - const localVarPath = `/account/{id}` - .replace(`{${"id"}}`, encodeURIComponent(String(id))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Updates the the temporary account password for the authenticated user. - * @param {PatchMyPasswordParams} patchMyPasswordParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerReplaceMyPassword: async (patchMyPasswordParams: PatchMyPasswordParams, options: any = {}): Promise => { - // verify required parameter 'patchMyPasswordParams' is not null or undefined - assertParamExists('accountControllerReplaceMyPassword', 'patchMyPasswordParams', patchMyPasswordParams) - const localVarPath = `/account/me/password`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(patchMyPasswordParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. - * @param {'userId' | 'username'} type The search criteria. - * @param {string} value The search value. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerSearchAccounts: async (type: 'userId' | 'username', value: string, skip?: number, limit?: number, options: any = {}): Promise => { - // verify required parameter 'type' is not null or undefined - assertParamExists('accountControllerSearchAccounts', 'type', type) - // verify required parameter 'value' is not null or undefined - assertParamExists('accountControllerSearchAccounts', 'value', value) - const localVarPath = `/account`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if (type !== undefined) { - localVarQueryParameter['type'] = type; - } - - if (value !== undefined) { - localVarQueryParameter['value'] = value; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Updates an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {AccountByIdBodyParams} accountByIdBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerUpdateAccountById: async (id: string, accountByIdBodyParams: AccountByIdBodyParams, options: any = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('accountControllerUpdateAccountById', 'id', id) - // verify required parameter 'accountByIdBodyParams' is not null or undefined - assertParamExists('accountControllerUpdateAccountById', 'accountByIdBodyParams', accountByIdBodyParams) - const localVarPath = `/account/{id}` - .replace(`{${"id"}}`, encodeURIComponent(String(id))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(accountByIdBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Updates an account for the authenticated user. - * @param {PatchMyAccountParams} patchMyAccountParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerUpdateMyAccount: async (patchMyAccountParams: PatchMyAccountParams, options: any = {}): Promise => { - // verify required parameter 'patchMyAccountParams' is not null or undefined - assertParamExists('accountControllerUpdateMyAccount', 'patchMyAccountParams', patchMyAccountParams) - const localVarPath = `/account/me`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(patchMyAccountParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AccountApi - functional programming interface - * @export - */ -export const AccountApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AccountApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Deletes an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async accountControllerDeleteAccountById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerDeleteAccountById(id, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async accountControllerFindAccountById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerFindAccountById(id, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Updates the the temporary account password for the authenticated user. - * @param {PatchMyPasswordParams} patchMyPasswordParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerReplaceMyPassword(patchMyPasswordParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. - * @param {'userId' | 'username'} type The search criteria. - * @param {string} value The search value. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerSearchAccounts(type, value, skip, limit, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Updates an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {AccountByIdBodyParams} accountByIdBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerUpdateAccountById(id, accountByIdBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Updates an account for the authenticated user. - * @param {PatchMyAccountParams} patchMyAccountParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerUpdateMyAccount(patchMyAccountParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * AccountApi - factory interface - * @export - */ -export const AccountApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AccountApiFp(configuration) - return { - /** - * - * @summary Deletes an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerDeleteAccountById(id: string, options?: any): AxiosPromise { - return localVarFp.accountControllerDeleteAccountById(id, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerFindAccountById(id: string, options?: any): AxiosPromise { - return localVarFp.accountControllerFindAccountById(id, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Updates the the temporary account password for the authenticated user. - * @param {PatchMyPasswordParams} patchMyPasswordParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): AxiosPromise { - return localVarFp.accountControllerReplaceMyPassword(patchMyPasswordParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. - * @param {'userId' | 'username'} type The search criteria. - * @param {string} value The search value. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): AxiosPromise { - return localVarFp.accountControllerSearchAccounts(type, value, skip, limit, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Updates an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {AccountByIdBodyParams} accountByIdBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): AxiosPromise { - return localVarFp.accountControllerUpdateAccountById(id, accountByIdBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Updates an account for the authenticated user. - * @param {PatchMyAccountParams} patchMyAccountParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): AxiosPromise { - return localVarFp.accountControllerUpdateMyAccount(patchMyAccountParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AccountApi - interface - * @export - * @interface AccountApi - */ -export interface AccountApiInterface { - /** - * - * @summary Deletes an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApiInterface - */ - accountControllerDeleteAccountById(id: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApiInterface - */ - accountControllerFindAccountById(id: string, options?: any): AxiosPromise; - - /** - * - * @summary Updates the the temporary account password for the authenticated user. - * @param {PatchMyPasswordParams} patchMyPasswordParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApiInterface - */ - accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): AxiosPromise; - - /** - * - * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. - * @param {'userId' | 'username'} type The search criteria. - * @param {string} value The search value. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApiInterface - */ - accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): AxiosPromise; - - /** - * - * @summary Updates an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {AccountByIdBodyParams} accountByIdBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApiInterface - */ - accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Updates an account for the authenticated user. - * @param {PatchMyAccountParams} patchMyAccountParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApiInterface - */ - accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): AxiosPromise; - -} - -/** - * AccountApi - object-oriented interface - * @export - * @class AccountApi - * @extends {BaseAPI} - */ -export class AccountApi extends BaseAPI implements AccountApiInterface { - /** - * - * @summary Deletes an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApi - */ - public accountControllerDeleteAccountById(id: string, options?: any) { - return AccountApiFp(this.configuration).accountControllerDeleteAccountById(id, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApi - */ - public accountControllerFindAccountById(id: string, options?: any) { - return AccountApiFp(this.configuration).accountControllerFindAccountById(id, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Updates the the temporary account password for the authenticated user. - * @param {PatchMyPasswordParams} patchMyPasswordParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApi - */ - public accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any) { - return AccountApiFp(this.configuration).accountControllerReplaceMyPassword(patchMyPasswordParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. - * @param {'userId' | 'username'} type The search criteria. - * @param {string} value The search value. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApi - */ - public accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any) { - return AccountApiFp(this.configuration).accountControllerSearchAccounts(type, value, skip, limit, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Updates an account with given id. Superhero role is REQUIRED. - * @param {string} id The id for the account. - * @param {AccountByIdBodyParams} accountByIdBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApi - */ - public accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any) { - return AccountApiFp(this.configuration).accountControllerUpdateAccountById(id, accountByIdBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Updates an account for the authenticated user. - * @param {PatchMyAccountParams} patchMyAccountParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AccountApi - */ - public accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any) { - return AccountApiFp(this.configuration).accountControllerUpdateMyAccount(patchMyAccountParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * AdminStudentsApi - axios parameter creator - * @export - */ -export const AdminStudentsApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Returns an student with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - adminApiStudentsControllerFindStudentById: async (id: string, options: any = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('adminApiStudentsControllerFindStudentById', 'id', id) - const localVarPath = `/users/admin/students/{id}` - .replace(`{${"id"}}`, encodeURIComponent(String(id))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns all students which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - adminApiStudentsControllerSearchStudents: async (skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options: any = {}): Promise => { - const localVarPath = `/users/admin/students`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if ($limit !== undefined) { - localVarQueryParameter['$limit'] = $limit; - } - - if ($skip !== undefined) { - localVarQueryParameter['$skip'] = $skip; - } - - if (classes) { - localVarQueryParameter['classes'] = classes; - } - - if (searchQuery !== undefined) { - localVarQueryParameter['searchQuery'] = searchQuery; - } - - if (users) { - localVarQueryParameter['users'] = users; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AdminStudentsApi - functional programming interface - * @export - */ -export const AdminStudentsApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AdminStudentsApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Returns an student with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async adminApiStudentsControllerFindStudentById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiStudentsControllerFindStudentById(id, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns all students which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * AdminStudentsApi - factory interface - * @export - */ -export const AdminStudentsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AdminStudentsApiFp(configuration) - return { - /** - * - * @summary Returns an student with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - adminApiStudentsControllerFindStudentById(id: string, options?: any): AxiosPromise { - return localVarFp.adminApiStudentsControllerFindStudentById(id, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns all students which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise { - return localVarFp.adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AdminStudentsApi - interface - * @export - * @interface AdminStudentsApi - */ -export interface AdminStudentsApiInterface { - /** - * - * @summary Returns an student with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AdminStudentsApiInterface - */ - adminApiStudentsControllerFindStudentById(id: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns all students which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AdminStudentsApiInterface - */ - adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise; - -} - -/** - * AdminStudentsApi - object-oriented interface - * @export - * @class AdminStudentsApi - * @extends {BaseAPI} - */ -export class AdminStudentsApi extends BaseAPI implements AdminStudentsApiInterface { - /** - * - * @summary Returns an student with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AdminStudentsApi - */ - public adminApiStudentsControllerFindStudentById(id: string, options?: any) { - return AdminStudentsApiFp(this.configuration).adminApiStudentsControllerFindStudentById(id, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns all students which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AdminStudentsApi - */ - public adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any) { - return AdminStudentsApiFp(this.configuration).adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * AdminTeachersApi - axios parameter creator - * @export - */ -export const AdminTeachersApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Returns a teacher with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - adminApiTeachersControllerFindTeacherById: async (id: string, options: any = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('adminApiTeachersControllerFindTeacherById', 'id', id) - const localVarPath = `/users/admin/teachers/{id}` - .replace(`{${"id"}}`, encodeURIComponent(String(id))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns all teachers which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - adminApiTeachersControllerSearchTeachers: async (skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options: any = {}): Promise => { - const localVarPath = `/users/admin/teachers`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if ($limit !== undefined) { - localVarQueryParameter['$limit'] = $limit; - } - - if ($skip !== undefined) { - localVarQueryParameter['$skip'] = $skip; - } - - if (classes) { - localVarQueryParameter['classes'] = classes; - } - - if (searchQuery !== undefined) { - localVarQueryParameter['searchQuery'] = searchQuery; - } - - if (users) { - localVarQueryParameter['users'] = users; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AdminTeachersApi - functional programming interface - * @export - */ -export const AdminTeachersApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AdminTeachersApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Returns a teacher with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async adminApiTeachersControllerFindTeacherById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiTeachersControllerFindTeacherById(id, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns all teachers which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * AdminTeachersApi - factory interface - * @export - */ -export const AdminTeachersApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AdminTeachersApiFp(configuration) - return { - /** - * - * @summary Returns a teacher with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - adminApiTeachersControllerFindTeacherById(id: string, options?: any): AxiosPromise { - return localVarFp.adminApiTeachersControllerFindTeacherById(id, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns all teachers which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise { - return localVarFp.adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AdminTeachersApi - interface - * @export - * @interface AdminTeachersApi - */ -export interface AdminTeachersApiInterface { - /** - * - * @summary Returns a teacher with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AdminTeachersApiInterface - */ - adminApiTeachersControllerFindTeacherById(id: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns all teachers which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AdminTeachersApiInterface - */ - adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise; - -} - -/** - * AdminTeachersApi - object-oriented interface - * @export - * @class AdminTeachersApi - * @extends {BaseAPI} - */ -export class AdminTeachersApi extends BaseAPI implements AdminTeachersApiInterface { - /** - * - * @summary Returns a teacher with given id. - * @param {string} id The id of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AdminTeachersApi - */ - public adminApiTeachersControllerFindTeacherById(id: string, options?: any) { - return AdminTeachersApiFp(this.configuration).adminApiTeachersControllerFindTeacherById(id, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns all teachers which satisfies the given criteria. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {number} [$limit] Page limit, defaults to 25. - * @param {number} [$skip] Number of elements (not pages) to be skipped - * @param {Array} [classes] - * @param {string} [searchQuery] - * @param {Array} [users] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AdminTeachersApi - */ - public adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any) { - return AdminTeachersApiFp(this.configuration).adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * AlertApi - axios parameter creator - * @export - */ -export const AlertApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Get allerts - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - alertControllerFind: async (options: any = {}): Promise => { - const localVarPath = `/alert`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AlertApi - functional programming interface - * @export - */ -export const AlertApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AlertApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Get allerts - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async alertControllerFind(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.alertControllerFind(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * AlertApi - factory interface - * @export - */ -export const AlertApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AlertApiFp(configuration) - return { - /** - * - * @summary Get allerts - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - alertControllerFind(options?: any): AxiosPromise { - return localVarFp.alertControllerFind(options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AlertApi - interface - * @export - * @interface AlertApi - */ -export interface AlertApiInterface { - /** - * - * @summary Get allerts - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AlertApiInterface - */ - alertControllerFind(options?: any): AxiosPromise; - -} - -/** - * AlertApi - object-oriented interface - * @export - * @class AlertApi - * @extends {BaseAPI} - */ -export class AlertApi extends BaseAPI implements AlertApiInterface { - /** - * - * @summary Get allerts - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AlertApi - */ - public alertControllerFind(options?: any) { - return AlertApiFp(this.configuration).alertControllerFind(options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * AuthenticationApi - axios parameter creator - * @export - */ -export const AuthenticationApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Starts the login process for users which are authenticated via LDAP - * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - loginControllerLoginLdap: async (ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options: any = {}): Promise => { - // verify required parameter 'ldapAuthorizationBodyParams' is not null or undefined - assertParamExists('loginControllerLoginLdap', 'ldapAuthorizationBodyParams', ldapAuthorizationBodyParams) - const localVarPath = `/authentication/ldap`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(ldapAuthorizationBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Starts the login process for users which are locally managed. - * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - loginControllerLoginLocal: async (localAuthorizationBodyParams: LocalAuthorizationBodyParams, options: any = {}): Promise => { - // verify required parameter 'localAuthorizationBodyParams' is not null or undefined - assertParamExists('loginControllerLoginLocal', 'localAuthorizationBodyParams', localAuthorizationBodyParams) - const localVarPath = `/authentication/local`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(localAuthorizationBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Starts the login process for users which are authenticated via OAuth 2. - * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - loginControllerLoginOauth2: async (oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options: any = {}): Promise => { - // verify required parameter 'oauth2AuthorizationBodyParams' is not null or undefined - assertParamExists('loginControllerLoginOauth2', 'oauth2AuthorizationBodyParams', oauth2AuthorizationBodyParams) - const localVarPath = `/authentication/oauth2`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(oauth2AuthorizationBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AuthenticationApi - functional programming interface - * @export - */ -export const AuthenticationApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AuthenticationApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Starts the login process for users which are authenticated via LDAP - * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginLdap(ldapAuthorizationBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Starts the login process for users which are locally managed. - * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginLocal(localAuthorizationBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Starts the login process for users which are authenticated via OAuth 2. - * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * AuthenticationApi - factory interface - * @export - */ -export const AuthenticationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AuthenticationApiFp(configuration) - return { - /** - * - * @summary Starts the login process for users which are authenticated via LDAP - * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): AxiosPromise { - return localVarFp.loginControllerLoginLdap(ldapAuthorizationBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Starts the login process for users which are locally managed. - * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): AxiosPromise { - return localVarFp.loginControllerLoginLocal(localAuthorizationBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Starts the login process for users which are authenticated via OAuth 2. - * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): AxiosPromise { - return localVarFp.loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AuthenticationApi - interface - * @export - * @interface AuthenticationApi - */ -export interface AuthenticationApiInterface { - /** - * - * @summary Starts the login process for users which are authenticated via LDAP - * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApiInterface - */ - loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Starts the login process for users which are locally managed. - * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApiInterface - */ - loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Starts the login process for users which are authenticated via OAuth 2. - * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApiInterface - */ - loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): AxiosPromise; - -} - -/** - * AuthenticationApi - object-oriented interface - * @export - * @class AuthenticationApi - * @extends {BaseAPI} - */ -export class AuthenticationApi extends BaseAPI implements AuthenticationApiInterface { - /** - * - * @summary Starts the login process for users which are authenticated via LDAP - * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApi - */ - public loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any) { - return AuthenticationApiFp(this.configuration).loginControllerLoginLdap(ldapAuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Starts the login process for users which are locally managed. - * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApi - */ - public loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any) { - return AuthenticationApiFp(this.configuration).loginControllerLoginLocal(localAuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Starts the login process for users which are authenticated via OAuth 2. - * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthenticationApi - */ - public loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any) { - return AuthenticationApiFp(this.configuration).loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * AuthorizationApi - axios parameter creator - * @export - */ -export const AuthorizationApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Checks if user is authorized to perform the given operation. - * @param {AuthorizationBodyParams} authorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - authorizationReferenceControllerAuthorizeByReference: async (authorizationBodyParams: AuthorizationBodyParams, options: any = {}): Promise => { - // verify required parameter 'authorizationBodyParams' is not null or undefined - assertParamExists('authorizationReferenceControllerAuthorizeByReference', 'authorizationBodyParams', authorizationBodyParams) - const localVarPath = `/authorization/by-reference`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(authorizationBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * AuthorizationApi - functional programming interface - * @export - */ -export const AuthorizationApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = AuthorizationApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Checks if user is authorized to perform the given operation. - * @param {AuthorizationBodyParams} authorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * AuthorizationApi - factory interface - * @export - */ -export const AuthorizationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = AuthorizationApiFp(configuration) - return { - /** - * - * @summary Checks if user is authorized to perform the given operation. - * @param {AuthorizationBodyParams} authorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): AxiosPromise { - return localVarFp.authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * AuthorizationApi - interface - * @export - * @interface AuthorizationApi - */ -export interface AuthorizationApiInterface { - /** - * - * @summary Checks if user is authorized to perform the given operation. - * @param {AuthorizationBodyParams} authorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthorizationApiInterface - */ - authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): AxiosPromise; - -} - -/** - * AuthorizationApi - object-oriented interface - * @export - * @class AuthorizationApi - * @extends {BaseAPI} - */ -export class AuthorizationApi extends BaseAPI implements AuthorizationApiInterface { - /** - * - * @summary Checks if user is authorized to perform the given operation. - * @param {AuthorizationBodyParams} authorizationBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof AuthorizationApi - */ - public authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any) { - return AuthorizationApiFp(this.configuration).authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * BoardApi - axios parameter creator - * @export - */ -export const BoardApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Create a board copy. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerCopyBoard: async (boardId: string, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('boardControllerCopyBoard', 'boardId', boardId) - const localVarPath = `/boards/{boardId}/copy` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Create a new board. - * @param {CreateBoardBodyParams} createBoardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerCreateBoard: async (createBoardBodyParams: CreateBoardBodyParams, options: any = {}): Promise => { - // verify required parameter 'createBoardBodyParams' is not null or undefined - assertParamExists('boardControllerCreateBoard', 'createBoardBodyParams', createBoardBodyParams) - const localVarPath = `/boards`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(createBoardBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Create a new column on a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerCreateColumn: async (boardId: string, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('boardControllerCreateColumn', 'boardId', boardId) - const localVarPath = `/boards/{boardId}/columns` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Delete a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerDeleteBoard: async (boardId: string, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('boardControllerDeleteBoard', 'boardId', boardId) - const localVarPath = `/boards/{boardId}` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get the context of a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerGetBoardContext: async (boardId: string, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('boardControllerGetBoardContext', 'boardId', boardId) - const localVarPath = `/boards/{boardId}/context` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get the skeleton of a a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerGetBoardSkeleton: async (boardId: string, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('boardControllerGetBoardSkeleton', 'boardId', boardId) - const localVarPath = `/boards/{boardId}` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update the title of a board. - * @param {string} boardId The id of the board. - * @param {UpdateBoardTitleParams} updateBoardTitleParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerUpdateBoardTitle: async (boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('boardControllerUpdateBoardTitle', 'boardId', boardId) - // verify required parameter 'updateBoardTitleParams' is not null or undefined - assertParamExists('boardControllerUpdateBoardTitle', 'updateBoardTitleParams', updateBoardTitleParams) - const localVarPath = `/boards/{boardId}/title` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(updateBoardTitleParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update the visibility of a board. - * @param {string} boardId The id of the board. - * @param {VisibilityBodyParams} visibilityBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerUpdateVisibility: async (boardId: string, visibilityBodyParams: VisibilityBodyParams, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('boardControllerUpdateVisibility', 'boardId', boardId) - // verify required parameter 'visibilityBodyParams' is not null or undefined - assertParamExists('boardControllerUpdateVisibility', 'visibilityBodyParams', visibilityBodyParams) - const localVarPath = `/boards/{boardId}/visibility` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(visibilityBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * BoardApi - functional programming interface - * @export - */ -export const BoardApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = BoardApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Create a board copy. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardControllerCopyBoard(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCopyBoard(boardId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Create a new board. - * @param {CreateBoardBodyParams} createBoardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCreateBoard(createBoardBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Create a new column on a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardControllerCreateColumn(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCreateColumn(boardId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Delete a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardControllerDeleteBoard(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerDeleteBoard(boardId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get the context of a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardControllerGetBoardContext(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerGetBoardContext(boardId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get the skeleton of a a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardControllerGetBoardSkeleton(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerGetBoardSkeleton(boardId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update the title of a board. - * @param {string} boardId The id of the board. - * @param {UpdateBoardTitleParams} updateBoardTitleParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update the visibility of a board. - * @param {string} boardId The id of the board. - * @param {VisibilityBodyParams} visibilityBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerUpdateVisibility(boardId, visibilityBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * BoardApi - factory interface - * @export - */ -export const BoardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = BoardApiFp(configuration) - return { - /** - * - * @summary Create a board copy. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerCopyBoard(boardId: string, options?: any): AxiosPromise { - return localVarFp.boardControllerCopyBoard(boardId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Create a new board. - * @param {CreateBoardBodyParams} createBoardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): AxiosPromise { - return localVarFp.boardControllerCreateBoard(createBoardBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Create a new column on a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerCreateColumn(boardId: string, options?: any): AxiosPromise { - return localVarFp.boardControllerCreateColumn(boardId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Delete a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerDeleteBoard(boardId: string, options?: any): AxiosPromise { - return localVarFp.boardControllerDeleteBoard(boardId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get the context of a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerGetBoardContext(boardId: string, options?: any): AxiosPromise { - return localVarFp.boardControllerGetBoardContext(boardId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get the skeleton of a a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerGetBoardSkeleton(boardId: string, options?: any): AxiosPromise { - return localVarFp.boardControllerGetBoardSkeleton(boardId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update the title of a board. - * @param {string} boardId The id of the board. - * @param {UpdateBoardTitleParams} updateBoardTitleParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): AxiosPromise { - return localVarFp.boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update the visibility of a board. - * @param {string} boardId The id of the board. - * @param {VisibilityBodyParams} visibilityBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): AxiosPromise { - return localVarFp.boardControllerUpdateVisibility(boardId, visibilityBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * BoardApi - interface - * @export - * @interface BoardApi - */ -export interface BoardApiInterface { - /** - * - * @summary Create a board copy. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApiInterface - */ - boardControllerCopyBoard(boardId: string, options?: any): AxiosPromise; - - /** - * - * @summary Create a new board. - * @param {CreateBoardBodyParams} createBoardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApiInterface - */ - boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Create a new column on a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApiInterface - */ - boardControllerCreateColumn(boardId: string, options?: any): AxiosPromise; - - /** - * - * @summary Delete a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApiInterface - */ - boardControllerDeleteBoard(boardId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get the context of a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApiInterface - */ - boardControllerGetBoardContext(boardId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get the skeleton of a a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApiInterface - */ - boardControllerGetBoardSkeleton(boardId: string, options?: any): AxiosPromise; - - /** - * - * @summary Update the title of a board. - * @param {string} boardId The id of the board. - * @param {UpdateBoardTitleParams} updateBoardTitleParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApiInterface - */ - boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): AxiosPromise; - - /** - * - * @summary Update the visibility of a board. - * @param {string} boardId The id of the board. - * @param {VisibilityBodyParams} visibilityBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApiInterface - */ - boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): AxiosPromise; - -} - -/** - * BoardApi - object-oriented interface - * @export - * @class BoardApi - * @extends {BaseAPI} - */ -export class BoardApi extends BaseAPI implements BoardApiInterface { - /** - * - * @summary Create a board copy. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApi - */ - public boardControllerCopyBoard(boardId: string, options?: any) { - return BoardApiFp(this.configuration).boardControllerCopyBoard(boardId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Create a new board. - * @param {CreateBoardBodyParams} createBoardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApi - */ - public boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any) { - return BoardApiFp(this.configuration).boardControllerCreateBoard(createBoardBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Create a new column on a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApi - */ - public boardControllerCreateColumn(boardId: string, options?: any) { - return BoardApiFp(this.configuration).boardControllerCreateColumn(boardId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Delete a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApi - */ - public boardControllerDeleteBoard(boardId: string, options?: any) { - return BoardApiFp(this.configuration).boardControllerDeleteBoard(boardId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get the context of a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApi - */ - public boardControllerGetBoardContext(boardId: string, options?: any) { - return BoardApiFp(this.configuration).boardControllerGetBoardContext(boardId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get the skeleton of a a board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApi - */ - public boardControllerGetBoardSkeleton(boardId: string, options?: any) { - return BoardApiFp(this.configuration).boardControllerGetBoardSkeleton(boardId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update the title of a board. - * @param {string} boardId The id of the board. - * @param {UpdateBoardTitleParams} updateBoardTitleParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApi - */ - public boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any) { - return BoardApiFp(this.configuration).boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update the visibility of a board. - * @param {string} boardId The id of the board. - * @param {VisibilityBodyParams} visibilityBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardApi - */ - public boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any) { - return BoardApiFp(this.configuration).boardControllerUpdateVisibility(boardId, visibilityBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * BoardCardApi - axios parameter creator - * @export - */ -export const BoardCardApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Create a new element on a card. - * @param {string} cardId The id of the card. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerCreateElement: async (cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options: any = {}): Promise => { - // verify required parameter 'cardId' is not null or undefined - assertParamExists('cardControllerCreateElement', 'cardId', cardId) - // verify required parameter 'createContentElementBodyParams' is not null or undefined - assertParamExists('cardControllerCreateElement', 'createContentElementBodyParams', createContentElementBodyParams) - const localVarPath = `/cards/{cardId}/elements` - .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(createContentElementBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Delete a single card. - * @param {string} cardId The id of the card. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerDeleteCard: async (cardId: string, options: any = {}): Promise => { - // verify required parameter 'cardId' is not null or undefined - assertParamExists('cardControllerDeleteCard', 'cardId', cardId) - const localVarPath = `/cards/{cardId}` - .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get a list of cards by their ids. - * @param {Array} ids Array of Ids to be loaded - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerGetCards: async (ids: Array, options: any = {}): Promise => { - // verify required parameter 'ids' is not null or undefined - assertParamExists('cardControllerGetCards', 'ids', ids) - const localVarPath = `/cards`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (ids) { - localVarQueryParameter['ids'] = ids; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Move a single card. - * @param {string} cardId The id of the card. - * @param {MoveCardBodyParams} moveCardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerMoveCard: async (cardId: string, moveCardBodyParams: MoveCardBodyParams, options: any = {}): Promise => { - // verify required parameter 'cardId' is not null or undefined - assertParamExists('cardControllerMoveCard', 'cardId', cardId) - // verify required parameter 'moveCardBodyParams' is not null or undefined - assertParamExists('cardControllerMoveCard', 'moveCardBodyParams', moveCardBodyParams) - const localVarPath = `/cards/{cardId}/position` - .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(moveCardBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update the height of a single card. - * @param {string} cardId The id of the card. - * @param {SetHeightBodyParams} setHeightBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerUpdateCardHeight: async (cardId: string, setHeightBodyParams: SetHeightBodyParams, options: any = {}): Promise => { - // verify required parameter 'cardId' is not null or undefined - assertParamExists('cardControllerUpdateCardHeight', 'cardId', cardId) - // verify required parameter 'setHeightBodyParams' is not null or undefined - assertParamExists('cardControllerUpdateCardHeight', 'setHeightBodyParams', setHeightBodyParams) - const localVarPath = `/cards/{cardId}/height` - .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(setHeightBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update the title of a single card. - * @param {string} cardId The id of the card. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerUpdateCardTitle: async (cardId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { - // verify required parameter 'cardId' is not null or undefined - assertParamExists('cardControllerUpdateCardTitle', 'cardId', cardId) - // verify required parameter 'renameBodyParams' is not null or undefined - assertParamExists('cardControllerUpdateCardTitle', 'renameBodyParams', renameBodyParams) - const localVarPath = `/cards/{cardId}/title` - .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * BoardCardApi - functional programming interface - * @export - */ -export const BoardCardApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = BoardCardApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Create a new element on a card. - * @param {string} cardId The id of the card. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerCreateElement(cardId, createContentElementBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Delete a single card. - * @param {string} cardId The id of the card. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async cardControllerDeleteCard(cardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerDeleteCard(cardId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get a list of cards by their ids. - * @param {Array} ids Array of Ids to be loaded - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async cardControllerGetCards(ids: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerGetCards(ids, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Move a single card. - * @param {string} cardId The id of the card. - * @param {MoveCardBodyParams} moveCardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerMoveCard(cardId, moveCardBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update the height of a single card. - * @param {string} cardId The id of the card. - * @param {SetHeightBodyParams} setHeightBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update the title of a single card. - * @param {string} cardId The id of the card. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerUpdateCardTitle(cardId, renameBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * BoardCardApi - factory interface - * @export - */ -export const BoardCardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = BoardCardApiFp(configuration) - return { - /** - * - * @summary Create a new element on a card. - * @param {string} cardId The id of the card. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise { - return localVarFp.cardControllerCreateElement(cardId, createContentElementBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Delete a single card. - * @param {string} cardId The id of the card. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerDeleteCard(cardId: string, options?: any): AxiosPromise { - return localVarFp.cardControllerDeleteCard(cardId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get a list of cards by their ids. - * @param {Array} ids Array of Ids to be loaded - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerGetCards(ids: Array, options?: any): AxiosPromise { - return localVarFp.cardControllerGetCards(ids, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Move a single card. - * @param {string} cardId The id of the card. - * @param {MoveCardBodyParams} moveCardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): AxiosPromise { - return localVarFp.cardControllerMoveCard(cardId, moveCardBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update the height of a single card. - * @param {string} cardId The id of the card. - * @param {SetHeightBodyParams} setHeightBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): AxiosPromise { - return localVarFp.cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update the title of a single card. - * @param {string} cardId The id of the card. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { - return localVarFp.cardControllerUpdateCardTitle(cardId, renameBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * BoardCardApi - interface - * @export - * @interface BoardCardApi - */ -export interface BoardCardApiInterface { - /** - * - * @summary Create a new element on a card. - * @param {string} cardId The id of the card. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApiInterface - */ - cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Delete a single card. - * @param {string} cardId The id of the card. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApiInterface - */ - cardControllerDeleteCard(cardId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get a list of cards by their ids. - * @param {Array} ids Array of Ids to be loaded - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApiInterface - */ - cardControllerGetCards(ids: Array, options?: any): AxiosPromise; - - /** - * - * @summary Move a single card. - * @param {string} cardId The id of the card. - * @param {MoveCardBodyParams} moveCardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApiInterface - */ - cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Update the height of a single card. - * @param {string} cardId The id of the card. - * @param {SetHeightBodyParams} setHeightBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApiInterface - */ - cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Update the title of a single card. - * @param {string} cardId The id of the card. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApiInterface - */ - cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; - -} - -/** - * BoardCardApi - object-oriented interface - * @export - * @class BoardCardApi - * @extends {BaseAPI} - */ -export class BoardCardApi extends BaseAPI implements BoardCardApiInterface { - /** - * - * @summary Create a new element on a card. - * @param {string} cardId The id of the card. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApi - */ - public cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any) { - return BoardCardApiFp(this.configuration).cardControllerCreateElement(cardId, createContentElementBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Delete a single card. - * @param {string} cardId The id of the card. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApi - */ - public cardControllerDeleteCard(cardId: string, options?: any) { - return BoardCardApiFp(this.configuration).cardControllerDeleteCard(cardId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get a list of cards by their ids. - * @param {Array} ids Array of Ids to be loaded - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApi - */ - public cardControllerGetCards(ids: Array, options?: any) { - return BoardCardApiFp(this.configuration).cardControllerGetCards(ids, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Move a single card. - * @param {string} cardId The id of the card. - * @param {MoveCardBodyParams} moveCardBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApi - */ - public cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any) { - return BoardCardApiFp(this.configuration).cardControllerMoveCard(cardId, moveCardBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update the height of a single card. - * @param {string} cardId The id of the card. - * @param {SetHeightBodyParams} setHeightBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApi - */ - public cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any) { - return BoardCardApiFp(this.configuration).cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update the title of a single card. - * @param {string} cardId The id of the card. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardCardApi - */ - public cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any) { - return BoardCardApiFp(this.configuration).cardControllerUpdateCardTitle(cardId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * BoardColumnApi - axios parameter creator - * @export - */ -export const BoardColumnApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Create a new card on a column. - * @param {string} columnId The id of the column. - * @param {CreateCardBodyParams} [createCardBodyParams] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - columnControllerCreateCard: async (columnId: string, createCardBodyParams?: CreateCardBodyParams, options: any = {}): Promise => { - // verify required parameter 'columnId' is not null or undefined - assertParamExists('columnControllerCreateCard', 'columnId', columnId) - const localVarPath = `/columns/{columnId}/cards` - .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(createCardBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Delete a single column. - * @param {string} columnId The id of the column. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - columnControllerDeleteColumn: async (columnId: string, options: any = {}): Promise => { - // verify required parameter 'columnId' is not null or undefined - assertParamExists('columnControllerDeleteColumn', 'columnId', columnId) - const localVarPath = `/columns/{columnId}` - .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Move a single column. - * @param {string} columnId The id of the column. - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - columnControllerMoveColumn: async (columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options: any = {}): Promise => { - // verify required parameter 'columnId' is not null or undefined - assertParamExists('columnControllerMoveColumn', 'columnId', columnId) - // verify required parameter 'moveColumnBodyParams' is not null or undefined - assertParamExists('columnControllerMoveColumn', 'moveColumnBodyParams', moveColumnBodyParams) - const localVarPath = `/columns/{columnId}/position` - .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(moveColumnBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update the title of a single column. - * @param {string} columnId The id of the column. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - columnControllerUpdateColumnTitle: async (columnId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { - // verify required parameter 'columnId' is not null or undefined - assertParamExists('columnControllerUpdateColumnTitle', 'columnId', columnId) - // verify required parameter 'renameBodyParams' is not null or undefined - assertParamExists('columnControllerUpdateColumnTitle', 'renameBodyParams', renameBodyParams) - const localVarPath = `/columns/{columnId}/title` - .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * BoardColumnApi - functional programming interface - * @export - */ -export const BoardColumnApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = BoardColumnApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Create a new card on a column. - * @param {string} columnId The id of the column. - * @param {CreateCardBodyParams} [createCardBodyParams] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerCreateCard(columnId, createCardBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Delete a single column. - * @param {string} columnId The id of the column. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async columnControllerDeleteColumn(columnId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerDeleteColumn(columnId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Move a single column. - * @param {string} columnId The id of the column. - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerMoveColumn(columnId, moveColumnBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update the title of a single column. - * @param {string} columnId The id of the column. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerUpdateColumnTitle(columnId, renameBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * BoardColumnApi - factory interface - * @export - */ -export const BoardColumnApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = BoardColumnApiFp(configuration) - return { - /** - * - * @summary Create a new card on a column. - * @param {string} columnId The id of the column. - * @param {CreateCardBodyParams} [createCardBodyParams] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): AxiosPromise { - return localVarFp.columnControllerCreateCard(columnId, createCardBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Delete a single column. - * @param {string} columnId The id of the column. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - columnControllerDeleteColumn(columnId: string, options?: any): AxiosPromise { - return localVarFp.columnControllerDeleteColumn(columnId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Move a single column. - * @param {string} columnId The id of the column. - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise { - return localVarFp.columnControllerMoveColumn(columnId, moveColumnBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update the title of a single column. - * @param {string} columnId The id of the column. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { - return localVarFp.columnControllerUpdateColumnTitle(columnId, renameBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * BoardColumnApi - interface - * @export - * @interface BoardColumnApi - */ -export interface BoardColumnApiInterface { - /** - * - * @summary Create a new card on a column. - * @param {string} columnId The id of the column. - * @param {CreateCardBodyParams} [createCardBodyParams] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardColumnApiInterface - */ - columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Delete a single column. - * @param {string} columnId The id of the column. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardColumnApiInterface - */ - columnControllerDeleteColumn(columnId: string, options?: any): AxiosPromise; - - /** - * - * @summary Move a single column. - * @param {string} columnId The id of the column. - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardColumnApiInterface - */ - columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Update the title of a single column. - * @param {string} columnId The id of the column. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardColumnApiInterface - */ - columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; - -} - -/** - * BoardColumnApi - object-oriented interface - * @export - * @class BoardColumnApi - * @extends {BaseAPI} - */ -export class BoardColumnApi extends BaseAPI implements BoardColumnApiInterface { - /** - * - * @summary Create a new card on a column. - * @param {string} columnId The id of the column. - * @param {CreateCardBodyParams} [createCardBodyParams] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardColumnApi - */ - public columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any) { - return BoardColumnApiFp(this.configuration).columnControllerCreateCard(columnId, createCardBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Delete a single column. - * @param {string} columnId The id of the column. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardColumnApi - */ - public columnControllerDeleteColumn(columnId: string, options?: any) { - return BoardColumnApiFp(this.configuration).columnControllerDeleteColumn(columnId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Move a single column. - * @param {string} columnId The id of the column. - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardColumnApi - */ - public columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any) { - return BoardColumnApiFp(this.configuration).columnControllerMoveColumn(columnId, moveColumnBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update the title of a single column. - * @param {string} columnId The id of the column. - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardColumnApi - */ - public columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any) { - return BoardColumnApiFp(this.configuration).columnControllerUpdateColumnTitle(columnId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * BoardElementApi - axios parameter creator - * @export - */ -export const BoardElementApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Create a new submission item having parent a submission container element. - * @param {string} contentElementId The id of the element. - * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerCreateSubmissionItem: async (contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options: any = {}): Promise => { - // verify required parameter 'contentElementId' is not null or undefined - assertParamExists('elementControllerCreateSubmissionItem', 'contentElementId', contentElementId) - // verify required parameter 'createSubmissionItemBodyParams' is not null or undefined - assertParamExists('elementControllerCreateSubmissionItem', 'createSubmissionItemBodyParams', createSubmissionItemBodyParams) - const localVarPath = `/elements/{contentElementId}/submissions` - .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(createSubmissionItemBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Delete a single content element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerDeleteElement: async (contentElementId: string, options: any = {}): Promise => { - // verify required parameter 'contentElementId' is not null or undefined - assertParamExists('elementControllerDeleteElement', 'contentElementId', contentElementId) - const localVarPath = `/elements/{contentElementId}` - .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Move a single content element. - * @param {string} contentElementId The id of the element. - * @param {MoveContentElementBody} moveContentElementBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerMoveElement: async (contentElementId: string, moveContentElementBody: MoveContentElementBody, options: any = {}): Promise => { - // verify required parameter 'contentElementId' is not null or undefined - assertParamExists('elementControllerMoveElement', 'contentElementId', contentElementId) - // verify required parameter 'moveContentElementBody' is not null or undefined - assertParamExists('elementControllerMoveElement', 'moveContentElementBody', moveContentElementBody) - const localVarPath = `/elements/{contentElementId}/position` - .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(moveContentElementBody, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Check if user has read permission for any board element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerReadPermission: async (contentElementId: string, options: any = {}): Promise => { - // verify required parameter 'contentElementId' is not null or undefined - assertParamExists('elementControllerReadPermission', 'contentElementId', contentElementId) - const localVarPath = `/elements/{contentElementId}/permission` - .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update a single content element. - * @param {string} contentElementId The id of the element. - * @param {UpdateElementContentBodyParams} updateElementContentBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerUpdateElement: async (contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options: any = {}): Promise => { - // verify required parameter 'contentElementId' is not null or undefined - assertParamExists('elementControllerUpdateElement', 'contentElementId', contentElementId) - // verify required parameter 'updateElementContentBodyParams' is not null or undefined - assertParamExists('elementControllerUpdateElement', 'updateElementContentBodyParams', updateElementContentBodyParams) - const localVarPath = `/elements/{contentElementId}/content` - .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(updateElementContentBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * BoardElementApi - functional programming interface - * @export - */ -export const BoardElementApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = BoardElementApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Create a new submission item having parent a submission container element. - * @param {string} contentElementId The id of the element. - * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Delete a single content element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async elementControllerDeleteElement(contentElementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerDeleteElement(contentElementId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Move a single content element. - * @param {string} contentElementId The id of the element. - * @param {MoveContentElementBody} moveContentElementBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerMoveElement(contentElementId, moveContentElementBody, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Check if user has read permission for any board element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async elementControllerReadPermission(contentElementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerReadPermission(contentElementId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update a single content element. - * @param {string} contentElementId The id of the element. - * @param {UpdateElementContentBodyParams} updateElementContentBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * BoardElementApi - factory interface - * @export - */ -export const BoardElementApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = BoardElementApiFp(configuration) - return { - /** - * - * @summary Create a new submission item having parent a submission container element. - * @param {string} contentElementId The id of the element. - * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): AxiosPromise { - return localVarFp.elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Delete a single content element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerDeleteElement(contentElementId: string, options?: any): AxiosPromise { - return localVarFp.elementControllerDeleteElement(contentElementId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Move a single content element. - * @param {string} contentElementId The id of the element. - * @param {MoveContentElementBody} moveContentElementBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): AxiosPromise { - return localVarFp.elementControllerMoveElement(contentElementId, moveContentElementBody, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Check if user has read permission for any board element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerReadPermission(contentElementId: string, options?: any): AxiosPromise { - return localVarFp.elementControllerReadPermission(contentElementId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update a single content element. - * @param {string} contentElementId The id of the element. - * @param {UpdateElementContentBodyParams} updateElementContentBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): AxiosPromise { - return localVarFp.elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * BoardElementApi - interface - * @export - * @interface BoardElementApi - */ -export interface BoardElementApiInterface { - /** - * - * @summary Create a new submission item having parent a submission container element. - * @param {string} contentElementId The id of the element. - * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApiInterface - */ - elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Delete a single content element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApiInterface - */ - elementControllerDeleteElement(contentElementId: string, options?: any): AxiosPromise; - - /** - * - * @summary Move a single content element. - * @param {string} contentElementId The id of the element. - * @param {MoveContentElementBody} moveContentElementBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApiInterface - */ - elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): AxiosPromise; - - /** - * - * @summary Check if user has read permission for any board element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApiInterface - */ - elementControllerReadPermission(contentElementId: string, options?: any): AxiosPromise; - - /** - * - * @summary Update a single content element. - * @param {string} contentElementId The id of the element. - * @param {UpdateElementContentBodyParams} updateElementContentBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApiInterface - */ - elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): AxiosPromise; - -} - -/** - * BoardElementApi - object-oriented interface - * @export - * @class BoardElementApi - * @extends {BaseAPI} - */ -export class BoardElementApi extends BaseAPI implements BoardElementApiInterface { - /** - * - * @summary Create a new submission item having parent a submission container element. - * @param {string} contentElementId The id of the element. - * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApi - */ - public elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any) { - return BoardElementApiFp(this.configuration).elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Delete a single content element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApi - */ - public elementControllerDeleteElement(contentElementId: string, options?: any) { - return BoardElementApiFp(this.configuration).elementControllerDeleteElement(contentElementId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Move a single content element. - * @param {string} contentElementId The id of the element. - * @param {MoveContentElementBody} moveContentElementBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApi - */ - public elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any) { - return BoardElementApiFp(this.configuration).elementControllerMoveElement(contentElementId, moveContentElementBody, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Check if user has read permission for any board element. - * @param {string} contentElementId The id of the element. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApi - */ - public elementControllerReadPermission(contentElementId: string, options?: any) { - return BoardElementApiFp(this.configuration).elementControllerReadPermission(contentElementId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update a single content element. - * @param {string} contentElementId The id of the element. - * @param {UpdateElementContentBodyParams} updateElementContentBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardElementApi - */ - public elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any) { - return BoardElementApiFp(this.configuration).elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * BoardSubmissionApi - axios parameter creator - * @export - */ -export const BoardSubmissionApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Create a new element in a submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardSubmissionControllerCreateElement: async (submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options: any = {}): Promise => { - // verify required parameter 'submissionItemId' is not null or undefined - assertParamExists('boardSubmissionControllerCreateElement', 'submissionItemId', submissionItemId) - // verify required parameter 'createContentElementBodyParams' is not null or undefined - assertParamExists('boardSubmissionControllerCreateElement', 'createContentElementBodyParams', createContentElementBodyParams) - const localVarPath = `/board-submissions/{submissionItemId}/elements` - .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(createContentElementBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Delete a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardSubmissionControllerDeleteSubmissionItem: async (submissionItemId: string, options: any = {}): Promise => { - // verify required parameter 'submissionItemId' is not null or undefined - assertParamExists('boardSubmissionControllerDeleteSubmissionItem', 'submissionItemId', submissionItemId) - const localVarPath = `/board-submissions/{submissionItemId}` - .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get a list of submission items by their parent container. - * @param {string} submissionContainerId The id of the submission container. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardSubmissionControllerGetSubmissionItems: async (submissionContainerId: string, options: any = {}): Promise => { - // verify required parameter 'submissionContainerId' is not null or undefined - assertParamExists('boardSubmissionControllerGetSubmissionItems', 'submissionContainerId', submissionContainerId) - const localVarPath = `/board-submissions/{submissionContainerId}` - .replace(`{${"submissionContainerId"}}`, encodeURIComponent(String(submissionContainerId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardSubmissionControllerUpdateSubmissionItem: async (submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options: any = {}): Promise => { - // verify required parameter 'submissionItemId' is not null or undefined - assertParamExists('boardSubmissionControllerUpdateSubmissionItem', 'submissionItemId', submissionItemId) - // verify required parameter 'updateSubmissionItemBodyParams' is not null or undefined - assertParamExists('boardSubmissionControllerUpdateSubmissionItem', 'updateSubmissionItemBodyParams', updateSubmissionItemBodyParams) - const localVarPath = `/board-submissions/{submissionItemId}` - .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(updateSubmissionItemBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * BoardSubmissionApi - functional programming interface - * @export - */ -export const BoardSubmissionApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = BoardSubmissionApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Create a new element in a submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Delete a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get a list of submission items by their parent container. - * @param {string} submissionContainerId The id of the submission container. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerGetSubmissionItems(submissionContainerId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * BoardSubmissionApi - factory interface - * @export - */ -export const BoardSubmissionApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = BoardSubmissionApiFp(configuration) - return { - /** - * - * @summary Create a new element in a submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise { - return localVarFp.boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Delete a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): AxiosPromise { - return localVarFp.boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get a list of submission items by their parent container. - * @param {string} submissionContainerId The id of the submission container. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): AxiosPromise { - return localVarFp.boardSubmissionControllerGetSubmissionItems(submissionContainerId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): AxiosPromise { - return localVarFp.boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * BoardSubmissionApi - interface - * @export - * @interface BoardSubmissionApi - */ -export interface BoardSubmissionApiInterface { - /** - * - * @summary Create a new element in a submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardSubmissionApiInterface - */ - boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Delete a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardSubmissionApiInterface - */ - boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get a list of submission items by their parent container. - * @param {string} submissionContainerId The id of the submission container. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardSubmissionApiInterface - */ - boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): AxiosPromise; - - /** - * - * @summary Update a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardSubmissionApiInterface - */ - boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): AxiosPromise; - -} - -/** - * BoardSubmissionApi - object-oriented interface - * @export - * @class BoardSubmissionApi - * @extends {BaseAPI} - */ -export class BoardSubmissionApi extends BaseAPI implements BoardSubmissionApiInterface { - /** - * - * @summary Create a new element in a submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {CreateContentElementBodyParams} createContentElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardSubmissionApi - */ - public boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any) { - return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Delete a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardSubmissionApi - */ - public boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any) { - return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get a list of submission items by their parent container. - * @param {string} submissionContainerId The id of the submission container. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardSubmissionApi - */ - public boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any) { - return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerGetSubmissionItems(submissionContainerId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update a single submission item. - * @param {string} submissionItemId The id of the submission item. - * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof BoardSubmissionApi - */ - public boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any) { - return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * CollaborativeStorageApi - axios parameter creator - * @export - */ -export const CollaborativeStorageApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Updates the CRUD Permissions(+Share) for a specific Role in a Team - * @param {string} teamId - * @param {string} roleId - * @param {TeamPermissionsBody} teamPermissionsBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - collaborativeStorageControllerUpdateTeamPermissionsForRole: async (teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options: any = {}): Promise => { - // verify required parameter 'teamId' is not null or undefined - assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'teamId', teamId) - // verify required parameter 'roleId' is not null or undefined - assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'roleId', roleId) - // verify required parameter 'teamPermissionsBody' is not null or undefined - assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'teamPermissionsBody', teamPermissionsBody) - const localVarPath = `/collaborative-storage/team/{teamId}/role/{roleId}/permissions` - .replace(`{${"teamId"}}`, encodeURIComponent(String(teamId))) - .replace(`{${"roleId"}}`, encodeURIComponent(String(roleId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(teamPermissionsBody, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * CollaborativeStorageApi - functional programming interface - * @export - */ -export const CollaborativeStorageApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = CollaborativeStorageApiAxiosParamCreator(configuration) - return { - /** - * Updates the CRUD Permissions(+Share) for a specific Role in a Team - * @param {string} teamId - * @param {string} roleId - * @param {TeamPermissionsBody} teamPermissionsBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * CollaborativeStorageApi - factory interface - * @export - */ -export const CollaborativeStorageApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = CollaborativeStorageApiFp(configuration) - return { - /** - * Updates the CRUD Permissions(+Share) for a specific Role in a Team - * @param {string} teamId - * @param {string} roleId - * @param {TeamPermissionsBody} teamPermissionsBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): AxiosPromise { - return localVarFp.collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * CollaborativeStorageApi - interface - * @export - * @interface CollaborativeStorageApi - */ -export interface CollaborativeStorageApiInterface { - /** - * Updates the CRUD Permissions(+Share) for a specific Role in a Team - * @param {string} teamId - * @param {string} roleId - * @param {TeamPermissionsBody} teamPermissionsBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CollaborativeStorageApiInterface - */ - collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): AxiosPromise; - -} - -/** - * CollaborativeStorageApi - object-oriented interface - * @export - * @class CollaborativeStorageApi - * @extends {BaseAPI} - */ -export class CollaborativeStorageApi extends BaseAPI implements CollaborativeStorageApiInterface { - /** - * Updates the CRUD Permissions(+Share) for a specific Role in a Team - * @param {string} teamId - * @param {string} roleId - * @param {TeamPermissionsBody} teamPermissionsBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CollaborativeStorageApi - */ - public collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any) { - return CollaborativeStorageApiFp(this.configuration).collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * CollaborativeTextEditorApi - axios parameter creator - * @export - */ -export const CollaborativeTextEditorApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Delete all etherpad sessions for user - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - collaborativeTextEditorControllerDeleteSessionsByUser: async (options: any = {}): Promise => { - const localVarPath = `/collaborative-text-editor/delete-sessions`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get or create CollaborativeTextEditor for parent - * @param {string} parentId - * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent: async (parentId: string, parentType: CollaborativeTextEditorParentType, options: any = {}): Promise => { - // verify required parameter 'parentId' is not null or undefined - assertParamExists('collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent', 'parentId', parentId) - // verify required parameter 'parentType' is not null or undefined - assertParamExists('collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent', 'parentType', parentType) - const localVarPath = `/collaborative-text-editor/{parentType}/{parentId}` - .replace(`{${"parentId"}}`, encodeURIComponent(String(parentId))) - .replace(`{${"parentType"}}`, encodeURIComponent(String(parentType))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * CollaborativeTextEditorApi - functional programming interface - * @export - */ -export const CollaborativeTextEditorApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = CollaborativeTextEditorApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Delete all etherpad sessions for user - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeTextEditorControllerDeleteSessionsByUser(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get or create CollaborativeTextEditor for parent - * @param {string} parentId - * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * CollaborativeTextEditorApi - factory interface - * @export - */ -export const CollaborativeTextEditorApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = CollaborativeTextEditorApiFp(configuration) - return { - /** - * - * @summary Delete all etherpad sessions for user - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): AxiosPromise { - return localVarFp.collaborativeTextEditorControllerDeleteSessionsByUser(options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get or create CollaborativeTextEditor for parent - * @param {string} parentId - * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): AxiosPromise { - return localVarFp.collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * CollaborativeTextEditorApi - interface - * @export - * @interface CollaborativeTextEditorApi - */ -export interface CollaborativeTextEditorApiInterface { - /** - * - * @summary Delete all etherpad sessions for user - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CollaborativeTextEditorApiInterface - */ - collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): AxiosPromise; - - /** - * - * @summary Get or create CollaborativeTextEditor for parent - * @param {string} parentId - * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CollaborativeTextEditorApiInterface - */ - collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): AxiosPromise; - -} - -/** - * CollaborativeTextEditorApi - object-oriented interface - * @export - * @class CollaborativeTextEditorApi - * @extends {BaseAPI} - */ -export class CollaborativeTextEditorApi extends BaseAPI implements CollaborativeTextEditorApiInterface { - /** - * - * @summary Delete all etherpad sessions for user - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CollaborativeTextEditorApi - */ - public collaborativeTextEditorControllerDeleteSessionsByUser(options?: any) { - return CollaborativeTextEditorApiFp(this.configuration).collaborativeTextEditorControllerDeleteSessionsByUser(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get or create CollaborativeTextEditor for parent - * @param {string} parentId - * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CollaborativeTextEditorApi - */ - public collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any) { - return CollaborativeTextEditorApiFp(this.configuration).collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * CoursesApi - axios parameter creator - * @export - */ -export const CoursesApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {string} courseId The id of the course - * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export - * @param {CourseExportBodyParams} courseExportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerExportCourse: async (courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options: any = {}): Promise => { - // verify required parameter 'courseId' is not null or undefined - assertParamExists('courseControllerExportCourse', 'courseId', courseId) - // verify required parameter 'version' is not null or undefined - assertParamExists('courseControllerExportCourse', 'version', version) - // verify required parameter 'courseExportBodyParams' is not null or undefined - assertParamExists('courseControllerExportCourse', 'courseExportBodyParams', courseExportBodyParams) - const localVarPath = `/courses/{courseId}/export` - .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (version !== undefined) { - localVarQueryParameter['version'] = version; - } - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(courseExportBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerFindForUser: async (skip?: number, limit?: number, options: any = {}): Promise => { - const localVarPath = `/courses`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get permissions for a user in a course. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerGetUserPermissions: async (courseId: string, options: any = {}): Promise => { - // verify required parameter 'courseId' is not null or undefined - assertParamExists('courseControllerGetUserPermissions', 'courseId', courseId) - const localVarPath = `/courses/{courseId}/user-permissions` - .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Imports a course from a Common Cartridge file. - * @param {any} file The Common Cartridge file to import. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerImportCourse: async (file: any, options: any = {}): Promise => { - // verify required parameter 'file' is not null or undefined - assertParamExists('courseControllerImportCourse', 'file', file) - const localVarPath = `/courses/import`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - const localVarFormParams = new ((configuration && configuration.formDataCtor) || FormData)(); - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - if (file !== undefined) { - localVarFormParams.append('file', file as any); - } - - - localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = localVarFormParams; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Stop the synchronization of a course with a group. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerStopSynchronization: async (courseId: string, options: any = {}): Promise => { - // verify required parameter 'courseId' is not null or undefined - assertParamExists('courseControllerStopSynchronization', 'courseId', courseId) - const localVarPath = `/courses/{courseId}/stop-sync` - .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * CoursesApi - functional programming interface - * @export - */ -export const CoursesApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = CoursesApiAxiosParamCreator(configuration) - return { - /** - * - * @param {string} courseId The id of the course - * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export - * @param {CourseExportBodyParams} courseExportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerExportCourse(courseId, version, courseExportBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async courseControllerFindForUser(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerFindForUser(skip, limit, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get permissions for a user in a course. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async courseControllerGetUserPermissions(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerGetUserPermissions(courseId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Imports a course from a Common Cartridge file. - * @param {any} file The Common Cartridge file to import. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async courseControllerImportCourse(file: any, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerImportCourse(file, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Stop the synchronization of a course with a group. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async courseControllerStopSynchronization(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerStopSynchronization(courseId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * CoursesApi - factory interface - * @export - */ -export const CoursesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = CoursesApiFp(configuration) - return { - /** - * - * @param {string} courseId The id of the course - * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export - * @param {CourseExportBodyParams} courseExportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): AxiosPromise { - return localVarFp.courseControllerExportCourse(courseId, version, courseExportBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerFindForUser(skip?: number, limit?: number, options?: any): AxiosPromise { - return localVarFp.courseControllerFindForUser(skip, limit, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get permissions for a user in a course. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerGetUserPermissions(courseId: string, options?: any): AxiosPromise { - return localVarFp.courseControllerGetUserPermissions(courseId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Imports a course from a Common Cartridge file. - * @param {any} file The Common Cartridge file to import. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerImportCourse(file: any, options?: any): AxiosPromise { - return localVarFp.courseControllerImportCourse(file, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Stop the synchronization of a course with a group. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - courseControllerStopSynchronization(courseId: string, options?: any): AxiosPromise { - return localVarFp.courseControllerStopSynchronization(courseId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * CoursesApi - interface - * @export - * @interface CoursesApi - */ -export interface CoursesApiInterface { - /** - * - * @param {string} courseId The id of the course - * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export - * @param {CourseExportBodyParams} courseExportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApiInterface - */ - courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): AxiosPromise; - - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApiInterface - */ - courseControllerFindForUser(skip?: number, limit?: number, options?: any): AxiosPromise; - - /** - * - * @summary Get permissions for a user in a course. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApiInterface - */ - courseControllerGetUserPermissions(courseId: string, options?: any): AxiosPromise; - - /** - * - * @summary Imports a course from a Common Cartridge file. - * @param {any} file The Common Cartridge file to import. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApiInterface - */ - courseControllerImportCourse(file: any, options?: any): AxiosPromise; - - /** - * - * @summary Stop the synchronization of a course with a group. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApiInterface - */ - courseControllerStopSynchronization(courseId: string, options?: any): AxiosPromise; - -} - -/** - * CoursesApi - object-oriented interface - * @export - * @class CoursesApi - * @extends {BaseAPI} - */ -export class CoursesApi extends BaseAPI implements CoursesApiInterface { - /** - * - * @param {string} courseId The id of the course - * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export - * @param {CourseExportBodyParams} courseExportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApi - */ - public courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any) { - return CoursesApiFp(this.configuration).courseControllerExportCourse(courseId, version, courseExportBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApi - */ - public courseControllerFindForUser(skip?: number, limit?: number, options?: any) { - return CoursesApiFp(this.configuration).courseControllerFindForUser(skip, limit, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get permissions for a user in a course. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApi - */ - public courseControllerGetUserPermissions(courseId: string, options?: any) { - return CoursesApiFp(this.configuration).courseControllerGetUserPermissions(courseId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Imports a course from a Common Cartridge file. - * @param {any} file The Common Cartridge file to import. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApi - */ - public courseControllerImportCourse(file: any, options?: any) { - return CoursesApiFp(this.configuration).courseControllerImportCourse(file, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Stop the synchronization of a course with a group. - * @param {string} courseId The id of the course - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof CoursesApi - */ - public courseControllerStopSynchronization(courseId: string, options?: any) { - return CoursesApiFp(this.configuration).courseControllerStopSynchronization(courseId, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * DashboardApi - axios parameter creator - * @export - */ -export const DashboardApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - dashboardControllerFindForUser: async (options: any = {}): Promise => { - const localVarPath = `/dashboard`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {MoveElementParams} moveElementParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - dashboardControllerMoveElement: async (dashboardId: string, moveElementParams: MoveElementParams, options: any = {}): Promise => { - // verify required parameter 'dashboardId' is not null or undefined - assertParamExists('dashboardControllerMoveElement', 'dashboardId', dashboardId) - // verify required parameter 'moveElementParams' is not null or undefined - assertParamExists('dashboardControllerMoveElement', 'moveElementParams', moveElementParams) - const localVarPath = `/dashboard/{dashboardId}/moveElement` - .replace(`{${"dashboardId"}}`, encodeURIComponent(String(dashboardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(moveElementParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {number} x - * @param {number} y - * @param {PatchGroupParams} patchGroupParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - dashboardControllerPatchGroup: async (dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options: any = {}): Promise => { - // verify required parameter 'dashboardId' is not null or undefined - assertParamExists('dashboardControllerPatchGroup', 'dashboardId', dashboardId) - // verify required parameter 'x' is not null or undefined - assertParamExists('dashboardControllerPatchGroup', 'x', x) - // verify required parameter 'y' is not null or undefined - assertParamExists('dashboardControllerPatchGroup', 'y', y) - // verify required parameter 'patchGroupParams' is not null or undefined - assertParamExists('dashboardControllerPatchGroup', 'patchGroupParams', patchGroupParams) - const localVarPath = `/dashboard/{dashboardId}/element` - .replace(`{${"dashboardId"}}`, encodeURIComponent(String(dashboardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (x !== undefined) { - localVarQueryParameter['x'] = x; - } - - if (y !== undefined) { - localVarQueryParameter['y'] = y; - } - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(patchGroupParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * DashboardApi - functional programming interface - * @export - */ -export const DashboardApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = DashboardApiAxiosParamCreator(configuration) - return { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async dashboardControllerFindForUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerFindForUser(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {MoveElementParams} moveElementParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerMoveElement(dashboardId, moveElementParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {number} x - * @param {number} y - * @param {PatchGroupParams} patchGroupParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * DashboardApi - factory interface - * @export - */ -export const DashboardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = DashboardApiFp(configuration) - return { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - dashboardControllerFindForUser(options?: any): AxiosPromise { - return localVarFp.dashboardControllerFindForUser(options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {MoveElementParams} moveElementParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): AxiosPromise { - return localVarFp.dashboardControllerMoveElement(dashboardId, moveElementParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {number} x - * @param {number} y - * @param {PatchGroupParams} patchGroupParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): AxiosPromise { - return localVarFp.dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * DashboardApi - interface - * @export - * @interface DashboardApi - */ -export interface DashboardApiInterface { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DashboardApiInterface - */ - dashboardControllerFindForUser(options?: any): AxiosPromise; - - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {MoveElementParams} moveElementParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DashboardApiInterface - */ - dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): AxiosPromise; - - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {number} x - * @param {number} y - * @param {PatchGroupParams} patchGroupParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DashboardApiInterface - */ - dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): AxiosPromise; - -} - -/** - * DashboardApi - object-oriented interface - * @export - * @class DashboardApi - * @extends {BaseAPI} - */ -export class DashboardApi extends BaseAPI implements DashboardApiInterface { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DashboardApi - */ - public dashboardControllerFindForUser(options?: any) { - return DashboardApiFp(this.configuration).dashboardControllerFindForUser(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {MoveElementParams} moveElementParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DashboardApi - */ - public dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any) { - return DashboardApiFp(this.configuration).dashboardControllerMoveElement(dashboardId, moveElementParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} dashboardId The id of the dashboard. - * @param {number} x - * @param {number} y - * @param {PatchGroupParams} patchGroupParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DashboardApi - */ - public dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any) { - return DashboardApiFp(this.configuration).dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * DefaultApi - axios parameter creator - * @export - */ -export const DefaultApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Useable configuration for clients - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - serverConfigControllerPublicConfig: async (options: any = {}): Promise => { - const localVarPath = `/config/public`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Default route to test public access - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - serverControllerGetHello: async (options: any = {}): Promise => { - const localVarPath = `/`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * DefaultApi - functional programming interface - * @export - */ -export const DefaultApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = DefaultApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Useable configuration for clients - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async serverConfigControllerPublicConfig(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.serverConfigControllerPublicConfig(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Default route to test public access - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async serverControllerGetHello(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.serverControllerGetHello(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * DefaultApi - factory interface - * @export - */ -export const DefaultApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = DefaultApiFp(configuration) - return { - /** - * - * @summary Useable configuration for clients - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - serverConfigControllerPublicConfig(options?: any): AxiosPromise { - return localVarFp.serverConfigControllerPublicConfig(options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Default route to test public access - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - serverControllerGetHello(options?: any): AxiosPromise { - return localVarFp.serverControllerGetHello(options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * DefaultApi - interface - * @export - * @interface DefaultApi - */ -export interface DefaultApiInterface { - /** - * - * @summary Useable configuration for clients - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DefaultApiInterface - */ - serverConfigControllerPublicConfig(options?: any): AxiosPromise; - - /** - * - * @summary Default route to test public access - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DefaultApiInterface - */ - serverControllerGetHello(options?: any): AxiosPromise; - -} - -/** - * DefaultApi - object-oriented interface - * @export - * @class DefaultApi - * @extends {BaseAPI} - */ -export class DefaultApi extends BaseAPI implements DefaultApiInterface { - /** - * - * @summary Useable configuration for clients - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DefaultApi - */ - public serverConfigControllerPublicConfig(options?: any) { - return DefaultApiFp(this.configuration).serverConfigControllerPublicConfig(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Default route to test public access - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof DefaultApi - */ - public serverControllerGetHello(options?: any) { - return DefaultApiFp(this.configuration).serverControllerGetHello(options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * GroupApi - axios parameter creator - * @export - */ -export const GroupApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Get a list of classes and groups of type class for the current user. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {ClassSortQueryType} [sortBy] - * @param {SchoolYearQueryType} [type] - * @param {ClassRequestContext} [calledFrom] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - groupControllerFindClasses: async (skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options: any = {}): Promise => { - const localVarPath = `/groups/class`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if (sortOrder !== undefined) { - localVarQueryParameter['sortOrder'] = sortOrder; - } - - if (sortBy !== undefined) { - localVarQueryParameter['sortBy'] = sortBy; - } - - if (type !== undefined) { - localVarQueryParameter['type'] = type; - } - - if (calledFrom !== undefined) { - localVarQueryParameter['calledFrom'] = calledFrom; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get a list of all groups. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. - * @param {string} [nameQuery] search string for group names. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - groupControllerGetAllGroups: async (skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options: any = {}): Promise => { - const localVarPath = `/groups`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if (availableGroupsForCourseSync !== undefined) { - localVarQueryParameter['availableGroupsForCourseSync'] = availableGroupsForCourseSync; - } - - if (nameQuery !== undefined) { - localVarQueryParameter['nameQuery'] = nameQuery; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get a group by id. - * @param {string} groupId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - groupControllerGetGroup: async (groupId: string, options: any = {}): Promise => { - // verify required parameter 'groupId' is not null or undefined - assertParamExists('groupControllerGetGroup', 'groupId', groupId) - const localVarPath = `/groups/{groupId}` - .replace(`{${"groupId"}}`, encodeURIComponent(String(groupId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * GroupApi - functional programming interface - * @export - */ -export const GroupApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = GroupApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Get a list of classes and groups of type class for the current user. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {ClassSortQueryType} [sortBy] - * @param {SchoolYearQueryType} [type] - * @param {ClassRequestContext} [calledFrom] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get a list of all groups. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. - * @param {string} [nameQuery] search string for group names. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get a group by id. - * @param {string} groupId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async groupControllerGetGroup(groupId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerGetGroup(groupId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * GroupApi - factory interface - * @export - */ -export const GroupApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = GroupApiFp(configuration) - return { - /** - * - * @summary Get a list of classes and groups of type class for the current user. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {ClassSortQueryType} [sortBy] - * @param {SchoolYearQueryType} [type] - * @param {ClassRequestContext} [calledFrom] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): AxiosPromise { - return localVarFp.groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get a list of all groups. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. - * @param {string} [nameQuery] search string for group names. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): AxiosPromise { - return localVarFp.groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get a group by id. - * @param {string} groupId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - groupControllerGetGroup(groupId: string, options?: any): AxiosPromise { - return localVarFp.groupControllerGetGroup(groupId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * GroupApi - interface - * @export - * @interface GroupApi - */ -export interface GroupApiInterface { - /** - * - * @summary Get a list of classes and groups of type class for the current user. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {ClassSortQueryType} [sortBy] - * @param {SchoolYearQueryType} [type] - * @param {ClassRequestContext} [calledFrom] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof GroupApiInterface - */ - groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): AxiosPromise; - - /** - * - * @summary Get a list of all groups. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. - * @param {string} [nameQuery] search string for group names. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof GroupApiInterface - */ - groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): AxiosPromise; - - /** - * - * @summary Get a group by id. - * @param {string} groupId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof GroupApiInterface - */ - groupControllerGetGroup(groupId: string, options?: any): AxiosPromise; - -} - -/** - * GroupApi - object-oriented interface - * @export - * @class GroupApi - * @extends {BaseAPI} - */ -export class GroupApi extends BaseAPI implements GroupApiInterface { - /** - * - * @summary Get a list of classes and groups of type class for the current user. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {ClassSortQueryType} [sortBy] - * @param {SchoolYearQueryType} [type] - * @param {ClassRequestContext} [calledFrom] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof GroupApi - */ - public groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any) { - return GroupApiFp(this.configuration).groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get a list of all groups. - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. - * @param {string} [nameQuery] search string for group names. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof GroupApi - */ - public groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any) { - return GroupApiFp(this.configuration).groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get a group by id. - * @param {string} groupId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof GroupApi - */ - public groupControllerGetGroup(groupId: string, options?: any) { - return GroupApiFp(this.configuration).groupControllerGetGroup(groupId, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * LessonApi - axios parameter creator - * @export - */ -export const LessonApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - lessonControllerDelete: async (lessonId: string, options: any = {}): Promise => { - // verify required parameter 'lessonId' is not null or undefined - assertParamExists('lessonControllerDelete', 'lessonId', lessonId) - const localVarPath = `/lessons/{lessonId}` - .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} courseId The id of the course the lesson belongs to. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - lessonControllerGetCourseLessons: async (courseId: string, options: any = {}): Promise => { - // verify required parameter 'courseId' is not null or undefined - assertParamExists('lessonControllerGetCourseLessons', 'courseId', courseId) - const localVarPath = `/lessons/course/{courseId}` - .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - lessonControllerGetLesson: async (lessonId: string, options: any = {}): Promise => { - // verify required parameter 'lessonId' is not null or undefined - assertParamExists('lessonControllerGetLesson', 'lessonId', lessonId) - const localVarPath = `/lessons/{lessonId}` - .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * LessonApi - functional programming interface - * @export - */ -export const LessonApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = LessonApiAxiosParamCreator(configuration) - return { - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async lessonControllerDelete(lessonId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerDelete(lessonId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} courseId The id of the course the lesson belongs to. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async lessonControllerGetCourseLessons(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerGetCourseLessons(courseId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async lessonControllerGetLesson(lessonId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerGetLesson(lessonId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * LessonApi - factory interface - * @export - */ -export const LessonApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = LessonApiFp(configuration) - return { - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - lessonControllerDelete(lessonId: string, options?: any): AxiosPromise { - return localVarFp.lessonControllerDelete(lessonId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} courseId The id of the course the lesson belongs to. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - lessonControllerGetCourseLessons(courseId: string, options?: any): AxiosPromise { - return localVarFp.lessonControllerGetCourseLessons(courseId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - lessonControllerGetLesson(lessonId: string, options?: any): AxiosPromise { - return localVarFp.lessonControllerGetLesson(lessonId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * LessonApi - interface - * @export - * @interface LessonApi - */ -export interface LessonApiInterface { - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof LessonApiInterface - */ - lessonControllerDelete(lessonId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} courseId The id of the course the lesson belongs to. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof LessonApiInterface - */ - lessonControllerGetCourseLessons(courseId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof LessonApiInterface - */ - lessonControllerGetLesson(lessonId: string, options?: any): AxiosPromise; - -} - -/** - * LessonApi - object-oriented interface - * @export - * @class LessonApi - * @extends {BaseAPI} - */ -export class LessonApi extends BaseAPI implements LessonApiInterface { - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof LessonApi - */ - public lessonControllerDelete(lessonId: string, options?: any) { - return LessonApiFp(this.configuration).lessonControllerDelete(lessonId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} courseId The id of the course the lesson belongs to. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof LessonApi - */ - public lessonControllerGetCourseLessons(courseId: string, options?: any) { - return LessonApiFp(this.configuration).lessonControllerGetCourseLessons(courseId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} lessonId The id of the lesson. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof LessonApi - */ - public lessonControllerGetLesson(lessonId: string, options?: any) { - return LessonApiFp(this.configuration).lessonControllerGetLesson(lessonId, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * MeApi - axios parameter creator - * @export - */ -export const MeApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Resolve jwt and response informations about the owner of the jwt. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - meControllerMe: async (options: any = {}): Promise => { - const localVarPath = `/me`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * MeApi - functional programming interface - * @export - */ -export const MeApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = MeApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Resolve jwt and response informations about the owner of the jwt. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async meControllerMe(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.meControllerMe(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * MeApi - factory interface - * @export - */ -export const MeApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = MeApiFp(configuration) - return { - /** - * - * @summary Resolve jwt and response informations about the owner of the jwt. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - meControllerMe(options?: any): AxiosPromise { - return localVarFp.meControllerMe(options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * MeApi - interface - * @export - * @interface MeApi - */ -export interface MeApiInterface { - /** - * - * @summary Resolve jwt and response informations about the owner of the jwt. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MeApiInterface - */ - meControllerMe(options?: any): AxiosPromise; - -} - -/** - * MeApi - object-oriented interface - * @export - * @class MeApi - * @extends {BaseAPI} - */ -export class MeApi extends BaseAPI implements MeApiInterface { - /** - * - * @summary Resolve jwt and response informations about the owner of the jwt. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MeApi - */ - public meControllerMe(options?: any) { - return MeApiFp(this.configuration).meControllerMe(options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * MediaBoardApi - axios parameter creator - * @export - */ -export const MediaBoardApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Collapse available line in media board. - * @param {string} boardId The id of the board. - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerCollapseMediaAvailableLine: async (boardId: string, collapsableBodyParams: CollapsableBodyParams, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('mediaBoardControllerCollapseMediaAvailableLine', 'boardId', boardId) - // verify required parameter 'collapsableBodyParams' is not null or undefined - assertParamExists('mediaBoardControllerCollapseMediaAvailableLine', 'collapsableBodyParams', collapsableBodyParams) - const localVarPath = `/media-boards/{boardId}/media-available-line/collapse` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(collapsableBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Create a new line on a media board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerCreateLine: async (boardId: string, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('mediaBoardControllerCreateLine', 'boardId', boardId) - const localVarPath = `/media-boards/{boardId}/media-lines` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get the media available line for the board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerGetMediaAvailableLine: async (boardId: string, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('mediaBoardControllerGetMediaAvailableLine', 'boardId', boardId) - const localVarPath = `/media-boards/{boardId}/media-available-line` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get the media shelf of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerGetMediaBoardForUser: async (options: any = {}): Promise => { - const localVarPath = `/media-boards/me`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Set layout for media board. - * @param {string} boardId The id of the board. - * @param {LayoutBodyParams} layoutBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerSetMediaBoardLayout: async (boardId: string, layoutBodyParams: LayoutBodyParams, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('mediaBoardControllerSetMediaBoardLayout', 'boardId', boardId) - // verify required parameter 'layoutBodyParams' is not null or undefined - assertParamExists('mediaBoardControllerSetMediaBoardLayout', 'layoutBodyParams', layoutBodyParams) - const localVarPath = `/media-boards/{boardId}/layout` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(layoutBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update the color of available line in media board. - * @param {string} boardId The id of the board. - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerUpdateMediaAvailableLineColor: async (boardId: string, colorBodyParams: ColorBodyParams, options: any = {}): Promise => { - // verify required parameter 'boardId' is not null or undefined - assertParamExists('mediaBoardControllerUpdateMediaAvailableLineColor', 'boardId', boardId) - // verify required parameter 'colorBodyParams' is not null or undefined - assertParamExists('mediaBoardControllerUpdateMediaAvailableLineColor', 'colorBodyParams', colorBodyParams) - const localVarPath = `/media-boards/{boardId}/media-available-line/color` - .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(colorBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * MediaBoardApi - functional programming interface - * @export - */ -export const MediaBoardApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = MediaBoardApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Collapse available line in media board. - * @param {string} boardId The id of the board. - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Create a new line on a media board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaBoardControllerCreateLine(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerCreateLine(boardId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get the media available line for the board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerGetMediaAvailableLine(boardId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get the media shelf of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaBoardControllerGetMediaBoardForUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerGetMediaBoardForUser(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Set layout for media board. - * @param {string} boardId The id of the board. - * @param {LayoutBodyParams} layoutBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update the color of available line in media board. - * @param {string} boardId The id of the board. - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * MediaBoardApi - factory interface - * @export - */ -export const MediaBoardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = MediaBoardApiFp(configuration) - return { - /** - * - * @summary Collapse available line in media board. - * @param {string} boardId The id of the board. - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Create a new line on a media board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerCreateLine(boardId: string, options?: any): AxiosPromise { - return localVarFp.mediaBoardControllerCreateLine(boardId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get the media available line for the board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): AxiosPromise { - return localVarFp.mediaBoardControllerGetMediaAvailableLine(boardId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get the media shelf of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerGetMediaBoardForUser(options?: any): AxiosPromise { - return localVarFp.mediaBoardControllerGetMediaBoardForUser(options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Set layout for media board. - * @param {string} boardId The id of the board. - * @param {LayoutBodyParams} layoutBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update the color of available line in media board. - * @param {string} boardId The id of the board. - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * MediaBoardApi - interface - * @export - * @interface MediaBoardApi - */ -export interface MediaBoardApiInterface { - /** - * - * @summary Collapse available line in media board. - * @param {string} boardId The id of the board. - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApiInterface - */ - mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Create a new line on a media board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApiInterface - */ - mediaBoardControllerCreateLine(boardId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get the media available line for the board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApiInterface - */ - mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get the media shelf of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApiInterface - */ - mediaBoardControllerGetMediaBoardForUser(options?: any): AxiosPromise; - - /** - * - * @summary Set layout for media board. - * @param {string} boardId The id of the board. - * @param {LayoutBodyParams} layoutBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApiInterface - */ - mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Update the color of available line in media board. - * @param {string} boardId The id of the board. - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApiInterface - */ - mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise; - -} - -/** - * MediaBoardApi - object-oriented interface - * @export - * @class MediaBoardApi - * @extends {BaseAPI} - */ -export class MediaBoardApi extends BaseAPI implements MediaBoardApiInterface { - /** - * - * @summary Collapse available line in media board. - * @param {string} boardId The id of the board. - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApi - */ - public mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any) { - return MediaBoardApiFp(this.configuration).mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Create a new line on a media board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApi - */ - public mediaBoardControllerCreateLine(boardId: string, options?: any) { - return MediaBoardApiFp(this.configuration).mediaBoardControllerCreateLine(boardId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get the media available line for the board. - * @param {string} boardId The id of the board. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApi - */ - public mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any) { - return MediaBoardApiFp(this.configuration).mediaBoardControllerGetMediaAvailableLine(boardId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get the media shelf of the user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApi - */ - public mediaBoardControllerGetMediaBoardForUser(options?: any) { - return MediaBoardApiFp(this.configuration).mediaBoardControllerGetMediaBoardForUser(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Set layout for media board. - * @param {string} boardId The id of the board. - * @param {LayoutBodyParams} layoutBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApi - */ - public mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any) { - return MediaBoardApiFp(this.configuration).mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update the color of available line in media board. - * @param {string} boardId The id of the board. - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaBoardApi - */ - public mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any) { - return MediaBoardApiFp(this.configuration).mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * MediaElementApi - axios parameter creator - * @export - */ -export const MediaElementApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Create a new element. - * @param {CreateMediaElementBodyParams} createMediaElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaElementControllerCreateElement: async (createMediaElementBodyParams: CreateMediaElementBodyParams, options: any = {}): Promise => { - // verify required parameter 'createMediaElementBodyParams' is not null or undefined - assertParamExists('mediaElementControllerCreateElement', 'createMediaElementBodyParams', createMediaElementBodyParams) - const localVarPath = `/media-elements`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(createMediaElementBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Delete a single element. - * @param {string} elementId The id of the element - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaElementControllerDeleteElement: async (elementId: string, options: any = {}): Promise => { - // verify required parameter 'elementId' is not null or undefined - assertParamExists('mediaElementControllerDeleteElement', 'elementId', elementId) - const localVarPath = `/media-elements/{elementId}` - .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Move a single element. - * @param {string} elementId The id of the element - * @param {MoveElementBodyParams} moveElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaElementControllerMoveElement: async (elementId: string, moveElementBodyParams: MoveElementBodyParams, options: any = {}): Promise => { - // verify required parameter 'elementId' is not null or undefined - assertParamExists('mediaElementControllerMoveElement', 'elementId', elementId) - // verify required parameter 'moveElementBodyParams' is not null or undefined - assertParamExists('mediaElementControllerMoveElement', 'moveElementBodyParams', moveElementBodyParams) - const localVarPath = `/media-elements/{elementId}/position` - .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(moveElementBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * MediaElementApi - functional programming interface - * @export - */ -export const MediaElementApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = MediaElementApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Create a new element. - * @param {CreateMediaElementBodyParams} createMediaElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerCreateElement(createMediaElementBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Delete a single element. - * @param {string} elementId The id of the element - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaElementControllerDeleteElement(elementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerDeleteElement(elementId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Move a single element. - * @param {string} elementId The id of the element - * @param {MoveElementBodyParams} moveElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerMoveElement(elementId, moveElementBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * MediaElementApi - factory interface - * @export - */ -export const MediaElementApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = MediaElementApiFp(configuration) - return { - /** - * - * @summary Create a new element. - * @param {CreateMediaElementBodyParams} createMediaElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaElementControllerCreateElement(createMediaElementBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Delete a single element. - * @param {string} elementId The id of the element - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaElementControllerDeleteElement(elementId: string, options?: any): AxiosPromise { - return localVarFp.mediaElementControllerDeleteElement(elementId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Move a single element. - * @param {string} elementId The id of the element - * @param {MoveElementBodyParams} moveElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaElementControllerMoveElement(elementId, moveElementBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * MediaElementApi - interface - * @export - * @interface MediaElementApi - */ -export interface MediaElementApiInterface { - /** - * - * @summary Create a new element. - * @param {CreateMediaElementBodyParams} createMediaElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaElementApiInterface - */ - mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Delete a single element. - * @param {string} elementId The id of the element - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaElementApiInterface - */ - mediaElementControllerDeleteElement(elementId: string, options?: any): AxiosPromise; - - /** - * - * @summary Move a single element. - * @param {string} elementId The id of the element - * @param {MoveElementBodyParams} moveElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaElementApiInterface - */ - mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): AxiosPromise; - -} - -/** - * MediaElementApi - object-oriented interface - * @export - * @class MediaElementApi - * @extends {BaseAPI} - */ -export class MediaElementApi extends BaseAPI implements MediaElementApiInterface { - /** - * - * @summary Create a new element. - * @param {CreateMediaElementBodyParams} createMediaElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaElementApi - */ - public mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any) { - return MediaElementApiFp(this.configuration).mediaElementControllerCreateElement(createMediaElementBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Delete a single element. - * @param {string} elementId The id of the element - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaElementApi - */ - public mediaElementControllerDeleteElement(elementId: string, options?: any) { - return MediaElementApiFp(this.configuration).mediaElementControllerDeleteElement(elementId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Move a single element. - * @param {string} elementId The id of the element - * @param {MoveElementBodyParams} moveElementBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaElementApi - */ - public mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any) { - return MediaElementApiFp(this.configuration).mediaElementControllerMoveElement(elementId, moveElementBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * MediaLineApi - axios parameter creator - * @export - */ -export const MediaLineApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Collapse available line in media board. - * @param {string} lineId The id of the line - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerCollapseMediaLine: async (lineId: string, collapsableBodyParams: CollapsableBodyParams, options: any = {}): Promise => { - // verify required parameter 'lineId' is not null or undefined - assertParamExists('mediaLineControllerCollapseMediaLine', 'lineId', lineId) - // verify required parameter 'collapsableBodyParams' is not null or undefined - assertParamExists('mediaLineControllerCollapseMediaLine', 'collapsableBodyParams', collapsableBodyParams) - const localVarPath = `/media-lines/{lineId}/collapse` - .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(collapsableBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Delete a single line. - * @param {string} lineId The id of the line - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerDeleteLine: async (lineId: string, options: any = {}): Promise => { - // verify required parameter 'lineId' is not null or undefined - assertParamExists('mediaLineControllerDeleteLine', 'lineId', lineId) - const localVarPath = `/media-lines/{lineId}` - .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Move a single line. - * @param {string} lineId The id of the line - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerMoveLine: async (lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options: any = {}): Promise => { - // verify required parameter 'lineId' is not null or undefined - assertParamExists('mediaLineControllerMoveLine', 'lineId', lineId) - // verify required parameter 'moveColumnBodyParams' is not null or undefined - assertParamExists('mediaLineControllerMoveLine', 'moveColumnBodyParams', moveColumnBodyParams) - const localVarPath = `/media-lines/{lineId}/position` - .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(moveColumnBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update the color of a single line. - * @param {string} lineId The id of the line - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerUpdateBackgroundColor: async (lineId: string, colorBodyParams: ColorBodyParams, options: any = {}): Promise => { - // verify required parameter 'lineId' is not null or undefined - assertParamExists('mediaLineControllerUpdateBackgroundColor', 'lineId', lineId) - // verify required parameter 'colorBodyParams' is not null or undefined - assertParamExists('mediaLineControllerUpdateBackgroundColor', 'colorBodyParams', colorBodyParams) - const localVarPath = `/media-lines/{lineId}/color` - .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(colorBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Update the title of a single line. - * @param {string} lineId The id of the line - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerUpdateLineTitle: async (lineId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { - // verify required parameter 'lineId' is not null or undefined - assertParamExists('mediaLineControllerUpdateLineTitle', 'lineId', lineId) - // verify required parameter 'renameBodyParams' is not null or undefined - assertParamExists('mediaLineControllerUpdateLineTitle', 'renameBodyParams', renameBodyParams) - const localVarPath = `/media-lines/{lineId}/title` - .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * MediaLineApi - functional programming interface - * @export - */ -export const MediaLineApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = MediaLineApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Collapse available line in media board. - * @param {string} lineId The id of the line - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Delete a single line. - * @param {string} lineId The id of the line - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaLineControllerDeleteLine(lineId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerDeleteLine(lineId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Move a single line. - * @param {string} lineId The id of the line - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update the color of a single line. - * @param {string} lineId The id of the line - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Update the title of a single line. - * @param {string} lineId The id of the line - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * MediaLineApi - factory interface - * @export - */ -export const MediaLineApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = MediaLineApiFp(configuration) - return { - /** - * - * @summary Collapse available line in media board. - * @param {string} lineId The id of the line - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Delete a single line. - * @param {string} lineId The id of the line - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerDeleteLine(lineId: string, options?: any): AxiosPromise { - return localVarFp.mediaLineControllerDeleteLine(lineId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Move a single line. - * @param {string} lineId The id of the line - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update the color of a single line. - * @param {string} lineId The id of the line - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Update the title of a single line. - * @param {string} lineId The id of the line - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { - return localVarFp.mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * MediaLineApi - interface - * @export - * @interface MediaLineApi - */ -export interface MediaLineApiInterface { - /** - * - * @summary Collapse available line in media board. - * @param {string} lineId The id of the line - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApiInterface - */ - mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Delete a single line. - * @param {string} lineId The id of the line - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApiInterface - */ - mediaLineControllerDeleteLine(lineId: string, options?: any): AxiosPromise; - - /** - * - * @summary Move a single line. - * @param {string} lineId The id of the line - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApiInterface - */ - mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Update the color of a single line. - * @param {string} lineId The id of the line - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApiInterface - */ - mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Update the title of a single line. - * @param {string} lineId The id of the line - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApiInterface - */ - mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; - -} - -/** - * MediaLineApi - object-oriented interface - * @export - * @class MediaLineApi - * @extends {BaseAPI} - */ -export class MediaLineApi extends BaseAPI implements MediaLineApiInterface { - /** - * - * @summary Collapse available line in media board. - * @param {string} lineId The id of the line - * @param {CollapsableBodyParams} collapsableBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApi - */ - public mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any) { - return MediaLineApiFp(this.configuration).mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Delete a single line. - * @param {string} lineId The id of the line - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApi - */ - public mediaLineControllerDeleteLine(lineId: string, options?: any) { - return MediaLineApiFp(this.configuration).mediaLineControllerDeleteLine(lineId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Move a single line. - * @param {string} lineId The id of the line - * @param {MoveColumnBodyParams} moveColumnBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApi - */ - public mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any) { - return MediaLineApiFp(this.configuration).mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update the color of a single line. - * @param {string} lineId The id of the line - * @param {ColorBodyParams} colorBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApi - */ - public mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any) { - return MediaLineApiFp(this.configuration).mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Update the title of a single line. - * @param {string} lineId The id of the line - * @param {RenameBodyParams} renameBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MediaLineApi - */ - public mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any) { - return MediaLineApiFp(this.configuration).mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * MetaTagExtractorApi - axios parameter creator - * @export - */ -export const MetaTagExtractorApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary return extract meta tags - * @param {GetMetaTagDataBody} getMetaTagDataBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - metaTagExtractorControllerGetMetaTags: async (getMetaTagDataBody: GetMetaTagDataBody, options: any = {}): Promise => { - // verify required parameter 'getMetaTagDataBody' is not null or undefined - assertParamExists('metaTagExtractorControllerGetMetaTags', 'getMetaTagDataBody', getMetaTagDataBody) - const localVarPath = `/meta-tag-extractor`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(getMetaTagDataBody, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * MetaTagExtractorApi - functional programming interface - * @export - */ -export const MetaTagExtractorApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = MetaTagExtractorApiAxiosParamCreator(configuration) - return { - /** - * - * @summary return extract meta tags - * @param {GetMetaTagDataBody} getMetaTagDataBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * MetaTagExtractorApi - factory interface - * @export - */ -export const MetaTagExtractorApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = MetaTagExtractorApiFp(configuration) - return { - /** - * - * @summary return extract meta tags - * @param {GetMetaTagDataBody} getMetaTagDataBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): AxiosPromise { - return localVarFp.metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * MetaTagExtractorApi - interface - * @export - * @interface MetaTagExtractorApi - */ -export interface MetaTagExtractorApiInterface { - /** - * - * @summary return extract meta tags - * @param {GetMetaTagDataBody} getMetaTagDataBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MetaTagExtractorApiInterface - */ - metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): AxiosPromise; - -} - -/** - * MetaTagExtractorApi - object-oriented interface - * @export - * @class MetaTagExtractorApi - * @extends {BaseAPI} - */ -export class MetaTagExtractorApi extends BaseAPI implements MetaTagExtractorApiInterface { - /** - * - * @summary return extract meta tags - * @param {GetMetaTagDataBody} getMetaTagDataBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof MetaTagExtractorApi - */ - public metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any) { - return MetaTagExtractorApiFp(this.configuration).metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * NewsApi - axios parameter creator - * @export - */ -export const NewsApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Create a news by a user in a given scope (school or team). - * @param {CreateNewsParams} createNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerCreate: async (createNewsParams: CreateNewsParams, options: any = {}): Promise => { - // verify required parameter 'createNewsParams' is not null or undefined - assertParamExists('newsControllerCreate', 'createNewsParams', createNewsParams) - const localVarPath = `/news`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(createNewsParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Delete a news. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerDelete: async (newsId: string, options: any = {}): Promise => { - // verify required parameter 'newsId' is not null or undefined - assertParamExists('newsControllerDelete', 'newsId', newsId) - const localVarPath = `/news/{newsId}` - .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Responds with all news for a user. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerFindAll: async (targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options: any = {}): Promise => { - const localVarPath = `/news`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (targetModel !== undefined) { - localVarQueryParameter['targetModel'] = targetModel; - } - - if (targetId !== undefined) { - localVarQueryParameter['targetId'] = targetId; - } - - if (unpublished !== undefined) { - localVarQueryParameter['unpublished'] = unpublished; - } - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerFindOne: async (newsId: string, options: any = {}): Promise => { - // verify required parameter 'newsId' is not null or undefined - assertParamExists('newsControllerFindOne', 'newsId', newsId) - const localVarPath = `/news/{newsId}` - .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Update properties of a news. - * @param {string} newsId The id of the news. - * @param {UpdateNewsParams} updateNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerUpdate: async (newsId: string, updateNewsParams: UpdateNewsParams, options: any = {}): Promise => { - // verify required parameter 'newsId' is not null or undefined - assertParamExists('newsControllerUpdate', 'newsId', newsId) - // verify required parameter 'updateNewsParams' is not null or undefined - assertParamExists('newsControllerUpdate', 'updateNewsParams', updateNewsParams) - const localVarPath = `/news/{newsId}` - .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(updateNewsParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Responds with news of a given team for a user. - * @param {string} teamId The id of the team. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - teamNewsControllerFindAllForTeam: async (teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options: any = {}): Promise => { - // verify required parameter 'teamId' is not null or undefined - assertParamExists('teamNewsControllerFindAllForTeam', 'teamId', teamId) - const localVarPath = `/team/{teamId}/news` - .replace(`{${"teamId"}}`, encodeURIComponent(String(teamId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (targetModel !== undefined) { - localVarQueryParameter['targetModel'] = targetModel; - } - - if (targetId !== undefined) { - localVarQueryParameter['targetId'] = targetId; - } - - if (unpublished !== undefined) { - localVarQueryParameter['unpublished'] = unpublished; - } - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * NewsApi - functional programming interface - * @export - */ -export const NewsApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = NewsApiAxiosParamCreator(configuration) - return { - /** - * Create a news by a user in a given scope (school or team). - * @param {CreateNewsParams} createNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerCreate(createNewsParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Delete a news. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async newsControllerDelete(newsId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerDelete(newsId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Responds with all news for a user. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async newsControllerFindOne(newsId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerFindOne(newsId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Update properties of a news. - * @param {string} newsId The id of the news. - * @param {UpdateNewsParams} updateNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerUpdate(newsId, updateNewsParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Responds with news of a given team for a user. - * @param {string} teamId The id of the team. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * NewsApi - factory interface - * @export - */ -export const NewsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = NewsApiFp(configuration) - return { - /** - * Create a news by a user in a given scope (school or team). - * @param {CreateNewsParams} createNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): AxiosPromise { - return localVarFp.newsControllerCreate(createNewsParams, options).then((request) => request(axios, basePath)); - }, - /** - * Delete a news. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerDelete(newsId: string, options?: any): AxiosPromise { - return localVarFp.newsControllerDelete(newsId, options).then((request) => request(axios, basePath)); - }, - /** - * Responds with all news for a user. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise { - return localVarFp.newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options).then((request) => request(axios, basePath)); - }, - /** - * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerFindOne(newsId: string, options?: any): AxiosPromise { - return localVarFp.newsControllerFindOne(newsId, options).then((request) => request(axios, basePath)); - }, - /** - * Update properties of a news. - * @param {string} newsId The id of the news. - * @param {UpdateNewsParams} updateNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): AxiosPromise { - return localVarFp.newsControllerUpdate(newsId, updateNewsParams, options).then((request) => request(axios, basePath)); - }, - /** - * Responds with news of a given team for a user. - * @param {string} teamId The id of the team. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise { - return localVarFp.teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * NewsApi - interface - * @export - * @interface NewsApi - */ -export interface NewsApiInterface { - /** - * Create a news by a user in a given scope (school or team). - * @param {CreateNewsParams} createNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApiInterface - */ - newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): AxiosPromise; - - /** - * Delete a news. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApiInterface - */ - newsControllerDelete(newsId: string, options?: any): AxiosPromise; - - /** - * Responds with all news for a user. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApiInterface - */ - newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise; - - /** - * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApiInterface - */ - newsControllerFindOne(newsId: string, options?: any): AxiosPromise; - - /** - * Update properties of a news. - * @param {string} newsId The id of the news. - * @param {UpdateNewsParams} updateNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApiInterface - */ - newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): AxiosPromise; - - /** - * Responds with news of a given team for a user. - * @param {string} teamId The id of the team. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApiInterface - */ - teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise; - -} - -/** - * NewsApi - object-oriented interface - * @export - * @class NewsApi - * @extends {BaseAPI} - */ -export class NewsApi extends BaseAPI implements NewsApiInterface { - /** - * Create a news by a user in a given scope (school or team). - * @param {CreateNewsParams} createNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApi - */ - public newsControllerCreate(createNewsParams: CreateNewsParams, options?: any) { - return NewsApiFp(this.configuration).newsControllerCreate(createNewsParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Delete a news. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApi - */ - public newsControllerDelete(newsId: string, options?: any) { - return NewsApiFp(this.configuration).newsControllerDelete(newsId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Responds with all news for a user. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApi - */ - public newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any) { - return NewsApiFp(this.configuration).newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. - * @param {string} newsId The id of the news. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApi - */ - public newsControllerFindOne(newsId: string, options?: any) { - return NewsApiFp(this.configuration).newsControllerFindOne(newsId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Update properties of a news. - * @param {string} newsId The id of the news. - * @param {UpdateNewsParams} updateNewsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApi - */ - public newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any) { - return NewsApiFp(this.configuration).newsControllerUpdate(newsId, updateNewsParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Responds with news of a given team for a user. - * @param {string} teamId The id of the team. - * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related - * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) - * @param {boolean} [unpublished] Flag that filters if the news should be published or not - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof NewsApi - */ - public teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any) { - return NewsApiFp(this.configuration).teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * Oauth2Api - axios parameter creator - * @export - */ -export const Oauth2ApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerAcceptLogoutRequest: async (challenge: string, options: any = {}): Promise => { - // verify required parameter 'challenge' is not null or undefined - assertParamExists('oauthProviderControllerAcceptLogoutRequest', 'challenge', challenge) - const localVarPath = `/oauth2/logoutRequest/{challenge}` - .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {OauthClientCreateBody} oauthClientCreateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerCreateOAuth2Client: async (oauthClientCreateBody: OauthClientCreateBody, options: any = {}): Promise => { - // verify required parameter 'oauthClientCreateBody' is not null or undefined - assertParamExists('oauthProviderControllerCreateOAuth2Client', 'oauthClientCreateBody', oauthClientCreateBody) - const localVarPath = `/oauth2/clients`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(oauthClientCreateBody, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerDeleteOAuth2Client: async (id: string, options: any = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('oauthProviderControllerDeleteOAuth2Client', 'id', id) - const localVarPath = `/oauth2/clients/{id}` - .replace(`{${"id"}}`, encodeURIComponent(String(id))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerGetConsentRequest: async (challenge: string, options: any = {}): Promise => { - // verify required parameter 'challenge' is not null or undefined - assertParamExists('oauthProviderControllerGetConsentRequest', 'challenge', challenge) - const localVarPath = `/oauth2/consentRequest/{challenge}` - .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerGetLoginRequest: async (challenge: string, options: any = {}): Promise => { - // verify required parameter 'challenge' is not null or undefined - assertParamExists('oauthProviderControllerGetLoginRequest', 'challenge', challenge) - const localVarPath = `/oauth2/loginRequest/{challenge}` - .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerGetOAuth2Client: async (id: string, options: any = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('oauthProviderControllerGetOAuth2Client', 'id', id) - const localVarPath = `/oauth2/clients/{id}` - .replace(`{${"id"}}`, encodeURIComponent(String(id))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerListConsentSessions: async (options: any = {}): Promise => { - const localVarPath = `/oauth2/auth/sessions/consent`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. - * @param {number} offset The offset from where to start looking. - * @param {string} clientName The name of the clients to filter by. - * @param {string} owner The owner of the clients to filter by. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerListOAuth2Clients: async (limit: number, offset: number, clientName: string, owner: string, options: any = {}): Promise => { - // verify required parameter 'limit' is not null or undefined - assertParamExists('oauthProviderControllerListOAuth2Clients', 'limit', limit) - // verify required parameter 'offset' is not null or undefined - assertParamExists('oauthProviderControllerListOAuth2Clients', 'offset', offset) - // verify required parameter 'clientName' is not null or undefined - assertParamExists('oauthProviderControllerListOAuth2Clients', 'clientName', clientName) - // verify required parameter 'owner' is not null or undefined - assertParamExists('oauthProviderControllerListOAuth2Clients', 'owner', owner) - const localVarPath = `/oauth2/clients` - .replace(`{${"limit"}}`, encodeURIComponent(String(limit))) - .replace(`{${"offset"}}`, encodeURIComponent(String(offset))) - .replace(`{${"client_name"}}`, encodeURIComponent(String(clientName))) - .replace(`{${"owner"}}`, encodeURIComponent(String(owner))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} challenge The login challenge. - * @param {ConsentRequestBody} consentRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerPatchConsentRequest: async (challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options: any = {}): Promise => { - // verify required parameter 'challenge' is not null or undefined - assertParamExists('oauthProviderControllerPatchConsentRequest', 'challenge', challenge) - // verify required parameter 'consentRequestBody' is not null or undefined - assertParamExists('oauthProviderControllerPatchConsentRequest', 'consentRequestBody', consentRequestBody) - const localVarPath = `/oauth2/consentRequest/{challenge}` - .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (accept !== undefined) { - localVarQueryParameter['accept'] = accept; - } - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(consentRequestBody, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} challenge The login challenge. - * @param {LoginRequestBody} loginRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerPatchLoginRequest: async (challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options: any = {}): Promise => { - // verify required parameter 'challenge' is not null or undefined - assertParamExists('oauthProviderControllerPatchLoginRequest', 'challenge', challenge) - // verify required parameter 'loginRequestBody' is not null or undefined - assertParamExists('oauthProviderControllerPatchLoginRequest', 'loginRequestBody', loginRequestBody) - const localVarPath = `/oauth2/loginRequest/{challenge}` - .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (accept !== undefined) { - localVarQueryParameter['accept'] = accept; - } - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(loginRequestBody, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} client The Oauth2 client id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerRevokeConsentSession: async (client: string, options: any = {}): Promise => { - // verify required parameter 'client' is not null or undefined - assertParamExists('oauthProviderControllerRevokeConsentSession', 'client', client) - const localVarPath = `/oauth2/auth/sessions/consent`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (client !== undefined) { - localVarQueryParameter['client'] = client; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {OauthClientUpdateBody} oauthClientUpdateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerUpdateOAuth2Client: async (id: string, oauthClientUpdateBody: OauthClientUpdateBody, options: any = {}): Promise => { - // verify required parameter 'id' is not null or undefined - assertParamExists('oauthProviderControllerUpdateOAuth2Client', 'id', id) - // verify required parameter 'oauthClientUpdateBody' is not null or undefined - assertParamExists('oauthProviderControllerUpdateOAuth2Client', 'oauthClientUpdateBody', oauthClientUpdateBody) - const localVarPath = `/oauth2/clients/{id}` - .replace(`{${"id"}}`, encodeURIComponent(String(id))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(oauthClientUpdateBody, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * Oauth2Api - functional programming interface - * @export - */ -export const Oauth2ApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = Oauth2ApiAxiosParamCreator(configuration) - return { - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerAcceptLogoutRequest(challenge, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {OauthClientCreateBody} oauthClientCreateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerDeleteOAuth2Client(id, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerGetConsentRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetConsentRequest(challenge, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerGetLoginRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetLoginRequest(challenge, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerGetOAuth2Client(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetOAuth2Client(id, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerListConsentSessions(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerListConsentSessions(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. - * @param {number} offset The offset from where to start looking. - * @param {string} clientName The name of the clients to filter by. - * @param {string} owner The owner of the clients to filter by. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} challenge The login challenge. - * @param {ConsentRequestBody} consentRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} challenge The login challenge. - * @param {LoginRequestBody} loginRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} client The Oauth2 client id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerRevokeConsentSession(client: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerRevokeConsentSession(client, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {OauthClientUpdateBody} oauthClientUpdateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * Oauth2Api - factory interface - * @export - */ -export const Oauth2ApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = Oauth2ApiFp(configuration) - return { - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerAcceptLogoutRequest(challenge, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {OauthClientCreateBody} oauthClientCreateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerDeleteOAuth2Client(id, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerGetConsentRequest(challenge: string, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerGetConsentRequest(challenge, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerGetLoginRequest(challenge: string, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerGetLoginRequest(challenge, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerGetOAuth2Client(id: string, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerGetOAuth2Client(id, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerListConsentSessions(options?: any): AxiosPromise> { - return localVarFp.oauthProviderControllerListConsentSessions(options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. - * @param {number} offset The offset from where to start looking. - * @param {string} clientName The name of the clients to filter by. - * @param {string} owner The owner of the clients to filter by. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): AxiosPromise> { - return localVarFp.oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} challenge The login challenge. - * @param {ConsentRequestBody} consentRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} challenge The login challenge. - * @param {LoginRequestBody} loginRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} client The Oauth2 client id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerRevokeConsentSession(client: string, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerRevokeConsentSession(client, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} id The Oauth Client Id. - * @param {OauthClientUpdateBody} oauthClientUpdateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): AxiosPromise { - return localVarFp.oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * Oauth2Api - interface - * @export - * @interface Oauth2Api - */ -export interface Oauth2ApiInterface { - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): AxiosPromise; - - /** - * - * @param {OauthClientCreateBody} oauthClientCreateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): AxiosPromise; - - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): AxiosPromise; - - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerGetConsentRequest(challenge: string, options?: any): AxiosPromise; - - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerGetLoginRequest(challenge: string, options?: any): AxiosPromise; - - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerGetOAuth2Client(id: string, options?: any): AxiosPromise; - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerListConsentSessions(options?: any): AxiosPromise>; - - /** - * - * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. - * @param {number} offset The offset from where to start looking. - * @param {string} clientName The name of the clients to filter by. - * @param {string} owner The owner of the clients to filter by. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): AxiosPromise>; - - /** - * - * @param {string} challenge The login challenge. - * @param {ConsentRequestBody} consentRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): AxiosPromise; - - /** - * - * @param {string} challenge The login challenge. - * @param {LoginRequestBody} loginRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): AxiosPromise; - - /** - * - * @param {string} client The Oauth2 client id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerRevokeConsentSession(client: string, options?: any): AxiosPromise; - - /** - * - * @param {string} id The Oauth Client Id. - * @param {OauthClientUpdateBody} oauthClientUpdateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2ApiInterface - */ - oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): AxiosPromise; - -} - -/** - * Oauth2Api - object-oriented interface - * @export - * @class Oauth2Api - * @extends {BaseAPI} - */ -export class Oauth2Api extends BaseAPI implements Oauth2ApiInterface { - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerAcceptLogoutRequest(challenge, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {OauthClientCreateBody} oauthClientCreateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerDeleteOAuth2Client(id: string, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerDeleteOAuth2Client(id, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerGetConsentRequest(challenge: string, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerGetConsentRequest(challenge, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} challenge The login challenge. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerGetLoginRequest(challenge: string, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerGetLoginRequest(challenge, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} id The Oauth Client Id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerGetOAuth2Client(id: string, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerGetOAuth2Client(id, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerListConsentSessions(options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerListConsentSessions(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. - * @param {number} offset The offset from where to start looking. - * @param {string} clientName The name of the clients to filter by. - * @param {string} owner The owner of the clients to filter by. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} challenge The login challenge. - * @param {ConsentRequestBody} consentRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} challenge The login challenge. - * @param {LoginRequestBody} loginRequestBody - * @param {boolean} [accept] Accepts the login request. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} client The Oauth2 client id. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerRevokeConsentSession(client: string, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerRevokeConsentSession(client, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} id The Oauth Client Id. - * @param {OauthClientUpdateBody} oauthClientUpdateBody - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof Oauth2Api - */ - public oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any) { - return Oauth2ApiFp(this.configuration).oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * PseudonymApi - axios parameter creator - * @export - */ -export const PseudonymApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Returns the related user and tool information to a pseudonym - * @param {string} pseudonym - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - pseudonymControllerGetPseudonym: async (pseudonym: string, options: any = {}): Promise => { - // verify required parameter 'pseudonym' is not null or undefined - assertParamExists('pseudonymControllerGetPseudonym', 'pseudonym', pseudonym) - const localVarPath = `/pseudonyms/{pseudonym}` - .replace(`{${"pseudonym"}}`, encodeURIComponent(String(pseudonym))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * PseudonymApi - functional programming interface - * @export - */ -export const PseudonymApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = PseudonymApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Returns the related user and tool information to a pseudonym - * @param {string} pseudonym - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async pseudonymControllerGetPseudonym(pseudonym: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.pseudonymControllerGetPseudonym(pseudonym, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * PseudonymApi - factory interface - * @export - */ -export const PseudonymApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = PseudonymApiFp(configuration) - return { - /** - * - * @summary Returns the related user and tool information to a pseudonym - * @param {string} pseudonym - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - pseudonymControllerGetPseudonym(pseudonym: string, options?: any): AxiosPromise { - return localVarFp.pseudonymControllerGetPseudonym(pseudonym, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * PseudonymApi - interface - * @export - * @interface PseudonymApi - */ -export interface PseudonymApiInterface { - /** - * - * @summary Returns the related user and tool information to a pseudonym - * @param {string} pseudonym - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof PseudonymApiInterface - */ - pseudonymControllerGetPseudonym(pseudonym: string, options?: any): AxiosPromise; - -} - -/** - * PseudonymApi - object-oriented interface - * @export - * @class PseudonymApi - * @extends {BaseAPI} - */ -export class PseudonymApi extends BaseAPI implements PseudonymApiInterface { - /** - * - * @summary Returns the related user and tool information to a pseudonym - * @param {string} pseudonym - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof PseudonymApi - */ - public pseudonymControllerGetPseudonym(pseudonym: string, options?: any) { - return PseudonymApiFp(this.configuration).pseudonymControllerGetPseudonym(pseudonym, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * RoomsApi - axios parameter creator - * @export - */ -export const RoomsApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerCopyCourse: async (roomId: string, options: any = {}): Promise => { - // verify required parameter 'roomId' is not null or undefined - assertParamExists('roomsControllerCopyCourse', 'roomId', roomId) - const localVarPath = `/rooms/{roomId}/copy` - .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} lessonId The id of the lesson. - * @param {LessonCopyApiParams} lessonCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerCopyLesson: async (lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options: any = {}): Promise => { - // verify required parameter 'lessonId' is not null or undefined - assertParamExists('roomsControllerCopyLesson', 'lessonId', lessonId) - // verify required parameter 'lessonCopyApiParams' is not null or undefined - assertParamExists('roomsControllerCopyLesson', 'lessonCopyApiParams', lessonCopyApiParams) - const localVarPath = `/rooms/lessons/{lessonId}/copy` - .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(lessonCopyApiParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerGetRoomBoard: async (roomId: string, options: any = {}): Promise => { - // verify required parameter 'roomId' is not null or undefined - assertParamExists('roomsControllerGetRoomBoard', 'roomId', roomId) - const localVarPath = `/rooms/{roomId}/board` - .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} roomId The id of the room. - * @param {string} elementId The id of the element within the room. - * @param {PatchVisibilityParams} patchVisibilityParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerPatchElementVisibility: async (roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options: any = {}): Promise => { - // verify required parameter 'roomId' is not null or undefined - assertParamExists('roomsControllerPatchElementVisibility', 'roomId', roomId) - // verify required parameter 'elementId' is not null or undefined - assertParamExists('roomsControllerPatchElementVisibility', 'elementId', elementId) - // verify required parameter 'patchVisibilityParams' is not null or undefined - assertParamExists('roomsControllerPatchElementVisibility', 'patchVisibilityParams', patchVisibilityParams) - const localVarPath = `/rooms/{roomId}/elements/{elementId}/visibility` - .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))) - .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(patchVisibilityParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} roomId The id of the room. - * @param {PatchOrderParams} patchOrderParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerPatchOrderingOfElements: async (roomId: string, patchOrderParams: PatchOrderParams, options: any = {}): Promise => { - // verify required parameter 'roomId' is not null or undefined - assertParamExists('roomsControllerPatchOrderingOfElements', 'roomId', roomId) - // verify required parameter 'patchOrderParams' is not null or undefined - assertParamExists('roomsControllerPatchOrderingOfElements', 'patchOrderParams', patchOrderParams) - const localVarPath = `/rooms/{roomId}/board/order` - .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(patchOrderParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * RoomsApi - functional programming interface - * @export - */ -export const RoomsApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = RoomsApiAxiosParamCreator(configuration) - return { - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async roomsControllerCopyCourse(roomId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerCopyCourse(roomId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} lessonId The id of the lesson. - * @param {LessonCopyApiParams} lessonCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async roomsControllerGetRoomBoard(roomId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerGetRoomBoard(roomId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} roomId The id of the room. - * @param {string} elementId The id of the element within the room. - * @param {PatchVisibilityParams} patchVisibilityParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} roomId The id of the room. - * @param {PatchOrderParams} patchOrderParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * RoomsApi - factory interface - * @export - */ -export const RoomsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = RoomsApiFp(configuration) - return { - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerCopyCourse(roomId: string, options?: any): AxiosPromise { - return localVarFp.roomsControllerCopyCourse(roomId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} lessonId The id of the lesson. - * @param {LessonCopyApiParams} lessonCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): AxiosPromise { - return localVarFp.roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerGetRoomBoard(roomId: string, options?: any): AxiosPromise { - return localVarFp.roomsControllerGetRoomBoard(roomId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} roomId The id of the room. - * @param {string} elementId The id of the element within the room. - * @param {PatchVisibilityParams} patchVisibilityParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): AxiosPromise { - return localVarFp.roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} roomId The id of the room. - * @param {PatchOrderParams} patchOrderParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): AxiosPromise { - return localVarFp.roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * RoomsApi - interface - * @export - * @interface RoomsApi - */ -export interface RoomsApiInterface { - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApiInterface - */ - roomsControllerCopyCourse(roomId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} lessonId The id of the lesson. - * @param {LessonCopyApiParams} lessonCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApiInterface - */ - roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): AxiosPromise; - - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApiInterface - */ - roomsControllerGetRoomBoard(roomId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} roomId The id of the room. - * @param {string} elementId The id of the element within the room. - * @param {PatchVisibilityParams} patchVisibilityParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApiInterface - */ - roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): AxiosPromise; - - /** - * - * @param {string} roomId The id of the room. - * @param {PatchOrderParams} patchOrderParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApiInterface - */ - roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): AxiosPromise; - -} - -/** - * RoomsApi - object-oriented interface - * @export - * @class RoomsApi - * @extends {BaseAPI} - */ -export class RoomsApi extends BaseAPI implements RoomsApiInterface { - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApi - */ - public roomsControllerCopyCourse(roomId: string, options?: any) { - return RoomsApiFp(this.configuration).roomsControllerCopyCourse(roomId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} lessonId The id of the lesson. - * @param {LessonCopyApiParams} lessonCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApi - */ - public roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any) { - return RoomsApiFp(this.configuration).roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} roomId The id of the room. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApi - */ - public roomsControllerGetRoomBoard(roomId: string, options?: any) { - return RoomsApiFp(this.configuration).roomsControllerGetRoomBoard(roomId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} roomId The id of the room. - * @param {string} elementId The id of the element within the room. - * @param {PatchVisibilityParams} patchVisibilityParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApi - */ - public roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any) { - return RoomsApiFp(this.configuration).roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} roomId The id of the room. - * @param {PatchOrderParams} patchOrderParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof RoomsApi - */ - public roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any) { - return RoomsApiFp(this.configuration).roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * SSOApi - axios parameter creator - * @export - */ -export const SSOApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthSSOControllerGetHydraOauthToken: async (oauthClientId: string, options: any = {}): Promise => { - // verify required parameter 'oauthClientId' is not null or undefined - assertParamExists('oauthSSOControllerGetHydraOauthToken', 'oauthClientId', oauthClientId) - const localVarPath = `/sso/hydra/{oauthClientId}` - .replace(`{${"oauthClientId"}}`, encodeURIComponent(String(oauthClientId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthSSOControllerRequestAuthToken: async (oauthClientId: string, options: any = {}): Promise => { - // verify required parameter 'oauthClientId' is not null or undefined - assertParamExists('oauthSSOControllerRequestAuthToken', 'oauthClientId', oauthClientId) - const localVarPath = `/sso/auth/{oauthClientId}` - .replace(`{${"oauthClientId"}}`, encodeURIComponent(String(oauthClientId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * SSOApi - functional programming interface - * @export - */ -export const SSOApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = SSOApiAxiosParamCreator(configuration) - return { - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthSSOControllerGetHydraOauthToken(oauthClientId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.oauthSSOControllerRequestAuthToken(oauthClientId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * SSOApi - factory interface - * @export - */ -export const SSOApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = SSOApiFp(configuration) - return { - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): AxiosPromise { - return localVarFp.oauthSSOControllerGetHydraOauthToken(oauthClientId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): AxiosPromise { - return localVarFp.oauthSSOControllerRequestAuthToken(oauthClientId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * SSOApi - interface - * @export - * @interface SSOApi - */ -export interface SSOApiInterface { - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SSOApiInterface - */ - oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SSOApiInterface - */ - oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): AxiosPromise; - -} - -/** - * SSOApi - object-oriented interface - * @export - * @class SSOApi - * @extends {BaseAPI} - */ -export class SSOApi extends BaseAPI implements SSOApiInterface { - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SSOApi - */ - public oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any) { - return SSOApiFp(this.configuration).oauthSSOControllerGetHydraOauthToken(oauthClientId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} oauthClientId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SSOApi - */ - public oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any) { - return SSOApiFp(this.configuration).oauthSSOControllerRequestAuthToken(oauthClientId, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * SchoolApi - axios parameter creator - * @export - */ -export const SchoolApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerDoesSchoolExist: async (schoolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('schoolControllerDoesSchoolExist', 'schoolId', schoolId) - const localVarPath = `/school/exists/id/{schoolId}` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Gets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetProvisioningOptions: async (schoolId: string, systemId: string, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('schoolControllerGetProvisioningOptions', 'schoolId', schoolId) - // verify required parameter 'systemId' is not null or undefined - assertParamExists('schoolControllerGetProvisioningOptions', 'systemId', systemId) - const localVarPath = `/schools/{schoolId}/systems/{systemId}/provisioning-options` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) - .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetSchoolById: async (schoolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('schoolControllerGetSchoolById', 'schoolId', schoolId) - const localVarPath = `/school/id/{schoolId}` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} [federalStateId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetSchoolListForExternalInvite: async (federalStateId?: string, options: any = {}): Promise => { - const localVarPath = `/school/list-for-external-invite`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (federalStateId !== undefined) { - localVarQueryParameter['federalStateId'] = federalStateId; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetSchoolListForLadpLogin: async (options: any = {}): Promise => { - const localVarPath = `/school/list-for-ldap-login`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get systems from school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetSchoolSystems: async (schoolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('schoolControllerGetSchoolSystems', 'schoolId', schoolId) - const localVarPath = `/school/{schoolId}/systems` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerRemoveSystemFromSchool: async (schoolId: string, systemId: string, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('schoolControllerRemoveSystemFromSchool', 'schoolId', schoolId) - // verify required parameter 'systemId' is not null or undefined - assertParamExists('schoolControllerRemoveSystemFromSchool', 'systemId', systemId) - const localVarPath = `/school/{schoolId}/system/{systemId}/remove` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) - .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Sets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerSetProvisioningOptions: async (schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('schoolControllerSetProvisioningOptions', 'schoolId', schoolId) - // verify required parameter 'systemId' is not null or undefined - assertParamExists('schoolControllerSetProvisioningOptions', 'systemId', systemId) - // verify required parameter 'schulConneXProvisioningOptionsParams' is not null or undefined - assertParamExists('schoolControllerSetProvisioningOptions', 'schulConneXProvisioningOptionsParams', schulConneXProvisioningOptionsParams) - const localVarPath = `/schools/{schoolId}/systems/{systemId}/provisioning-options` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) - .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(schulConneXProvisioningOptionsParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Updating school props by school administrators - * @param {string} schoolId - * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerUpdateSchool: async (schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('schoolControllerUpdateSchool', 'schoolId', schoolId) - // verify required parameter 'schoolUpdateBodyParams' is not null or undefined - assertParamExists('schoolControllerUpdateSchool', 'schoolUpdateBodyParams', schoolUpdateBodyParams) - const localVarPath = `/school/{schoolId}` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(schoolUpdateBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * SchoolApi - functional programming interface - * @export - */ -export const SchoolApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = SchoolApiAxiosParamCreator(configuration) - return { - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerDoesSchoolExist(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerDoesSchoolExist(schoolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Gets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetProvisioningOptions(schoolId, systemId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerGetSchoolById(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolById(schoolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} [federalStateId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolListForExternalInvite(federalStateId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerGetSchoolListForLadpLogin(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolListForLadpLogin(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get systems from school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerGetSchoolSystems(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolSystems(schoolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerRemoveSystemFromSchool(schoolId, systemId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Sets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Updating school props by school administrators - * @param {string} schoolId - * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * SchoolApi - factory interface - * @export - */ -export const SchoolApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = SchoolApiFp(configuration) - return { - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerDoesSchoolExist(schoolId: string, options?: any): AxiosPromise { - return localVarFp.schoolControllerDoesSchoolExist(schoolId, options).then((request) => request(axios, basePath)); - }, - /** - * Gets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): AxiosPromise { - return localVarFp.schoolControllerGetProvisioningOptions(schoolId, systemId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetSchoolById(schoolId: string, options?: any): AxiosPromise { - return localVarFp.schoolControllerGetSchoolById(schoolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} [federalStateId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): AxiosPromise> { - return localVarFp.schoolControllerGetSchoolListForExternalInvite(federalStateId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetSchoolListForLadpLogin(options?: any): AxiosPromise> { - return localVarFp.schoolControllerGetSchoolListForLadpLogin(options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get systems from school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerGetSchoolSystems(schoolId: string, options?: any): AxiosPromise> { - return localVarFp.schoolControllerGetSchoolSystems(schoolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): AxiosPromise { - return localVarFp.schoolControllerRemoveSystemFromSchool(schoolId, systemId, options).then((request) => request(axios, basePath)); - }, - /** - * Sets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): AxiosPromise { - return localVarFp.schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Updating school props by school administrators - * @param {string} schoolId - * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): AxiosPromise { - return localVarFp.schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * SchoolApi - interface - * @export - * @interface SchoolApi - */ -export interface SchoolApiInterface { - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerDoesSchoolExist(schoolId: string, options?: any): AxiosPromise; - - /** - * Gets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerGetSchoolById(schoolId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} [federalStateId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): AxiosPromise>; - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerGetSchoolListForLadpLogin(options?: any): AxiosPromise>; - - /** - * - * @summary Get systems from school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerGetSchoolSystems(schoolId: string, options?: any): AxiosPromise>; - - /** - * - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): AxiosPromise; - - /** - * Sets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): AxiosPromise; - - /** - * - * @summary Updating school props by school administrators - * @param {string} schoolId - * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApiInterface - */ - schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): AxiosPromise; - -} - -/** - * SchoolApi - object-oriented interface - * @export - * @class SchoolApi - * @extends {BaseAPI} - */ -export class SchoolApi extends BaseAPI implements SchoolApiInterface { - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerDoesSchoolExist(schoolId: string, options?: any) { - return SchoolApiFp(this.configuration).schoolControllerDoesSchoolExist(schoolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Gets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any) { - return SchoolApiFp(this.configuration).schoolControllerGetProvisioningOptions(schoolId, systemId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerGetSchoolById(schoolId: string, options?: any) { - return SchoolApiFp(this.configuration).schoolControllerGetSchoolById(schoolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} [federalStateId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any) { - return SchoolApiFp(this.configuration).schoolControllerGetSchoolListForExternalInvite(federalStateId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerGetSchoolListForLadpLogin(options?: any) { - return SchoolApiFp(this.configuration).schoolControllerGetSchoolListForLadpLogin(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get systems from school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerGetSchoolSystems(schoolId: string, options?: any) { - return SchoolApiFp(this.configuration).schoolControllerGetSchoolSystems(schoolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} schoolId - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any) { - return SchoolApiFp(this.configuration).schoolControllerRemoveSystemFromSchool(schoolId, systemId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Sets all provisioning options for a system at a school - * @param {string} schoolId - * @param {string} systemId - * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any) { - return SchoolApiFp(this.configuration).schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Updating school props by school administrators - * @param {string} schoolId - * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SchoolApi - */ - public schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any) { - return SchoolApiFp(this.configuration).schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * ShareTokenApi - axios parameter creator - * @export - */ -export const ShareTokenApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Create a share token. - * @param {ShareTokenBodyParams} shareTokenBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - shareTokenControllerCreateShareToken: async (shareTokenBodyParams: ShareTokenBodyParams, options: any = {}): Promise => { - // verify required parameter 'shareTokenBodyParams' is not null or undefined - assertParamExists('shareTokenControllerCreateShareToken', 'shareTokenBodyParams', shareTokenBodyParams) - const localVarPath = `/sharetoken`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(shareTokenBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Import a share token payload. - * @param {string} token The token that identifies the shared object - * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - shareTokenControllerImportShareToken: async (token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options: any = {}): Promise => { - // verify required parameter 'token' is not null or undefined - assertParamExists('shareTokenControllerImportShareToken', 'token', token) - // verify required parameter 'shareTokenImportBodyParams' is not null or undefined - assertParamExists('shareTokenControllerImportShareToken', 'shareTokenImportBodyParams', shareTokenImportBodyParams) - const localVarPath = `/sharetoken/{token}/import` - .replace(`{${"token"}}`, encodeURIComponent(String(token))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(shareTokenImportBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Look up a share token. - * @param {string} token The token that identifies the shared object - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - shareTokenControllerLookupShareToken: async (token: string, options: any = {}): Promise => { - // verify required parameter 'token' is not null or undefined - assertParamExists('shareTokenControllerLookupShareToken', 'token', token) - const localVarPath = `/sharetoken/{token}` - .replace(`{${"token"}}`, encodeURIComponent(String(token))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * ShareTokenApi - functional programming interface - * @export - */ -export const ShareTokenApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = ShareTokenApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Create a share token. - * @param {ShareTokenBodyParams} shareTokenBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerCreateShareToken(shareTokenBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Import a share token payload. - * @param {string} token The token that identifies the shared object - * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Look up a share token. - * @param {string} token The token that identifies the shared object - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async shareTokenControllerLookupShareToken(token: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerLookupShareToken(token, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * ShareTokenApi - factory interface - * @export - */ -export const ShareTokenApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = ShareTokenApiFp(configuration) - return { - /** - * - * @summary Create a share token. - * @param {ShareTokenBodyParams} shareTokenBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): AxiosPromise { - return localVarFp.shareTokenControllerCreateShareToken(shareTokenBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Import a share token payload. - * @param {string} token The token that identifies the shared object - * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): AxiosPromise { - return localVarFp.shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Look up a share token. - * @param {string} token The token that identifies the shared object - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - shareTokenControllerLookupShareToken(token: string, options?: any): AxiosPromise { - return localVarFp.shareTokenControllerLookupShareToken(token, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * ShareTokenApi - interface - * @export - * @interface ShareTokenApi - */ -export interface ShareTokenApiInterface { - /** - * - * @summary Create a share token. - * @param {ShareTokenBodyParams} shareTokenBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ShareTokenApiInterface - */ - shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Import a share token payload. - * @param {string} token The token that identifies the shared object - * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ShareTokenApiInterface - */ - shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Look up a share token. - * @param {string} token The token that identifies the shared object - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ShareTokenApiInterface - */ - shareTokenControllerLookupShareToken(token: string, options?: any): AxiosPromise; - -} - -/** - * ShareTokenApi - object-oriented interface - * @export - * @class ShareTokenApi - * @extends {BaseAPI} - */ -export class ShareTokenApi extends BaseAPI implements ShareTokenApiInterface { - /** - * - * @summary Create a share token. - * @param {ShareTokenBodyParams} shareTokenBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ShareTokenApi - */ - public shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any) { - return ShareTokenApiFp(this.configuration).shareTokenControllerCreateShareToken(shareTokenBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Import a share token payload. - * @param {string} token The token that identifies the shared object - * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ShareTokenApi - */ - public shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any) { - return ShareTokenApiFp(this.configuration).shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Look up a share token. - * @param {string} token The token that identifies the shared object - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ShareTokenApi - */ - public shareTokenControllerLookupShareToken(token: string, options?: any) { - return ShareTokenApiFp(this.configuration).shareTokenControllerLookupShareToken(token, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * SubmissionApi - axios parameter creator - * @export - */ -export const SubmissionApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {string} submissionId The id of the submission. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - submissionControllerDelete: async (submissionId: string, options: any = {}): Promise => { - // verify required parameter 'submissionId' is not null or undefined - assertParamExists('submissionControllerDelete', 'submissionId', submissionId) - const localVarPath = `/submissions/{submissionId}` - .replace(`{${"submissionId"}}`, encodeURIComponent(String(submissionId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - submissionControllerFindStatusesByTask: async (taskId: string, options: any = {}): Promise => { - // verify required parameter 'taskId' is not null or undefined - assertParamExists('submissionControllerFindStatusesByTask', 'taskId', taskId) - const localVarPath = `/submissions/status/task/{taskId}` - .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * SubmissionApi - functional programming interface - * @export - */ -export const SubmissionApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = SubmissionApiAxiosParamCreator(configuration) - return { - /** - * - * @param {string} submissionId The id of the submission. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async submissionControllerDelete(submissionId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.submissionControllerDelete(submissionId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async submissionControllerFindStatusesByTask(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.submissionControllerFindStatusesByTask(taskId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * SubmissionApi - factory interface - * @export - */ -export const SubmissionApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = SubmissionApiFp(configuration) - return { - /** - * - * @param {string} submissionId The id of the submission. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - submissionControllerDelete(submissionId: string, options?: any): AxiosPromise { - return localVarFp.submissionControllerDelete(submissionId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - submissionControllerFindStatusesByTask(taskId: string, options?: any): AxiosPromise { - return localVarFp.submissionControllerFindStatusesByTask(taskId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * SubmissionApi - interface - * @export - * @interface SubmissionApi - */ -export interface SubmissionApiInterface { - /** - * - * @param {string} submissionId The id of the submission. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SubmissionApiInterface - */ - submissionControllerDelete(submissionId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SubmissionApiInterface - */ - submissionControllerFindStatusesByTask(taskId: string, options?: any): AxiosPromise; - -} - -/** - * SubmissionApi - object-oriented interface - * @export - * @class SubmissionApi - * @extends {BaseAPI} - */ -export class SubmissionApi extends BaseAPI implements SubmissionApiInterface { - /** - * - * @param {string} submissionId The id of the submission. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SubmissionApi - */ - public submissionControllerDelete(submissionId: string, options?: any) { - return SubmissionApiFp(this.configuration).submissionControllerDelete(submissionId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SubmissionApi - */ - public submissionControllerFindStatusesByTask(taskId: string, options?: any) { - return SubmissionApiFp(this.configuration).submissionControllerFindStatusesByTask(taskId, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * SystemsApi - axios parameter creator - * @export - */ -export const SystemsApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Deletes a system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - systemControllerDeleteSystem: async (systemId: string, options: any = {}): Promise => { - // verify required parameter 'systemId' is not null or undefined - assertParamExists('systemControllerDeleteSystem', 'systemId', systemId) - const localVarPath = `/systems/{systemId}` - .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! - * @summary Finds all publicly available systems. - * @param {SystemType} [types] The type of the system. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - systemControllerFind: async (types?: SystemType, options: any = {}): Promise => { - const localVarPath = `/systems/public`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - if (types !== undefined) { - localVarQueryParameter['types'] = types; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * This endpoint is used to get information about a possible login systems. No sensible data should be returned! - * @summary Finds a publicly available system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - systemControllerGetSystem: async (systemId: string, options: any = {}): Promise => { - // verify required parameter 'systemId' is not null or undefined - assertParamExists('systemControllerGetSystem', 'systemId', systemId) - const localVarPath = `/systems/public/{systemId}` - .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * SystemsApi - functional programming interface - * @export - */ -export const SystemsApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = SystemsApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Deletes a system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async systemControllerDeleteSystem(systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerDeleteSystem(systemId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! - * @summary Finds all publicly available systems. - * @param {SystemType} [types] The type of the system. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async systemControllerFind(types?: SystemType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerFind(types, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * This endpoint is used to get information about a possible login systems. No sensible data should be returned! - * @summary Finds a publicly available system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async systemControllerGetSystem(systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerGetSystem(systemId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * SystemsApi - factory interface - * @export - */ -export const SystemsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = SystemsApiFp(configuration) - return { - /** - * - * @summary Deletes a system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - systemControllerDeleteSystem(systemId: string, options?: any): AxiosPromise { - return localVarFp.systemControllerDeleteSystem(systemId, options).then((request) => request(axios, basePath)); - }, - /** - * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! - * @summary Finds all publicly available systems. - * @param {SystemType} [types] The type of the system. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - systemControllerFind(types?: SystemType, options?: any): AxiosPromise { - return localVarFp.systemControllerFind(types, options).then((request) => request(axios, basePath)); - }, - /** - * This endpoint is used to get information about a possible login systems. No sensible data should be returned! - * @summary Finds a publicly available system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - systemControllerGetSystem(systemId: string, options?: any): AxiosPromise { - return localVarFp.systemControllerGetSystem(systemId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * SystemsApi - interface - * @export - * @interface SystemsApi - */ -export interface SystemsApiInterface { - /** - * - * @summary Deletes a system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SystemsApiInterface - */ - systemControllerDeleteSystem(systemId: string, options?: any): AxiosPromise; - - /** - * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! - * @summary Finds all publicly available systems. - * @param {SystemType} [types] The type of the system. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SystemsApiInterface - */ - systemControllerFind(types?: SystemType, options?: any): AxiosPromise; - - /** - * This endpoint is used to get information about a possible login systems. No sensible data should be returned! - * @summary Finds a publicly available system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SystemsApiInterface - */ - systemControllerGetSystem(systemId: string, options?: any): AxiosPromise; - -} - -/** - * SystemsApi - object-oriented interface - * @export - * @class SystemsApi - * @extends {BaseAPI} - */ -export class SystemsApi extends BaseAPI implements SystemsApiInterface { - /** - * - * @summary Deletes a system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SystemsApi - */ - public systemControllerDeleteSystem(systemId: string, options?: any) { - return SystemsApiFp(this.configuration).systemControllerDeleteSystem(systemId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! - * @summary Finds all publicly available systems. - * @param {SystemType} [types] The type of the system. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SystemsApi - */ - public systemControllerFind(types?: SystemType, options?: any) { - return SystemsApiFp(this.configuration).systemControllerFind(types, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * This endpoint is used to get information about a possible login systems. No sensible data should be returned! - * @summary Finds a publicly available system. - * @param {string} systemId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof SystemsApi - */ - public systemControllerGetSystem(systemId: string, options?: any) { - return SystemsApiFp(this.configuration).systemControllerGetSystem(systemId, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * TaskApi - axios parameter creator - * @export - */ -export const TaskApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {string} taskId The id of the task. - * @param {TaskCopyApiParams} taskCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerCopyTask: async (taskId: string, taskCopyApiParams: TaskCopyApiParams, options: any = {}): Promise => { - // verify required parameter 'taskId' is not null or undefined - assertParamExists('taskControllerCopyTask', 'taskId', taskId) - // verify required parameter 'taskCopyApiParams' is not null or undefined - assertParamExists('taskControllerCopyTask', 'taskCopyApiParams', taskCopyApiParams) - const localVarPath = `/tasks/{taskId}/copy` - .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(taskCopyApiParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerDelete: async (taskId: string, options: any = {}): Promise => { - // verify required parameter 'taskId' is not null or undefined - assertParamExists('taskControllerDelete', 'taskId', taskId) - const localVarPath = `/tasks/{taskId}` - .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerFindAll: async (skip?: number, limit?: number, options: any = {}): Promise => { - const localVarPath = `/tasks`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerFindAllFinished: async (skip?: number, limit?: number, options: any = {}): Promise => { - const localVarPath = `/tasks/finished`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerFinish: async (taskId: string, options: any = {}): Promise => { - // verify required parameter 'taskId' is not null or undefined - assertParamExists('taskControllerFinish', 'taskId', taskId) - const localVarPath = `/tasks/{taskId}/finish` - .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerRestore: async (taskId: string, options: any = {}): Promise => { - // verify required parameter 'taskId' is not null or undefined - assertParamExists('taskControllerRestore', 'taskId', taskId) - const localVarPath = `/tasks/{taskId}/restore` - .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerRevertPublished: async (taskId: string, options: any = {}): Promise => { - // verify required parameter 'taskId' is not null or undefined - assertParamExists('taskControllerRevertPublished', 'taskId', taskId) - const localVarPath = `/tasks/{taskId}/revertPublished` - .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * TaskApi - functional programming interface - * @export - */ -export const TaskApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = TaskApiAxiosParamCreator(configuration) - return { - /** - * - * @param {string} taskId The id of the task. - * @param {TaskCopyApiParams} taskCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerCopyTask(taskId, taskCopyApiParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async taskControllerDelete(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerDelete(taskId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async taskControllerFindAll(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFindAll(skip, limit, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFindAllFinished(skip, limit, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async taskControllerFinish(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFinish(taskId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async taskControllerRestore(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerRestore(taskId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async taskControllerRevertPublished(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerRevertPublished(taskId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * TaskApi - factory interface - * @export - */ -export const TaskApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = TaskApiFp(configuration) - return { - /** - * - * @param {string} taskId The id of the task. - * @param {TaskCopyApiParams} taskCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): AxiosPromise { - return localVarFp.taskControllerCopyTask(taskId, taskCopyApiParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerDelete(taskId: string, options?: any): AxiosPromise { - return localVarFp.taskControllerDelete(taskId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerFindAll(skip?: number, limit?: number, options?: any): AxiosPromise { - return localVarFp.taskControllerFindAll(skip, limit, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): AxiosPromise { - return localVarFp.taskControllerFindAllFinished(skip, limit, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerFinish(taskId: string, options?: any): AxiosPromise { - return localVarFp.taskControllerFinish(taskId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerRestore(taskId: string, options?: any): AxiosPromise { - return localVarFp.taskControllerRestore(taskId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - taskControllerRevertPublished(taskId: string, options?: any): AxiosPromise { - return localVarFp.taskControllerRevertPublished(taskId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * TaskApi - interface - * @export - * @interface TaskApi - */ -export interface TaskApiInterface { - /** - * - * @param {string} taskId The id of the task. - * @param {TaskCopyApiParams} taskCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApiInterface - */ - taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): AxiosPromise; - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApiInterface - */ - taskControllerDelete(taskId: string, options?: any): AxiosPromise; - - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApiInterface - */ - taskControllerFindAll(skip?: number, limit?: number, options?: any): AxiosPromise; - - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApiInterface - */ - taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): AxiosPromise; - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApiInterface - */ - taskControllerFinish(taskId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApiInterface - */ - taskControllerRestore(taskId: string, options?: any): AxiosPromise; - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApiInterface - */ - taskControllerRevertPublished(taskId: string, options?: any): AxiosPromise; - -} - -/** - * TaskApi - object-oriented interface - * @export - * @class TaskApi - * @extends {BaseAPI} - */ -export class TaskApi extends BaseAPI implements TaskApiInterface { - /** - * - * @param {string} taskId The id of the task. - * @param {TaskCopyApiParams} taskCopyApiParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApi - */ - public taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any) { - return TaskApiFp(this.configuration).taskControllerCopyTask(taskId, taskCopyApiParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApi - */ - public taskControllerDelete(taskId: string, options?: any) { - return TaskApiFp(this.configuration).taskControllerDelete(taskId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApi - */ - public taskControllerFindAll(skip?: number, limit?: number, options?: any) { - return TaskApiFp(this.configuration).taskControllerFindAll(skip, limit, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApi - */ - public taskControllerFindAllFinished(skip?: number, limit?: number, options?: any) { - return TaskApiFp(this.configuration).taskControllerFindAllFinished(skip, limit, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApi - */ - public taskControllerFinish(taskId: string, options?: any) { - return TaskApiFp(this.configuration).taskControllerFinish(taskId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApi - */ - public taskControllerRestore(taskId: string, options?: any) { - return TaskApiFp(this.configuration).taskControllerRestore(taskId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} taskId The id of the task. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof TaskApi - */ - public taskControllerRevertPublished(taskId: string, options?: any) { - return TaskApiFp(this.configuration).taskControllerRevertPublished(taskId, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * ToolApi - axios parameter creator - * @export - */ -export const ToolApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Lists all available tools that can be added for a given context - * @param {any} contextType - * @param {string} contextId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetAvailableToolsForContext: async (contextType: any, contextId: string, options: any = {}): Promise => { - // verify required parameter 'contextType' is not null or undefined - assertParamExists('toolConfigurationControllerGetAvailableToolsForContext', 'contextType', contextType) - // verify required parameter 'contextId' is not null or undefined - assertParamExists('toolConfigurationControllerGetAvailableToolsForContext', 'contextId', contextId) - const localVarPath = `/tools/{contextType}/{contextId}/available-tools` - .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))) - .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Lists all available tools that can be added for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetAvailableToolsForSchool: async (schoolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('toolConfigurationControllerGetAvailableToolsForSchool', 'schoolId', schoolId) - const localVarPath = `/tools/school/{schoolId}/available-tools` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get the latest configuration template for a Context External Tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetConfigurationTemplateForContext: async (contextExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'contextExternalToolId' is not null or undefined - assertParamExists('toolConfigurationControllerGetConfigurationTemplateForContext', 'contextExternalToolId', contextExternalToolId) - const localVarPath = `/tools/context-external-tools/{contextExternalToolId}/configuration-template` - .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get the latest configuration template for a School External Tool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetConfigurationTemplateForSchool: async (schoolExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolExternalToolId' is not null or undefined - assertParamExists('toolConfigurationControllerGetConfigurationTemplateForSchool', 'schoolExternalToolId', schoolExternalToolId) - const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}/configuration-template` - .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Lists all context types available in the SVS - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetToolContextTypes: async (options: any = {}): Promise => { - const localVarPath = `/tools/context-types`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Creates a ContextExternalTool - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerCreateContextExternalTool: async (contextExternalToolPostParams: ContextExternalToolPostParams, options: any = {}): Promise => { - // verify required parameter 'contextExternalToolPostParams' is not null or undefined - assertParamExists('toolContextControllerCreateContextExternalTool', 'contextExternalToolPostParams', contextExternalToolPostParams) - const localVarPath = `/tools/context-external-tools`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolPostParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Deletes a ContextExternalTool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerDeleteContextExternalTool: async (contextExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'contextExternalToolId' is not null or undefined - assertParamExists('toolContextControllerDeleteContextExternalTool', 'contextExternalToolId', contextExternalToolId) - const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` - .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Searches a ContextExternalTool for the given id - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerGetContextExternalTool: async (contextExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'contextExternalToolId' is not null or undefined - assertParamExists('toolContextControllerGetContextExternalTool', 'contextExternalToolId', contextExternalToolId) - const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` - .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns a list of ContextExternalTools for the given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerGetContextExternalToolsForContext: async (contextId: string, contextType: ToolContextType, options: any = {}): Promise => { - // verify required parameter 'contextId' is not null or undefined - assertParamExists('toolContextControllerGetContextExternalToolsForContext', 'contextId', contextId) - // verify required parameter 'contextType' is not null or undefined - assertParamExists('toolContextControllerGetContextExternalToolsForContext', 'contextType', contextType) - const localVarPath = `/tools/context-external-tools/{contextType}/{contextId}` - .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))) - .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Updates a ContextExternalTool - * @param {string} contextExternalToolId - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerUpdateContextExternalTool: async (contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options: any = {}): Promise => { - // verify required parameter 'contextExternalToolId' is not null or undefined - assertParamExists('toolContextControllerUpdateContextExternalTool', 'contextExternalToolId', contextExternalToolId) - // verify required parameter 'contextExternalToolPostParams' is not null or undefined - assertParamExists('toolContextControllerUpdateContextExternalTool', 'contextExternalToolPostParams', contextExternalToolPostParams) - const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` - .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolPostParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Creates an ExternalTool - * @param {ExternalToolCreateParams} externalToolCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerCreateExternalTool: async (externalToolCreateParams: ExternalToolCreateParams, options: any = {}): Promise => { - // verify required parameter 'externalToolCreateParams' is not null or undefined - assertParamExists('toolControllerCreateExternalTool', 'externalToolCreateParams', externalToolCreateParams) - const localVarPath = `/tools/external-tools`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(externalToolCreateParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Deletes an ExternalTool - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerDeleteExternalTool: async (externalToolId: string, options: any = {}): Promise => { - // verify required parameter 'externalToolId' is not null or undefined - assertParamExists('toolControllerDeleteExternalTool', 'externalToolId', externalToolId) - const localVarPath = `/tools/external-tools/{externalToolId}` - .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns a list of ExternalTools - * @param {string} [name] Name of the external tool - * @param {string} [clientId] OAuth2 client id of the external tool - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {'id' | 'name'} [sortBy] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerFindExternalTool: async (name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options: any = {}): Promise => { - const localVarPath = `/tools/external-tools`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (name !== undefined) { - localVarQueryParameter['name'] = name; - } - - if (clientId !== undefined) { - localVarQueryParameter['clientId'] = clientId; - } - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - if (sortOrder !== undefined) { - localVarQueryParameter['sortOrder'] = sortOrder; - } - - if (sortBy !== undefined) { - localVarQueryParameter['sortBy'] = sortBy; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns a pdf of the external tool information - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerGetDatasheet: async (externalToolId: string, options: any = {}): Promise => { - // verify required parameter 'externalToolId' is not null or undefined - assertParamExists('toolControllerGetDatasheet', 'externalToolId', externalToolId) - const localVarPath = `/tools/external-tools/{externalToolId}/datasheet` - .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns an ExternalTool for the given id - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerGetExternalTool: async (externalToolId: string, options: any = {}): Promise => { - // verify required parameter 'externalToolId' is not null or undefined - assertParamExists('toolControllerGetExternalTool', 'externalToolId', externalToolId) - const localVarPath = `/tools/external-tools/{externalToolId}` - .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Gets the logo of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerGetExternalToolLogo: async (externalToolId: string, options: any = {}): Promise => { - // verify required parameter 'externalToolId' is not null or undefined - assertParamExists('toolControllerGetExternalToolLogo', 'externalToolId', externalToolId) - const localVarPath = `/tools/external-tools/{externalToolId}/logo` - .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Gets the metadata of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerGetMetaDataForExternalTool: async (externalToolId: string, options: any = {}): Promise => { - // verify required parameter 'externalToolId' is not null or undefined - assertParamExists('toolControllerGetMetaDataForExternalTool', 'externalToolId', externalToolId) - const localVarPath = `/tools/external-tools/{externalToolId}/metadata` - .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Creates multiple ExternalTools at the same time. - * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerImportExternalTools: async (externalToolBulkCreateParams: ExternalToolBulkCreateParams, options: any = {}): Promise => { - // verify required parameter 'externalToolBulkCreateParams' is not null or undefined - assertParamExists('toolControllerImportExternalTools', 'externalToolBulkCreateParams', externalToolBulkCreateParams) - const localVarPath = `/tools/external-tools/import`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(externalToolBulkCreateParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Updates an ExternalTool - * @param {string} externalToolId - * @param {ExternalToolUpdateParams} externalToolUpdateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerUpdateExternalTool: async (externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options: any = {}): Promise => { - // verify required parameter 'externalToolId' is not null or undefined - assertParamExists('toolControllerUpdateExternalTool', 'externalToolId', externalToolId) - // verify required parameter 'externalToolUpdateParams' is not null or undefined - assertParamExists('toolControllerUpdateExternalTool', 'externalToolUpdateParams', externalToolUpdateParams) - const localVarPath = `/tools/external-tools/{externalToolId}` - .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(externalToolUpdateParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get tool launch request for a context external tool id - * @param {string} contextExternalToolId The id of the context external tool - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolLaunchControllerGetContextExternalToolLaunchRequest: async (contextExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'contextExternalToolId' is not null or undefined - assertParamExists('toolLaunchControllerGetContextExternalToolLaunchRequest', 'contextExternalToolId', contextExternalToolId) - const localVarPath = `/tools/context/{contextExternalToolId}/launch` - .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get tool launch request for a school external tool - * @param {string} schoolExternalToolId The id of the school external tool - * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolLaunchControllerGetSchoolExternalToolLaunchRequest: async (schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options: any = {}): Promise => { - // verify required parameter 'schoolExternalToolId' is not null or undefined - assertParamExists('toolLaunchControllerGetSchoolExternalToolLaunchRequest', 'schoolExternalToolId', schoolExternalToolId) - // verify required parameter 'contextExternalToolBodyParams' is not null or undefined - assertParamExists('toolLaunchControllerGetSchoolExternalToolLaunchRequest', 'contextExternalToolBodyParams', contextExternalToolBodyParams) - const localVarPath = `/tools/school/{schoolExternalToolId}/launch` - .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolBodyParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get ExternalTool Reference for a given context external tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolReferenceControllerGetToolReference: async (contextExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'contextExternalToolId' is not null or undefined - assertParamExists('toolReferenceControllerGetToolReference', 'contextExternalToolId', contextExternalToolId) - const localVarPath = `/tools/tool-references/context-external-tools/{contextExternalToolId}` - .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Get ExternalTool References for a given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolReferenceControllerGetToolReferencesForContext: async (contextId: string, contextType: ToolContextType, options: any = {}): Promise => { - // verify required parameter 'contextId' is not null or undefined - assertParamExists('toolReferenceControllerGetToolReferencesForContext', 'contextId', contextId) - // verify required parameter 'contextType' is not null or undefined - assertParamExists('toolReferenceControllerGetToolReferencesForContext', 'contextType', contextType) - const localVarPath = `/tools/tool-references/{contextType}/{contextId}` - .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))) - .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Creates a SchoolExternalTool - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerCreateSchoolExternalTool: async (schoolExternalToolPostParams: SchoolExternalToolPostParams, options: any = {}): Promise => { - // verify required parameter 'schoolExternalToolPostParams' is not null or undefined - assertParamExists('toolSchoolControllerCreateSchoolExternalTool', 'schoolExternalToolPostParams', schoolExternalToolPostParams) - const localVarPath = `/tools/school-external-tools`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(schoolExternalToolPostParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Deletes a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerDeleteSchoolExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolExternalToolId' is not null or undefined - assertParamExists('toolSchoolControllerDeleteSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) - const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` - .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Gets the metadata of an school external tool. - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerGetMetaDataForExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolExternalToolId' is not null or undefined - assertParamExists('toolSchoolControllerGetMetaDataForExternalTool', 'schoolExternalToolId', schoolExternalToolId) - const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}/metadata` - .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns a SchoolExternalTool for the given id - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerGetSchoolExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolExternalToolId' is not null or undefined - assertParamExists('toolSchoolControllerGetSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) - const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` - .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns a list of SchoolExternalTools for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerGetSchoolExternalTools: async (schoolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('toolSchoolControllerGetSchoolExternalTools', 'schoolId', schoolId) - const localVarPath = `/tools/school-external-tools`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (schoolId !== undefined) { - localVarQueryParameter['schoolId'] = schoolId; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Updates a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerUpdateSchoolExternalTool: async (schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options: any = {}): Promise => { - // verify required parameter 'schoolExternalToolId' is not null or undefined - assertParamExists('toolSchoolControllerUpdateSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) - // verify required parameter 'schoolExternalToolPostParams' is not null or undefined - assertParamExists('toolSchoolControllerUpdateSchoolExternalTool', 'schoolExternalToolPostParams', schoolExternalToolPostParams) - const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` - .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(schoolExternalToolPostParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * ToolApi - functional programming interface - * @export - */ -export const ToolApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = ToolApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Lists all available tools that can be added for a given context - * @param {any} contextType - * @param {string} contextId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Lists all available tools that can be added for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get the latest configuration template for a Context External Tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get the latest configuration template for a School External Tool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Lists all context types available in the SVS - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolConfigurationControllerGetToolContextTypes(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetToolContextTypes(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Creates a ContextExternalTool - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Deletes a ContextExternalTool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerDeleteContextExternalTool(contextExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Searches a ContextExternalTool for the given id - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerGetContextExternalTool(contextExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns a list of ContextExternalTools for the given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Updates a ContextExternalTool - * @param {string} contextExternalToolId - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Creates an ExternalTool - * @param {ExternalToolCreateParams} externalToolCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerCreateExternalTool(externalToolCreateParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Deletes an ExternalTool - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerDeleteExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerDeleteExternalTool(externalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns a list of ExternalTools - * @param {string} [name] Name of the external tool - * @param {string} [clientId] OAuth2 client id of the external tool - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {'id' | 'name'} [sortBy] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns a pdf of the external tool information - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerGetDatasheet(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetDatasheet(externalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns an ExternalTool for the given id - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerGetExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetExternalTool(externalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Gets the logo of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerGetExternalToolLogo(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetExternalToolLogo(externalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Gets the metadata of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetMetaDataForExternalTool(externalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Creates multiple ExternalTools at the same time. - * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerImportExternalTools(externalToolBulkCreateParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Updates an ExternalTool - * @param {string} externalToolId - * @param {ExternalToolUpdateParams} externalToolUpdateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get tool launch request for a context external tool id - * @param {string} contextExternalToolId The id of the context external tool - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get tool launch request for a school external tool - * @param {string} schoolExternalToolId The id of the school external tool - * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get ExternalTool Reference for a given context external tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolReferenceControllerGetToolReference(contextExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Get ExternalTool References for a given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Creates a SchoolExternalTool - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Deletes a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Gets the metadata of an school external tool. - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns a SchoolExternalTool for the given id - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns a list of SchoolExternalTools for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetSchoolExternalTools(schoolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Updates a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * ToolApi - factory interface - * @export - */ -export const ToolApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = ToolApiFp(configuration) - return { - /** - * - * @summary Lists all available tools that can be added for a given context - * @param {any} contextType - * @param {string} contextId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): AxiosPromise { - return localVarFp.toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Lists all available tools that can be added for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): AxiosPromise { - return localVarFp.toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get the latest configuration template for a Context External Tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get the latest configuration template for a School External Tool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Lists all context types available in the SVS - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolConfigurationControllerGetToolContextTypes(options?: any): AxiosPromise { - return localVarFp.toolConfigurationControllerGetToolContextTypes(options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Creates a ContextExternalTool - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise { - return localVarFp.toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Deletes a ContextExternalTool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolContextControllerDeleteContextExternalTool(contextExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Searches a ContextExternalTool for the given id - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolContextControllerGetContextExternalTool(contextExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns a list of ContextExternalTools for the given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise { - return localVarFp.toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Updates a ContextExternalTool - * @param {string} contextExternalToolId - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise { - return localVarFp.toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Creates an ExternalTool - * @param {ExternalToolCreateParams} externalToolCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): AxiosPromise { - return localVarFp.toolControllerCreateExternalTool(externalToolCreateParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Deletes an ExternalTool - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerDeleteExternalTool(externalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolControllerDeleteExternalTool(externalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns a list of ExternalTools - * @param {string} [name] Name of the external tool - * @param {string} [clientId] OAuth2 client id of the external tool - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {'id' | 'name'} [sortBy] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): AxiosPromise { - return localVarFp.toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns a pdf of the external tool information - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerGetDatasheet(externalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolControllerGetDatasheet(externalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns an ExternalTool for the given id - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerGetExternalTool(externalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolControllerGetExternalTool(externalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Gets the logo of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerGetExternalToolLogo(externalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolControllerGetExternalToolLogo(externalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Gets the metadata of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolControllerGetMetaDataForExternalTool(externalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Creates multiple ExternalTools at the same time. - * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): AxiosPromise { - return localVarFp.toolControllerImportExternalTools(externalToolBulkCreateParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Updates an ExternalTool - * @param {string} externalToolId - * @param {ExternalToolUpdateParams} externalToolUpdateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): AxiosPromise { - return localVarFp.toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get tool launch request for a context external tool id - * @param {string} contextExternalToolId The id of the context external tool - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get tool launch request for a school external tool - * @param {string} schoolExternalToolId The id of the school external tool - * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): AxiosPromise { - return localVarFp.toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get ExternalTool Reference for a given context external tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolReferenceControllerGetToolReference(contextExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Get ExternalTool References for a given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise { - return localVarFp.toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Creates a SchoolExternalTool - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise { - return localVarFp.toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Deletes a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Gets the metadata of an school external tool. - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns a SchoolExternalTool for the given id - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { - return localVarFp.toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns a list of SchoolExternalTools for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): AxiosPromise { - return localVarFp.toolSchoolControllerGetSchoolExternalTools(schoolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Updates a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise { - return localVarFp.toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * ToolApi - interface - * @export - * @interface ToolApi - */ -export interface ToolApiInterface { - /** - * - * @summary Lists all available tools that can be added for a given context - * @param {any} contextType - * @param {string} contextId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): AxiosPromise; - - /** - * - * @summary Lists all available tools that can be added for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get the latest configuration template for a Context External Tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get the latest configuration template for a School External Tool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Lists all context types available in the SVS - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolConfigurationControllerGetToolContextTypes(options?: any): AxiosPromise; - - /** - * - * @summary Creates a ContextExternalTool - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise; - - /** - * - * @summary Deletes a ContextExternalTool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Searches a ContextExternalTool for the given id - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns a list of ContextExternalTools for the given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise; - - /** - * - * @summary Updates a ContextExternalTool - * @param {string} contextExternalToolId - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise; - - /** - * - * @summary Creates an ExternalTool - * @param {ExternalToolCreateParams} externalToolCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): AxiosPromise; - - /** - * - * @summary Deletes an ExternalTool - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerDeleteExternalTool(externalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns a list of ExternalTools - * @param {string} [name] Name of the external tool - * @param {string} [clientId] OAuth2 client id of the external tool - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {'id' | 'name'} [sortBy] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): AxiosPromise; - - /** - * - * @summary Returns a pdf of the external tool information - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerGetDatasheet(externalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns an ExternalTool for the given id - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerGetExternalTool(externalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Gets the logo of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerGetExternalToolLogo(externalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Gets the metadata of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Creates multiple ExternalTools at the same time. - * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): AxiosPromise; - - /** - * - * @summary Updates an ExternalTool - * @param {string} externalToolId - * @param {ExternalToolUpdateParams} externalToolUpdateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): AxiosPromise; - - /** - * - * @summary Get tool launch request for a context external tool id - * @param {string} contextExternalToolId The id of the context external tool - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get tool launch request for a school external tool - * @param {string} schoolExternalToolId The id of the school external tool - * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): AxiosPromise; - - /** - * - * @summary Get ExternalTool Reference for a given context external tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Get ExternalTool References for a given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise; - - /** - * - * @summary Creates a SchoolExternalTool - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise; - - /** - * - * @summary Deletes a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Gets the metadata of an school external tool. - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns a SchoolExternalTool for the given id - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns a list of SchoolExternalTools for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Updates a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApiInterface - */ - toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise; - -} - -/** - * ToolApi - object-oriented interface - * @export - * @class ToolApi - * @extends {BaseAPI} - */ -export class ToolApi extends BaseAPI implements ToolApiInterface { - /** - * - * @summary Lists all available tools that can be added for a given context - * @param {any} contextType - * @param {string} contextId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any) { - return ToolApiFp(this.configuration).toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Lists all available tools that can be added for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any) { - return ToolApiFp(this.configuration).toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get the latest configuration template for a Context External Tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get the latest configuration template for a School External Tool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Lists all context types available in the SVS - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolConfigurationControllerGetToolContextTypes(options?: any) { - return ToolApiFp(this.configuration).toolConfigurationControllerGetToolContextTypes(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Creates a ContextExternalTool - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any) { - return ToolApiFp(this.configuration).toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Deletes a ContextExternalTool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolContextControllerDeleteContextExternalTool(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Searches a ContextExternalTool for the given id - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolContextControllerGetContextExternalTool(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns a list of ContextExternalTools for the given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any) { - return ToolApiFp(this.configuration).toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Updates a ContextExternalTool - * @param {string} contextExternalToolId - * @param {ContextExternalToolPostParams} contextExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any) { - return ToolApiFp(this.configuration).toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Creates an ExternalTool - * @param {ExternalToolCreateParams} externalToolCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any) { - return ToolApiFp(this.configuration).toolControllerCreateExternalTool(externalToolCreateParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Deletes an ExternalTool - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerDeleteExternalTool(externalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolControllerDeleteExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns a list of ExternalTools - * @param {string} [name] Name of the external tool - * @param {string} [clientId] OAuth2 client id of the external tool - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {'asc' | 'desc'} [sortOrder] - * @param {'id' | 'name'} [sortBy] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any) { - return ToolApiFp(this.configuration).toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns a pdf of the external tool information - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerGetDatasheet(externalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolControllerGetDatasheet(externalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns an ExternalTool for the given id - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerGetExternalTool(externalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolControllerGetExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Gets the logo of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerGetExternalToolLogo(externalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolControllerGetExternalToolLogo(externalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Gets the metadata of an external tool. - * @param {string} externalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolControllerGetMetaDataForExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Creates multiple ExternalTools at the same time. - * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any) { - return ToolApiFp(this.configuration).toolControllerImportExternalTools(externalToolBulkCreateParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Updates an ExternalTool - * @param {string} externalToolId - * @param {ExternalToolUpdateParams} externalToolUpdateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any) { - return ToolApiFp(this.configuration).toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get tool launch request for a context external tool id - * @param {string} contextExternalToolId The id of the context external tool - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get tool launch request for a school external tool - * @param {string} schoolExternalToolId The id of the school external tool - * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any) { - return ToolApiFp(this.configuration).toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get ExternalTool Reference for a given context external tool - * @param {string} contextExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolReferenceControllerGetToolReference(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Get ExternalTool References for a given context - * @param {string} contextId - * @param {ToolContextType} contextType - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any) { - return ToolApiFp(this.configuration).toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Creates a SchoolExternalTool - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any) { - return ToolApiFp(this.configuration).toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Deletes a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Gets the metadata of an school external tool. - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns a SchoolExternalTool for the given id - * @param {string} schoolExternalToolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any) { - return ToolApiFp(this.configuration).toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns a list of SchoolExternalTools for a given school - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any) { - return ToolApiFp(this.configuration).toolSchoolControllerGetSchoolExternalTools(schoolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Updates a SchoolExternalTool - * @param {string} schoolExternalToolId - * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof ToolApi - */ - public toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any) { - return ToolApiFp(this.configuration).toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * UserApi - axios parameter creator - * @export - */ -export const UserApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {ChangeLanguageParams} changeLanguageParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userControllerChangeLanguage: async (changeLanguageParams: ChangeLanguageParams, options: any = {}): Promise => { - // verify required parameter 'changeLanguageParams' is not null or undefined - assertParamExists('userControllerChangeLanguage', 'changeLanguageParams', changeLanguageParams) - const localVarPath = `/user/language`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(changeLanguageParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userControllerMe: async (options: any = {}): Promise => { - const localVarPath = `/user/me`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * UserApi - functional programming interface - * @export - */ -export const UserApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = UserApiAxiosParamCreator(configuration) - return { - /** - * - * @param {ChangeLanguageParams} changeLanguageParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userControllerChangeLanguage(changeLanguageParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userControllerMe(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userControllerMe(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * UserApi - factory interface - * @export - */ -export const UserApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = UserApiFp(configuration) - return { - /** - * - * @param {ChangeLanguageParams} changeLanguageParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): AxiosPromise { - return localVarFp.userControllerChangeLanguage(changeLanguageParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userControllerMe(options?: any): AxiosPromise { - return localVarFp.userControllerMe(options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * UserApi - interface - * @export - * @interface UserApi - */ -export interface UserApiInterface { - /** - * - * @param {ChangeLanguageParams} changeLanguageParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserApiInterface - */ - userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): AxiosPromise; - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserApiInterface - */ - userControllerMe(options?: any): AxiosPromise; - -} - -/** - * UserApi - object-oriented interface - * @export - * @class UserApi - * @extends {BaseAPI} - */ -export class UserApi extends BaseAPI implements UserApiInterface { - /** - * - * @param {ChangeLanguageParams} changeLanguageParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserApi - */ - public userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any) { - return UserApiFp(this.configuration).userControllerChangeLanguage(changeLanguageParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserApi - */ - public userControllerMe(options?: any) { - return UserApiFp(this.configuration).userControllerMe(options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * UserImportApi - axios parameter creator - * @export - */ -export const UserImportApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Cancel current migration process - * @summary Cancel migration wizard - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerCancelMigration: async (options: any = {}): Promise => { - const localVarPath = `/user/import/cancel`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerEndSchoolInMaintenance: async (options: any = {}): Promise => { - const localVarPath = `/user/import/startSync`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} [firstName] - * @param {string} [lastName] - * @param {string} [loginName] - * @param {Array<'auto' | 'admin' | 'none'>} [match] - * @param {boolean} [flagged] - * @param {string} [classes] - * @param {'student' | 'teacher' | 'admin'} [role] - * @param {'asc' | 'desc'} [sortOrder] - * @param {'firstName' | 'lastName'} [sortBy] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerFindAllImportUsers: async (firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options: any = {}): Promise => { - const localVarPath = `/user/import`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (firstName !== undefined) { - localVarQueryParameter['firstName'] = firstName; - } - - if (lastName !== undefined) { - localVarQueryParameter['lastName'] = lastName; - } - - if (loginName !== undefined) { - localVarQueryParameter['loginName'] = loginName; - } - - if (match) { - localVarQueryParameter['match'] = match; - } - - if (flagged !== undefined) { - localVarQueryParameter['flagged'] = flagged; - } - - if (classes !== undefined) { - localVarQueryParameter['classes'] = classes; - } - - if (role !== undefined) { - localVarQueryParameter['role'] = role; - } - - if (sortOrder !== undefined) { - localVarQueryParameter['sortOrder'] = sortOrder; - } - - if (sortBy !== undefined) { - localVarQueryParameter['sortBy'] = sortBy; - } - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} [name] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerFindAllUnmatchedUsers: async (name?: string, skip?: number, limit?: number, options: any = {}): Promise => { - const localVarPath = `/user/import/unassigned`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (name !== undefined) { - localVarQueryParameter['name'] = name; - } - - if (skip !== undefined) { - localVarQueryParameter['skip'] = skip; - } - - if (limit !== undefined) { - localVarQueryParameter['limit'] = limit; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Populates import users from specific user migration populate endpoint. - * @summary Populates import users - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerPopulateImportUsers: async (options: any = {}): Promise => { - const localVarPath = `/user/import/populate-import-users`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerRemoveMatch: async (importUserId: string, options: any = {}): Promise => { - // verify required parameter 'importUserId' is not null or undefined - assertParamExists('importUserControllerRemoveMatch', 'importUserId', importUserId) - const localVarPath = `/user/import/{importUserId}/match` - .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerSaveAllUsersMatches: async (options: any = {}): Promise => { - const localVarPath = `/user/import/migrate`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateMatchParams} updateMatchParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerSetMatch: async (importUserId: string, updateMatchParams: UpdateMatchParams, options: any = {}): Promise => { - // verify required parameter 'importUserId' is not null or undefined - assertParamExists('importUserControllerSetMatch', 'importUserId', importUserId) - // verify required parameter 'updateMatchParams' is not null or undefined - assertParamExists('importUserControllerSetMatch', 'updateMatchParams', updateMatchParams) - const localVarPath = `/user/import/{importUserId}/match` - .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(updateMatchParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {boolean} useCentralLdap - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerStartSchoolInUserMigration: async (useCentralLdap: boolean, options: any = {}): Promise => { - // verify required parameter 'useCentralLdap' is not null or undefined - assertParamExists('importUserControllerStartSchoolInUserMigration', 'useCentralLdap', useCentralLdap) - const localVarPath = `/user/import/startUserMigration`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (useCentralLdap !== undefined) { - localVarQueryParameter['useCentralLdap'] = useCentralLdap; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateFlagParams} updateFlagParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerUpdateFlag: async (importUserId: string, updateFlagParams: UpdateFlagParams, options: any = {}): Promise => { - // verify required parameter 'importUserId' is not null or undefined - assertParamExists('importUserControllerUpdateFlag', 'importUserId', importUserId) - // verify required parameter 'updateFlagParams' is not null or undefined - assertParamExists('importUserControllerUpdateFlag', 'updateFlagParams', updateFlagParams) - const localVarPath = `/user/import/{importUserId}/flag` - .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(updateFlagParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * UserImportApi - functional programming interface - * @export - */ -export const UserImportApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = UserImportApiAxiosParamCreator(configuration) - return { - /** - * Cancel current migration process - * @summary Cancel migration wizard - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerCancelMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerCancelMigration(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerEndSchoolInMaintenance(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerEndSchoolInMaintenance(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} [firstName] - * @param {string} [lastName] - * @param {string} [loginName] - * @param {Array<'auto' | 'admin' | 'none'>} [match] - * @param {boolean} [flagged] - * @param {string} [classes] - * @param {'student' | 'teacher' | 'admin'} [role] - * @param {'asc' | 'desc'} [sortOrder] - * @param {'firstName' | 'lastName'} [sortBy] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} [name] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerFindAllUnmatchedUsers(name, skip, limit, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Populates import users from specific user migration populate endpoint. - * @summary Populates import users - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerPopulateImportUsers(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerPopulateImportUsers(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerRemoveMatch(importUserId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerRemoveMatch(importUserId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerSaveAllUsersMatches(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerSaveAllUsersMatches(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateMatchParams} updateMatchParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerSetMatch(importUserId, updateMatchParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {boolean} useCentralLdap - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerStartSchoolInUserMigration(useCentralLdap, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateFlagParams} updateFlagParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerUpdateFlag(importUserId, updateFlagParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * UserImportApi - factory interface - * @export - */ -export const UserImportApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = UserImportApiFp(configuration) - return { - /** - * Cancel current migration process - * @summary Cancel migration wizard - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerCancelMigration(options?: any): AxiosPromise { - return localVarFp.importUserControllerCancelMigration(options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerEndSchoolInMaintenance(options?: any): AxiosPromise { - return localVarFp.importUserControllerEndSchoolInMaintenance(options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} [firstName] - * @param {string} [lastName] - * @param {string} [loginName] - * @param {Array<'auto' | 'admin' | 'none'>} [match] - * @param {boolean} [flagged] - * @param {string} [classes] - * @param {'student' | 'teacher' | 'admin'} [role] - * @param {'asc' | 'desc'} [sortOrder] - * @param {'firstName' | 'lastName'} [sortBy] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): AxiosPromise { - return localVarFp.importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} [name] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): AxiosPromise { - return localVarFp.importUserControllerFindAllUnmatchedUsers(name, skip, limit, options).then((request) => request(axios, basePath)); - }, - /** - * Populates import users from specific user migration populate endpoint. - * @summary Populates import users - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerPopulateImportUsers(options?: any): AxiosPromise { - return localVarFp.importUserControllerPopulateImportUsers(options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerRemoveMatch(importUserId: string, options?: any): AxiosPromise { - return localVarFp.importUserControllerRemoveMatch(importUserId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerSaveAllUsersMatches(options?: any): AxiosPromise { - return localVarFp.importUserControllerSaveAllUsersMatches(options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateMatchParams} updateMatchParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): AxiosPromise { - return localVarFp.importUserControllerSetMatch(importUserId, updateMatchParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {boolean} useCentralLdap - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): AxiosPromise { - return localVarFp.importUserControllerStartSchoolInUserMigration(useCentralLdap, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateFlagParams} updateFlagParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): AxiosPromise { - return localVarFp.importUserControllerUpdateFlag(importUserId, updateFlagParams, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * UserImportApi - interface - * @export - * @interface UserImportApi - */ -export interface UserImportApiInterface { - /** - * Cancel current migration process - * @summary Cancel migration wizard - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerCancelMigration(options?: any): AxiosPromise; - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerEndSchoolInMaintenance(options?: any): AxiosPromise; - - /** - * - * @param {string} [firstName] - * @param {string} [lastName] - * @param {string} [loginName] - * @param {Array<'auto' | 'admin' | 'none'>} [match] - * @param {boolean} [flagged] - * @param {string} [classes] - * @param {'student' | 'teacher' | 'admin'} [role] - * @param {'asc' | 'desc'} [sortOrder] - * @param {'firstName' | 'lastName'} [sortBy] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): AxiosPromise; - - /** - * - * @param {string} [name] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): AxiosPromise; - - /** - * Populates import users from specific user migration populate endpoint. - * @summary Populates import users - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerPopulateImportUsers(options?: any): AxiosPromise; - - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerRemoveMatch(importUserId: string, options?: any): AxiosPromise; - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerSaveAllUsersMatches(options?: any): AxiosPromise; - - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateMatchParams} updateMatchParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): AxiosPromise; - - /** - * - * @param {boolean} useCentralLdap - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): AxiosPromise; - - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateFlagParams} updateFlagParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApiInterface - */ - importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): AxiosPromise; - -} - -/** - * UserImportApi - object-oriented interface - * @export - * @class UserImportApi - * @extends {BaseAPI} - */ -export class UserImportApi extends BaseAPI implements UserImportApiInterface { - /** - * Cancel current migration process - * @summary Cancel migration wizard - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerCancelMigration(options?: any) { - return UserImportApiFp(this.configuration).importUserControllerCancelMigration(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerEndSchoolInMaintenance(options?: any) { - return UserImportApiFp(this.configuration).importUserControllerEndSchoolInMaintenance(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} [firstName] - * @param {string} [lastName] - * @param {string} [loginName] - * @param {Array<'auto' | 'admin' | 'none'>} [match] - * @param {boolean} [flagged] - * @param {string} [classes] - * @param {'student' | 'teacher' | 'admin'} [role] - * @param {'asc' | 'desc'} [sortOrder] - * @param {'firstName' | 'lastName'} [sortBy] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any) { - return UserImportApiFp(this.configuration).importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} [name] - * @param {number} [skip] Number of elements (not pages) to be skipped - * @param {number} [limit] Page limit, defaults to 10. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any) { - return UserImportApiFp(this.configuration).importUserControllerFindAllUnmatchedUsers(name, skip, limit, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Populates import users from specific user migration populate endpoint. - * @summary Populates import users - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerPopulateImportUsers(options?: any) { - return UserImportApiFp(this.configuration).importUserControllerPopulateImportUsers(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerRemoveMatch(importUserId: string, options?: any) { - return UserImportApiFp(this.configuration).importUserControllerRemoveMatch(importUserId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerSaveAllUsersMatches(options?: any) { - return UserImportApiFp(this.configuration).importUserControllerSaveAllUsersMatches(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateMatchParams} updateMatchParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any) { - return UserImportApiFp(this.configuration).importUserControllerSetMatch(importUserId, updateMatchParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {boolean} useCentralLdap - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any) { - return UserImportApiFp(this.configuration).importUserControllerStartSchoolInUserMigration(useCentralLdap, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. - * @param {UpdateFlagParams} updateFlagParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserImportApi - */ - public importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any) { - return UserImportApiFp(this.configuration).importUserControllerUpdateFlag(importUserId, updateFlagParams, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * UserLoginMigrationApi - axios parameter creator - * @export - */ -export const UserLoginMigrationApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerCloseMigration: async (options: any = {}): Promise => { - const localVarPath = `/user-login-migrations/close`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerFindUserLoginMigrationBySchool: async (schoolId: string, options: any = {}): Promise => { - // verify required parameter 'schoolId' is not null or undefined - assertParamExists('userLoginMigrationControllerFindUserLoginMigrationBySchool', 'schoolId', schoolId) - const localVarPath = `/user-login-migrations/schools/{schoolId}` - .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Force migrate an administrator account and its school - * @param {ForceMigrationParams} forceMigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerForceMigration: async (forceMigrationParams: ForceMigrationParams, options: any = {}): Promise => { - // verify required parameter 'forceMigrationParams' is not null or undefined - assertParamExists('userLoginMigrationControllerForceMigration', 'forceMigrationParams', forceMigrationParams) - const localVarPath = `/user-login-migrations/force-migration`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(forceMigrationParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Currently there can only be one migration for a user. Therefore only one migration is returned. - * @summary Get UserLoginMigrations - * @param {string} [userId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerGetMigrations: async (userId?: string, options: any = {}): Promise => { - const localVarPath = `/user-login-migrations`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - if (userId !== undefined) { - localVarQueryParameter['userId'] = userId; - } - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {Oauth2MigrationParams} oauth2MigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerMigrateUserLogin: async (oauth2MigrationParams: Oauth2MigrationParams, options: any = {}): Promise => { - // verify required parameter 'oauth2MigrationParams' is not null or undefined - assertParamExists('userLoginMigrationControllerMigrateUserLogin', 'oauth2MigrationParams', oauth2MigrationParams) - const localVarPath = `/user-login-migrations/migrate-to-oauth2`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(oauth2MigrationParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerRestartMigration: async (options: any = {}): Promise => { - const localVarPath = `/user-login-migrations/restart`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerSetMigrationMandatory: async (userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options: any = {}): Promise => { - // verify required parameter 'userLoginMigrationMandatoryParams' is not null or undefined - assertParamExists('userLoginMigrationControllerSetMigrationMandatory', 'userLoginMigrationMandatoryParams', userLoginMigrationMandatoryParams) - const localVarPath = `/user-login-migrations/mandatory`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(userLoginMigrationMandatoryParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerStartMigration: async (options: any = {}): Promise => { - const localVarPath = `/user-login-migrations/start`; - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * UserLoginMigrationApi - functional programming interface - * @export - */ -export const UserLoginMigrationApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = UserLoginMigrationApiAxiosParamCreator(configuration) - return { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationControllerCloseMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerCloseMigration(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Force migrate an administrator account and its school - * @param {ForceMigrationParams} forceMigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerForceMigration(forceMigrationParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Currently there can only be one migration for a user. Therefore only one migration is returned. - * @summary Get UserLoginMigrations - * @param {string} [userId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationControllerGetMigrations(userId?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerGetMigrations(userId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {Oauth2MigrationParams} oauth2MigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationControllerRestartMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerRestartMigration(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationControllerStartMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerStartMigration(options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * UserLoginMigrationApi - factory interface - * @export - */ -export const UserLoginMigrationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = UserLoginMigrationApiFp(configuration) - return { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerCloseMigration(options?: any): AxiosPromise { - return localVarFp.userLoginMigrationControllerCloseMigration(options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): AxiosPromise { - return localVarFp.userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Force migrate an administrator account and its school - * @param {ForceMigrationParams} forceMigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): AxiosPromise { - return localVarFp.userLoginMigrationControllerForceMigration(forceMigrationParams, options).then((request) => request(axios, basePath)); - }, - /** - * Currently there can only be one migration for a user. Therefore only one migration is returned. - * @summary Get UserLoginMigrations - * @param {string} [userId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerGetMigrations(userId?: string, options?: any): AxiosPromise { - return localVarFp.userLoginMigrationControllerGetMigrations(userId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {Oauth2MigrationParams} oauth2MigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): AxiosPromise { - return localVarFp.userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerRestartMigration(options?: any): AxiosPromise { - return localVarFp.userLoginMigrationControllerRestartMigration(options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): AxiosPromise { - return localVarFp.userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationControllerStartMigration(options?: any): AxiosPromise { - return localVarFp.userLoginMigrationControllerStartMigration(options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * UserLoginMigrationApi - interface - * @export - * @interface UserLoginMigrationApi - */ -export interface UserLoginMigrationApiInterface { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApiInterface - */ - userLoginMigrationControllerCloseMigration(options?: any): AxiosPromise; - - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApiInterface - */ - userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): AxiosPromise; - - /** - * - * @summary Force migrate an administrator account and its school - * @param {ForceMigrationParams} forceMigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApiInterface - */ - userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): AxiosPromise; - - /** - * Currently there can only be one migration for a user. Therefore only one migration is returned. - * @summary Get UserLoginMigrations - * @param {string} [userId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApiInterface - */ - userLoginMigrationControllerGetMigrations(userId?: string, options?: any): AxiosPromise; - - /** - * - * @param {Oauth2MigrationParams} oauth2MigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApiInterface - */ - userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): AxiosPromise; - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApiInterface - */ - userLoginMigrationControllerRestartMigration(options?: any): AxiosPromise; - - /** - * - * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApiInterface - */ - userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): AxiosPromise; - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApiInterface - */ - userLoginMigrationControllerStartMigration(options?: any): AxiosPromise; - -} - -/** - * UserLoginMigrationApi - object-oriented interface - * @export - * @class UserLoginMigrationApi - * @extends {BaseAPI} - */ -export class UserLoginMigrationApi extends BaseAPI implements UserLoginMigrationApiInterface { - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApi - */ - public userLoginMigrationControllerCloseMigration(options?: any) { - return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerCloseMigration(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {string} schoolId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApi - */ - public userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any) { - return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Force migrate an administrator account and its school - * @param {ForceMigrationParams} forceMigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApi - */ - public userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any) { - return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerForceMigration(forceMigrationParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Currently there can only be one migration for a user. Therefore only one migration is returned. - * @summary Get UserLoginMigrations - * @param {string} [userId] - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApi - */ - public userLoginMigrationControllerGetMigrations(userId?: string, options?: any) { - return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerGetMigrations(userId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {Oauth2MigrationParams} oauth2MigrationParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApi - */ - public userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any) { - return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApi - */ - public userLoginMigrationControllerRestartMigration(options?: any) { - return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerRestartMigration(options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApi - */ - public userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any) { - return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationApi - */ - public userLoginMigrationControllerStartMigration(options?: any) { - return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerStartMigration(options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * UserLoginMigrationRollbackApi - axios parameter creator - * @export - */ -export const UserLoginMigrationRollbackApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * - * @summary Rollback a user from a user login migration - * @param {string} userId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationRollbackControllerMigrateUserLogin: async (userId: string, options: any = {}): Promise => { - // verify required parameter 'userId' is not null or undefined - assertParamExists('userLoginMigrationRollbackControllerMigrateUserLogin', 'userId', userId) - const localVarPath = `/user-login-migrations/users/{userId}/rollback-migration` - .replace(`{${"userId"}}`, encodeURIComponent(String(userId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * UserLoginMigrationRollbackApi - functional programming interface - * @export - */ -export const UserLoginMigrationRollbackApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = UserLoginMigrationRollbackApiAxiosParamCreator(configuration) - return { - /** - * - * @summary Rollback a user from a user login migration - * @param {string} userId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationRollbackControllerMigrateUserLogin(userId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * UserLoginMigrationRollbackApi - factory interface - * @export - */ -export const UserLoginMigrationRollbackApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = UserLoginMigrationRollbackApiFp(configuration) - return { - /** - * - * @summary Rollback a user from a user login migration - * @param {string} userId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): AxiosPromise { - return localVarFp.userLoginMigrationRollbackControllerMigrateUserLogin(userId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * UserLoginMigrationRollbackApi - interface - * @export - * @interface UserLoginMigrationRollbackApi - */ -export interface UserLoginMigrationRollbackApiInterface { - /** - * - * @summary Rollback a user from a user login migration - * @param {string} userId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationRollbackApiInterface - */ - userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): AxiosPromise; - -} - -/** - * UserLoginMigrationRollbackApi - object-oriented interface - * @export - * @class UserLoginMigrationRollbackApi - * @extends {BaseAPI} - */ -export class UserLoginMigrationRollbackApi extends BaseAPI implements UserLoginMigrationRollbackApiInterface { - /** - * - * @summary Rollback a user from a user login migration - * @param {string} userId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof UserLoginMigrationRollbackApi - */ - public userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any) { - return UserLoginMigrationRollbackApiFp(this.configuration).userLoginMigrationRollbackControllerMigrateUserLogin(userId, options).then((request) => request(this.axios, this.basePath)); - } -} - - -/** - * VideoConferenceApi - axios parameter creator - * @export - */ -export const VideoConferenceApiAxiosParamCreator = function (configuration?: Configuration) { - return { - /** - * Use this endpoint to end a running video conference. - * @summary Ends a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceControllerEnd: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { - // verify required parameter 'scope' is not null or undefined - assertParamExists('videoConferenceControllerEnd', 'scope', scope) - // verify required parameter 'scopeId' is not null or undefined - assertParamExists('videoConferenceControllerEnd', 'scopeId', scopeId) - const localVarPath = `/videoconference2/{scope}/{scopeId}/end` - .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) - .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Use this endpoint to get information about a running video conference. - * @summary Returns information about a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceControllerInfo: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { - // verify required parameter 'scope' is not null or undefined - assertParamExists('videoConferenceControllerInfo', 'scope', scope) - // verify required parameter 'scopeId' is not null or undefined - assertParamExists('videoConferenceControllerInfo', 'scopeId', scopeId) - const localVarPath = `/videoconference2/{scope}/{scopeId}/info` - .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) - .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Use this endpoint to get a link to join an existing video conference. The conference must be running. - * @summary Creates a join link for a video conference, if it has started. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceControllerJoin: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { - // verify required parameter 'scope' is not null or undefined - assertParamExists('videoConferenceControllerJoin', 'scope', scope) - // verify required parameter 'scopeId' is not null or undefined - assertParamExists('videoConferenceControllerJoin', 'scopeId', scopeId) - const localVarPath = `/videoconference2/{scope}/{scopeId}/join` - .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) - .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. - * @summary Creates the video conference, if it has not started yet. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceControllerStart: async (scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options: any = {}): Promise => { - // verify required parameter 'scope' is not null or undefined - assertParamExists('videoConferenceControllerStart', 'scope', scope) - // verify required parameter 'scopeId' is not null or undefined - assertParamExists('videoConferenceControllerStart', 'scopeId', scopeId) - // verify required parameter 'videoConferenceCreateParams' is not null or undefined - assertParamExists('videoConferenceControllerStart', 'videoConferenceCreateParams', videoConferenceCreateParams) - const localVarPath = `/videoconference2/{scope}/{scopeId}/start` - .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) - .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(videoConferenceCreateParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. - * @param {string} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceDeprecatedControllerCreateAndJoin: async (scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options: any = {}): Promise => { - // verify required parameter 'scope' is not null or undefined - assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'scope', scope) - // verify required parameter 'scopeId' is not null or undefined - assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'scopeId', scopeId) - // verify required parameter 'videoConferenceCreateParams' is not null or undefined - assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'videoConferenceCreateParams', videoConferenceCreateParams) - const localVarPath = `/videoconference/{scope}/{scopeId}` - .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) - .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - localVarHeaderParameter['Content-Type'] = 'application/json'; - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - localVarRequestOptions.data = serializeDataIfNeeded(videoConferenceCreateParams, localVarRequestOptions, configuration) - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Ends a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceDeprecatedControllerEnd: async (scope: string, scopeId: string, options: any = {}): Promise => { - // verify required parameter 'scope' is not null or undefined - assertParamExists('videoConferenceDeprecatedControllerEnd', 'scope', scope) - // verify required parameter 'scopeId' is not null or undefined - assertParamExists('videoConferenceDeprecatedControllerEnd', 'scopeId', scopeId) - const localVarPath = `/videoconference/{scope}/{scopeId}` - .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) - .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - /** - * - * @summary Returns information about a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceDeprecatedControllerInfo: async (scope: string, scopeId: string, options: any = {}): Promise => { - // verify required parameter 'scope' is not null or undefined - assertParamExists('videoConferenceDeprecatedControllerInfo', 'scope', scope) - // verify required parameter 'scopeId' is not null or undefined - assertParamExists('videoConferenceDeprecatedControllerInfo', 'scopeId', scopeId) - const localVarPath = `/videoconference/{scope}/{scopeId}` - .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) - .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); - // use dummy base URL string because the URL constructor only accepts absolute URLs. - const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); - let baseOptions; - if (configuration) { - baseOptions = configuration.baseOptions; - } - - const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; - const localVarHeaderParameter = {} as any; - const localVarQueryParameter = {} as any; - - // authentication bearer required - // http bearer authentication required - await setBearerAuthToObject(localVarHeaderParameter, configuration) - - - - setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); - let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; - localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; - - return { - url: toPathString(localVarUrlObj), - options: localVarRequestOptions, - }; - }, - } -}; - -/** - * VideoConferenceApi - functional programming interface - * @export - */ -export const VideoConferenceApiFp = function(configuration?: Configuration) { - const localVarAxiosParamCreator = VideoConferenceApiAxiosParamCreator(configuration) - return { - /** - * Use this endpoint to end a running video conference. - * @summary Ends a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerEnd(scope, scopeId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Use this endpoint to get information about a running video conference. - * @summary Returns information about a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerInfo(scope, scopeId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Use this endpoint to get a link to join an existing video conference. The conference must be running. - * @summary Creates a join link for a video conference, if it has started. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerJoin(scope, scopeId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. - * @summary Creates the video conference, if it has not started yet. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. - * @param {string} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Ends a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerEnd(scope, scopeId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - /** - * - * @summary Returns information about a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - async videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { - const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerInfo(scope, scopeId, options); - return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); - }, - } -}; - -/** - * VideoConferenceApi - factory interface - * @export - */ -export const VideoConferenceApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { - const localVarFp = VideoConferenceApiFp(configuration) - return { - /** - * Use this endpoint to end a running video conference. - * @summary Ends a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { - return localVarFp.videoConferenceControllerEnd(scope, scopeId, options).then((request) => request(axios, basePath)); - }, - /** - * Use this endpoint to get information about a running video conference. - * @summary Returns information about a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { - return localVarFp.videoConferenceControllerInfo(scope, scopeId, options).then((request) => request(axios, basePath)); - }, - /** - * Use this endpoint to get a link to join an existing video conference. The conference must be running. - * @summary Creates a join link for a video conference, if it has started. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { - return localVarFp.videoConferenceControllerJoin(scope, scopeId, options).then((request) => request(axios, basePath)); - }, - /** - * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. - * @summary Creates the video conference, if it has not started yet. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise { - return localVarFp.videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. - * @param {string} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise { - return localVarFp.videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Ends a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): AxiosPromise { - return localVarFp.videoConferenceDeprecatedControllerEnd(scope, scopeId, options).then((request) => request(axios, basePath)); - }, - /** - * - * @summary Returns information about a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - */ - videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): AxiosPromise { - return localVarFp.videoConferenceDeprecatedControllerInfo(scope, scopeId, options).then((request) => request(axios, basePath)); - }, - }; -}; - -/** - * VideoConferenceApi - interface - * @export - * @interface VideoConferenceApi - */ -export interface VideoConferenceApiInterface { - /** - * Use this endpoint to end a running video conference. - * @summary Ends a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApiInterface - */ - videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; - - /** - * Use this endpoint to get information about a running video conference. - * @summary Returns information about a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApiInterface - */ - videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; - - /** - * Use this endpoint to get a link to join an existing video conference. The conference must be running. - * @summary Creates a join link for a video conference, if it has started. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApiInterface - */ - videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; - - /** - * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. - * @summary Creates the video conference, if it has not started yet. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApiInterface - */ - videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise; - - /** - * - * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. - * @param {string} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApiInterface - */ - videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise; - - /** - * - * @summary Ends a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApiInterface - */ - videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): AxiosPromise; - - /** - * - * @summary Returns information about a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApiInterface - */ - videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): AxiosPromise; - -} - -/** - * VideoConferenceApi - object-oriented interface - * @export - * @class VideoConferenceApi - * @extends {BaseAPI} - */ -export class VideoConferenceApi extends BaseAPI implements VideoConferenceApiInterface { - /** - * Use this endpoint to end a running video conference. - * @summary Ends a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApi - */ - public videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any) { - return VideoConferenceApiFp(this.configuration).videoConferenceControllerEnd(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Use this endpoint to get information about a running video conference. - * @summary Returns information about a running video conference. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApi - */ - public videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any) { - return VideoConferenceApiFp(this.configuration).videoConferenceControllerInfo(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Use this endpoint to get a link to join an existing video conference. The conference must be running. - * @summary Creates a join link for a video conference, if it has started. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApi - */ - public videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any) { - return VideoConferenceApiFp(this.configuration).videoConferenceControllerJoin(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. - * @summary Creates the video conference, if it has not started yet. - * @param {VideoConferenceScope} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApi - */ - public videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any) { - return VideoConferenceApiFp(this.configuration).videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. - * @param {string} scope - * @param {string} scopeId - * @param {VideoConferenceCreateParams} videoConferenceCreateParams - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApi - */ - public videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any) { - return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Ends a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApi - */ - public videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any) { - return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerEnd(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); - } - - /** - * - * @summary Returns information about a running video conference. - * @param {string} scope - * @param {string} scopeId - * @param {*} [options] Override http request option. - * @throws {RequiredError} - * @memberof VideoConferenceApi - */ - public videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any) { - return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerInfo(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); - } -} +export * from './api/account-api'; +export * from './api/admin-students-api'; +export * from './api/admin-teachers-api'; +export * from './api/alert-api'; +export * from './api/authentication-api'; +export * from './api/authorization-api'; +export * from './api/board-api'; +export * from './api/board-card-api'; +export * from './api/board-column-api'; +export * from './api/board-element-api'; +export * from './api/board-submission-api'; +export * from './api/collaborative-storage-api'; +export * from './api/collaborative-text-editor-api'; +export * from './api/courses-api'; +export * from './api/dashboard-api'; +export * from './api/default-api'; +export * from './api/group-api'; +export * from './api/lesson-api'; +export * from './api/me-api'; +export * from './api/media-board-api'; +export * from './api/media-element-api'; +export * from './api/media-line-api'; +export * from './api/meta-tag-extractor-api'; +export * from './api/news-api'; +export * from './api/oauth2-api'; +export * from './api/pseudonym-api'; +export * from './api/rooms-api'; +export * from './api/ssoapi'; +export * from './api/school-api'; +export * from './api/share-token-api'; +export * from './api/submission-api'; +export * from './api/systems-api'; +export * from './api/task-api'; +export * from './api/tool-api'; +export * from './api/user-api'; +export * from './api/user-import-api'; +export * from './api/user-login-migration-api'; +export * from './api/user-login-migration-rollback-api'; +export * from './api/video-conference-api'; diff --git a/src/serverApi/v3/api/account-api.ts b/src/serverApi/v3/api/account-api.ts new file mode 100644 index 0000000..75d1308 --- /dev/null +++ b/src/serverApi/v3/api/account-api.ts @@ -0,0 +1,614 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { AccountByIdBodyParams } from '../models'; +// @ts-ignore +import { AccountResponse } from '../models'; +// @ts-ignore +import { AccountSearchListResponse } from '../models'; +// @ts-ignore +import { EntityNotFoundError } from '../models'; +// @ts-ignore +import { ForbiddenOperationError } from '../models'; +// @ts-ignore +import { PatchMyAccountParams } from '../models'; +// @ts-ignore +import { PatchMyPasswordParams } from '../models'; +// @ts-ignore +import { ValidationError } from '../models'; +/** + * AccountApi - axios parameter creator + * @export + */ +export const AccountApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerDeleteAccountById: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('accountControllerDeleteAccountById', 'id', id) + const localVarPath = `/account/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerFindAccountById: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('accountControllerFindAccountById', 'id', id) + const localVarPath = `/account/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerReplaceMyPassword: async (patchMyPasswordParams: PatchMyPasswordParams, options: any = {}): Promise => { + // verify required parameter 'patchMyPasswordParams' is not null or undefined + assertParamExists('accountControllerReplaceMyPassword', 'patchMyPasswordParams', patchMyPasswordParams) + const localVarPath = `/account/me/password`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchMyPasswordParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerSearchAccounts: async (type: 'userId' | 'username', value: string, skip?: number, limit?: number, options: any = {}): Promise => { + // verify required parameter 'type' is not null or undefined + assertParamExists('accountControllerSearchAccounts', 'type', type) + // verify required parameter 'value' is not null or undefined + assertParamExists('accountControllerSearchAccounts', 'value', value) + const localVarPath = `/account`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (type !== undefined) { + localVarQueryParameter['type'] = type; + } + + if (value !== undefined) { + localVarQueryParameter['value'] = value; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerUpdateAccountById: async (id: string, accountByIdBodyParams: AccountByIdBodyParams, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('accountControllerUpdateAccountById', 'id', id) + // verify required parameter 'accountByIdBodyParams' is not null or undefined + assertParamExists('accountControllerUpdateAccountById', 'accountByIdBodyParams', accountByIdBodyParams) + const localVarPath = `/account/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(accountByIdBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerUpdateMyAccount: async (patchMyAccountParams: PatchMyAccountParams, options: any = {}): Promise => { + // verify required parameter 'patchMyAccountParams' is not null or undefined + assertParamExists('accountControllerUpdateMyAccount', 'patchMyAccountParams', patchMyAccountParams) + const localVarPath = `/account/me`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchMyAccountParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AccountApi - functional programming interface + * @export + */ +export const AccountApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AccountApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerDeleteAccountById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerDeleteAccountById(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerFindAccountById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerFindAccountById(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerReplaceMyPassword(patchMyPasswordParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerSearchAccounts(type, value, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerUpdateAccountById(id, accountByIdBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.accountControllerUpdateMyAccount(patchMyAccountParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AccountApi - factory interface + * @export + */ +export const AccountApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AccountApiFp(configuration) + return { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerDeleteAccountById(id: string, options?: any): AxiosPromise { + return localVarFp.accountControllerDeleteAccountById(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerFindAccountById(id: string, options?: any): AxiosPromise { + return localVarFp.accountControllerFindAccountById(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): AxiosPromise { + return localVarFp.accountControllerReplaceMyPassword(patchMyPasswordParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.accountControllerSearchAccounts(type, value, skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): AxiosPromise { + return localVarFp.accountControllerUpdateAccountById(id, accountByIdBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): AxiosPromise { + return localVarFp.accountControllerUpdateMyAccount(patchMyAccountParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AccountApi - interface + * @export + * @interface AccountApi + */ +export interface AccountApiInterface { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerDeleteAccountById(id: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerFindAccountById(id: string, options?: any): AxiosPromise; + + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any): AxiosPromise; + + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApiInterface + */ + accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any): AxiosPromise; + +} + +/** + * AccountApi - object-oriented interface + * @export + * @class AccountApi + * @extends {BaseAPI} + */ +export class AccountApi extends BaseAPI implements AccountApiInterface { + /** + * + * @summary Deletes an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerDeleteAccountById(id: string, options?: any) { + return AccountApiFp(this.configuration).accountControllerDeleteAccountById(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerFindAccountById(id: string, options?: any) { + return AccountApiFp(this.configuration).accountControllerFindAccountById(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates the the temporary account password for the authenticated user. + * @param {PatchMyPasswordParams} patchMyPasswordParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerReplaceMyPassword(patchMyPasswordParams: PatchMyPasswordParams, options?: any) { + return AccountApiFp(this.configuration).accountControllerReplaceMyPassword(patchMyPasswordParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns all accounts which satisfies the given criteria. For unlimited access Superhero role is REQUIRED. + * @param {'userId' | 'username'} type The search criteria. + * @param {string} value The search value. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerSearchAccounts(type: 'userId' | 'username', value: string, skip?: number, limit?: number, options?: any) { + return AccountApiFp(this.configuration).accountControllerSearchAccounts(type, value, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates an account with given id. Superhero role is REQUIRED. + * @param {string} id The id for the account. + * @param {AccountByIdBodyParams} accountByIdBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerUpdateAccountById(id: string, accountByIdBodyParams: AccountByIdBodyParams, options?: any) { + return AccountApiFp(this.configuration).accountControllerUpdateAccountById(id, accountByIdBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates an account for the authenticated user. + * @param {PatchMyAccountParams} patchMyAccountParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AccountApi + */ + public accountControllerUpdateMyAccount(patchMyAccountParams: PatchMyAccountParams, options?: any) { + return AccountApiFp(this.configuration).accountControllerUpdateMyAccount(patchMyAccountParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/admin-students-api.ts b/src/serverApi/v3/api/admin-students-api.ts new file mode 100644 index 0000000..d5ac039 --- /dev/null +++ b/src/serverApi/v3/api/admin-students-api.ts @@ -0,0 +1,293 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { EntityNotFoundError } from '../models'; +// @ts-ignore +import { ForbiddenOperationError } from '../models'; +// @ts-ignore +import { UserListResponse } from '../models'; +// @ts-ignore +import { UserResponse } from '../models'; +// @ts-ignore +import { ValidationError } from '../models'; +/** + * AdminStudentsApi - axios parameter creator + * @export + */ +export const AdminStudentsApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiStudentsControllerFindStudentById: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('adminApiStudentsControllerFindStudentById', 'id', id) + const localVarPath = `/users/admin/students/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiStudentsControllerSearchStudents: async (skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options: any = {}): Promise => { + const localVarPath = `/users/admin/students`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if ($limit !== undefined) { + localVarQueryParameter['$limit'] = $limit; + } + + if ($skip !== undefined) { + localVarQueryParameter['$skip'] = $skip; + } + + if (classes) { + localVarQueryParameter['classes'] = classes; + } + + if (searchQuery !== undefined) { + localVarQueryParameter['searchQuery'] = searchQuery; + } + + if (users) { + localVarQueryParameter['users'] = users; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AdminStudentsApi - functional programming interface + * @export + */ +export const AdminStudentsApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AdminStudentsApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async adminApiStudentsControllerFindStudentById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiStudentsControllerFindStudentById(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AdminStudentsApi - factory interface + * @export + */ +export const AdminStudentsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AdminStudentsApiFp(configuration) + return { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiStudentsControllerFindStudentById(id: string, options?: any): AxiosPromise { + return localVarFp.adminApiStudentsControllerFindStudentById(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise { + return localVarFp.adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AdminStudentsApi - interface + * @export + * @interface AdminStudentsApi + */ +export interface AdminStudentsApiInterface { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminStudentsApiInterface + */ + adminApiStudentsControllerFindStudentById(id: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminStudentsApiInterface + */ + adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise; + +} + +/** + * AdminStudentsApi - object-oriented interface + * @export + * @class AdminStudentsApi + * @extends {BaseAPI} + */ +export class AdminStudentsApi extends BaseAPI implements AdminStudentsApiInterface { + /** + * + * @summary Returns an student with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminStudentsApi + */ + public adminApiStudentsControllerFindStudentById(id: string, options?: any) { + return AdminStudentsApiFp(this.configuration).adminApiStudentsControllerFindStudentById(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns all students which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminStudentsApi + */ + public adminApiStudentsControllerSearchStudents(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any) { + return AdminStudentsApiFp(this.configuration).adminApiStudentsControllerSearchStudents(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/admin-teachers-api.ts b/src/serverApi/v3/api/admin-teachers-api.ts new file mode 100644 index 0000000..3b3f212 --- /dev/null +++ b/src/serverApi/v3/api/admin-teachers-api.ts @@ -0,0 +1,293 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { EntityNotFoundError } from '../models'; +// @ts-ignore +import { ForbiddenOperationError } from '../models'; +// @ts-ignore +import { UserListResponse } from '../models'; +// @ts-ignore +import { UserResponse } from '../models'; +// @ts-ignore +import { ValidationError } from '../models'; +/** + * AdminTeachersApi - axios parameter creator + * @export + */ +export const AdminTeachersApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiTeachersControllerFindTeacherById: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('adminApiTeachersControllerFindTeacherById', 'id', id) + const localVarPath = `/users/admin/teachers/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiTeachersControllerSearchTeachers: async (skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options: any = {}): Promise => { + const localVarPath = `/users/admin/teachers`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if ($limit !== undefined) { + localVarQueryParameter['$limit'] = $limit; + } + + if ($skip !== undefined) { + localVarQueryParameter['$skip'] = $skip; + } + + if (classes) { + localVarQueryParameter['classes'] = classes; + } + + if (searchQuery !== undefined) { + localVarQueryParameter['searchQuery'] = searchQuery; + } + + if (users) { + localVarQueryParameter['users'] = users; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AdminTeachersApi - functional programming interface + * @export + */ +export const AdminTeachersApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AdminTeachersApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async adminApiTeachersControllerFindTeacherById(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiTeachersControllerFindTeacherById(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AdminTeachersApi - factory interface + * @export + */ +export const AdminTeachersApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AdminTeachersApiFp(configuration) + return { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiTeachersControllerFindTeacherById(id: string, options?: any): AxiosPromise { + return localVarFp.adminApiTeachersControllerFindTeacherById(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise { + return localVarFp.adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AdminTeachersApi - interface + * @export + * @interface AdminTeachersApi + */ +export interface AdminTeachersApiInterface { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminTeachersApiInterface + */ + adminApiTeachersControllerFindTeacherById(id: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminTeachersApiInterface + */ + adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any): AxiosPromise; + +} + +/** + * AdminTeachersApi - object-oriented interface + * @export + * @class AdminTeachersApi + * @extends {BaseAPI} + */ +export class AdminTeachersApi extends BaseAPI implements AdminTeachersApiInterface { + /** + * + * @summary Returns a teacher with given id. + * @param {string} id The id of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminTeachersApi + */ + public adminApiTeachersControllerFindTeacherById(id: string, options?: any) { + return AdminTeachersApiFp(this.configuration).adminApiTeachersControllerFindTeacherById(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns all teachers which satisfies the given criteria. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {number} [$limit] Page limit, defaults to 25. + * @param {number} [$skip] Number of elements (not pages) to be skipped + * @param {Array} [classes] + * @param {string} [searchQuery] + * @param {Array} [users] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AdminTeachersApi + */ + public adminApiTeachersControllerSearchTeachers(skip?: number, limit?: number, $limit?: number, $skip?: number, classes?: Array, searchQuery?: string, users?: Array, options?: any) { + return AdminTeachersApiFp(this.configuration).adminApiTeachersControllerSearchTeachers(skip, limit, $limit, $skip, classes, searchQuery, users, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/alert-api.ts b/src/serverApi/v3/api/alert-api.ts new file mode 100644 index 0000000..7832fbb --- /dev/null +++ b/src/serverApi/v3/api/alert-api.ts @@ -0,0 +1,137 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { AlertResponse } from '../models'; +/** + * AlertApi - axios parameter creator + * @export + */ +export const AlertApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + alertControllerFind: async (options: any = {}): Promise => { + const localVarPath = `/alert`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AlertApi - functional programming interface + * @export + */ +export const AlertApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AlertApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async alertControllerFind(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.alertControllerFind(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AlertApi - factory interface + * @export + */ +export const AlertApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AlertApiFp(configuration) + return { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + alertControllerFind(options?: any): AxiosPromise { + return localVarFp.alertControllerFind(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AlertApi - interface + * @export + * @interface AlertApi + */ +export interface AlertApiInterface { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AlertApiInterface + */ + alertControllerFind(options?: any): AxiosPromise; + +} + +/** + * AlertApi - object-oriented interface + * @export + * @class AlertApi + * @extends {BaseAPI} + */ +export class AlertApi extends BaseAPI implements AlertApiInterface { + /** + * + * @summary Get allerts + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AlertApi + */ + public alertControllerFind(options?: any) { + return AlertApiFp(this.configuration).alertControllerFind(options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/authentication-api.ts b/src/serverApi/v3/api/authentication-api.ts new file mode 100644 index 0000000..a988e6e --- /dev/null +++ b/src/serverApi/v3/api/authentication-api.ts @@ -0,0 +1,315 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ForbiddenOperationError } from '../models'; +// @ts-ignore +import { LdapAuthorizationBodyParams } from '../models'; +// @ts-ignore +import { LocalAuthorizationBodyParams } from '../models'; +// @ts-ignore +import { LoginResponse } from '../models'; +// @ts-ignore +import { Oauth2AuthorizationBodyParams } from '../models'; +// @ts-ignore +import { ValidationError } from '../models'; +/** + * AuthenticationApi - axios parameter creator + * @export + */ +export const AuthenticationApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginLdap: async (ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options: any = {}): Promise => { + // verify required parameter 'ldapAuthorizationBodyParams' is not null or undefined + assertParamExists('loginControllerLoginLdap', 'ldapAuthorizationBodyParams', ldapAuthorizationBodyParams) + const localVarPath = `/authentication/ldap`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(ldapAuthorizationBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginLocal: async (localAuthorizationBodyParams: LocalAuthorizationBodyParams, options: any = {}): Promise => { + // verify required parameter 'localAuthorizationBodyParams' is not null or undefined + assertParamExists('loginControllerLoginLocal', 'localAuthorizationBodyParams', localAuthorizationBodyParams) + const localVarPath = `/authentication/local`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(localAuthorizationBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginOauth2: async (oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options: any = {}): Promise => { + // verify required parameter 'oauth2AuthorizationBodyParams' is not null or undefined + assertParamExists('loginControllerLoginOauth2', 'oauth2AuthorizationBodyParams', oauth2AuthorizationBodyParams) + const localVarPath = `/authentication/oauth2`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(oauth2AuthorizationBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AuthenticationApi - functional programming interface + * @export + */ +export const AuthenticationApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AuthenticationApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginLdap(ldapAuthorizationBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginLocal(localAuthorizationBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AuthenticationApi - factory interface + * @export + */ +export const AuthenticationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AuthenticationApiFp(configuration) + return { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): AxiosPromise { + return localVarFp.loginControllerLoginLdap(ldapAuthorizationBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): AxiosPromise { + return localVarFp.loginControllerLoginLocal(localAuthorizationBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): AxiosPromise { + return localVarFp.loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AuthenticationApi - interface + * @export + * @interface AuthenticationApi + */ +export interface AuthenticationApiInterface { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApiInterface + */ + loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApiInterface + */ + loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApiInterface + */ + loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any): AxiosPromise; + +} + +/** + * AuthenticationApi - object-oriented interface + * @export + * @class AuthenticationApi + * @extends {BaseAPI} + */ +export class AuthenticationApi extends BaseAPI implements AuthenticationApiInterface { + /** + * + * @summary Starts the login process for users which are authenticated via LDAP + * @param {LdapAuthorizationBodyParams} ldapAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApi + */ + public loginControllerLoginLdap(ldapAuthorizationBodyParams: LdapAuthorizationBodyParams, options?: any) { + return AuthenticationApiFp(this.configuration).loginControllerLoginLdap(ldapAuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Starts the login process for users which are locally managed. + * @param {LocalAuthorizationBodyParams} localAuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApi + */ + public loginControllerLoginLocal(localAuthorizationBodyParams: LocalAuthorizationBodyParams, options?: any) { + return AuthenticationApiFp(this.configuration).loginControllerLoginLocal(localAuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Starts the login process for users which are authenticated via OAuth 2. + * @param {Oauth2AuthorizationBodyParams} oauth2AuthorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthenticationApi + */ + public loginControllerLoginOauth2(oauth2AuthorizationBodyParams: Oauth2AuthorizationBodyParams, options?: any) { + return AuthenticationApiFp(this.configuration).loginControllerLoginOauth2(oauth2AuthorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/authorization-api.ts b/src/serverApi/v3/api/authorization-api.ts new file mode 100644 index 0000000..05917d5 --- /dev/null +++ b/src/serverApi/v3/api/authorization-api.ts @@ -0,0 +1,155 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { AuthorizationBodyParams } from '../models'; +// @ts-ignore +import { AuthorizedReponse } from '../models'; +/** + * AuthorizationApi - axios parameter creator + * @export + */ +export const AuthorizationApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + authorizationReferenceControllerAuthorizeByReference: async (authorizationBodyParams: AuthorizationBodyParams, options: any = {}): Promise => { + // verify required parameter 'authorizationBodyParams' is not null or undefined + assertParamExists('authorizationReferenceControllerAuthorizeByReference', 'authorizationBodyParams', authorizationBodyParams) + const localVarPath = `/authorization/by-reference`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(authorizationBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * AuthorizationApi - functional programming interface + * @export + */ +export const AuthorizationApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = AuthorizationApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * AuthorizationApi - factory interface + * @export + */ +export const AuthorizationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = AuthorizationApiFp(configuration) + return { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): AxiosPromise { + return localVarFp.authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * AuthorizationApi - interface + * @export + * @interface AuthorizationApi + */ +export interface AuthorizationApiInterface { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthorizationApiInterface + */ + authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any): AxiosPromise; + +} + +/** + * AuthorizationApi - object-oriented interface + * @export + * @class AuthorizationApi + * @extends {BaseAPI} + */ +export class AuthorizationApi extends BaseAPI implements AuthorizationApiInterface { + /** + * + * @summary Checks if user is authorized to perform the given operation. + * @param {AuthorizationBodyParams} authorizationBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof AuthorizationApi + */ + public authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams: AuthorizationBodyParams, options?: any) { + return AuthorizationApiFp(this.configuration).authorizationReferenceControllerAuthorizeByReference(authorizationBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/board-api.ts b/src/serverApi/v3/api/board-api.ts new file mode 100644 index 0000000..bf3b080 --- /dev/null +++ b/src/serverApi/v3/api/board-api.ts @@ -0,0 +1,754 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { BoardContextResponse } from '../models'; +// @ts-ignore +import { BoardResponse } from '../models'; +// @ts-ignore +import { ColumnResponse } from '../models'; +// @ts-ignore +import { CopyApiResponse } from '../models'; +// @ts-ignore +import { CreateBoardBodyParams } from '../models'; +// @ts-ignore +import { CreateBoardResponse } from '../models'; +// @ts-ignore +import { UpdateBoardTitleParams } from '../models'; +// @ts-ignore +import { VisibilityBodyParams } from '../models'; +/** + * BoardApi - axios parameter creator + * @export + */ +export const BoardApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCopyBoard: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerCopyBoard', 'boardId', boardId) + const localVarPath = `/boards/{boardId}/copy` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCreateBoard: async (createBoardBodyParams: CreateBoardBodyParams, options: any = {}): Promise => { + // verify required parameter 'createBoardBodyParams' is not null or undefined + assertParamExists('boardControllerCreateBoard', 'createBoardBodyParams', createBoardBodyParams) + const localVarPath = `/boards`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createBoardBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCreateColumn: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerCreateColumn', 'boardId', boardId) + const localVarPath = `/boards/{boardId}/columns` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerDeleteBoard: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerDeleteBoard', 'boardId', boardId) + const localVarPath = `/boards/{boardId}` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerGetBoardContext: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerGetBoardContext', 'boardId', boardId) + const localVarPath = `/boards/{boardId}/context` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerGetBoardSkeleton: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerGetBoardSkeleton', 'boardId', boardId) + const localVarPath = `/boards/{boardId}` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerUpdateBoardTitle: async (boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerUpdateBoardTitle', 'boardId', boardId) + // verify required parameter 'updateBoardTitleParams' is not null or undefined + assertParamExists('boardControllerUpdateBoardTitle', 'updateBoardTitleParams', updateBoardTitleParams) + const localVarPath = `/boards/{boardId}/title` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateBoardTitleParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerUpdateVisibility: async (boardId: string, visibilityBodyParams: VisibilityBodyParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('boardControllerUpdateVisibility', 'boardId', boardId) + // verify required parameter 'visibilityBodyParams' is not null or undefined + assertParamExists('boardControllerUpdateVisibility', 'visibilityBodyParams', visibilityBodyParams) + const localVarPath = `/boards/{boardId}/visibility` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(visibilityBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardApi - functional programming interface + * @export + */ +export const BoardApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerCopyBoard(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCopyBoard(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCreateBoard(createBoardBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerCreateColumn(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerCreateColumn(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerDeleteBoard(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerDeleteBoard(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerGetBoardContext(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerGetBoardContext(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerGetBoardSkeleton(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerGetBoardSkeleton(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardControllerUpdateVisibility(boardId, visibilityBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardApi - factory interface + * @export + */ +export const BoardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardApiFp(configuration) + return { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCopyBoard(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerCopyBoard(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): AxiosPromise { + return localVarFp.boardControllerCreateBoard(createBoardBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerCreateColumn(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerCreateColumn(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerDeleteBoard(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerDeleteBoard(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerGetBoardContext(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerGetBoardContext(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerGetBoardSkeleton(boardId: string, options?: any): AxiosPromise { + return localVarFp.boardControllerGetBoardSkeleton(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): AxiosPromise { + return localVarFp.boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): AxiosPromise { + return localVarFp.boardControllerUpdateVisibility(boardId, visibilityBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardApi - interface + * @export + * @interface BoardApi + */ +export interface BoardApiInterface { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerCopyBoard(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerCreateColumn(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerDeleteBoard(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerGetBoardContext(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerGetBoardSkeleton(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApiInterface + */ + boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardApi - object-oriented interface + * @export + * @class BoardApi + * @extends {BaseAPI} + */ +export class BoardApi extends BaseAPI implements BoardApiInterface { + /** + * + * @summary Create a board copy. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerCopyBoard(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerCopyBoard(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Create a new board. + * @param {CreateBoardBodyParams} createBoardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerCreateBoard(createBoardBodyParams: CreateBoardBodyParams, options?: any) { + return BoardApiFp(this.configuration).boardControllerCreateBoard(createBoardBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Create a new column on a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerCreateColumn(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerCreateColumn(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerDeleteBoard(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerDeleteBoard(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the context of a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerGetBoardContext(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerGetBoardContext(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the skeleton of a a board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerGetBoardSkeleton(boardId: string, options?: any) { + return BoardApiFp(this.configuration).boardControllerGetBoardSkeleton(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the title of a board. + * @param {string} boardId The id of the board. + * @param {UpdateBoardTitleParams} updateBoardTitleParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerUpdateBoardTitle(boardId: string, updateBoardTitleParams: UpdateBoardTitleParams, options?: any) { + return BoardApiFp(this.configuration).boardControllerUpdateBoardTitle(boardId, updateBoardTitleParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the visibility of a board. + * @param {string} boardId The id of the board. + * @param {VisibilityBodyParams} visibilityBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardApi + */ + public boardControllerUpdateVisibility(boardId: string, visibilityBodyParams: VisibilityBodyParams, options?: any) { + return BoardApiFp(this.configuration).boardControllerUpdateVisibility(boardId, visibilityBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/board-card-api.ts b/src/serverApi/v3/api/board-card-api.ts new file mode 100644 index 0000000..bebfe7f --- /dev/null +++ b/src/serverApi/v3/api/board-card-api.ts @@ -0,0 +1,619 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CardListResponse } from '../models'; +// @ts-ignore +import { CreateContentElementBodyParams } from '../models'; +// @ts-ignore +import { DrawingElementResponse } from '../models'; +// @ts-ignore +import { ExternalToolElementResponse } from '../models'; +// @ts-ignore +import { FileElementResponse } from '../models'; +// @ts-ignore +import { LinkElementResponse } from '../models'; +// @ts-ignore +import { MoveCardBodyParams } from '../models'; +// @ts-ignore +import { RenameBodyParams } from '../models'; +// @ts-ignore +import { RichTextElementResponse } from '../models'; +// @ts-ignore +import { SetHeightBodyParams } from '../models'; +// @ts-ignore +import { SubmissionContainerElementResponse } from '../models'; +/** + * BoardCardApi - axios parameter creator + * @export + */ +export const BoardCardApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerCreateElement: async (cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerCreateElement', 'cardId', cardId) + // verify required parameter 'createContentElementBodyParams' is not null or undefined + assertParamExists('cardControllerCreateElement', 'createContentElementBodyParams', createContentElementBodyParams) + const localVarPath = `/cards/{cardId}/elements` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createContentElementBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerDeleteCard: async (cardId: string, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerDeleteCard', 'cardId', cardId) + const localVarPath = `/cards/{cardId}` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerGetCards: async (ids: Array, options: any = {}): Promise => { + // verify required parameter 'ids' is not null or undefined + assertParamExists('cardControllerGetCards', 'ids', ids) + const localVarPath = `/cards`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (ids) { + localVarQueryParameter['ids'] = ids; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerMoveCard: async (cardId: string, moveCardBodyParams: MoveCardBodyParams, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerMoveCard', 'cardId', cardId) + // verify required parameter 'moveCardBodyParams' is not null or undefined + assertParamExists('cardControllerMoveCard', 'moveCardBodyParams', moveCardBodyParams) + const localVarPath = `/cards/{cardId}/position` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveCardBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerUpdateCardHeight: async (cardId: string, setHeightBodyParams: SetHeightBodyParams, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerUpdateCardHeight', 'cardId', cardId) + // verify required parameter 'setHeightBodyParams' is not null or undefined + assertParamExists('cardControllerUpdateCardHeight', 'setHeightBodyParams', setHeightBodyParams) + const localVarPath = `/cards/{cardId}/height` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(setHeightBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerUpdateCardTitle: async (cardId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { + // verify required parameter 'cardId' is not null or undefined + assertParamExists('cardControllerUpdateCardTitle', 'cardId', cardId) + // verify required parameter 'renameBodyParams' is not null or undefined + assertParamExists('cardControllerUpdateCardTitle', 'renameBodyParams', renameBodyParams) + const localVarPath = `/cards/{cardId}/title` + .replace(`{${"cardId"}}`, encodeURIComponent(String(cardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardCardApi - functional programming interface + * @export + */ +export const BoardCardApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardCardApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerCreateElement(cardId, createContentElementBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerDeleteCard(cardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerDeleteCard(cardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerGetCards(ids: Array, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerGetCards(ids, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerMoveCard(cardId, moveCardBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.cardControllerUpdateCardTitle(cardId, renameBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardCardApi - factory interface + * @export + */ +export const BoardCardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardCardApiFp(configuration) + return { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise { + return localVarFp.cardControllerCreateElement(cardId, createContentElementBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerDeleteCard(cardId: string, options?: any): AxiosPromise { + return localVarFp.cardControllerDeleteCard(cardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerGetCards(ids: Array, options?: any): AxiosPromise { + return localVarFp.cardControllerGetCards(ids, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): AxiosPromise { + return localVarFp.cardControllerMoveCard(cardId, moveCardBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): AxiosPromise { + return localVarFp.cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { + return localVarFp.cardControllerUpdateCardTitle(cardId, renameBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardCardApi - interface + * @export + * @interface BoardCardApi + */ +export interface BoardCardApiInterface { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerDeleteCard(cardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerGetCards(ids: Array, options?: any): AxiosPromise; + + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApiInterface + */ + cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardCardApi - object-oriented interface + * @export + * @class BoardCardApi + * @extends {BaseAPI} + */ +export class BoardCardApi extends BaseAPI implements BoardCardApiInterface { + /** + * + * @summary Create a new element on a card. + * @param {string} cardId The id of the card. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerCreateElement(cardId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerCreateElement(cardId, createContentElementBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single card. + * @param {string} cardId The id of the card. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerDeleteCard(cardId: string, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerDeleteCard(cardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get a list of cards by their ids. + * @param {Array} ids Array of Ids to be loaded + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerGetCards(ids: Array, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerGetCards(ids, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single card. + * @param {string} cardId The id of the card. + * @param {MoveCardBodyParams} moveCardBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerMoveCard(cardId: string, moveCardBodyParams: MoveCardBodyParams, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerMoveCard(cardId, moveCardBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the height of a single card. + * @param {string} cardId The id of the card. + * @param {SetHeightBodyParams} setHeightBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerUpdateCardHeight(cardId: string, setHeightBodyParams: SetHeightBodyParams, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerUpdateCardHeight(cardId, setHeightBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the title of a single card. + * @param {string} cardId The id of the card. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardCardApi + */ + public cardControllerUpdateCardTitle(cardId: string, renameBodyParams: RenameBodyParams, options?: any) { + return BoardCardApiFp(this.configuration).cardControllerUpdateCardTitle(cardId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/board-column-api.ts b/src/serverApi/v3/api/board-column-api.ts new file mode 100644 index 0000000..2b5a1e0 --- /dev/null +++ b/src/serverApi/v3/api/board-column-api.ts @@ -0,0 +1,428 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CardResponse } from '../models'; +// @ts-ignore +import { CreateCardBodyParams } from '../models'; +// @ts-ignore +import { MoveColumnBodyParams } from '../models'; +// @ts-ignore +import { RenameBodyParams } from '../models'; +/** + * BoardColumnApi - axios parameter creator + * @export + */ +export const BoardColumnApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerCreateCard: async (columnId: string, createCardBodyParams?: CreateCardBodyParams, options: any = {}): Promise => { + // verify required parameter 'columnId' is not null or undefined + assertParamExists('columnControllerCreateCard', 'columnId', columnId) + const localVarPath = `/columns/{columnId}/cards` + .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createCardBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerDeleteColumn: async (columnId: string, options: any = {}): Promise => { + // verify required parameter 'columnId' is not null or undefined + assertParamExists('columnControllerDeleteColumn', 'columnId', columnId) + const localVarPath = `/columns/{columnId}` + .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerMoveColumn: async (columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options: any = {}): Promise => { + // verify required parameter 'columnId' is not null or undefined + assertParamExists('columnControllerMoveColumn', 'columnId', columnId) + // verify required parameter 'moveColumnBodyParams' is not null or undefined + assertParamExists('columnControllerMoveColumn', 'moveColumnBodyParams', moveColumnBodyParams) + const localVarPath = `/columns/{columnId}/position` + .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveColumnBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerUpdateColumnTitle: async (columnId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { + // verify required parameter 'columnId' is not null or undefined + assertParamExists('columnControllerUpdateColumnTitle', 'columnId', columnId) + // verify required parameter 'renameBodyParams' is not null or undefined + assertParamExists('columnControllerUpdateColumnTitle', 'renameBodyParams', renameBodyParams) + const localVarPath = `/columns/{columnId}/title` + .replace(`{${"columnId"}}`, encodeURIComponent(String(columnId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardColumnApi - functional programming interface + * @export + */ +export const BoardColumnApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardColumnApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerCreateCard(columnId, createCardBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async columnControllerDeleteColumn(columnId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerDeleteColumn(columnId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerMoveColumn(columnId, moveColumnBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.columnControllerUpdateColumnTitle(columnId, renameBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardColumnApi - factory interface + * @export + */ +export const BoardColumnApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardColumnApiFp(configuration) + return { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): AxiosPromise { + return localVarFp.columnControllerCreateCard(columnId, createCardBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerDeleteColumn(columnId: string, options?: any): AxiosPromise { + return localVarFp.columnControllerDeleteColumn(columnId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise { + return localVarFp.columnControllerMoveColumn(columnId, moveColumnBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { + return localVarFp.columnControllerUpdateColumnTitle(columnId, renameBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardColumnApi - interface + * @export + * @interface BoardColumnApi + */ +export interface BoardColumnApiInterface { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApiInterface + */ + columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApiInterface + */ + columnControllerDeleteColumn(columnId: string, options?: any): AxiosPromise; + + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApiInterface + */ + columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApiInterface + */ + columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardColumnApi - object-oriented interface + * @export + * @class BoardColumnApi + * @extends {BaseAPI} + */ +export class BoardColumnApi extends BaseAPI implements BoardColumnApiInterface { + /** + * + * @summary Create a new card on a column. + * @param {string} columnId The id of the column. + * @param {CreateCardBodyParams} [createCardBodyParams] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApi + */ + public columnControllerCreateCard(columnId: string, createCardBodyParams?: CreateCardBodyParams, options?: any) { + return BoardColumnApiFp(this.configuration).columnControllerCreateCard(columnId, createCardBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single column. + * @param {string} columnId The id of the column. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApi + */ + public columnControllerDeleteColumn(columnId: string, options?: any) { + return BoardColumnApiFp(this.configuration).columnControllerDeleteColumn(columnId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single column. + * @param {string} columnId The id of the column. + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApi + */ + public columnControllerMoveColumn(columnId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any) { + return BoardColumnApiFp(this.configuration).columnControllerMoveColumn(columnId, moveColumnBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the title of a single column. + * @param {string} columnId The id of the column. + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardColumnApi + */ + public columnControllerUpdateColumnTitle(columnId: string, renameBodyParams: RenameBodyParams, options?: any) { + return BoardColumnApiFp(this.configuration).columnControllerUpdateColumnTitle(columnId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/board-element-api.ts b/src/serverApi/v3/api/board-element-api.ts new file mode 100644 index 0000000..b11b5cb --- /dev/null +++ b/src/serverApi/v3/api/board-element-api.ts @@ -0,0 +1,523 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CreateSubmissionItemBodyParams } from '../models'; +// @ts-ignore +import { DrawingElementResponse } from '../models'; +// @ts-ignore +import { ExternalToolElementResponse } from '../models'; +// @ts-ignore +import { FileElementResponse } from '../models'; +// @ts-ignore +import { LinkElementResponse } from '../models'; +// @ts-ignore +import { MoveContentElementBody } from '../models'; +// @ts-ignore +import { RichTextElementResponse } from '../models'; +// @ts-ignore +import { SubmissionContainerElementResponse } from '../models'; +// @ts-ignore +import { SubmissionItemResponse } from '../models'; +// @ts-ignore +import { UpdateElementContentBodyParams } from '../models'; +/** + * BoardElementApi - axios parameter creator + * @export + */ +export const BoardElementApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerCreateSubmissionItem: async (contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerCreateSubmissionItem', 'contentElementId', contentElementId) + // verify required parameter 'createSubmissionItemBodyParams' is not null or undefined + assertParamExists('elementControllerCreateSubmissionItem', 'createSubmissionItemBodyParams', createSubmissionItemBodyParams) + const localVarPath = `/elements/{contentElementId}/submissions` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createSubmissionItemBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerDeleteElement: async (contentElementId: string, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerDeleteElement', 'contentElementId', contentElementId) + const localVarPath = `/elements/{contentElementId}` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerMoveElement: async (contentElementId: string, moveContentElementBody: MoveContentElementBody, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerMoveElement', 'contentElementId', contentElementId) + // verify required parameter 'moveContentElementBody' is not null or undefined + assertParamExists('elementControllerMoveElement', 'moveContentElementBody', moveContentElementBody) + const localVarPath = `/elements/{contentElementId}/position` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveContentElementBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerReadPermission: async (contentElementId: string, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerReadPermission', 'contentElementId', contentElementId) + const localVarPath = `/elements/{contentElementId}/permission` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerUpdateElement: async (contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options: any = {}): Promise => { + // verify required parameter 'contentElementId' is not null or undefined + assertParamExists('elementControllerUpdateElement', 'contentElementId', contentElementId) + // verify required parameter 'updateElementContentBodyParams' is not null or undefined + assertParamExists('elementControllerUpdateElement', 'updateElementContentBodyParams', updateElementContentBodyParams) + const localVarPath = `/elements/{contentElementId}/content` + .replace(`{${"contentElementId"}}`, encodeURIComponent(String(contentElementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateElementContentBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardElementApi - functional programming interface + * @export + */ +export const BoardElementApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardElementApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerDeleteElement(contentElementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerDeleteElement(contentElementId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerMoveElement(contentElementId, moveContentElementBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerReadPermission(contentElementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerReadPermission(contentElementId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardElementApi - factory interface + * @export + */ +export const BoardElementApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardElementApiFp(configuration) + return { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): AxiosPromise { + return localVarFp.elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerDeleteElement(contentElementId: string, options?: any): AxiosPromise { + return localVarFp.elementControllerDeleteElement(contentElementId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): AxiosPromise { + return localVarFp.elementControllerMoveElement(contentElementId, moveContentElementBody, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerReadPermission(contentElementId: string, options?: any): AxiosPromise { + return localVarFp.elementControllerReadPermission(contentElementId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): AxiosPromise { + return localVarFp.elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardElementApi - interface + * @export + * @interface BoardElementApi + */ +export interface BoardElementApiInterface { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerDeleteElement(contentElementId: string, options?: any): AxiosPromise; + + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any): AxiosPromise; + + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerReadPermission(contentElementId: string, options?: any): AxiosPromise; + + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApiInterface + */ + elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardElementApi - object-oriented interface + * @export + * @class BoardElementApi + * @extends {BaseAPI} + */ +export class BoardElementApi extends BaseAPI implements BoardElementApiInterface { + /** + * + * @summary Create a new submission item having parent a submission container element. + * @param {string} contentElementId The id of the element. + * @param {CreateSubmissionItemBodyParams} createSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerCreateSubmissionItem(contentElementId: string, createSubmissionItemBodyParams: CreateSubmissionItemBodyParams, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerCreateSubmissionItem(contentElementId, createSubmissionItemBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single content element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerDeleteElement(contentElementId: string, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerDeleteElement(contentElementId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single content element. + * @param {string} contentElementId The id of the element. + * @param {MoveContentElementBody} moveContentElementBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerMoveElement(contentElementId: string, moveContentElementBody: MoveContentElementBody, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerMoveElement(contentElementId, moveContentElementBody, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Check if user has read permission for any board element. + * @param {string} contentElementId The id of the element. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerReadPermission(contentElementId: string, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerReadPermission(contentElementId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update a single content element. + * @param {string} contentElementId The id of the element. + * @param {UpdateElementContentBodyParams} updateElementContentBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardElementApi + */ + public elementControllerUpdateElement(contentElementId: string, updateElementContentBodyParams: UpdateElementContentBodyParams, options?: any) { + return BoardElementApiFp(this.configuration).elementControllerUpdateElement(contentElementId, updateElementContentBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/board-submission-api.ts b/src/serverApi/v3/api/board-submission-api.ts new file mode 100644 index 0000000..5a6b0a0 --- /dev/null +++ b/src/serverApi/v3/api/board-submission-api.ts @@ -0,0 +1,422 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CreateContentElementBodyParams } from '../models'; +// @ts-ignore +import { FileElementResponse } from '../models'; +// @ts-ignore +import { RichTextElementResponse } from '../models'; +// @ts-ignore +import { SubmissionsResponse } from '../models'; +// @ts-ignore +import { UpdateSubmissionItemBodyParams } from '../models'; +/** + * BoardSubmissionApi - axios parameter creator + * @export + */ +export const BoardSubmissionApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerCreateElement: async (submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options: any = {}): Promise => { + // verify required parameter 'submissionItemId' is not null or undefined + assertParamExists('boardSubmissionControllerCreateElement', 'submissionItemId', submissionItemId) + // verify required parameter 'createContentElementBodyParams' is not null or undefined + assertParamExists('boardSubmissionControllerCreateElement', 'createContentElementBodyParams', createContentElementBodyParams) + const localVarPath = `/board-submissions/{submissionItemId}/elements` + .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createContentElementBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerDeleteSubmissionItem: async (submissionItemId: string, options: any = {}): Promise => { + // verify required parameter 'submissionItemId' is not null or undefined + assertParamExists('boardSubmissionControllerDeleteSubmissionItem', 'submissionItemId', submissionItemId) + const localVarPath = `/board-submissions/{submissionItemId}` + .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerGetSubmissionItems: async (submissionContainerId: string, options: any = {}): Promise => { + // verify required parameter 'submissionContainerId' is not null or undefined + assertParamExists('boardSubmissionControllerGetSubmissionItems', 'submissionContainerId', submissionContainerId) + const localVarPath = `/board-submissions/{submissionContainerId}` + .replace(`{${"submissionContainerId"}}`, encodeURIComponent(String(submissionContainerId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerUpdateSubmissionItem: async (submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options: any = {}): Promise => { + // verify required parameter 'submissionItemId' is not null or undefined + assertParamExists('boardSubmissionControllerUpdateSubmissionItem', 'submissionItemId', submissionItemId) + // verify required parameter 'updateSubmissionItemBodyParams' is not null or undefined + assertParamExists('boardSubmissionControllerUpdateSubmissionItem', 'updateSubmissionItemBodyParams', updateSubmissionItemBodyParams) + const localVarPath = `/board-submissions/{submissionItemId}` + .replace(`{${"submissionItemId"}}`, encodeURIComponent(String(submissionItemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateSubmissionItemBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * BoardSubmissionApi - functional programming interface + * @export + */ +export const BoardSubmissionApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = BoardSubmissionApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerGetSubmissionItems(submissionContainerId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * BoardSubmissionApi - factory interface + * @export + */ +export const BoardSubmissionApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = BoardSubmissionApiFp(configuration) + return { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise { + return localVarFp.boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): AxiosPromise { + return localVarFp.boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): AxiosPromise { + return localVarFp.boardSubmissionControllerGetSubmissionItems(submissionContainerId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): AxiosPromise { + return localVarFp.boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * BoardSubmissionApi - interface + * @export + * @interface BoardSubmissionApi + */ +export interface BoardSubmissionApiInterface { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApiInterface + */ + boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApiInterface + */ + boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApiInterface + */ + boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any): AxiosPromise; + + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApiInterface + */ + boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any): AxiosPromise; + +} + +/** + * BoardSubmissionApi - object-oriented interface + * @export + * @class BoardSubmissionApi + * @extends {BaseAPI} + */ +export class BoardSubmissionApi extends BaseAPI implements BoardSubmissionApiInterface { + /** + * + * @summary Create a new element in a submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {CreateContentElementBodyParams} createContentElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApi + */ + public boardSubmissionControllerCreateElement(submissionItemId: string, createContentElementBodyParams: CreateContentElementBodyParams, options?: any) { + return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerCreateElement(submissionItemId, createContentElementBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApi + */ + public boardSubmissionControllerDeleteSubmissionItem(submissionItemId: string, options?: any) { + return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerDeleteSubmissionItem(submissionItemId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get a list of submission items by their parent container. + * @param {string} submissionContainerId The id of the submission container. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApi + */ + public boardSubmissionControllerGetSubmissionItems(submissionContainerId: string, options?: any) { + return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerGetSubmissionItems(submissionContainerId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update a single submission item. + * @param {string} submissionItemId The id of the submission item. + * @param {UpdateSubmissionItemBodyParams} updateSubmissionItemBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof BoardSubmissionApi + */ + public boardSubmissionControllerUpdateSubmissionItem(submissionItemId: string, updateSubmissionItemBodyParams: UpdateSubmissionItemBodyParams, options?: any) { + return BoardSubmissionApiFp(this.configuration).boardSubmissionControllerUpdateSubmissionItem(submissionItemId, updateSubmissionItemBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/collaborative-storage-api.ts b/src/serverApi/v3/api/collaborative-storage-api.ts new file mode 100644 index 0000000..9dad5d9 --- /dev/null +++ b/src/serverApi/v3/api/collaborative-storage-api.ts @@ -0,0 +1,162 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { TeamPermissionsBody } from '../models'; +/** + * CollaborativeStorageApi - axios parameter creator + * @export + */ +export const CollaborativeStorageApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeStorageControllerUpdateTeamPermissionsForRole: async (teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options: any = {}): Promise => { + // verify required parameter 'teamId' is not null or undefined + assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'teamId', teamId) + // verify required parameter 'roleId' is not null or undefined + assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'roleId', roleId) + // verify required parameter 'teamPermissionsBody' is not null or undefined + assertParamExists('collaborativeStorageControllerUpdateTeamPermissionsForRole', 'teamPermissionsBody', teamPermissionsBody) + const localVarPath = `/collaborative-storage/team/{teamId}/role/{roleId}/permissions` + .replace(`{${"teamId"}}`, encodeURIComponent(String(teamId))) + .replace(`{${"roleId"}}`, encodeURIComponent(String(roleId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(teamPermissionsBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * CollaborativeStorageApi - functional programming interface + * @export + */ +export const CollaborativeStorageApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = CollaborativeStorageApiAxiosParamCreator(configuration) + return { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * CollaborativeStorageApi - factory interface + * @export + */ +export const CollaborativeStorageApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = CollaborativeStorageApiFp(configuration) + return { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): AxiosPromise { + return localVarFp.collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * CollaborativeStorageApi - interface + * @export + * @interface CollaborativeStorageApi + */ +export interface CollaborativeStorageApiInterface { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeStorageApiInterface + */ + collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any): AxiosPromise; + +} + +/** + * CollaborativeStorageApi - object-oriented interface + * @export + * @class CollaborativeStorageApi + * @extends {BaseAPI} + */ +export class CollaborativeStorageApi extends BaseAPI implements CollaborativeStorageApiInterface { + /** + * Updates the CRUD Permissions(+Share) for a specific Role in a Team + * @param {string} teamId + * @param {string} roleId + * @param {TeamPermissionsBody} teamPermissionsBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeStorageApi + */ + public collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId: string, roleId: string, teamPermissionsBody: TeamPermissionsBody, options?: any) { + return CollaborativeStorageApiFp(this.configuration).collaborativeStorageControllerUpdateTeamPermissionsForRole(teamId, roleId, teamPermissionsBody, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/collaborative-text-editor-api.ts b/src/serverApi/v3/api/collaborative-text-editor-api.ts new file mode 100644 index 0000000..bb7b251 --- /dev/null +++ b/src/serverApi/v3/api/collaborative-text-editor-api.ts @@ -0,0 +1,234 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CollaborativeTextEditorParentType } from '../models'; +// @ts-ignore +import { CollaborativeTextEditorResponse } from '../models'; +/** + * CollaborativeTextEditorApi - axios parameter creator + * @export + */ +export const CollaborativeTextEditorApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeTextEditorControllerDeleteSessionsByUser: async (options: any = {}): Promise => { + const localVarPath = `/collaborative-text-editor/delete-sessions`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent: async (parentId: string, parentType: CollaborativeTextEditorParentType, options: any = {}): Promise => { + // verify required parameter 'parentId' is not null or undefined + assertParamExists('collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent', 'parentId', parentId) + // verify required parameter 'parentType' is not null or undefined + assertParamExists('collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent', 'parentType', parentType) + const localVarPath = `/collaborative-text-editor/{parentType}/{parentId}` + .replace(`{${"parentId"}}`, encodeURIComponent(String(parentId))) + .replace(`{${"parentType"}}`, encodeURIComponent(String(parentType))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * CollaborativeTextEditorApi - functional programming interface + * @export + */ +export const CollaborativeTextEditorApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = CollaborativeTextEditorApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeTextEditorControllerDeleteSessionsByUser(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * CollaborativeTextEditorApi - factory interface + * @export + */ +export const CollaborativeTextEditorApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = CollaborativeTextEditorApiFp(configuration) + return { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): AxiosPromise { + return localVarFp.collaborativeTextEditorControllerDeleteSessionsByUser(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): AxiosPromise { + return localVarFp.collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * CollaborativeTextEditorApi - interface + * @export + * @interface CollaborativeTextEditorApi + */ +export interface CollaborativeTextEditorApiInterface { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeTextEditorApiInterface + */ + collaborativeTextEditorControllerDeleteSessionsByUser(options?: any): AxiosPromise; + + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeTextEditorApiInterface + */ + collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any): AxiosPromise; + +} + +/** + * CollaborativeTextEditorApi - object-oriented interface + * @export + * @class CollaborativeTextEditorApi + * @extends {BaseAPI} + */ +export class CollaborativeTextEditorApi extends BaseAPI implements CollaborativeTextEditorApiInterface { + /** + * + * @summary Delete all etherpad sessions for user + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeTextEditorApi + */ + public collaborativeTextEditorControllerDeleteSessionsByUser(options?: any) { + return CollaborativeTextEditorApiFp(this.configuration).collaborativeTextEditorControllerDeleteSessionsByUser(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get or create CollaborativeTextEditor for parent + * @param {string} parentId + * @param {CollaborativeTextEditorParentType} parentType Parent type of the collaborative text editor. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CollaborativeTextEditorApi + */ + public collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId: string, parentType: CollaborativeTextEditorParentType, options?: any) { + return CollaborativeTextEditorApiFp(this.configuration).collaborativeTextEditorControllerGetOrCreateCollaborativeTextEditorForParent(parentId, parentType, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/courses-api.ts b/src/serverApi/v3/api/courses-api.ts new file mode 100644 index 0000000..f0c56a9 --- /dev/null +++ b/src/serverApi/v3/api/courses-api.ts @@ -0,0 +1,503 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { CourseExportBodyParams } from '../models'; +// @ts-ignore +import { CourseMetadataListResponse } from '../models'; +/** + * CoursesApi - axios parameter creator + * @export + */ +export const CoursesApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerExportCourse: async (courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options: any = {}): Promise => { + // verify required parameter 'courseId' is not null or undefined + assertParamExists('courseControllerExportCourse', 'courseId', courseId) + // verify required parameter 'version' is not null or undefined + assertParamExists('courseControllerExportCourse', 'version', version) + // verify required parameter 'courseExportBodyParams' is not null or undefined + assertParamExists('courseControllerExportCourse', 'courseExportBodyParams', courseExportBodyParams) + const localVarPath = `/courses/{courseId}/export` + .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (version !== undefined) { + localVarQueryParameter['version'] = version; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(courseExportBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerFindForUser: async (skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/courses`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerGetUserPermissions: async (courseId: string, options: any = {}): Promise => { + // verify required parameter 'courseId' is not null or undefined + assertParamExists('courseControllerGetUserPermissions', 'courseId', courseId) + const localVarPath = `/courses/{courseId}/user-permissions` + .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerImportCourse: async (file: any, options: any = {}): Promise => { + // verify required parameter 'file' is not null or undefined + assertParamExists('courseControllerImportCourse', 'file', file) + const localVarPath = `/courses/import`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + const localVarFormParams = new ((configuration && configuration.formDataCtor) || FormData)(); + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + if (file !== undefined) { + localVarFormParams.append('file', file as any); + } + + + localVarHeaderParameter['Content-Type'] = 'multipart/form-data'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = localVarFormParams; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerStopSynchronization: async (courseId: string, options: any = {}): Promise => { + // verify required parameter 'courseId' is not null or undefined + assertParamExists('courseControllerStopSynchronization', 'courseId', courseId) + const localVarPath = `/courses/{courseId}/stop-sync` + .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * CoursesApi - functional programming interface + * @export + */ +export const CoursesApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = CoursesApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerExportCourse(courseId, version, courseExportBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerFindForUser(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerFindForUser(skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerGetUserPermissions(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerGetUserPermissions(courseId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerImportCourse(file: any, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerImportCourse(file, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async courseControllerStopSynchronization(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.courseControllerStopSynchronization(courseId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * CoursesApi - factory interface + * @export + */ +export const CoursesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = CoursesApiFp(configuration) + return { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): AxiosPromise { + return localVarFp.courseControllerExportCourse(courseId, version, courseExportBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerFindForUser(skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.courseControllerFindForUser(skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerGetUserPermissions(courseId: string, options?: any): AxiosPromise { + return localVarFp.courseControllerGetUserPermissions(courseId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerImportCourse(file: any, options?: any): AxiosPromise { + return localVarFp.courseControllerImportCourse(file, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + courseControllerStopSynchronization(courseId: string, options?: any): AxiosPromise { + return localVarFp.courseControllerStopSynchronization(courseId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * CoursesApi - interface + * @export + * @interface CoursesApi + */ +export interface CoursesApiInterface { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any): AxiosPromise; + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerFindForUser(skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerGetUserPermissions(courseId: string, options?: any): AxiosPromise; + + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerImportCourse(file: any, options?: any): AxiosPromise; + + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApiInterface + */ + courseControllerStopSynchronization(courseId: string, options?: any): AxiosPromise; + +} + +/** + * CoursesApi - object-oriented interface + * @export + * @class CoursesApi + * @extends {BaseAPI} + */ +export class CoursesApi extends BaseAPI implements CoursesApiInterface { + /** + * + * @param {string} courseId The id of the course + * @param {'1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0'} version The version of CC export + * @param {CourseExportBodyParams} courseExportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerExportCourse(courseId: string, version: '1.0.0' | '1.1.0' | '1.2.0' | '1.3.0' | '1.4.0', courseExportBodyParams: CourseExportBodyParams, options?: any) { + return CoursesApiFp(this.configuration).courseControllerExportCourse(courseId, version, courseExportBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerFindForUser(skip?: number, limit?: number, options?: any) { + return CoursesApiFp(this.configuration).courseControllerFindForUser(skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get permissions for a user in a course. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerGetUserPermissions(courseId: string, options?: any) { + return CoursesApiFp(this.configuration).courseControllerGetUserPermissions(courseId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Imports a course from a Common Cartridge file. + * @param {any} file The Common Cartridge file to import. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerImportCourse(file: any, options?: any) { + return CoursesApiFp(this.configuration).courseControllerImportCourse(file, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Stop the synchronization of a course with a group. + * @param {string} courseId The id of the course + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof CoursesApi + */ + public courseControllerStopSynchronization(courseId: string, options?: any) { + return CoursesApiFp(this.configuration).courseControllerStopSynchronization(courseId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/dashboard-api.ts b/src/serverApi/v3/api/dashboard-api.ts new file mode 100644 index 0000000..8b5ad4f --- /dev/null +++ b/src/serverApi/v3/api/dashboard-api.ts @@ -0,0 +1,334 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { DashboardResponse } from '../models'; +// @ts-ignore +import { MoveElementParams } from '../models'; +// @ts-ignore +import { PatchGroupParams } from '../models'; +/** + * DashboardApi - axios parameter creator + * @export + */ +export const DashboardApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerFindForUser: async (options: any = {}): Promise => { + const localVarPath = `/dashboard`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerMoveElement: async (dashboardId: string, moveElementParams: MoveElementParams, options: any = {}): Promise => { + // verify required parameter 'dashboardId' is not null or undefined + assertParamExists('dashboardControllerMoveElement', 'dashboardId', dashboardId) + // verify required parameter 'moveElementParams' is not null or undefined + assertParamExists('dashboardControllerMoveElement', 'moveElementParams', moveElementParams) + const localVarPath = `/dashboard/{dashboardId}/moveElement` + .replace(`{${"dashboardId"}}`, encodeURIComponent(String(dashboardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveElementParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerPatchGroup: async (dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options: any = {}): Promise => { + // verify required parameter 'dashboardId' is not null or undefined + assertParamExists('dashboardControllerPatchGroup', 'dashboardId', dashboardId) + // verify required parameter 'x' is not null or undefined + assertParamExists('dashboardControllerPatchGroup', 'x', x) + // verify required parameter 'y' is not null or undefined + assertParamExists('dashboardControllerPatchGroup', 'y', y) + // verify required parameter 'patchGroupParams' is not null or undefined + assertParamExists('dashboardControllerPatchGroup', 'patchGroupParams', patchGroupParams) + const localVarPath = `/dashboard/{dashboardId}/element` + .replace(`{${"dashboardId"}}`, encodeURIComponent(String(dashboardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (x !== undefined) { + localVarQueryParameter['x'] = x; + } + + if (y !== undefined) { + localVarQueryParameter['y'] = y; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchGroupParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * DashboardApi - functional programming interface + * @export + */ +export const DashboardApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = DashboardApiAxiosParamCreator(configuration) + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async dashboardControllerFindForUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerFindForUser(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerMoveElement(dashboardId, moveElementParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * DashboardApi - factory interface + * @export + */ +export const DashboardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = DashboardApiFp(configuration) + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerFindForUser(options?: any): AxiosPromise { + return localVarFp.dashboardControllerFindForUser(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): AxiosPromise { + return localVarFp.dashboardControllerMoveElement(dashboardId, moveElementParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): AxiosPromise { + return localVarFp.dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * DashboardApi - interface + * @export + * @interface DashboardApi + */ +export interface DashboardApiInterface { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApiInterface + */ + dashboardControllerFindForUser(options?: any): AxiosPromise; + + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApiInterface + */ + dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any): AxiosPromise; + + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApiInterface + */ + dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any): AxiosPromise; + +} + +/** + * DashboardApi - object-oriented interface + * @export + * @class DashboardApi + * @extends {BaseAPI} + */ +export class DashboardApi extends BaseAPI implements DashboardApiInterface { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApi + */ + public dashboardControllerFindForUser(options?: any) { + return DashboardApiFp(this.configuration).dashboardControllerFindForUser(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {MoveElementParams} moveElementParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApi + */ + public dashboardControllerMoveElement(dashboardId: string, moveElementParams: MoveElementParams, options?: any) { + return DashboardApiFp(this.configuration).dashboardControllerMoveElement(dashboardId, moveElementParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} dashboardId The id of the dashboard. + * @param {number} x + * @param {number} y + * @param {PatchGroupParams} patchGroupParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DashboardApi + */ + public dashboardControllerPatchGroup(dashboardId: string, x: number, y: number, patchGroupParams: PatchGroupParams, options?: any) { + return DashboardApiFp(this.configuration).dashboardControllerPatchGroup(dashboardId, x, y, patchGroupParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/default-api.ts b/src/serverApi/v3/api/default-api.ts new file mode 100644 index 0000000..69e85b9 --- /dev/null +++ b/src/serverApi/v3/api/default-api.ts @@ -0,0 +1,206 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ConfigResponse } from '../models'; +/** + * DefaultApi - axios parameter creator + * @export + */ +export const DefaultApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + serverConfigControllerPublicConfig: async (options: any = {}): Promise => { + const localVarPath = `/config/public`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + serverControllerGetHello: async (options: any = {}): Promise => { + const localVarPath = `/`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * DefaultApi - functional programming interface + * @export + */ +export const DefaultApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = DefaultApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async serverConfigControllerPublicConfig(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.serverConfigControllerPublicConfig(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async serverControllerGetHello(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.serverControllerGetHello(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * DefaultApi - factory interface + * @export + */ +export const DefaultApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = DefaultApiFp(configuration) + return { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + serverConfigControllerPublicConfig(options?: any): AxiosPromise { + return localVarFp.serverConfigControllerPublicConfig(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + serverControllerGetHello(options?: any): AxiosPromise { + return localVarFp.serverControllerGetHello(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * DefaultApi - interface + * @export + * @interface DefaultApi + */ +export interface DefaultApiInterface { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DefaultApiInterface + */ + serverConfigControllerPublicConfig(options?: any): AxiosPromise; + + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DefaultApiInterface + */ + serverControllerGetHello(options?: any): AxiosPromise; + +} + +/** + * DefaultApi - object-oriented interface + * @export + * @class DefaultApi + * @extends {BaseAPI} + */ +export class DefaultApi extends BaseAPI implements DefaultApiInterface { + /** + * + * @summary Useable configuration for clients + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DefaultApi + */ + public serverConfigControllerPublicConfig(options?: any) { + return DefaultApiFp(this.configuration).serverConfigControllerPublicConfig(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Default route to test public access + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof DefaultApi + */ + public serverControllerGetHello(options?: any) { + return DefaultApiFp(this.configuration).serverControllerGetHello(options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/group-api.ts b/src/serverApi/v3/api/group-api.ts new file mode 100644 index 0000000..a733d80 --- /dev/null +++ b/src/serverApi/v3/api/group-api.ts @@ -0,0 +1,397 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { ClassInfoSearchListResponse } from '../models'; +// @ts-ignore +import { ClassRequestContext } from '../models'; +// @ts-ignore +import { ClassSortQueryType } from '../models'; +// @ts-ignore +import { GroupListResponse } from '../models'; +// @ts-ignore +import { GroupResponse } from '../models'; +// @ts-ignore +import { SchoolYearQueryType } from '../models'; +/** + * GroupApi - axios parameter creator + * @export + */ +export const GroupApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerFindClasses: async (skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options: any = {}): Promise => { + const localVarPath = `/groups/class`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (sortOrder !== undefined) { + localVarQueryParameter['sortOrder'] = sortOrder; + } + + if (sortBy !== undefined) { + localVarQueryParameter['sortBy'] = sortBy; + } + + if (type !== undefined) { + localVarQueryParameter['type'] = type; + } + + if (calledFrom !== undefined) { + localVarQueryParameter['calledFrom'] = calledFrom; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerGetAllGroups: async (skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options: any = {}): Promise => { + const localVarPath = `/groups`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (availableGroupsForCourseSync !== undefined) { + localVarQueryParameter['availableGroupsForCourseSync'] = availableGroupsForCourseSync; + } + + if (nameQuery !== undefined) { + localVarQueryParameter['nameQuery'] = nameQuery; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerGetGroup: async (groupId: string, options: any = {}): Promise => { + // verify required parameter 'groupId' is not null or undefined + assertParamExists('groupControllerGetGroup', 'groupId', groupId) + const localVarPath = `/groups/{groupId}` + .replace(`{${"groupId"}}`, encodeURIComponent(String(groupId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * GroupApi - functional programming interface + * @export + */ +export const GroupApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = GroupApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async groupControllerGetGroup(groupId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.groupControllerGetGroup(groupId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * GroupApi - factory interface + * @export + */ +export const GroupApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = GroupApiFp(configuration) + return { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): AxiosPromise { + return localVarFp.groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): AxiosPromise { + return localVarFp.groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + groupControllerGetGroup(groupId: string, options?: any): AxiosPromise { + return localVarFp.groupControllerGetGroup(groupId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * GroupApi - interface + * @export + * @interface GroupApi + */ +export interface GroupApiInterface { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApiInterface + */ + groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any): AxiosPromise; + + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApiInterface + */ + groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any): AxiosPromise; + + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApiInterface + */ + groupControllerGetGroup(groupId: string, options?: any): AxiosPromise; + +} + +/** + * GroupApi - object-oriented interface + * @export + * @class GroupApi + * @extends {BaseAPI} + */ +export class GroupApi extends BaseAPI implements GroupApiInterface { + /** + * + * @summary Get a list of classes and groups of type class for the current user. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {ClassSortQueryType} [sortBy] + * @param {SchoolYearQueryType} [type] + * @param {ClassRequestContext} [calledFrom] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApi + */ + public groupControllerFindClasses(skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: ClassSortQueryType, type?: SchoolYearQueryType, calledFrom?: ClassRequestContext, options?: any) { + return GroupApiFp(this.configuration).groupControllerFindClasses(skip, limit, sortOrder, sortBy, type, calledFrom, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get a list of all groups. + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {boolean} [availableGroupsForCourseSync] if true only available groups for a course sync are returned. + * @param {string} [nameQuery] search string for group names. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApi + */ + public groupControllerGetAllGroups(skip?: number, limit?: number, availableGroupsForCourseSync?: boolean, nameQuery?: string, options?: any) { + return GroupApiFp(this.configuration).groupControllerGetAllGroups(skip, limit, availableGroupsForCourseSync, nameQuery, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get a group by id. + * @param {string} groupId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof GroupApi + */ + public groupControllerGetGroup(groupId: string, options?: any) { + return GroupApiFp(this.configuration).groupControllerGetGroup(groupId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/lesson-api.ts b/src/serverApi/v3/api/lesson-api.ts new file mode 100644 index 0000000..4722059 --- /dev/null +++ b/src/serverApi/v3/api/lesson-api.ts @@ -0,0 +1,298 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { LessonMetadataListResponse } from '../models'; +// @ts-ignore +import { LessonResponse } from '../models'; +/** + * LessonApi - axios parameter creator + * @export + */ +export const LessonApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerDelete: async (lessonId: string, options: any = {}): Promise => { + // verify required parameter 'lessonId' is not null or undefined + assertParamExists('lessonControllerDelete', 'lessonId', lessonId) + const localVarPath = `/lessons/{lessonId}` + .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerGetCourseLessons: async (courseId: string, options: any = {}): Promise => { + // verify required parameter 'courseId' is not null or undefined + assertParamExists('lessonControllerGetCourseLessons', 'courseId', courseId) + const localVarPath = `/lessons/course/{courseId}` + .replace(`{${"courseId"}}`, encodeURIComponent(String(courseId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerGetLesson: async (lessonId: string, options: any = {}): Promise => { + // verify required parameter 'lessonId' is not null or undefined + assertParamExists('lessonControllerGetLesson', 'lessonId', lessonId) + const localVarPath = `/lessons/{lessonId}` + .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * LessonApi - functional programming interface + * @export + */ +export const LessonApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = LessonApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async lessonControllerDelete(lessonId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerDelete(lessonId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async lessonControllerGetCourseLessons(courseId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerGetCourseLessons(courseId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async lessonControllerGetLesson(lessonId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.lessonControllerGetLesson(lessonId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * LessonApi - factory interface + * @export + */ +export const LessonApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = LessonApiFp(configuration) + return { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerDelete(lessonId: string, options?: any): AxiosPromise { + return localVarFp.lessonControllerDelete(lessonId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerGetCourseLessons(courseId: string, options?: any): AxiosPromise { + return localVarFp.lessonControllerGetCourseLessons(courseId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + lessonControllerGetLesson(lessonId: string, options?: any): AxiosPromise { + return localVarFp.lessonControllerGetLesson(lessonId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * LessonApi - interface + * @export + * @interface LessonApi + */ +export interface LessonApiInterface { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApiInterface + */ + lessonControllerDelete(lessonId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApiInterface + */ + lessonControllerGetCourseLessons(courseId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApiInterface + */ + lessonControllerGetLesson(lessonId: string, options?: any): AxiosPromise; + +} + +/** + * LessonApi - object-oriented interface + * @export + * @class LessonApi + * @extends {BaseAPI} + */ +export class LessonApi extends BaseAPI implements LessonApiInterface { + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApi + */ + public lessonControllerDelete(lessonId: string, options?: any) { + return LessonApiFp(this.configuration).lessonControllerDelete(lessonId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} courseId The id of the course the lesson belongs to. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApi + */ + public lessonControllerGetCourseLessons(courseId: string, options?: any) { + return LessonApiFp(this.configuration).lessonControllerGetCourseLessons(courseId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} lessonId The id of the lesson. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof LessonApi + */ + public lessonControllerGetLesson(lessonId: string, options?: any) { + return LessonApiFp(this.configuration).lessonControllerGetLesson(lessonId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/me-api.ts b/src/serverApi/v3/api/me-api.ts new file mode 100644 index 0000000..23755e6 --- /dev/null +++ b/src/serverApi/v3/api/me-api.ts @@ -0,0 +1,141 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { MeResponse } from '../models'; +/** + * MeApi - axios parameter creator + * @export + */ +export const MeApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + meControllerMe: async (options: any = {}): Promise => { + const localVarPath = `/me`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MeApi - functional programming interface + * @export + */ +export const MeApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MeApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async meControllerMe(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.meControllerMe(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MeApi - factory interface + * @export + */ +export const MeApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MeApiFp(configuration) + return { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + meControllerMe(options?: any): AxiosPromise { + return localVarFp.meControllerMe(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MeApi - interface + * @export + * @interface MeApi + */ +export interface MeApiInterface { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MeApiInterface + */ + meControllerMe(options?: any): AxiosPromise; + +} + +/** + * MeApi - object-oriented interface + * @export + * @class MeApi + * @extends {BaseAPI} + */ +export class MeApi extends BaseAPI implements MeApiInterface { + /** + * + * @summary Resolve jwt and response informations about the owner of the jwt. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MeApi + */ + public meControllerMe(options?: any) { + return MeApiFp(this.configuration).meControllerMe(options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/media-board-api.ts b/src/serverApi/v3/api/media-board-api.ts new file mode 100644 index 0000000..e0bfbec --- /dev/null +++ b/src/serverApi/v3/api/media-board-api.ts @@ -0,0 +1,588 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CollapsableBodyParams } from '../models'; +// @ts-ignore +import { ColorBodyParams } from '../models'; +// @ts-ignore +import { LayoutBodyParams } from '../models'; +// @ts-ignore +import { MediaAvailableLineResponse } from '../models'; +// @ts-ignore +import { MediaBoardResponse } from '../models'; +// @ts-ignore +import { MediaLineResponse } from '../models'; +/** + * MediaBoardApi - axios parameter creator + * @export + */ +export const MediaBoardApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerCollapseMediaAvailableLine: async (boardId: string, collapsableBodyParams: CollapsableBodyParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerCollapseMediaAvailableLine', 'boardId', boardId) + // verify required parameter 'collapsableBodyParams' is not null or undefined + assertParamExists('mediaBoardControllerCollapseMediaAvailableLine', 'collapsableBodyParams', collapsableBodyParams) + const localVarPath = `/media-boards/{boardId}/media-available-line/collapse` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(collapsableBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerCreateLine: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerCreateLine', 'boardId', boardId) + const localVarPath = `/media-boards/{boardId}/media-lines` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerGetMediaAvailableLine: async (boardId: string, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerGetMediaAvailableLine', 'boardId', boardId) + const localVarPath = `/media-boards/{boardId}/media-available-line` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerGetMediaBoardForUser: async (options: any = {}): Promise => { + const localVarPath = `/media-boards/me`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerSetMediaBoardLayout: async (boardId: string, layoutBodyParams: LayoutBodyParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerSetMediaBoardLayout', 'boardId', boardId) + // verify required parameter 'layoutBodyParams' is not null or undefined + assertParamExists('mediaBoardControllerSetMediaBoardLayout', 'layoutBodyParams', layoutBodyParams) + const localVarPath = `/media-boards/{boardId}/layout` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(layoutBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerUpdateMediaAvailableLineColor: async (boardId: string, colorBodyParams: ColorBodyParams, options: any = {}): Promise => { + // verify required parameter 'boardId' is not null or undefined + assertParamExists('mediaBoardControllerUpdateMediaAvailableLineColor', 'boardId', boardId) + // verify required parameter 'colorBodyParams' is not null or undefined + assertParamExists('mediaBoardControllerUpdateMediaAvailableLineColor', 'colorBodyParams', colorBodyParams) + const localVarPath = `/media-boards/{boardId}/media-available-line/color` + .replace(`{${"boardId"}}`, encodeURIComponent(String(boardId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(colorBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MediaBoardApi - functional programming interface + * @export + */ +export const MediaBoardApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MediaBoardApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerCreateLine(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerCreateLine(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerGetMediaAvailableLine(boardId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerGetMediaBoardForUser(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerGetMediaBoardForUser(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MediaBoardApi - factory interface + * @export + */ +export const MediaBoardApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MediaBoardApiFp(configuration) + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerCreateLine(boardId: string, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerCreateLine(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerGetMediaAvailableLine(boardId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerGetMediaBoardForUser(options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerGetMediaBoardForUser(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MediaBoardApi - interface + * @export + * @interface MediaBoardApi + */ +export interface MediaBoardApiInterface { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerCreateLine(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerGetMediaBoardForUser(options?: any): AxiosPromise; + + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApiInterface + */ + mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise; + +} + +/** + * MediaBoardApi - object-oriented interface + * @export + * @class MediaBoardApi + * @extends {BaseAPI} + */ +export class MediaBoardApi extends BaseAPI implements MediaBoardApiInterface { + /** + * + * @summary Collapse available line in media board. + * @param {string} boardId The id of the board. + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerCollapseMediaAvailableLine(boardId: string, collapsableBodyParams: CollapsableBodyParams, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerCollapseMediaAvailableLine(boardId, collapsableBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Create a new line on a media board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerCreateLine(boardId: string, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerCreateLine(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the media available line for the board. + * @param {string} boardId The id of the board. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerGetMediaAvailableLine(boardId: string, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerGetMediaAvailableLine(boardId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the media shelf of the user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerGetMediaBoardForUser(options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerGetMediaBoardForUser(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Set layout for media board. + * @param {string} boardId The id of the board. + * @param {LayoutBodyParams} layoutBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerSetMediaBoardLayout(boardId: string, layoutBodyParams: LayoutBodyParams, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerSetMediaBoardLayout(boardId, layoutBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the color of available line in media board. + * @param {string} boardId The id of the board. + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaBoardApi + */ + public mediaBoardControllerUpdateMediaAvailableLineColor(boardId: string, colorBodyParams: ColorBodyParams, options?: any) { + return MediaBoardApiFp(this.configuration).mediaBoardControllerUpdateMediaAvailableLineColor(boardId, colorBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/media-element-api.ts b/src/serverApi/v3/api/media-element-api.ts new file mode 100644 index 0000000..0810a91 --- /dev/null +++ b/src/serverApi/v3/api/media-element-api.ts @@ -0,0 +1,329 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CreateMediaElementBodyParams } from '../models'; +// @ts-ignore +import { MediaExternalToolElementResponse } from '../models'; +// @ts-ignore +import { MoveElementBodyParams } from '../models'; +/** + * MediaElementApi - axios parameter creator + * @export + */ +export const MediaElementApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerCreateElement: async (createMediaElementBodyParams: CreateMediaElementBodyParams, options: any = {}): Promise => { + // verify required parameter 'createMediaElementBodyParams' is not null or undefined + assertParamExists('mediaElementControllerCreateElement', 'createMediaElementBodyParams', createMediaElementBodyParams) + const localVarPath = `/media-elements`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createMediaElementBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerDeleteElement: async (elementId: string, options: any = {}): Promise => { + // verify required parameter 'elementId' is not null or undefined + assertParamExists('mediaElementControllerDeleteElement', 'elementId', elementId) + const localVarPath = `/media-elements/{elementId}` + .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerMoveElement: async (elementId: string, moveElementBodyParams: MoveElementBodyParams, options: any = {}): Promise => { + // verify required parameter 'elementId' is not null or undefined + assertParamExists('mediaElementControllerMoveElement', 'elementId', elementId) + // verify required parameter 'moveElementBodyParams' is not null or undefined + assertParamExists('mediaElementControllerMoveElement', 'moveElementBodyParams', moveElementBodyParams) + const localVarPath = `/media-elements/{elementId}/position` + .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveElementBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MediaElementApi - functional programming interface + * @export + */ +export const MediaElementApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MediaElementApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerCreateElement(createMediaElementBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaElementControllerDeleteElement(elementId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerDeleteElement(elementId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaElementControllerMoveElement(elementId, moveElementBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MediaElementApi - factory interface + * @export + */ +export const MediaElementApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MediaElementApiFp(configuration) + return { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaElementControllerCreateElement(createMediaElementBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerDeleteElement(elementId: string, options?: any): AxiosPromise { + return localVarFp.mediaElementControllerDeleteElement(elementId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaElementControllerMoveElement(elementId, moveElementBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MediaElementApi - interface + * @export + * @interface MediaElementApi + */ +export interface MediaElementApiInterface { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApiInterface + */ + mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApiInterface + */ + mediaElementControllerDeleteElement(elementId: string, options?: any): AxiosPromise; + + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApiInterface + */ + mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any): AxiosPromise; + +} + +/** + * MediaElementApi - object-oriented interface + * @export + * @class MediaElementApi + * @extends {BaseAPI} + */ +export class MediaElementApi extends BaseAPI implements MediaElementApiInterface { + /** + * + * @summary Create a new element. + * @param {CreateMediaElementBodyParams} createMediaElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApi + */ + public mediaElementControllerCreateElement(createMediaElementBodyParams: CreateMediaElementBodyParams, options?: any) { + return MediaElementApiFp(this.configuration).mediaElementControllerCreateElement(createMediaElementBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single element. + * @param {string} elementId The id of the element + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApi + */ + public mediaElementControllerDeleteElement(elementId: string, options?: any) { + return MediaElementApiFp(this.configuration).mediaElementControllerDeleteElement(elementId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single element. + * @param {string} elementId The id of the element + * @param {MoveElementBodyParams} moveElementBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaElementApi + */ + public mediaElementControllerMoveElement(elementId: string, moveElementBodyParams: MoveElementBodyParams, options?: any) { + return MediaElementApiFp(this.configuration).mediaElementControllerMoveElement(elementId, moveElementBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/media-line-api.ts b/src/serverApi/v3/api/media-line-api.ts new file mode 100644 index 0000000..300e709 --- /dev/null +++ b/src/serverApi/v3/api/media-line-api.ts @@ -0,0 +1,521 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CollapsableBodyParams } from '../models'; +// @ts-ignore +import { ColorBodyParams } from '../models'; +// @ts-ignore +import { MoveColumnBodyParams } from '../models'; +// @ts-ignore +import { RenameBodyParams } from '../models'; +/** + * MediaLineApi - axios parameter creator + * @export + */ +export const MediaLineApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerCollapseMediaLine: async (lineId: string, collapsableBodyParams: CollapsableBodyParams, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerCollapseMediaLine', 'lineId', lineId) + // verify required parameter 'collapsableBodyParams' is not null or undefined + assertParamExists('mediaLineControllerCollapseMediaLine', 'collapsableBodyParams', collapsableBodyParams) + const localVarPath = `/media-lines/{lineId}/collapse` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(collapsableBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerDeleteLine: async (lineId: string, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerDeleteLine', 'lineId', lineId) + const localVarPath = `/media-lines/{lineId}` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerMoveLine: async (lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerMoveLine', 'lineId', lineId) + // verify required parameter 'moveColumnBodyParams' is not null or undefined + assertParamExists('mediaLineControllerMoveLine', 'moveColumnBodyParams', moveColumnBodyParams) + const localVarPath = `/media-lines/{lineId}/position` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(moveColumnBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerUpdateBackgroundColor: async (lineId: string, colorBodyParams: ColorBodyParams, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerUpdateBackgroundColor', 'lineId', lineId) + // verify required parameter 'colorBodyParams' is not null or undefined + assertParamExists('mediaLineControllerUpdateBackgroundColor', 'colorBodyParams', colorBodyParams) + const localVarPath = `/media-lines/{lineId}/color` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(colorBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerUpdateLineTitle: async (lineId: string, renameBodyParams: RenameBodyParams, options: any = {}): Promise => { + // verify required parameter 'lineId' is not null or undefined + assertParamExists('mediaLineControllerUpdateLineTitle', 'lineId', lineId) + // verify required parameter 'renameBodyParams' is not null or undefined + assertParamExists('mediaLineControllerUpdateLineTitle', 'renameBodyParams', renameBodyParams) + const localVarPath = `/media-lines/{lineId}/title` + .replace(`{${"lineId"}}`, encodeURIComponent(String(lineId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(renameBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MediaLineApi - functional programming interface + * @export + */ +export const MediaLineApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MediaLineApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerDeleteLine(lineId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerDeleteLine(lineId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MediaLineApi - factory interface + * @export + */ +export const MediaLineApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MediaLineApiFp(configuration) + return { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerDeleteLine(lineId: string, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerDeleteLine(lineId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise { + return localVarFp.mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MediaLineApi - interface + * @export + * @interface MediaLineApi + */ +export interface MediaLineApiInterface { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerDeleteLine(lineId: string, options?: any): AxiosPromise; + + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApiInterface + */ + mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any): AxiosPromise; + +} + +/** + * MediaLineApi - object-oriented interface + * @export + * @class MediaLineApi + * @extends {BaseAPI} + */ +export class MediaLineApi extends BaseAPI implements MediaLineApiInterface { + /** + * + * @summary Collapse available line in media board. + * @param {string} lineId The id of the line + * @param {CollapsableBodyParams} collapsableBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerCollapseMediaLine(lineId: string, collapsableBodyParams: CollapsableBodyParams, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerCollapseMediaLine(lineId, collapsableBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Delete a single line. + * @param {string} lineId The id of the line + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerDeleteLine(lineId: string, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerDeleteLine(lineId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Move a single line. + * @param {string} lineId The id of the line + * @param {MoveColumnBodyParams} moveColumnBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerMoveLine(lineId: string, moveColumnBodyParams: MoveColumnBodyParams, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerMoveLine(lineId, moveColumnBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the color of a single line. + * @param {string} lineId The id of the line + * @param {ColorBodyParams} colorBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerUpdateBackgroundColor(lineId: string, colorBodyParams: ColorBodyParams, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerUpdateBackgroundColor(lineId, colorBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Update the title of a single line. + * @param {string} lineId The id of the line + * @param {RenameBodyParams} renameBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MediaLineApi + */ + public mediaLineControllerUpdateLineTitle(lineId: string, renameBodyParams: RenameBodyParams, options?: any) { + return MediaLineApiFp(this.configuration).mediaLineControllerUpdateLineTitle(lineId, renameBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/meta-tag-extractor-api.ts b/src/serverApi/v3/api/meta-tag-extractor-api.ts new file mode 100644 index 0000000..83d29b9 --- /dev/null +++ b/src/serverApi/v3/api/meta-tag-extractor-api.ts @@ -0,0 +1,153 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { GetMetaTagDataBody } from '../models'; +// @ts-ignore +import { MetaTagExtractorResponse } from '../models'; +/** + * MetaTagExtractorApi - axios parameter creator + * @export + */ +export const MetaTagExtractorApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + metaTagExtractorControllerGetMetaTags: async (getMetaTagDataBody: GetMetaTagDataBody, options: any = {}): Promise => { + // verify required parameter 'getMetaTagDataBody' is not null or undefined + assertParamExists('metaTagExtractorControllerGetMetaTags', 'getMetaTagDataBody', getMetaTagDataBody) + const localVarPath = `/meta-tag-extractor`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(getMetaTagDataBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * MetaTagExtractorApi - functional programming interface + * @export + */ +export const MetaTagExtractorApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = MetaTagExtractorApiAxiosParamCreator(configuration) + return { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * MetaTagExtractorApi - factory interface + * @export + */ +export const MetaTagExtractorApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = MetaTagExtractorApiFp(configuration) + return { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): AxiosPromise { + return localVarFp.metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * MetaTagExtractorApi - interface + * @export + * @interface MetaTagExtractorApi + */ +export interface MetaTagExtractorApiInterface { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MetaTagExtractorApiInterface + */ + metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any): AxiosPromise; + +} + +/** + * MetaTagExtractorApi - object-oriented interface + * @export + * @class MetaTagExtractorApi + * @extends {BaseAPI} + */ +export class MetaTagExtractorApi extends BaseAPI implements MetaTagExtractorApiInterface { + /** + * + * @summary return extract meta tags + * @param {GetMetaTagDataBody} getMetaTagDataBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof MetaTagExtractorApi + */ + public metaTagExtractorControllerGetMetaTags(getMetaTagDataBody: GetMetaTagDataBody, options?: any) { + return MetaTagExtractorApiFp(this.configuration).metaTagExtractorControllerGetMetaTags(getMetaTagDataBody, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/news-api.ts b/src/serverApi/v3/api/news-api.ts new file mode 100644 index 0000000..e3c6093 --- /dev/null +++ b/src/serverApi/v3/api/news-api.ts @@ -0,0 +1,624 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { CreateNewsParams } from '../models'; +// @ts-ignore +import { NewsListResponse } from '../models'; +// @ts-ignore +import { NewsResponse } from '../models'; +// @ts-ignore +import { UpdateNewsParams } from '../models'; +/** + * NewsApi - axios parameter creator + * @export + */ +export const NewsApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerCreate: async (createNewsParams: CreateNewsParams, options: any = {}): Promise => { + // verify required parameter 'createNewsParams' is not null or undefined + assertParamExists('newsControllerCreate', 'createNewsParams', createNewsParams) + const localVarPath = `/news`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(createNewsParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerDelete: async (newsId: string, options: any = {}): Promise => { + // verify required parameter 'newsId' is not null or undefined + assertParamExists('newsControllerDelete', 'newsId', newsId) + const localVarPath = `/news/{newsId}` + .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerFindAll: async (targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/news`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (targetModel !== undefined) { + localVarQueryParameter['targetModel'] = targetModel; + } + + if (targetId !== undefined) { + localVarQueryParameter['targetId'] = targetId; + } + + if (unpublished !== undefined) { + localVarQueryParameter['unpublished'] = unpublished; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerFindOne: async (newsId: string, options: any = {}): Promise => { + // verify required parameter 'newsId' is not null or undefined + assertParamExists('newsControllerFindOne', 'newsId', newsId) + const localVarPath = `/news/{newsId}` + .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerUpdate: async (newsId: string, updateNewsParams: UpdateNewsParams, options: any = {}): Promise => { + // verify required parameter 'newsId' is not null or undefined + assertParamExists('newsControllerUpdate', 'newsId', newsId) + // verify required parameter 'updateNewsParams' is not null or undefined + assertParamExists('newsControllerUpdate', 'updateNewsParams', updateNewsParams) + const localVarPath = `/news/{newsId}` + .replace(`{${"newsId"}}`, encodeURIComponent(String(newsId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateNewsParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + teamNewsControllerFindAllForTeam: async (teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options: any = {}): Promise => { + // verify required parameter 'teamId' is not null or undefined + assertParamExists('teamNewsControllerFindAllForTeam', 'teamId', teamId) + const localVarPath = `/team/{teamId}/news` + .replace(`{${"teamId"}}`, encodeURIComponent(String(teamId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (targetModel !== undefined) { + localVarQueryParameter['targetModel'] = targetModel; + } + + if (targetId !== undefined) { + localVarQueryParameter['targetId'] = targetId; + } + + if (unpublished !== undefined) { + localVarQueryParameter['unpublished'] = unpublished; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * NewsApi - functional programming interface + * @export + */ +export const NewsApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = NewsApiAxiosParamCreator(configuration) + return { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerCreate(createNewsParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerDelete(newsId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerDelete(newsId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerFindOne(newsId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerFindOne(newsId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.newsControllerUpdate(newsId, updateNewsParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * NewsApi - factory interface + * @export + */ +export const NewsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = NewsApiFp(configuration) + return { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): AxiosPromise { + return localVarFp.newsControllerCreate(createNewsParams, options).then((request) => request(axios, basePath)); + }, + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerDelete(newsId: string, options?: any): AxiosPromise { + return localVarFp.newsControllerDelete(newsId, options).then((request) => request(axios, basePath)); + }, + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerFindOne(newsId: string, options?: any): AxiosPromise { + return localVarFp.newsControllerFindOne(newsId, options).then((request) => request(axios, basePath)); + }, + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): AxiosPromise { + return localVarFp.newsControllerUpdate(newsId, updateNewsParams, options).then((request) => request(axios, basePath)); + }, + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * NewsApi - interface + * @export + * @interface NewsApi + */ +export interface NewsApiInterface { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerCreate(createNewsParams: CreateNewsParams, options?: any): AxiosPromise; + + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerDelete(newsId: string, options?: any): AxiosPromise; + + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerFindOne(newsId: string, options?: any): AxiosPromise; + + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any): AxiosPromise; + + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApiInterface + */ + teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any): AxiosPromise; + +} + +/** + * NewsApi - object-oriented interface + * @export + * @class NewsApi + * @extends {BaseAPI} + */ +export class NewsApi extends BaseAPI implements NewsApiInterface { + /** + * Create a news by a user in a given scope (school or team). + * @param {CreateNewsParams} createNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerCreate(createNewsParams: CreateNewsParams, options?: any) { + return NewsApiFp(this.configuration).newsControllerCreate(createNewsParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Delete a news. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerDelete(newsId: string, options?: any) { + return NewsApiFp(this.configuration).newsControllerDelete(newsId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Responds with all news for a user. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerFindAll(targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any) { + return NewsApiFp(this.configuration).newsControllerFindAll(targetModel, targetId, unpublished, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Retrieve a specific news entry by id. A user may only read news of scopes he has the read permission. The news entity has school and user names populated. + * @param {string} newsId The id of the news. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerFindOne(newsId: string, options?: any) { + return NewsApiFp(this.configuration).newsControllerFindOne(newsId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Update properties of a news. + * @param {string} newsId The id of the news. + * @param {UpdateNewsParams} updateNewsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public newsControllerUpdate(newsId: string, updateNewsParams: UpdateNewsParams, options?: any) { + return NewsApiFp(this.configuration).newsControllerUpdate(newsId, updateNewsParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Responds with news of a given team for a user. + * @param {string} teamId The id of the team. + * @param {'schools' | 'courses' | 'teams'} [targetModel] Target model to which the news are related + * @param {string} [targetId] Specific target id to which the news are related (works only together with targetModel) + * @param {boolean} [unpublished] Flag that filters if the news should be published or not + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof NewsApi + */ + public teamNewsControllerFindAllForTeam(teamId: string, targetModel?: 'schools' | 'courses' | 'teams', targetId?: string, unpublished?: boolean, skip?: number, limit?: number, options?: any) { + return NewsApiFp(this.configuration).teamNewsControllerFindAllForTeam(teamId, targetModel, targetId, unpublished, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/oauth2-api.ts b/src/serverApi/v3/api/oauth2-api.ts new file mode 100644 index 0000000..8b3e0e5 --- /dev/null +++ b/src/serverApi/v3/api/oauth2-api.ts @@ -0,0 +1,1061 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ConsentRequestBody } from '../models'; +// @ts-ignore +import { ConsentResponse } from '../models'; +// @ts-ignore +import { ConsentSessionResponse } from '../models'; +// @ts-ignore +import { LoginRequestBody } from '../models'; +// @ts-ignore +import { LoginResponse } from '../models'; +// @ts-ignore +import { OauthClientCreateBody } from '../models'; +// @ts-ignore +import { OauthClientResponse } from '../models'; +// @ts-ignore +import { OauthClientUpdateBody } from '../models'; +// @ts-ignore +import { RedirectResponse } from '../models'; +/** + * Oauth2Api - axios parameter creator + * @export + */ +export const Oauth2ApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerAcceptLogoutRequest: async (challenge: string, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerAcceptLogoutRequest', 'challenge', challenge) + const localVarPath = `/oauth2/logoutRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerCreateOAuth2Client: async (oauthClientCreateBody: OauthClientCreateBody, options: any = {}): Promise => { + // verify required parameter 'oauthClientCreateBody' is not null or undefined + assertParamExists('oauthProviderControllerCreateOAuth2Client', 'oauthClientCreateBody', oauthClientCreateBody) + const localVarPath = `/oauth2/clients`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(oauthClientCreateBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerDeleteOAuth2Client: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('oauthProviderControllerDeleteOAuth2Client', 'id', id) + const localVarPath = `/oauth2/clients/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetConsentRequest: async (challenge: string, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerGetConsentRequest', 'challenge', challenge) + const localVarPath = `/oauth2/consentRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetLoginRequest: async (challenge: string, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerGetLoginRequest', 'challenge', challenge) + const localVarPath = `/oauth2/loginRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetOAuth2Client: async (id: string, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('oauthProviderControllerGetOAuth2Client', 'id', id) + const localVarPath = `/oauth2/clients/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerListConsentSessions: async (options: any = {}): Promise => { + const localVarPath = `/oauth2/auth/sessions/consent`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerListOAuth2Clients: async (limit: number, offset: number, clientName: string, owner: string, options: any = {}): Promise => { + // verify required parameter 'limit' is not null or undefined + assertParamExists('oauthProviderControllerListOAuth2Clients', 'limit', limit) + // verify required parameter 'offset' is not null or undefined + assertParamExists('oauthProviderControllerListOAuth2Clients', 'offset', offset) + // verify required parameter 'clientName' is not null or undefined + assertParamExists('oauthProviderControllerListOAuth2Clients', 'clientName', clientName) + // verify required parameter 'owner' is not null or undefined + assertParamExists('oauthProviderControllerListOAuth2Clients', 'owner', owner) + const localVarPath = `/oauth2/clients` + .replace(`{${"limit"}}`, encodeURIComponent(String(limit))) + .replace(`{${"offset"}}`, encodeURIComponent(String(offset))) + .replace(`{${"client_name"}}`, encodeURIComponent(String(clientName))) + .replace(`{${"owner"}}`, encodeURIComponent(String(owner))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerPatchConsentRequest: async (challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerPatchConsentRequest', 'challenge', challenge) + // verify required parameter 'consentRequestBody' is not null or undefined + assertParamExists('oauthProviderControllerPatchConsentRequest', 'consentRequestBody', consentRequestBody) + const localVarPath = `/oauth2/consentRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (accept !== undefined) { + localVarQueryParameter['accept'] = accept; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(consentRequestBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerPatchLoginRequest: async (challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options: any = {}): Promise => { + // verify required parameter 'challenge' is not null or undefined + assertParamExists('oauthProviderControllerPatchLoginRequest', 'challenge', challenge) + // verify required parameter 'loginRequestBody' is not null or undefined + assertParamExists('oauthProviderControllerPatchLoginRequest', 'loginRequestBody', loginRequestBody) + const localVarPath = `/oauth2/loginRequest/{challenge}` + .replace(`{${"challenge"}}`, encodeURIComponent(String(challenge))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (accept !== undefined) { + localVarQueryParameter['accept'] = accept; + } + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(loginRequestBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerRevokeConsentSession: async (client: string, options: any = {}): Promise => { + // verify required parameter 'client' is not null or undefined + assertParamExists('oauthProviderControllerRevokeConsentSession', 'client', client) + const localVarPath = `/oauth2/auth/sessions/consent`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (client !== undefined) { + localVarQueryParameter['client'] = client; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerUpdateOAuth2Client: async (id: string, oauthClientUpdateBody: OauthClientUpdateBody, options: any = {}): Promise => { + // verify required parameter 'id' is not null or undefined + assertParamExists('oauthProviderControllerUpdateOAuth2Client', 'id', id) + // verify required parameter 'oauthClientUpdateBody' is not null or undefined + assertParamExists('oauthProviderControllerUpdateOAuth2Client', 'oauthClientUpdateBody', oauthClientUpdateBody) + const localVarPath = `/oauth2/clients/{id}` + .replace(`{${"id"}}`, encodeURIComponent(String(id))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(oauthClientUpdateBody, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * Oauth2Api - functional programming interface + * @export + */ +export const Oauth2ApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = Oauth2ApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerAcceptLogoutRequest(challenge, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerDeleteOAuth2Client(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerGetConsentRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetConsentRequest(challenge, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerGetLoginRequest(challenge: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetLoginRequest(challenge, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerGetOAuth2Client(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerGetOAuth2Client(id, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerListConsentSessions(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerListConsentSessions(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerRevokeConsentSession(client: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerRevokeConsentSession(client, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * Oauth2Api - factory interface + * @export + */ +export const Oauth2ApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = Oauth2ApiFp(configuration) + return { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerAcceptLogoutRequest(challenge, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerDeleteOAuth2Client(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetConsentRequest(challenge: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerGetConsentRequest(challenge, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetLoginRequest(challenge: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerGetLoginRequest(challenge, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerGetOAuth2Client(id: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerGetOAuth2Client(id, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerListConsentSessions(options?: any): AxiosPromise> { + return localVarFp.oauthProviderControllerListConsentSessions(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): AxiosPromise> { + return localVarFp.oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerRevokeConsentSession(client: string, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerRevokeConsentSession(client, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): AxiosPromise { + return localVarFp.oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * Oauth2Api - interface + * @export + * @interface Oauth2Api + */ +export interface Oauth2ApiInterface { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any): AxiosPromise; + + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any): AxiosPromise; + + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerDeleteOAuth2Client(id: string, options?: any): AxiosPromise; + + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerGetConsentRequest(challenge: string, options?: any): AxiosPromise; + + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerGetLoginRequest(challenge: string, options?: any): AxiosPromise; + + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerGetOAuth2Client(id: string, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerListConsentSessions(options?: any): AxiosPromise>; + + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any): AxiosPromise>; + + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any): AxiosPromise; + + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any): AxiosPromise; + + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerRevokeConsentSession(client: string, options?: any): AxiosPromise; + + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2ApiInterface + */ + oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any): AxiosPromise; + +} + +/** + * Oauth2Api - object-oriented interface + * @export + * @class Oauth2Api + * @extends {BaseAPI} + */ +export class Oauth2Api extends BaseAPI implements Oauth2ApiInterface { + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerAcceptLogoutRequest(challenge: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerAcceptLogoutRequest(challenge, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {OauthClientCreateBody} oauthClientCreateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody: OauthClientCreateBody, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerCreateOAuth2Client(oauthClientCreateBody, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerDeleteOAuth2Client(id: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerDeleteOAuth2Client(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerGetConsentRequest(challenge: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerGetConsentRequest(challenge, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} challenge The login challenge. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerGetLoginRequest(challenge: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerGetLoginRequest(challenge, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} id The Oauth Client Id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerGetOAuth2Client(id: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerGetOAuth2Client(id, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerListConsentSessions(options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerListConsentSessions(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {number} limit The maximum amount of clients to returned, upper bound is 500 clients. + * @param {number} offset The offset from where to start looking. + * @param {string} clientName The name of the clients to filter by. + * @param {string} owner The owner of the clients to filter by. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerListOAuth2Clients(limit: number, offset: number, clientName: string, owner: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerListOAuth2Clients(limit, offset, clientName, owner, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} challenge The login challenge. + * @param {ConsentRequestBody} consentRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerPatchConsentRequest(challenge: string, consentRequestBody: ConsentRequestBody, accept?: boolean, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerPatchConsentRequest(challenge, consentRequestBody, accept, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} challenge The login challenge. + * @param {LoginRequestBody} loginRequestBody + * @param {boolean} [accept] Accepts the login request. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerPatchLoginRequest(challenge: string, loginRequestBody: LoginRequestBody, accept?: boolean, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerPatchLoginRequest(challenge, loginRequestBody, accept, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} client The Oauth2 client id. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerRevokeConsentSession(client: string, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerRevokeConsentSession(client, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} id The Oauth Client Id. + * @param {OauthClientUpdateBody} oauthClientUpdateBody + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof Oauth2Api + */ + public oauthProviderControllerUpdateOAuth2Client(id: string, oauthClientUpdateBody: OauthClientUpdateBody, options?: any) { + return Oauth2ApiFp(this.configuration).oauthProviderControllerUpdateOAuth2Client(id, oauthClientUpdateBody, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/pseudonym-api.ts b/src/serverApi/v3/api/pseudonym-api.ts new file mode 100644 index 0000000..4cc2439 --- /dev/null +++ b/src/serverApi/v3/api/pseudonym-api.ts @@ -0,0 +1,149 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { PseudonymResponse } from '../models'; +/** + * PseudonymApi - axios parameter creator + * @export + */ +export const PseudonymApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + pseudonymControllerGetPseudonym: async (pseudonym: string, options: any = {}): Promise => { + // verify required parameter 'pseudonym' is not null or undefined + assertParamExists('pseudonymControllerGetPseudonym', 'pseudonym', pseudonym) + const localVarPath = `/pseudonyms/{pseudonym}` + .replace(`{${"pseudonym"}}`, encodeURIComponent(String(pseudonym))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * PseudonymApi - functional programming interface + * @export + */ +export const PseudonymApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = PseudonymApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async pseudonymControllerGetPseudonym(pseudonym: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.pseudonymControllerGetPseudonym(pseudonym, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * PseudonymApi - factory interface + * @export + */ +export const PseudonymApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = PseudonymApiFp(configuration) + return { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + pseudonymControllerGetPseudonym(pseudonym: string, options?: any): AxiosPromise { + return localVarFp.pseudonymControllerGetPseudonym(pseudonym, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * PseudonymApi - interface + * @export + * @interface PseudonymApi + */ +export interface PseudonymApiInterface { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof PseudonymApiInterface + */ + pseudonymControllerGetPseudonym(pseudonym: string, options?: any): AxiosPromise; + +} + +/** + * PseudonymApi - object-oriented interface + * @export + * @class PseudonymApi + * @extends {BaseAPI} + */ +export class PseudonymApi extends BaseAPI implements PseudonymApiInterface { + /** + * + * @summary Returns the related user and tool information to a pseudonym + * @param {string} pseudonym + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof PseudonymApi + */ + public pseudonymControllerGetPseudonym(pseudonym: string, options?: any) { + return PseudonymApiFp(this.configuration).pseudonymControllerGetPseudonym(pseudonym, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/rooms-api.ts b/src/serverApi/v3/api/rooms-api.ts new file mode 100644 index 0000000..6b7e8ea --- /dev/null +++ b/src/serverApi/v3/api/rooms-api.ts @@ -0,0 +1,494 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { CopyApiResponse } from '../models'; +// @ts-ignore +import { LessonCopyApiParams } from '../models'; +// @ts-ignore +import { PatchOrderParams } from '../models'; +// @ts-ignore +import { PatchVisibilityParams } from '../models'; +// @ts-ignore +import { SingleColumnBoardResponse } from '../models'; +/** + * RoomsApi - axios parameter creator + * @export + */ +export const RoomsApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerCopyCourse: async (roomId: string, options: any = {}): Promise => { + // verify required parameter 'roomId' is not null or undefined + assertParamExists('roomsControllerCopyCourse', 'roomId', roomId) + const localVarPath = `/rooms/{roomId}/copy` + .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerCopyLesson: async (lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options: any = {}): Promise => { + // verify required parameter 'lessonId' is not null or undefined + assertParamExists('roomsControllerCopyLesson', 'lessonId', lessonId) + // verify required parameter 'lessonCopyApiParams' is not null or undefined + assertParamExists('roomsControllerCopyLesson', 'lessonCopyApiParams', lessonCopyApiParams) + const localVarPath = `/rooms/lessons/{lessonId}/copy` + .replace(`{${"lessonId"}}`, encodeURIComponent(String(lessonId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(lessonCopyApiParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerGetRoomBoard: async (roomId: string, options: any = {}): Promise => { + // verify required parameter 'roomId' is not null or undefined + assertParamExists('roomsControllerGetRoomBoard', 'roomId', roomId) + const localVarPath = `/rooms/{roomId}/board` + .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerPatchElementVisibility: async (roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options: any = {}): Promise => { + // verify required parameter 'roomId' is not null or undefined + assertParamExists('roomsControllerPatchElementVisibility', 'roomId', roomId) + // verify required parameter 'elementId' is not null or undefined + assertParamExists('roomsControllerPatchElementVisibility', 'elementId', elementId) + // verify required parameter 'patchVisibilityParams' is not null or undefined + assertParamExists('roomsControllerPatchElementVisibility', 'patchVisibilityParams', patchVisibilityParams) + const localVarPath = `/rooms/{roomId}/elements/{elementId}/visibility` + .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))) + .replace(`{${"elementId"}}`, encodeURIComponent(String(elementId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchVisibilityParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerPatchOrderingOfElements: async (roomId: string, patchOrderParams: PatchOrderParams, options: any = {}): Promise => { + // verify required parameter 'roomId' is not null or undefined + assertParamExists('roomsControllerPatchOrderingOfElements', 'roomId', roomId) + // verify required parameter 'patchOrderParams' is not null or undefined + assertParamExists('roomsControllerPatchOrderingOfElements', 'patchOrderParams', patchOrderParams) + const localVarPath = `/rooms/{roomId}/board/order` + .replace(`{${"roomId"}}`, encodeURIComponent(String(roomId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(patchOrderParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * RoomsApi - functional programming interface + * @export + */ +export const RoomsApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = RoomsApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerCopyCourse(roomId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerCopyCourse(roomId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerGetRoomBoard(roomId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerGetRoomBoard(roomId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * RoomsApi - factory interface + * @export + */ +export const RoomsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = RoomsApiFp(configuration) + return { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerCopyCourse(roomId: string, options?: any): AxiosPromise { + return localVarFp.roomsControllerCopyCourse(roomId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): AxiosPromise { + return localVarFp.roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerGetRoomBoard(roomId: string, options?: any): AxiosPromise { + return localVarFp.roomsControllerGetRoomBoard(roomId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): AxiosPromise { + return localVarFp.roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): AxiosPromise { + return localVarFp.roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * RoomsApi - interface + * @export + * @interface RoomsApi + */ +export interface RoomsApiInterface { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerCopyCourse(roomId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any): AxiosPromise; + + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerGetRoomBoard(roomId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any): AxiosPromise; + + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApiInterface + */ + roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any): AxiosPromise; + +} + +/** + * RoomsApi - object-oriented interface + * @export + * @class RoomsApi + * @extends {BaseAPI} + */ +export class RoomsApi extends BaseAPI implements RoomsApiInterface { + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerCopyCourse(roomId: string, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerCopyCourse(roomId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} lessonId The id of the lesson. + * @param {LessonCopyApiParams} lessonCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerCopyLesson(lessonId: string, lessonCopyApiParams: LessonCopyApiParams, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerCopyLesson(lessonId, lessonCopyApiParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} roomId The id of the room. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerGetRoomBoard(roomId: string, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerGetRoomBoard(roomId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} roomId The id of the room. + * @param {string} elementId The id of the element within the room. + * @param {PatchVisibilityParams} patchVisibilityParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerPatchElementVisibility(roomId: string, elementId: string, patchVisibilityParams: PatchVisibilityParams, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerPatchElementVisibility(roomId, elementId, patchVisibilityParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} roomId The id of the room. + * @param {PatchOrderParams} patchOrderParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof RoomsApi + */ + public roomsControllerPatchOrderingOfElements(roomId: string, patchOrderParams: PatchOrderParams, options?: any) { + return RoomsApiFp(this.configuration).roomsControllerPatchOrderingOfElements(roomId, patchOrderParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/school-api.ts b/src/serverApi/v3/api/school-api.ts new file mode 100644 index 0000000..94b3ca6 --- /dev/null +++ b/src/serverApi/v3/api/school-api.ts @@ -0,0 +1,807 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { SchoolExistsResponse } from '../models'; +// @ts-ignore +import { SchoolForExternalInviteResponse } from '../models'; +// @ts-ignore +import { SchoolForLdapLoginResponse } from '../models'; +// @ts-ignore +import { SchoolResponse } from '../models'; +// @ts-ignore +import { SchoolSystemResponse } from '../models'; +// @ts-ignore +import { SchoolUpdateBodyParams } from '../models'; +// @ts-ignore +import { SchulConneXProvisioningOptionsParams } from '../models'; +// @ts-ignore +import { SchulConneXProvisioningOptionsResponse } from '../models'; +/** + * SchoolApi - axios parameter creator + * @export + */ +export const SchoolApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerDoesSchoolExist: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerDoesSchoolExist', 'schoolId', schoolId) + const localVarPath = `/school/exists/id/{schoolId}` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetProvisioningOptions: async (schoolId: string, systemId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerGetProvisioningOptions', 'schoolId', schoolId) + // verify required parameter 'systemId' is not null or undefined + assertParamExists('schoolControllerGetProvisioningOptions', 'systemId', systemId) + const localVarPath = `/schools/{schoolId}/systems/{systemId}/provisioning-options` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolById: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerGetSchoolById', 'schoolId', schoolId) + const localVarPath = `/school/id/{schoolId}` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolListForExternalInvite: async (federalStateId?: string, options: any = {}): Promise => { + const localVarPath = `/school/list-for-external-invite`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (federalStateId !== undefined) { + localVarQueryParameter['federalStateId'] = federalStateId; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolListForLadpLogin: async (options: any = {}): Promise => { + const localVarPath = `/school/list-for-ldap-login`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolSystems: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerGetSchoolSystems', 'schoolId', schoolId) + const localVarPath = `/school/{schoolId}/systems` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerRemoveSystemFromSchool: async (schoolId: string, systemId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerRemoveSystemFromSchool', 'schoolId', schoolId) + // verify required parameter 'systemId' is not null or undefined + assertParamExists('schoolControllerRemoveSystemFromSchool', 'systemId', systemId) + const localVarPath = `/school/{schoolId}/system/{systemId}/remove` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerSetProvisioningOptions: async (schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerSetProvisioningOptions', 'schoolId', schoolId) + // verify required parameter 'systemId' is not null or undefined + assertParamExists('schoolControllerSetProvisioningOptions', 'systemId', systemId) + // verify required parameter 'schulConneXProvisioningOptionsParams' is not null or undefined + assertParamExists('schoolControllerSetProvisioningOptions', 'schulConneXProvisioningOptionsParams', schulConneXProvisioningOptionsParams) + const localVarPath = `/schools/{schoolId}/systems/{systemId}/provisioning-options` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))) + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(schulConneXProvisioningOptionsParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerUpdateSchool: async (schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('schoolControllerUpdateSchool', 'schoolId', schoolId) + // verify required parameter 'schoolUpdateBodyParams' is not null or undefined + assertParamExists('schoolControllerUpdateSchool', 'schoolUpdateBodyParams', schoolUpdateBodyParams) + const localVarPath = `/school/{schoolId}` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(schoolUpdateBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SchoolApi - functional programming interface + * @export + */ +export const SchoolApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SchoolApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerDoesSchoolExist(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerDoesSchoolExist(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetProvisioningOptions(schoolId, systemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetSchoolById(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolById(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolListForExternalInvite(federalStateId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetSchoolListForLadpLogin(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolListForLadpLogin(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerGetSchoolSystems(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise>> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerGetSchoolSystems(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerRemoveSystemFromSchool(schoolId, systemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * SchoolApi - factory interface + * @export + */ +export const SchoolApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SchoolApiFp(configuration) + return { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerDoesSchoolExist(schoolId: string, options?: any): AxiosPromise { + return localVarFp.schoolControllerDoesSchoolExist(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): AxiosPromise { + return localVarFp.schoolControllerGetProvisioningOptions(schoolId, systemId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolById(schoolId: string, options?: any): AxiosPromise { + return localVarFp.schoolControllerGetSchoolById(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): AxiosPromise> { + return localVarFp.schoolControllerGetSchoolListForExternalInvite(federalStateId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolListForLadpLogin(options?: any): AxiosPromise> { + return localVarFp.schoolControllerGetSchoolListForLadpLogin(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerGetSchoolSystems(schoolId: string, options?: any): AxiosPromise> { + return localVarFp.schoolControllerGetSchoolSystems(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): AxiosPromise { + return localVarFp.schoolControllerRemoveSystemFromSchool(schoolId, systemId, options).then((request) => request(axios, basePath)); + }, + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): AxiosPromise { + return localVarFp.schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): AxiosPromise { + return localVarFp.schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SchoolApi - interface + * @export + * @interface SchoolApi + */ +export interface SchoolApiInterface { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerDoesSchoolExist(schoolId: string, options?: any): AxiosPromise; + + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetSchoolById(schoolId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any): AxiosPromise>; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetSchoolListForLadpLogin(options?: any): AxiosPromise>; + + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerGetSchoolSystems(schoolId: string, options?: any): AxiosPromise>; + + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any): AxiosPromise; + + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any): AxiosPromise; + + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApiInterface + */ + schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any): AxiosPromise; + +} + +/** + * SchoolApi - object-oriented interface + * @export + * @class SchoolApi + * @extends {BaseAPI} + */ +export class SchoolApi extends BaseAPI implements SchoolApiInterface { + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerDoesSchoolExist(schoolId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerDoesSchoolExist(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Gets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetProvisioningOptions(schoolId: string, systemId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetProvisioningOptions(schoolId, systemId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetSchoolById(schoolId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetSchoolById(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} [federalStateId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetSchoolListForExternalInvite(federalStateId?: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetSchoolListForExternalInvite(federalStateId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetSchoolListForLadpLogin(options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetSchoolListForLadpLogin(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get systems from school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerGetSchoolSystems(schoolId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerGetSchoolSystems(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} schoolId + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerRemoveSystemFromSchool(schoolId: string, systemId: string, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerRemoveSystemFromSchool(schoolId, systemId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Sets all provisioning options for a system at a school + * @param {string} schoolId + * @param {string} systemId + * @param {SchulConneXProvisioningOptionsParams} schulConneXProvisioningOptionsParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerSetProvisioningOptions(schoolId: string, systemId: string, schulConneXProvisioningOptionsParams: SchulConneXProvisioningOptionsParams, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerSetProvisioningOptions(schoolId, systemId, schulConneXProvisioningOptionsParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updating school props by school administrators + * @param {string} schoolId + * @param {SchoolUpdateBodyParams} schoolUpdateBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SchoolApi + */ + public schoolControllerUpdateSchool(schoolId: string, schoolUpdateBodyParams: SchoolUpdateBodyParams, options?: any) { + return SchoolApiFp(this.configuration).schoolControllerUpdateSchool(schoolId, schoolUpdateBodyParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/share-token-api.ts b/src/serverApi/v3/api/share-token-api.ts new file mode 100644 index 0000000..199db1a --- /dev/null +++ b/src/serverApi/v3/api/share-token-api.ts @@ -0,0 +1,333 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ApiValidationError } from '../models'; +// @ts-ignore +import { CopyApiResponse } from '../models'; +// @ts-ignore +import { ShareTokenBodyParams } from '../models'; +// @ts-ignore +import { ShareTokenImportBodyParams } from '../models'; +// @ts-ignore +import { ShareTokenInfoResponse } from '../models'; +// @ts-ignore +import { ShareTokenResponse } from '../models'; +/** + * ShareTokenApi - axios parameter creator + * @export + */ +export const ShareTokenApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerCreateShareToken: async (shareTokenBodyParams: ShareTokenBodyParams, options: any = {}): Promise => { + // verify required parameter 'shareTokenBodyParams' is not null or undefined + assertParamExists('shareTokenControllerCreateShareToken', 'shareTokenBodyParams', shareTokenBodyParams) + const localVarPath = `/sharetoken`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(shareTokenBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerImportShareToken: async (token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options: any = {}): Promise => { + // verify required parameter 'token' is not null or undefined + assertParamExists('shareTokenControllerImportShareToken', 'token', token) + // verify required parameter 'shareTokenImportBodyParams' is not null or undefined + assertParamExists('shareTokenControllerImportShareToken', 'shareTokenImportBodyParams', shareTokenImportBodyParams) + const localVarPath = `/sharetoken/{token}/import` + .replace(`{${"token"}}`, encodeURIComponent(String(token))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(shareTokenImportBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerLookupShareToken: async (token: string, options: any = {}): Promise => { + // verify required parameter 'token' is not null or undefined + assertParamExists('shareTokenControllerLookupShareToken', 'token', token) + const localVarPath = `/sharetoken/{token}` + .replace(`{${"token"}}`, encodeURIComponent(String(token))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * ShareTokenApi - functional programming interface + * @export + */ +export const ShareTokenApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = ShareTokenApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerCreateShareToken(shareTokenBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async shareTokenControllerLookupShareToken(token: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.shareTokenControllerLookupShareToken(token, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * ShareTokenApi - factory interface + * @export + */ +export const ShareTokenApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = ShareTokenApiFp(configuration) + return { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): AxiosPromise { + return localVarFp.shareTokenControllerCreateShareToken(shareTokenBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): AxiosPromise { + return localVarFp.shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + shareTokenControllerLookupShareToken(token: string, options?: any): AxiosPromise { + return localVarFp.shareTokenControllerLookupShareToken(token, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * ShareTokenApi - interface + * @export + * @interface ShareTokenApi + */ +export interface ShareTokenApiInterface { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApiInterface + */ + shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApiInterface + */ + shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApiInterface + */ + shareTokenControllerLookupShareToken(token: string, options?: any): AxiosPromise; + +} + +/** + * ShareTokenApi - object-oriented interface + * @export + * @class ShareTokenApi + * @extends {BaseAPI} + */ +export class ShareTokenApi extends BaseAPI implements ShareTokenApiInterface { + /** + * + * @summary Create a share token. + * @param {ShareTokenBodyParams} shareTokenBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApi + */ + public shareTokenControllerCreateShareToken(shareTokenBodyParams: ShareTokenBodyParams, options?: any) { + return ShareTokenApiFp(this.configuration).shareTokenControllerCreateShareToken(shareTokenBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Import a share token payload. + * @param {string} token The token that identifies the shared object + * @param {ShareTokenImportBodyParams} shareTokenImportBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApi + */ + public shareTokenControllerImportShareToken(token: string, shareTokenImportBodyParams: ShareTokenImportBodyParams, options?: any) { + return ShareTokenApiFp(this.configuration).shareTokenControllerImportShareToken(token, shareTokenImportBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Look up a share token. + * @param {string} token The token that identifies the shared object + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ShareTokenApi + */ + public shareTokenControllerLookupShareToken(token: string, options?: any) { + return ShareTokenApiFp(this.configuration).shareTokenControllerLookupShareToken(token, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/ssoapi.ts b/src/serverApi/v3/api/ssoapi.ts new file mode 100644 index 0000000..ba07baa --- /dev/null +++ b/src/serverApi/v3/api/ssoapi.ts @@ -0,0 +1,220 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { OAuthTokenDto } from '../models'; +/** + * SSOApi - axios parameter creator + * @export + */ +export const SSOApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthSSOControllerGetHydraOauthToken: async (oauthClientId: string, options: any = {}): Promise => { + // verify required parameter 'oauthClientId' is not null or undefined + assertParamExists('oauthSSOControllerGetHydraOauthToken', 'oauthClientId', oauthClientId) + const localVarPath = `/sso/hydra/{oauthClientId}` + .replace(`{${"oauthClientId"}}`, encodeURIComponent(String(oauthClientId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthSSOControllerRequestAuthToken: async (oauthClientId: string, options: any = {}): Promise => { + // verify required parameter 'oauthClientId' is not null or undefined + assertParamExists('oauthSSOControllerRequestAuthToken', 'oauthClientId', oauthClientId) + const localVarPath = `/sso/auth/{oauthClientId}` + .replace(`{${"oauthClientId"}}`, encodeURIComponent(String(oauthClientId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SSOApi - functional programming interface + * @export + */ +export const SSOApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SSOApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthSSOControllerGetHydraOauthToken(oauthClientId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.oauthSSOControllerRequestAuthToken(oauthClientId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * SSOApi - factory interface + * @export + */ +export const SSOApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SSOApiFp(configuration) + return { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): AxiosPromise { + return localVarFp.oauthSSOControllerGetHydraOauthToken(oauthClientId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): AxiosPromise { + return localVarFp.oauthSSOControllerRequestAuthToken(oauthClientId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SSOApi - interface + * @export + * @interface SSOApi + */ +export interface SSOApiInterface { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SSOApiInterface + */ + oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SSOApiInterface + */ + oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any): AxiosPromise; + +} + +/** + * SSOApi - object-oriented interface + * @export + * @class SSOApi + * @extends {BaseAPI} + */ +export class SSOApi extends BaseAPI implements SSOApiInterface { + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SSOApi + */ + public oauthSSOControllerGetHydraOauthToken(oauthClientId: string, options?: any) { + return SSOApiFp(this.configuration).oauthSSOControllerGetHydraOauthToken(oauthClientId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} oauthClientId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SSOApi + */ + public oauthSSOControllerRequestAuthToken(oauthClientId: string, options?: any) { + return SSOApiFp(this.configuration).oauthSSOControllerRequestAuthToken(oauthClientId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/submission-api.ts b/src/serverApi/v3/api/submission-api.ts new file mode 100644 index 0000000..92fc9b9 --- /dev/null +++ b/src/serverApi/v3/api/submission-api.ts @@ -0,0 +1,220 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { SubmissionStatusListResponse } from '../models'; +/** + * SubmissionApi - axios parameter creator + * @export + */ +export const SubmissionApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + submissionControllerDelete: async (submissionId: string, options: any = {}): Promise => { + // verify required parameter 'submissionId' is not null or undefined + assertParamExists('submissionControllerDelete', 'submissionId', submissionId) + const localVarPath = `/submissions/{submissionId}` + .replace(`{${"submissionId"}}`, encodeURIComponent(String(submissionId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + submissionControllerFindStatusesByTask: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('submissionControllerFindStatusesByTask', 'taskId', taskId) + const localVarPath = `/submissions/status/task/{taskId}` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SubmissionApi - functional programming interface + * @export + */ +export const SubmissionApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SubmissionApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async submissionControllerDelete(submissionId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.submissionControllerDelete(submissionId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async submissionControllerFindStatusesByTask(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.submissionControllerFindStatusesByTask(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * SubmissionApi - factory interface + * @export + */ +export const SubmissionApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SubmissionApiFp(configuration) + return { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + submissionControllerDelete(submissionId: string, options?: any): AxiosPromise { + return localVarFp.submissionControllerDelete(submissionId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + submissionControllerFindStatusesByTask(taskId: string, options?: any): AxiosPromise { + return localVarFp.submissionControllerFindStatusesByTask(taskId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SubmissionApi - interface + * @export + * @interface SubmissionApi + */ +export interface SubmissionApiInterface { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SubmissionApiInterface + */ + submissionControllerDelete(submissionId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SubmissionApiInterface + */ + submissionControllerFindStatusesByTask(taskId: string, options?: any): AxiosPromise; + +} + +/** + * SubmissionApi - object-oriented interface + * @export + * @class SubmissionApi + * @extends {BaseAPI} + */ +export class SubmissionApi extends BaseAPI implements SubmissionApiInterface { + /** + * + * @param {string} submissionId The id of the submission. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SubmissionApi + */ + public submissionControllerDelete(submissionId: string, options?: any) { + return SubmissionApiFp(this.configuration).submissionControllerDelete(submissionId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SubmissionApi + */ + public submissionControllerFindStatusesByTask(taskId: string, options?: any) { + return SubmissionApiFp(this.configuration).submissionControllerFindStatusesByTask(taskId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/systems-api.ts b/src/serverApi/v3/api/systems-api.ts new file mode 100644 index 0000000..ac58c6b --- /dev/null +++ b/src/serverApi/v3/api/systems-api.ts @@ -0,0 +1,308 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { PublicSystemListResponse } from '../models'; +// @ts-ignore +import { PublicSystemResponse } from '../models'; +// @ts-ignore +import { SystemType } from '../models'; +/** + * SystemsApi - axios parameter creator + * @export + */ +export const SystemsApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerDeleteSystem: async (systemId: string, options: any = {}): Promise => { + // verify required parameter 'systemId' is not null or undefined + assertParamExists('systemControllerDeleteSystem', 'systemId', systemId) + const localVarPath = `/systems/{systemId}` + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerFind: async (types?: SystemType, options: any = {}): Promise => { + const localVarPath = `/systems/public`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + if (types !== undefined) { + localVarQueryParameter['types'] = types; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerGetSystem: async (systemId: string, options: any = {}): Promise => { + // verify required parameter 'systemId' is not null or undefined + assertParamExists('systemControllerGetSystem', 'systemId', systemId) + const localVarPath = `/systems/public/{systemId}` + .replace(`{${"systemId"}}`, encodeURIComponent(String(systemId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * SystemsApi - functional programming interface + * @export + */ +export const SystemsApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = SystemsApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async systemControllerDeleteSystem(systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerDeleteSystem(systemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async systemControllerFind(types?: SystemType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerFind(types, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async systemControllerGetSystem(systemId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.systemControllerGetSystem(systemId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * SystemsApi - factory interface + * @export + */ +export const SystemsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = SystemsApiFp(configuration) + return { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerDeleteSystem(systemId: string, options?: any): AxiosPromise { + return localVarFp.systemControllerDeleteSystem(systemId, options).then((request) => request(axios, basePath)); + }, + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerFind(types?: SystemType, options?: any): AxiosPromise { + return localVarFp.systemControllerFind(types, options).then((request) => request(axios, basePath)); + }, + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + systemControllerGetSystem(systemId: string, options?: any): AxiosPromise { + return localVarFp.systemControllerGetSystem(systemId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * SystemsApi - interface + * @export + * @interface SystemsApi + */ +export interface SystemsApiInterface { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApiInterface + */ + systemControllerDeleteSystem(systemId: string, options?: any): AxiosPromise; + + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApiInterface + */ + systemControllerFind(types?: SystemType, options?: any): AxiosPromise; + + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApiInterface + */ + systemControllerGetSystem(systemId: string, options?: any): AxiosPromise; + +} + +/** + * SystemsApi - object-oriented interface + * @export + * @class SystemsApi + * @extends {BaseAPI} + */ +export class SystemsApi extends BaseAPI implements SystemsApiInterface { + /** + * + * @summary Deletes a system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApi + */ + public systemControllerDeleteSystem(systemId: string, options?: any) { + return SystemsApiFp(this.configuration).systemControllerDeleteSystem(systemId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * This endpoint is used to show users the possible login systems that exist. No sensible data should be returned! + * @summary Finds all publicly available systems. + * @param {SystemType} [types] The type of the system. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApi + */ + public systemControllerFind(types?: SystemType, options?: any) { + return SystemsApiFp(this.configuration).systemControllerFind(types, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * This endpoint is used to get information about a possible login systems. No sensible data should be returned! + * @summary Finds a publicly available system. + * @param {string} systemId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof SystemsApi + */ + public systemControllerGetSystem(systemId: string, options?: any) { + return SystemsApiFp(this.configuration).systemControllerGetSystem(systemId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/task-api.ts b/src/serverApi/v3/api/task-api.ts new file mode 100644 index 0000000..6612db4 --- /dev/null +++ b/src/serverApi/v3/api/task-api.ts @@ -0,0 +1,636 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { CopyApiResponse } from '../models'; +// @ts-ignore +import { TaskCopyApiParams } from '../models'; +// @ts-ignore +import { TaskListResponse } from '../models'; +// @ts-ignore +import { TaskResponse } from '../models'; +/** + * TaskApi - axios parameter creator + * @export + */ +export const TaskApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerCopyTask: async (taskId: string, taskCopyApiParams: TaskCopyApiParams, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerCopyTask', 'taskId', taskId) + // verify required parameter 'taskCopyApiParams' is not null or undefined + assertParamExists('taskControllerCopyTask', 'taskCopyApiParams', taskCopyApiParams) + const localVarPath = `/tasks/{taskId}/copy` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(taskCopyApiParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerDelete: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerDelete', 'taskId', taskId) + const localVarPath = `/tasks/{taskId}` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFindAll: async (skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/tasks`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFindAllFinished: async (skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/tasks/finished`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFinish: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerFinish', 'taskId', taskId) + const localVarPath = `/tasks/{taskId}/finish` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerRestore: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerRestore', 'taskId', taskId) + const localVarPath = `/tasks/{taskId}/restore` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerRevertPublished: async (taskId: string, options: any = {}): Promise => { + // verify required parameter 'taskId' is not null or undefined + assertParamExists('taskControllerRevertPublished', 'taskId', taskId) + const localVarPath = `/tasks/{taskId}/revertPublished` + .replace(`{${"taskId"}}`, encodeURIComponent(String(taskId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * TaskApi - functional programming interface + * @export + */ +export const TaskApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = TaskApiAxiosParamCreator(configuration) + return { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerCopyTask(taskId, taskCopyApiParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerDelete(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerDelete(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerFindAll(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFindAll(skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFindAllFinished(skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerFinish(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerFinish(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerRestore(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerRestore(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async taskControllerRevertPublished(taskId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.taskControllerRevertPublished(taskId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * TaskApi - factory interface + * @export + */ +export const TaskApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = TaskApiFp(configuration) + return { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): AxiosPromise { + return localVarFp.taskControllerCopyTask(taskId, taskCopyApiParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerDelete(taskId: string, options?: any): AxiosPromise { + return localVarFp.taskControllerDelete(taskId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFindAll(skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.taskControllerFindAll(skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.taskControllerFindAllFinished(skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerFinish(taskId: string, options?: any): AxiosPromise { + return localVarFp.taskControllerFinish(taskId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerRestore(taskId: string, options?: any): AxiosPromise { + return localVarFp.taskControllerRestore(taskId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + taskControllerRevertPublished(taskId: string, options?: any): AxiosPromise { + return localVarFp.taskControllerRevertPublished(taskId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * TaskApi - interface + * @export + * @interface TaskApi + */ +export interface TaskApiInterface { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerDelete(taskId: string, options?: any): AxiosPromise; + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerFindAll(skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerFindAllFinished(skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerFinish(taskId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerRestore(taskId: string, options?: any): AxiosPromise; + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApiInterface + */ + taskControllerRevertPublished(taskId: string, options?: any): AxiosPromise; + +} + +/** + * TaskApi - object-oriented interface + * @export + * @class TaskApi + * @extends {BaseAPI} + */ +export class TaskApi extends BaseAPI implements TaskApiInterface { + /** + * + * @param {string} taskId The id of the task. + * @param {TaskCopyApiParams} taskCopyApiParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerCopyTask(taskId: string, taskCopyApiParams: TaskCopyApiParams, options?: any) { + return TaskApiFp(this.configuration).taskControllerCopyTask(taskId, taskCopyApiParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerDelete(taskId: string, options?: any) { + return TaskApiFp(this.configuration).taskControllerDelete(taskId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerFindAll(skip?: number, limit?: number, options?: any) { + return TaskApiFp(this.configuration).taskControllerFindAll(skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerFindAllFinished(skip?: number, limit?: number, options?: any) { + return TaskApiFp(this.configuration).taskControllerFindAllFinished(skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerFinish(taskId: string, options?: any) { + return TaskApiFp(this.configuration).taskControllerFinish(taskId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerRestore(taskId: string, options?: any) { + return TaskApiFp(this.configuration).taskControllerRestore(taskId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} taskId The id of the task. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof TaskApi + */ + public taskControllerRevertPublished(taskId: string, options?: any) { + return TaskApiFp(this.configuration).taskControllerRevertPublished(taskId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/tool-api.ts b/src/serverApi/v3/api/tool-api.ts new file mode 100644 index 0000000..68c4055 --- /dev/null +++ b/src/serverApi/v3/api/tool-api.ts @@ -0,0 +1,2576 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ContextExternalToolBodyParams } from '../models'; +// @ts-ignore +import { ContextExternalToolConfigurationTemplateListResponse } from '../models'; +// @ts-ignore +import { ContextExternalToolConfigurationTemplateResponse } from '../models'; +// @ts-ignore +import { ContextExternalToolPostParams } from '../models'; +// @ts-ignore +import { ContextExternalToolResponse } from '../models'; +// @ts-ignore +import { ContextExternalToolSearchListResponse } from '../models'; +// @ts-ignore +import { ExternalToolBulkCreateParams } from '../models'; +// @ts-ignore +import { ExternalToolCreateParams } from '../models'; +// @ts-ignore +import { ExternalToolMetadataResponse } from '../models'; +// @ts-ignore +import { ExternalToolResponse } from '../models'; +// @ts-ignore +import { ExternalToolSearchListResponse } from '../models'; +// @ts-ignore +import { ExternalToolUpdateParams } from '../models'; +// @ts-ignore +import { SchoolExternalToolConfigurationTemplateListResponse } from '../models'; +// @ts-ignore +import { SchoolExternalToolConfigurationTemplateResponse } from '../models'; +// @ts-ignore +import { SchoolExternalToolMetadataResponse } from '../models'; +// @ts-ignore +import { SchoolExternalToolPostParams } from '../models'; +// @ts-ignore +import { SchoolExternalToolResponse } from '../models'; +// @ts-ignore +import { SchoolExternalToolSearchListResponse } from '../models'; +// @ts-ignore +import { ToolContextType } from '../models'; +// @ts-ignore +import { ToolContextTypesListResponse } from '../models'; +// @ts-ignore +import { ToolLaunchRequestResponse } from '../models'; +// @ts-ignore +import { ToolReferenceListResponse } from '../models'; +// @ts-ignore +import { ToolReferenceResponse } from '../models'; +// @ts-ignore +import { ValidationError } from '../models'; +/** + * ToolApi - axios parameter creator + * @export + */ +export const ToolApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetAvailableToolsForContext: async (contextType: any, contextId: string, options: any = {}): Promise => { + // verify required parameter 'contextType' is not null or undefined + assertParamExists('toolConfigurationControllerGetAvailableToolsForContext', 'contextType', contextType) + // verify required parameter 'contextId' is not null or undefined + assertParamExists('toolConfigurationControllerGetAvailableToolsForContext', 'contextId', contextId) + const localVarPath = `/tools/{contextType}/{contextId}/available-tools` + .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))) + .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetAvailableToolsForSchool: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('toolConfigurationControllerGetAvailableToolsForSchool', 'schoolId', schoolId) + const localVarPath = `/tools/school/{schoolId}/available-tools` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetConfigurationTemplateForContext: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolConfigurationControllerGetConfigurationTemplateForContext', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/context-external-tools/{contextExternalToolId}/configuration-template` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetConfigurationTemplateForSchool: async (schoolExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolConfigurationControllerGetConfigurationTemplateForSchool', 'schoolExternalToolId', schoolExternalToolId) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}/configuration-template` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetToolContextTypes: async (options: any = {}): Promise => { + const localVarPath = `/tools/context-types`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerCreateContextExternalTool: async (contextExternalToolPostParams: ContextExternalToolPostParams, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolPostParams' is not null or undefined + assertParamExists('toolContextControllerCreateContextExternalTool', 'contextExternalToolPostParams', contextExternalToolPostParams) + const localVarPath = `/tools/context-external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolPostParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerDeleteContextExternalTool: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolContextControllerDeleteContextExternalTool', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerGetContextExternalTool: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolContextControllerGetContextExternalTool', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerGetContextExternalToolsForContext: async (contextId: string, contextType: ToolContextType, options: any = {}): Promise => { + // verify required parameter 'contextId' is not null or undefined + assertParamExists('toolContextControllerGetContextExternalToolsForContext', 'contextId', contextId) + // verify required parameter 'contextType' is not null or undefined + assertParamExists('toolContextControllerGetContextExternalToolsForContext', 'contextType', contextType) + const localVarPath = `/tools/context-external-tools/{contextType}/{contextId}` + .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))) + .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerUpdateContextExternalTool: async (contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolContextControllerUpdateContextExternalTool', 'contextExternalToolId', contextExternalToolId) + // verify required parameter 'contextExternalToolPostParams' is not null or undefined + assertParamExists('toolContextControllerUpdateContextExternalTool', 'contextExternalToolPostParams', contextExternalToolPostParams) + const localVarPath = `/tools/context-external-tools/{contextExternalToolId}` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolPostParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerCreateExternalTool: async (externalToolCreateParams: ExternalToolCreateParams, options: any = {}): Promise => { + // verify required parameter 'externalToolCreateParams' is not null or undefined + assertParamExists('toolControllerCreateExternalTool', 'externalToolCreateParams', externalToolCreateParams) + const localVarPath = `/tools/external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(externalToolCreateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerDeleteExternalTool: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerDeleteExternalTool', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerFindExternalTool: async (name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options: any = {}): Promise => { + const localVarPath = `/tools/external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (name !== undefined) { + localVarQueryParameter['name'] = name; + } + + if (clientId !== undefined) { + localVarQueryParameter['clientId'] = clientId; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + if (sortOrder !== undefined) { + localVarQueryParameter['sortOrder'] = sortOrder; + } + + if (sortBy !== undefined) { + localVarQueryParameter['sortBy'] = sortBy; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetDatasheet: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerGetDatasheet', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}/datasheet` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetExternalTool: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerGetExternalTool', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetExternalToolLogo: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerGetExternalToolLogo', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}/logo` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetMetaDataForExternalTool: async (externalToolId: string, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerGetMetaDataForExternalTool', 'externalToolId', externalToolId) + const localVarPath = `/tools/external-tools/{externalToolId}/metadata` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerImportExternalTools: async (externalToolBulkCreateParams: ExternalToolBulkCreateParams, options: any = {}): Promise => { + // verify required parameter 'externalToolBulkCreateParams' is not null or undefined + assertParamExists('toolControllerImportExternalTools', 'externalToolBulkCreateParams', externalToolBulkCreateParams) + const localVarPath = `/tools/external-tools/import`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(externalToolBulkCreateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerUpdateExternalTool: async (externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options: any = {}): Promise => { + // verify required parameter 'externalToolId' is not null or undefined + assertParamExists('toolControllerUpdateExternalTool', 'externalToolId', externalToolId) + // verify required parameter 'externalToolUpdateParams' is not null or undefined + assertParamExists('toolControllerUpdateExternalTool', 'externalToolUpdateParams', externalToolUpdateParams) + const localVarPath = `/tools/external-tools/{externalToolId}` + .replace(`{${"externalToolId"}}`, encodeURIComponent(String(externalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(externalToolUpdateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolLaunchControllerGetContextExternalToolLaunchRequest: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolLaunchControllerGetContextExternalToolLaunchRequest', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/context/{contextExternalToolId}/launch` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolLaunchControllerGetSchoolExternalToolLaunchRequest: async (schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolLaunchControllerGetSchoolExternalToolLaunchRequest', 'schoolExternalToolId', schoolExternalToolId) + // verify required parameter 'contextExternalToolBodyParams' is not null or undefined + assertParamExists('toolLaunchControllerGetSchoolExternalToolLaunchRequest', 'contextExternalToolBodyParams', contextExternalToolBodyParams) + const localVarPath = `/tools/school/{schoolExternalToolId}/launch` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(contextExternalToolBodyParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolReferenceControllerGetToolReference: async (contextExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'contextExternalToolId' is not null or undefined + assertParamExists('toolReferenceControllerGetToolReference', 'contextExternalToolId', contextExternalToolId) + const localVarPath = `/tools/tool-references/context-external-tools/{contextExternalToolId}` + .replace(`{${"contextExternalToolId"}}`, encodeURIComponent(String(contextExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolReferenceControllerGetToolReferencesForContext: async (contextId: string, contextType: ToolContextType, options: any = {}): Promise => { + // verify required parameter 'contextId' is not null or undefined + assertParamExists('toolReferenceControllerGetToolReferencesForContext', 'contextId', contextId) + // verify required parameter 'contextType' is not null or undefined + assertParamExists('toolReferenceControllerGetToolReferencesForContext', 'contextType', contextType) + const localVarPath = `/tools/tool-references/{contextType}/{contextId}` + .replace(`{${"contextId"}}`, encodeURIComponent(String(contextId))) + .replace(`{${"contextType"}}`, encodeURIComponent(String(contextType))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerCreateSchoolExternalTool: async (schoolExternalToolPostParams: SchoolExternalToolPostParams, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolPostParams' is not null or undefined + assertParamExists('toolSchoolControllerCreateSchoolExternalTool', 'schoolExternalToolPostParams', schoolExternalToolPostParams) + const localVarPath = `/tools/school-external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(schoolExternalToolPostParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerDeleteSchoolExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolSchoolControllerDeleteSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetMetaDataForExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolSchoolControllerGetMetaDataForExternalTool', 'schoolExternalToolId', schoolExternalToolId) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}/metadata` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetSchoolExternalTool: async (schoolExternalToolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolSchoolControllerGetSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetSchoolExternalTools: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('toolSchoolControllerGetSchoolExternalTools', 'schoolId', schoolId) + const localVarPath = `/tools/school-external-tools`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (schoolId !== undefined) { + localVarQueryParameter['schoolId'] = schoolId; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerUpdateSchoolExternalTool: async (schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options: any = {}): Promise => { + // verify required parameter 'schoolExternalToolId' is not null or undefined + assertParamExists('toolSchoolControllerUpdateSchoolExternalTool', 'schoolExternalToolId', schoolExternalToolId) + // verify required parameter 'schoolExternalToolPostParams' is not null or undefined + assertParamExists('toolSchoolControllerUpdateSchoolExternalTool', 'schoolExternalToolPostParams', schoolExternalToolPostParams) + const localVarPath = `/tools/school-external-tools/{schoolExternalToolId}` + .replace(`{${"schoolExternalToolId"}}`, encodeURIComponent(String(schoolExternalToolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(schoolExternalToolPostParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * ToolApi - functional programming interface + * @export + */ +export const ToolApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = ToolApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolConfigurationControllerGetToolContextTypes(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolConfigurationControllerGetToolContextTypes(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerDeleteContextExternalTool(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerGetContextExternalTool(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerCreateExternalTool(externalToolCreateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerDeleteExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerDeleteExternalTool(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerGetDatasheet(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetDatasheet(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerGetExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetExternalTool(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerGetExternalToolLogo(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetExternalToolLogo(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerGetMetaDataForExternalTool(externalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerImportExternalTools(externalToolBulkCreateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolReferenceControllerGetToolReference(contextExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerGetSchoolExternalTools(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * ToolApi - factory interface + * @export + */ +export const ToolApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = ToolApiFp(configuration) + return { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolConfigurationControllerGetToolContextTypes(options?: any): AxiosPromise { + return localVarFp.toolConfigurationControllerGetToolContextTypes(options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise { + return localVarFp.toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolContextControllerDeleteContextExternalTool(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolContextControllerGetContextExternalTool(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise { + return localVarFp.toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise { + return localVarFp.toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): AxiosPromise { + return localVarFp.toolControllerCreateExternalTool(externalToolCreateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerDeleteExternalTool(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerDeleteExternalTool(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): AxiosPromise { + return localVarFp.toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetDatasheet(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerGetDatasheet(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetExternalTool(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerGetExternalTool(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetExternalToolLogo(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerGetExternalToolLogo(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolControllerGetMetaDataForExternalTool(externalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): AxiosPromise { + return localVarFp.toolControllerImportExternalTools(externalToolBulkCreateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): AxiosPromise { + return localVarFp.toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): AxiosPromise { + return localVarFp.toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolReferenceControllerGetToolReference(contextExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise { + return localVarFp.toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerGetSchoolExternalTools(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise { + return localVarFp.toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * ToolApi - interface + * @export + * @interface ToolApi + */ +export interface ToolApiInterface { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any): AxiosPromise; + + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolConfigurationControllerGetToolContextTypes(options?: any): AxiosPromise; + + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise; + + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise; + + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any): AxiosPromise; + + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any): AxiosPromise; + + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerDeleteExternalTool(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any): AxiosPromise; + + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerGetDatasheet(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerGetExternalTool(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerGetExternalToolLogo(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any): AxiosPromise; + + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any): AxiosPromise; + + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any): AxiosPromise; + + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any): AxiosPromise; + + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise; + + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApiInterface + */ + toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any): AxiosPromise; + +} + +/** + * ToolApi - object-oriented interface + * @export + * @class ToolApi + * @extends {BaseAPI} + */ +export class ToolApi extends BaseAPI implements ToolApiInterface { + /** + * + * @summary Lists all available tools that can be added for a given context + * @param {any} contextType + * @param {string} contextId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetAvailableToolsForContext(contextType: any, contextId: string, options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetAvailableToolsForContext(contextType, contextId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Lists all available tools that can be added for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetAvailableToolsForSchool(schoolId: string, options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetAvailableToolsForSchool(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the latest configuration template for a Context External Tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetConfigurationTemplateForContext(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get the latest configuration template for a School External Tool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetConfigurationTemplateForSchool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Lists all context types available in the SVS + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolConfigurationControllerGetToolContextTypes(options?: any) { + return ToolApiFp(this.configuration).toolConfigurationControllerGetToolContextTypes(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates a ContextExternalTool + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerCreateContextExternalTool(contextExternalToolPostParams: ContextExternalToolPostParams, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerCreateContextExternalTool(contextExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Deletes a ContextExternalTool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerDeleteContextExternalTool(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerDeleteContextExternalTool(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Searches a ContextExternalTool for the given id + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerGetContextExternalTool(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerGetContextExternalTool(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a list of ContextExternalTools for the given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerGetContextExternalToolsForContext(contextId: string, contextType: ToolContextType, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerGetContextExternalToolsForContext(contextId, contextType, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates a ContextExternalTool + * @param {string} contextExternalToolId + * @param {ContextExternalToolPostParams} contextExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolContextControllerUpdateContextExternalTool(contextExternalToolId: string, contextExternalToolPostParams: ContextExternalToolPostParams, options?: any) { + return ToolApiFp(this.configuration).toolContextControllerUpdateContextExternalTool(contextExternalToolId, contextExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates an ExternalTool + * @param {ExternalToolCreateParams} externalToolCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerCreateExternalTool(externalToolCreateParams: ExternalToolCreateParams, options?: any) { + return ToolApiFp(this.configuration).toolControllerCreateExternalTool(externalToolCreateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Deletes an ExternalTool + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerDeleteExternalTool(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerDeleteExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a list of ExternalTools + * @param {string} [name] Name of the external tool + * @param {string} [clientId] OAuth2 client id of the external tool + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {'asc' | 'desc'} [sortOrder] + * @param {'id' | 'name'} [sortBy] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerFindExternalTool(name?: string, clientId?: string, skip?: number, limit?: number, sortOrder?: 'asc' | 'desc', sortBy?: 'id' | 'name', options?: any) { + return ToolApiFp(this.configuration).toolControllerFindExternalTool(name, clientId, skip, limit, sortOrder, sortBy, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a pdf of the external tool information + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerGetDatasheet(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerGetDatasheet(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns an ExternalTool for the given id + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerGetExternalTool(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerGetExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Gets the logo of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerGetExternalToolLogo(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerGetExternalToolLogo(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Gets the metadata of an external tool. + * @param {string} externalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerGetMetaDataForExternalTool(externalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolControllerGetMetaDataForExternalTool(externalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates multiple ExternalTools at the same time. + * @param {ExternalToolBulkCreateParams} externalToolBulkCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerImportExternalTools(externalToolBulkCreateParams: ExternalToolBulkCreateParams, options?: any) { + return ToolApiFp(this.configuration).toolControllerImportExternalTools(externalToolBulkCreateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates an ExternalTool + * @param {string} externalToolId + * @param {ExternalToolUpdateParams} externalToolUpdateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolControllerUpdateExternalTool(externalToolId: string, externalToolUpdateParams: ExternalToolUpdateParams, options?: any) { + return ToolApiFp(this.configuration).toolControllerUpdateExternalTool(externalToolId, externalToolUpdateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get tool launch request for a context external tool id + * @param {string} contextExternalToolId The id of the context external tool + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolLaunchControllerGetContextExternalToolLaunchRequest(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get tool launch request for a school external tool + * @param {string} schoolExternalToolId The id of the school external tool + * @param {ContextExternalToolBodyParams} contextExternalToolBodyParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId: string, contextExternalToolBodyParams: ContextExternalToolBodyParams, options?: any) { + return ToolApiFp(this.configuration).toolLaunchControllerGetSchoolExternalToolLaunchRequest(schoolExternalToolId, contextExternalToolBodyParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get ExternalTool Reference for a given context external tool + * @param {string} contextExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolReferenceControllerGetToolReference(contextExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolReferenceControllerGetToolReference(contextExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Get ExternalTool References for a given context + * @param {string} contextId + * @param {ToolContextType} contextType + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolReferenceControllerGetToolReferencesForContext(contextId: string, contextType: ToolContextType, options?: any) { + return ToolApiFp(this.configuration).toolReferenceControllerGetToolReferencesForContext(contextId, contextType, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates a SchoolExternalTool + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerCreateSchoolExternalTool(schoolExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Deletes a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerDeleteSchoolExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Gets the metadata of an school external tool. + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerGetMetaDataForExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a SchoolExternalTool for the given id + * @param {string} schoolExternalToolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId: string, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerGetSchoolExternalTool(schoolExternalToolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns a list of SchoolExternalTools for a given school + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerGetSchoolExternalTools(schoolId: string, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerGetSchoolExternalTools(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Updates a SchoolExternalTool + * @param {string} schoolExternalToolId + * @param {SchoolExternalToolPostParams} schoolExternalToolPostParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof ToolApi + */ + public toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId: string, schoolExternalToolPostParams: SchoolExternalToolPostParams, options?: any) { + return ToolApiFp(this.configuration).toolSchoolControllerUpdateSchoolExternalTool(schoolExternalToolId, schoolExternalToolPostParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/user-api.ts b/src/serverApi/v3/api/user-api.ts new file mode 100644 index 0000000..55f3a23 --- /dev/null +++ b/src/serverApi/v3/api/user-api.ts @@ -0,0 +1,218 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ChangeLanguageParams } from '../models'; +// @ts-ignore +import { ResolvedUserResponse } from '../models'; +// @ts-ignore +import { SuccessfulResponse } from '../models'; +/** + * UserApi - axios parameter creator + * @export + */ +export const UserApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userControllerChangeLanguage: async (changeLanguageParams: ChangeLanguageParams, options: any = {}): Promise => { + // verify required parameter 'changeLanguageParams' is not null or undefined + assertParamExists('userControllerChangeLanguage', 'changeLanguageParams', changeLanguageParams) + const localVarPath = `/user/language`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(changeLanguageParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userControllerMe: async (options: any = {}): Promise => { + const localVarPath = `/user/me`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * UserApi - functional programming interface + * @export + */ +export const UserApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = UserApiAxiosParamCreator(configuration) + return { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userControllerChangeLanguage(changeLanguageParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userControllerMe(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userControllerMe(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * UserApi - factory interface + * @export + */ +export const UserApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = UserApiFp(configuration) + return { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): AxiosPromise { + return localVarFp.userControllerChangeLanguage(changeLanguageParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userControllerMe(options?: any): AxiosPromise { + return localVarFp.userControllerMe(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * UserApi - interface + * @export + * @interface UserApi + */ +export interface UserApiInterface { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserApiInterface + */ + userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserApiInterface + */ + userControllerMe(options?: any): AxiosPromise; + +} + +/** + * UserApi - object-oriented interface + * @export + * @class UserApi + * @extends {BaseAPI} + */ +export class UserApi extends BaseAPI implements UserApiInterface { + /** + * + * @param {ChangeLanguageParams} changeLanguageParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserApi + */ + public userControllerChangeLanguage(changeLanguageParams: ChangeLanguageParams, options?: any) { + return UserApiFp(this.configuration).userControllerChangeLanguage(changeLanguageParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserApi + */ + public userControllerMe(options?: any) { + return UserApiFp(this.configuration).userControllerMe(options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/user-import-api.ts b/src/serverApi/v3/api/user-import-api.ts new file mode 100644 index 0000000..4860f28 --- /dev/null +++ b/src/serverApi/v3/api/user-import-api.ts @@ -0,0 +1,947 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ImportUserListResponse } from '../models'; +// @ts-ignore +import { ImportUserResponse } from '../models'; +// @ts-ignore +import { UpdateFlagParams } from '../models'; +// @ts-ignore +import { UpdateMatchParams } from '../models'; +// @ts-ignore +import { UserMatchListResponse } from '../models'; +/** + * UserImportApi - axios parameter creator + * @export + */ +export const UserImportApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerCancelMigration: async (options: any = {}): Promise => { + const localVarPath = `/user/import/cancel`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerEndSchoolInMaintenance: async (options: any = {}): Promise => { + const localVarPath = `/user/import/startSync`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerFindAllImportUsers: async (firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/user/import`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (firstName !== undefined) { + localVarQueryParameter['firstName'] = firstName; + } + + if (lastName !== undefined) { + localVarQueryParameter['lastName'] = lastName; + } + + if (loginName !== undefined) { + localVarQueryParameter['loginName'] = loginName; + } + + if (match) { + localVarQueryParameter['match'] = match; + } + + if (flagged !== undefined) { + localVarQueryParameter['flagged'] = flagged; + } + + if (classes !== undefined) { + localVarQueryParameter['classes'] = classes; + } + + if (role !== undefined) { + localVarQueryParameter['role'] = role; + } + + if (sortOrder !== undefined) { + localVarQueryParameter['sortOrder'] = sortOrder; + } + + if (sortBy !== undefined) { + localVarQueryParameter['sortBy'] = sortBy; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerFindAllUnmatchedUsers: async (name?: string, skip?: number, limit?: number, options: any = {}): Promise => { + const localVarPath = `/user/import/unassigned`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (name !== undefined) { + localVarQueryParameter['name'] = name; + } + + if (skip !== undefined) { + localVarQueryParameter['skip'] = skip; + } + + if (limit !== undefined) { + localVarQueryParameter['limit'] = limit; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerPopulateImportUsers: async (options: any = {}): Promise => { + const localVarPath = `/user/import/populate-import-users`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerRemoveMatch: async (importUserId: string, options: any = {}): Promise => { + // verify required parameter 'importUserId' is not null or undefined + assertParamExists('importUserControllerRemoveMatch', 'importUserId', importUserId) + const localVarPath = `/user/import/{importUserId}/match` + .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerSaveAllUsersMatches: async (options: any = {}): Promise => { + const localVarPath = `/user/import/migrate`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerSetMatch: async (importUserId: string, updateMatchParams: UpdateMatchParams, options: any = {}): Promise => { + // verify required parameter 'importUserId' is not null or undefined + assertParamExists('importUserControllerSetMatch', 'importUserId', importUserId) + // verify required parameter 'updateMatchParams' is not null or undefined + assertParamExists('importUserControllerSetMatch', 'updateMatchParams', updateMatchParams) + const localVarPath = `/user/import/{importUserId}/match` + .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateMatchParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerStartSchoolInUserMigration: async (useCentralLdap: boolean, options: any = {}): Promise => { + // verify required parameter 'useCentralLdap' is not null or undefined + assertParamExists('importUserControllerStartSchoolInUserMigration', 'useCentralLdap', useCentralLdap) + const localVarPath = `/user/import/startUserMigration`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (useCentralLdap !== undefined) { + localVarQueryParameter['useCentralLdap'] = useCentralLdap; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerUpdateFlag: async (importUserId: string, updateFlagParams: UpdateFlagParams, options: any = {}): Promise => { + // verify required parameter 'importUserId' is not null or undefined + assertParamExists('importUserControllerUpdateFlag', 'importUserId', importUserId) + // verify required parameter 'updateFlagParams' is not null or undefined + assertParamExists('importUserControllerUpdateFlag', 'updateFlagParams', updateFlagParams) + const localVarPath = `/user/import/{importUserId}/flag` + .replace(`{${"importUserId"}}`, encodeURIComponent(String(importUserId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(updateFlagParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * UserImportApi - functional programming interface + * @export + */ +export const UserImportApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = UserImportApiAxiosParamCreator(configuration) + return { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerCancelMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerCancelMigration(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerEndSchoolInMaintenance(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerEndSchoolInMaintenance(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerFindAllUnmatchedUsers(name, skip, limit, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerPopulateImportUsers(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerPopulateImportUsers(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerRemoveMatch(importUserId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerRemoveMatch(importUserId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerSaveAllUsersMatches(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerSaveAllUsersMatches(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerSetMatch(importUserId, updateMatchParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerStartSchoolInUserMigration(useCentralLdap, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.importUserControllerUpdateFlag(importUserId, updateFlagParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * UserImportApi - factory interface + * @export + */ +export const UserImportApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = UserImportApiFp(configuration) + return { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerCancelMigration(options?: any): AxiosPromise { + return localVarFp.importUserControllerCancelMigration(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerEndSchoolInMaintenance(options?: any): AxiosPromise { + return localVarFp.importUserControllerEndSchoolInMaintenance(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): AxiosPromise { + return localVarFp.importUserControllerFindAllUnmatchedUsers(name, skip, limit, options).then((request) => request(axios, basePath)); + }, + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerPopulateImportUsers(options?: any): AxiosPromise { + return localVarFp.importUserControllerPopulateImportUsers(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerRemoveMatch(importUserId: string, options?: any): AxiosPromise { + return localVarFp.importUserControllerRemoveMatch(importUserId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerSaveAllUsersMatches(options?: any): AxiosPromise { + return localVarFp.importUserControllerSaveAllUsersMatches(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): AxiosPromise { + return localVarFp.importUserControllerSetMatch(importUserId, updateMatchParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): AxiosPromise { + return localVarFp.importUserControllerStartSchoolInUserMigration(useCentralLdap, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): AxiosPromise { + return localVarFp.importUserControllerUpdateFlag(importUserId, updateFlagParams, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * UserImportApi - interface + * @export + * @interface UserImportApi + */ +export interface UserImportApiInterface { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerCancelMigration(options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerEndSchoolInMaintenance(options?: any): AxiosPromise; + + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any): AxiosPromise; + + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerPopulateImportUsers(options?: any): AxiosPromise; + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerRemoveMatch(importUserId: string, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerSaveAllUsersMatches(options?: any): AxiosPromise; + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any): AxiosPromise; + + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any): AxiosPromise; + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApiInterface + */ + importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any): AxiosPromise; + +} + +/** + * UserImportApi - object-oriented interface + * @export + * @class UserImportApi + * @extends {BaseAPI} + */ +export class UserImportApi extends BaseAPI implements UserImportApiInterface { + /** + * Cancel current migration process + * @summary Cancel migration wizard + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerCancelMigration(options?: any) { + return UserImportApiFp(this.configuration).importUserControllerCancelMigration(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerEndSchoolInMaintenance(options?: any) { + return UserImportApiFp(this.configuration).importUserControllerEndSchoolInMaintenance(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} [firstName] + * @param {string} [lastName] + * @param {string} [loginName] + * @param {Array<'auto' | 'admin' | 'none'>} [match] + * @param {boolean} [flagged] + * @param {string} [classes] + * @param {'student' | 'teacher' | 'admin'} [role] + * @param {'asc' | 'desc'} [sortOrder] + * @param {'firstName' | 'lastName'} [sortBy] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerFindAllImportUsers(firstName?: string, lastName?: string, loginName?: string, match?: Array<'auto' | 'admin' | 'none'>, flagged?: boolean, classes?: string, role?: 'student' | 'teacher' | 'admin', sortOrder?: 'asc' | 'desc', sortBy?: 'firstName' | 'lastName', skip?: number, limit?: number, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerFindAllImportUsers(firstName, lastName, loginName, match, flagged, classes, role, sortOrder, sortBy, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} [name] + * @param {number} [skip] Number of elements (not pages) to be skipped + * @param {number} [limit] Page limit, defaults to 10. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerFindAllUnmatchedUsers(name?: string, skip?: number, limit?: number, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerFindAllUnmatchedUsers(name, skip, limit, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Populates import users from specific user migration populate endpoint. + * @summary Populates import users + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerPopulateImportUsers(options?: any) { + return UserImportApiFp(this.configuration).importUserControllerPopulateImportUsers(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerRemoveMatch(importUserId: string, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerRemoveMatch(importUserId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerSaveAllUsersMatches(options?: any) { + return UserImportApiFp(this.configuration).importUserControllerSaveAllUsersMatches(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateMatchParams} updateMatchParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerSetMatch(importUserId: string, updateMatchParams: UpdateMatchParams, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerSetMatch(importUserId, updateMatchParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {boolean} useCentralLdap + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerStartSchoolInUserMigration(useCentralLdap: boolean, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerStartSchoolInUserMigration(useCentralLdap, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} importUserId The id of an importuser object, that matches an internal user with an external user. + * @param {UpdateFlagParams} updateFlagParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserImportApi + */ + public importUserControllerUpdateFlag(importUserId: string, updateFlagParams: UpdateFlagParams, options?: any) { + return UserImportApiFp(this.configuration).importUserControllerUpdateFlag(importUserId, updateFlagParams, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/user-login-migration-api.ts b/src/serverApi/v3/api/user-login-migration-api.ts new file mode 100644 index 0000000..b2e4746 --- /dev/null +++ b/src/serverApi/v3/api/user-login-migration-api.ts @@ -0,0 +1,677 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { ForceMigrationParams } from '../models'; +// @ts-ignore +import { Oauth2MigrationParams } from '../models'; +// @ts-ignore +import { UserLoginMigrationMandatoryParams } from '../models'; +// @ts-ignore +import { UserLoginMigrationResponse } from '../models'; +// @ts-ignore +import { UserLoginMigrationSearchListResponse } from '../models'; +/** + * UserLoginMigrationApi - axios parameter creator + * @export + */ +export const UserLoginMigrationApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerCloseMigration: async (options: any = {}): Promise => { + const localVarPath = `/user-login-migrations/close`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerFindUserLoginMigrationBySchool: async (schoolId: string, options: any = {}): Promise => { + // verify required parameter 'schoolId' is not null or undefined + assertParamExists('userLoginMigrationControllerFindUserLoginMigrationBySchool', 'schoolId', schoolId) + const localVarPath = `/user-login-migrations/schools/{schoolId}` + .replace(`{${"schoolId"}}`, encodeURIComponent(String(schoolId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerForceMigration: async (forceMigrationParams: ForceMigrationParams, options: any = {}): Promise => { + // verify required parameter 'forceMigrationParams' is not null or undefined + assertParamExists('userLoginMigrationControllerForceMigration', 'forceMigrationParams', forceMigrationParams) + const localVarPath = `/user-login-migrations/force-migration`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(forceMigrationParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerGetMigrations: async (userId?: string, options: any = {}): Promise => { + const localVarPath = `/user-login-migrations`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + if (userId !== undefined) { + localVarQueryParameter['userId'] = userId; + } + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerMigrateUserLogin: async (oauth2MigrationParams: Oauth2MigrationParams, options: any = {}): Promise => { + // verify required parameter 'oauth2MigrationParams' is not null or undefined + assertParamExists('userLoginMigrationControllerMigrateUserLogin', 'oauth2MigrationParams', oauth2MigrationParams) + const localVarPath = `/user-login-migrations/migrate-to-oauth2`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(oauth2MigrationParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerRestartMigration: async (options: any = {}): Promise => { + const localVarPath = `/user-login-migrations/restart`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerSetMigrationMandatory: async (userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options: any = {}): Promise => { + // verify required parameter 'userLoginMigrationMandatoryParams' is not null or undefined + assertParamExists('userLoginMigrationControllerSetMigrationMandatory', 'userLoginMigrationMandatoryParams', userLoginMigrationMandatoryParams) + const localVarPath = `/user-login-migrations/mandatory`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(userLoginMigrationMandatoryParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerStartMigration: async (options: any = {}): Promise => { + const localVarPath = `/user-login-migrations/start`; + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * UserLoginMigrationApi - functional programming interface + * @export + */ +export const UserLoginMigrationApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = UserLoginMigrationApiAxiosParamCreator(configuration) + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerCloseMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerCloseMigration(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerForceMigration(forceMigrationParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerGetMigrations(userId?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerGetMigrations(userId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerRestartMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerRestartMigration(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationControllerStartMigration(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationControllerStartMigration(options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * UserLoginMigrationApi - factory interface + * @export + */ +export const UserLoginMigrationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = UserLoginMigrationApiFp(configuration) + return { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerCloseMigration(options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerCloseMigration(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerForceMigration(forceMigrationParams, options).then((request) => request(axios, basePath)); + }, + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerGetMigrations(userId?: string, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerGetMigrations(userId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerRestartMigration(options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerRestartMigration(options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationControllerStartMigration(options?: any): AxiosPromise { + return localVarFp.userLoginMigrationControllerStartMigration(options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * UserLoginMigrationApi - interface + * @export + * @interface UserLoginMigrationApi + */ +export interface UserLoginMigrationApiInterface { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerCloseMigration(options?: any): AxiosPromise; + + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any): AxiosPromise; + + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any): AxiosPromise; + + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerGetMigrations(userId?: string, options?: any): AxiosPromise; + + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerRestartMigration(options?: any): AxiosPromise; + + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any): AxiosPromise; + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApiInterface + */ + userLoginMigrationControllerStartMigration(options?: any): AxiosPromise; + +} + +/** + * UserLoginMigrationApi - object-oriented interface + * @export + * @class UserLoginMigrationApi + * @extends {BaseAPI} + */ +export class UserLoginMigrationApi extends BaseAPI implements UserLoginMigrationApiInterface { + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerCloseMigration(options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerCloseMigration(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {string} schoolId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId: string, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerFindUserLoginMigrationBySchool(schoolId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Force migrate an administrator account and its school + * @param {ForceMigrationParams} forceMigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerForceMigration(forceMigrationParams: ForceMigrationParams, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerForceMigration(forceMigrationParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Currently there can only be one migration for a user. Therefore only one migration is returned. + * @summary Get UserLoginMigrations + * @param {string} [userId] + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerGetMigrations(userId?: string, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerGetMigrations(userId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {Oauth2MigrationParams} oauth2MigrationParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams: Oauth2MigrationParams, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerMigrateUserLogin(oauth2MigrationParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerRestartMigration(options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerRestartMigration(options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {UserLoginMigrationMandatoryParams} userLoginMigrationMandatoryParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams: UserLoginMigrationMandatoryParams, options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerSetMigrationMandatory(userLoginMigrationMandatoryParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationApi + */ + public userLoginMigrationControllerStartMigration(options?: any) { + return UserLoginMigrationApiFp(this.configuration).userLoginMigrationControllerStartMigration(options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/user-login-migration-rollback-api.ts b/src/serverApi/v3/api/user-login-migration-rollback-api.ts new file mode 100644 index 0000000..150bc76 --- /dev/null +++ b/src/serverApi/v3/api/user-login-migration-rollback-api.ts @@ -0,0 +1,147 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +/** + * UserLoginMigrationRollbackApi - axios parameter creator + * @export + */ +export const UserLoginMigrationRollbackApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationRollbackControllerMigrateUserLogin: async (userId: string, options: any = {}): Promise => { + // verify required parameter 'userId' is not null or undefined + assertParamExists('userLoginMigrationRollbackControllerMigrateUserLogin', 'userId', userId) + const localVarPath = `/user-login-migrations/users/{userId}/rollback-migration` + .replace(`{${"userId"}}`, encodeURIComponent(String(userId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * UserLoginMigrationRollbackApi - functional programming interface + * @export + */ +export const UserLoginMigrationRollbackApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = UserLoginMigrationRollbackApiAxiosParamCreator(configuration) + return { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.userLoginMigrationRollbackControllerMigrateUserLogin(userId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * UserLoginMigrationRollbackApi - factory interface + * @export + */ +export const UserLoginMigrationRollbackApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = UserLoginMigrationRollbackApiFp(configuration) + return { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): AxiosPromise { + return localVarFp.userLoginMigrationRollbackControllerMigrateUserLogin(userId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * UserLoginMigrationRollbackApi - interface + * @export + * @interface UserLoginMigrationRollbackApi + */ +export interface UserLoginMigrationRollbackApiInterface { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationRollbackApiInterface + */ + userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any): AxiosPromise; + +} + +/** + * UserLoginMigrationRollbackApi - object-oriented interface + * @export + * @class UserLoginMigrationRollbackApi + * @extends {BaseAPI} + */ +export class UserLoginMigrationRollbackApi extends BaseAPI implements UserLoginMigrationRollbackApiInterface { + /** + * + * @summary Rollback a user from a user login migration + * @param {string} userId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof UserLoginMigrationRollbackApi + */ + public userLoginMigrationRollbackControllerMigrateUserLogin(userId: string, options?: any) { + return UserLoginMigrationRollbackApiFp(this.configuration).userLoginMigrationRollbackControllerMigrateUserLogin(userId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/api/video-conference-api.ts b/src/serverApi/v3/api/video-conference-api.ts new file mode 100644 index 0000000..7845aa6 --- /dev/null +++ b/src/serverApi/v3/api/video-conference-api.ts @@ -0,0 +1,717 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import globalAxios, { AxiosPromise, AxiosInstance } from 'axios'; +import { Configuration } from '../configuration'; +// Some imports not used depending on template conditions +// @ts-ignore +import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '../common'; +// @ts-ignore +import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base'; +// @ts-ignore +import { VideoConferenceCreateParams } from '../models'; +// @ts-ignore +import { VideoConferenceInfoResponse } from '../models'; +// @ts-ignore +import { VideoConferenceJoinResponse } from '../models'; +// @ts-ignore +import { VideoConferenceScope } from '../models'; +/** + * VideoConferenceApi - axios parameter creator + * @export + */ +export const VideoConferenceApiAxiosParamCreator = function (configuration?: Configuration) { + return { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerEnd: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceControllerEnd', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceControllerEnd', 'scopeId', scopeId) + const localVarPath = `/videoconference2/{scope}/{scopeId}/end` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerInfo: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceControllerInfo', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceControllerInfo', 'scopeId', scopeId) + const localVarPath = `/videoconference2/{scope}/{scopeId}/info` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerJoin: async (scope: VideoConferenceScope, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceControllerJoin', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceControllerJoin', 'scopeId', scopeId) + const localVarPath = `/videoconference2/{scope}/{scopeId}/join` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerStart: async (scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceControllerStart', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceControllerStart', 'scopeId', scopeId) + // verify required parameter 'videoConferenceCreateParams' is not null or undefined + assertParamExists('videoConferenceControllerStart', 'videoConferenceCreateParams', videoConferenceCreateParams) + const localVarPath = `/videoconference2/{scope}/{scopeId}/start` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(videoConferenceCreateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerCreateAndJoin: async (scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'scopeId', scopeId) + // verify required parameter 'videoConferenceCreateParams' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerCreateAndJoin', 'videoConferenceCreateParams', videoConferenceCreateParams) + const localVarPath = `/videoconference/{scope}/{scopeId}` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + localVarHeaderParameter['Content-Type'] = 'application/json'; + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + localVarRequestOptions.data = serializeDataIfNeeded(videoConferenceCreateParams, localVarRequestOptions, configuration) + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerEnd: async (scope: string, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerEnd', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerEnd', 'scopeId', scopeId) + const localVarPath = `/videoconference/{scope}/{scopeId}` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerInfo: async (scope: string, scopeId: string, options: any = {}): Promise => { + // verify required parameter 'scope' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerInfo', 'scope', scope) + // verify required parameter 'scopeId' is not null or undefined + assertParamExists('videoConferenceDeprecatedControllerInfo', 'scopeId', scopeId) + const localVarPath = `/videoconference/{scope}/{scopeId}` + .replace(`{${"scope"}}`, encodeURIComponent(String(scope))) + .replace(`{${"scopeId"}}`, encodeURIComponent(String(scopeId))); + // use dummy base URL string because the URL constructor only accepts absolute URLs. + const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); + let baseOptions; + if (configuration) { + baseOptions = configuration.baseOptions; + } + + const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options}; + const localVarHeaderParameter = {} as any; + const localVarQueryParameter = {} as any; + + // authentication bearer required + // http bearer authentication required + await setBearerAuthToObject(localVarHeaderParameter, configuration) + + + + setSearchParams(localVarUrlObj, localVarQueryParameter, options.query); + let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; + localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers}; + + return { + url: toPathString(localVarUrlObj), + options: localVarRequestOptions, + }; + }, + } +}; + +/** + * VideoConferenceApi - functional programming interface + * @export + */ +export const VideoConferenceApiFp = function(configuration?: Configuration) { + const localVarAxiosParamCreator = VideoConferenceApiAxiosParamCreator(configuration) + return { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerEnd(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerInfo(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerJoin(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerEnd(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + async videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise> { + const localVarAxiosArgs = await localVarAxiosParamCreator.videoConferenceDeprecatedControllerInfo(scope, scopeId, options); + return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); + }, + } +}; + +/** + * VideoConferenceApi - factory interface + * @export + */ +export const VideoConferenceApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) { + const localVarFp = VideoConferenceApiFp(configuration) + return { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceControllerEnd(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceControllerInfo(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceControllerJoin(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise { + return localVarFp.videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise { + return localVarFp.videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceDeprecatedControllerEnd(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + */ + videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): AxiosPromise { + return localVarFp.videoConferenceDeprecatedControllerInfo(scope, scopeId, options).then((request) => request(axios, basePath)); + }, + }; +}; + +/** + * VideoConferenceApi - interface + * @export + * @interface VideoConferenceApi + */ +export interface VideoConferenceApiInterface { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; + + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; + + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any): AxiosPromise; + + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise; + + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any): AxiosPromise; + + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any): AxiosPromise; + + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApiInterface + */ + videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any): AxiosPromise; + +} + +/** + * VideoConferenceApi - object-oriented interface + * @export + * @class VideoConferenceApi + * @extends {BaseAPI} + */ +export class VideoConferenceApi extends BaseAPI implements VideoConferenceApiInterface { + /** + * Use this endpoint to end a running video conference. + * @summary Ends a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceControllerEnd(scope: VideoConferenceScope, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceControllerEnd(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Use this endpoint to get information about a running video conference. + * @summary Returns information about a running video conference. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceControllerInfo(scope: VideoConferenceScope, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceControllerInfo(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Use this endpoint to get a link to join an existing video conference. The conference must be running. + * @summary Creates a join link for a video conference, if it has started. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceControllerJoin(scope: VideoConferenceScope, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceControllerJoin(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * Use this endpoint to start a video conference. If the conference is not yet running, it will be created. + * @summary Creates the video conference, if it has not started yet. + * @param {VideoConferenceScope} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceControllerStart(scope: VideoConferenceScope, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceControllerStart(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Creates a join link for a video conference and creates the video conference, if it has not started yet. + * @param {string} scope + * @param {string} scopeId + * @param {VideoConferenceCreateParams} videoConferenceCreateParams + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceDeprecatedControllerCreateAndJoin(scope: string, scopeId: string, videoConferenceCreateParams: VideoConferenceCreateParams, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerCreateAndJoin(scope, scopeId, videoConferenceCreateParams, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Ends a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceDeprecatedControllerEnd(scope: string, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerEnd(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } + + /** + * + * @summary Returns information about a running video conference. + * @param {string} scope + * @param {string} scopeId + * @param {*} [options] Override http request option. + * @throws {RequiredError} + * @memberof VideoConferenceApi + */ + public videoConferenceDeprecatedControllerInfo(scope: string, scopeId: string, options?: any) { + return VideoConferenceApiFp(this.configuration).videoConferenceDeprecatedControllerInfo(scope, scopeId, options).then((request) => request(this.axios, this.basePath)); + } +} diff --git a/src/serverApi/v3/index.ts b/src/serverApi/v3/index.ts index 4c9c31c..8b762df 100644 --- a/src/serverApi/v3/index.ts +++ b/src/serverApi/v3/index.ts @@ -15,4 +15,4 @@ export * from "./api"; export * from "./configuration"; - +export * from "./models"; diff --git a/src/serverApi/v3/models/account-by-id-body-params.ts b/src/serverApi/v3/models/account-by-id-body-params.ts new file mode 100644 index 0000000..cc342d7 --- /dev/null +++ b/src/serverApi/v3/models/account-by-id-body-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface AccountByIdBodyParams + */ +export interface AccountByIdBodyParams { + /** + * The new user name for the user. + * @type {string} + * @memberof AccountByIdBodyParams + */ + username?: string | null; + /** + * The new password for the user. + * @type {string} + * @memberof AccountByIdBodyParams + */ + password?: string | null; + /** + * The new activation state of the user. + * @type {boolean} + * @memberof AccountByIdBodyParams + */ + activated?: boolean | null; +} + + diff --git a/src/serverApi/v3/models/account-response.ts b/src/serverApi/v3/models/account-response.ts new file mode 100644 index 0000000..4b846c7 --- /dev/null +++ b/src/serverApi/v3/models/account-response.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface AccountResponse + */ +export interface AccountResponse { + /** + * + * @type {string} + * @memberof AccountResponse + */ + id: string; + /** + * + * @type {string} + * @memberof AccountResponse + */ + username: string; + /** + * + * @type {string} + * @memberof AccountResponse + */ + userId: string; + /** + * + * @type {boolean} + * @memberof AccountResponse + */ + activated: boolean; + /** + * + * @type {string} + * @memberof AccountResponse + */ + updatedAt: string; +} + + diff --git a/src/serverApi/v3/models/account-search-list-response.ts b/src/serverApi/v3/models/account-search-list-response.ts new file mode 100644 index 0000000..54b725c --- /dev/null +++ b/src/serverApi/v3/models/account-search-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { AccountResponse } from './account-response'; + +/** + * + * @export + * @interface AccountSearchListResponse + */ +export interface AccountSearchListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof AccountSearchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof AccountSearchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof AccountSearchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof AccountSearchListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/action.ts b/src/serverApi/v3/models/action.ts new file mode 100644 index 0000000..1a5acf4 --- /dev/null +++ b/src/serverApi/v3/models/action.ts @@ -0,0 +1,28 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum Action { + READ = 'read', + WRITE = 'write' +} + + + diff --git a/src/serverApi/v3/models/alert-response.ts b/src/serverApi/v3/models/alert-response.ts new file mode 100644 index 0000000..d8d2b81 --- /dev/null +++ b/src/serverApi/v3/models/alert-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { Message } from './message'; + +/** + * + * @export + * @interface AlertResponse + */ +export interface AlertResponse { + /** + * + * @type {Array} + * @memberof AlertResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/api-validation-error.ts b/src/serverApi/v3/models/api-validation-error.ts new file mode 100644 index 0000000..9461d4e --- /dev/null +++ b/src/serverApi/v3/models/api-validation-error.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ApiValidationError + */ +export interface ApiValidationError { + /** + * The response status code. + * @type {number} + * @memberof ApiValidationError + */ + code: number; + /** + * The error type. + * @type {string} + * @memberof ApiValidationError + */ + type: string; + /** + * The error title. + * @type {string} + * @memberof ApiValidationError + */ + title: string; + /** + * The error message. + * @type {string} + * @memberof ApiValidationError + */ + message: string; + /** + * The error details. + * @type {object} + * @memberof ApiValidationError + */ + details?: object; +} + + diff --git a/src/serverApi/v3/models/authorization-body-params.ts b/src/serverApi/v3/models/authorization-body-params.ts new file mode 100644 index 0000000..b15cefc --- /dev/null +++ b/src/serverApi/v3/models/authorization-body-params.ts @@ -0,0 +1,65 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { AuthorizationContextParams } from './authorization-context-params'; + +/** + * + * @export + * @interface AuthorizationBodyParams + */ +export interface AuthorizationBodyParams { + /** + * + * @type {AuthorizationContextParams} + * @memberof AuthorizationBodyParams + */ + context: AuthorizationContextParams; + /** + * The entity or domain object the operation should be performed on. + * @type {string} + * @memberof AuthorizationBodyParams + */ + referenceType: AuthorizationBodyParamsReferenceType; + /** + * The id of the entity/domain object of the defined referenceType. + * @type {string} + * @memberof AuthorizationBodyParams + */ + referenceId: string; +} + +/** + * @export + * @enum {string} + */ +export enum AuthorizationBodyParamsReferenceType { + USERS = 'users', + SCHOOLS = 'schools', + COURSES = 'courses', + COURSEGROUPS = 'coursegroups', + TASKS = 'tasks', + LESSONS = 'lessons', + TEAMS = 'teams', + SUBMISSIONS = 'submissions', + SCHOOL_EXTERNAL_TOOLS = 'school-external-tools', + BOARDNODES = 'boardnodes', + CONTEXT_EXTERNAL_TOOLS = 'context-external-tools', + EXTERNAL_TOOLS = 'external-tools', + INSTANCES = 'instances' +} + + + diff --git a/src/serverApi/v3/models/authorization-context-params.ts b/src/serverApi/v3/models/authorization-context-params.ts new file mode 100644 index 0000000..e15d09e --- /dev/null +++ b/src/serverApi/v3/models/authorization-context-params.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { Action } from './action'; +import { Permission } from './permission'; + +/** + * + * @export + * @interface AuthorizationContextParams + */ +export interface AuthorizationContextParams { + /** + * + * @type {Action} + * @memberof AuthorizationContextParams + */ + action: Action; + /** + * User permissions that are needed to execute the operation. + * @type {Array} + * @memberof AuthorizationContextParams + */ + requiredPermissions: Array; +} + + diff --git a/src/serverApi/v3/models/authorized-reponse.ts b/src/serverApi/v3/models/authorized-reponse.ts new file mode 100644 index 0000000..c4919e1 --- /dev/null +++ b/src/serverApi/v3/models/authorized-reponse.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface AuthorizedReponse + */ +export interface AuthorizedReponse { + /** + * + * @type {string} + * @memberof AuthorizedReponse + */ + userId: string; + /** + * + * @type {boolean} + * @memberof AuthorizedReponse + */ + isAuthorized: boolean; +} + + diff --git a/src/serverApi/v3/models/basic-tool-config-params.ts b/src/serverApi/v3/models/basic-tool-config-params.ts new file mode 100644 index 0000000..151a54f --- /dev/null +++ b/src/serverApi/v3/models/basic-tool-config-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface BasicToolConfigParams + */ +export interface BasicToolConfigParams { + /** + * + * @type {string} + * @memberof BasicToolConfigParams + */ + type: string; + /** + * + * @type {string} + * @memberof BasicToolConfigParams + */ + baseUrl: string; +} + + diff --git a/src/serverApi/v3/models/board-context-response.ts b/src/serverApi/v3/models/board-context-response.ts new file mode 100644 index 0000000..cb404f0 --- /dev/null +++ b/src/serverApi/v3/models/board-context-response.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { BoardExternalReferenceType } from './board-external-reference-type'; + +/** + * + * @export + * @interface BoardContextResponse + */ +export interface BoardContextResponse { + /** + * + * @type {string} + * @memberof BoardContextResponse + */ + id: string; + /** + * + * @type {BoardExternalReferenceType} + * @memberof BoardContextResponse + */ + type: BoardExternalReferenceType; +} + + diff --git a/src/serverApi/v3/models/board-element-response.ts b/src/serverApi/v3/models/board-element-response.ts new file mode 100644 index 0000000..73f2a93 --- /dev/null +++ b/src/serverApi/v3/models/board-element-response.ts @@ -0,0 +1,48 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface BoardElementResponse + */ +export interface BoardElementResponse { + /** + * the type of the element in the content. For possible types, please refer to the enum + * @type {string} + * @memberof BoardElementResponse + */ + type: BoardElementResponseType; + /** + * Content of the Board, either: a task or a lesson specific for the board + * @type {object} + * @memberof BoardElementResponse + */ + content: object; +} + +/** + * @export + * @enum {string} + */ +export enum BoardElementResponseType { + TASK = 'task', + LESSON = 'lesson', + COLUMN_BOARD = 'column-board' +} + + + diff --git a/src/serverApi/v3/models/board-external-reference-type.ts b/src/serverApi/v3/models/board-external-reference-type.ts new file mode 100644 index 0000000..cae1dd6 --- /dev/null +++ b/src/serverApi/v3/models/board-external-reference-type.ts @@ -0,0 +1,28 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum BoardExternalReferenceType { + COURSE = 'course', + USER = 'user' +} + + + diff --git a/src/serverApi/v3/models/board-layout.ts b/src/serverApi/v3/models/board-layout.ts new file mode 100644 index 0000000..87b1ad0 --- /dev/null +++ b/src/serverApi/v3/models/board-layout.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum BoardLayout { + COLUMNS = 'columns', + LIST = 'list', + GRID = 'grid' +} + + + diff --git a/src/serverApi/v3/models/board-parent-type.ts b/src/serverApi/v3/models/board-parent-type.ts new file mode 100644 index 0000000..e96d9f1 --- /dev/null +++ b/src/serverApi/v3/models/board-parent-type.ts @@ -0,0 +1,28 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum BoardParentType { + COURSE = 'course', + USER = 'user' +} + + + diff --git a/src/serverApi/v3/models/board-response.ts b/src/serverApi/v3/models/board-response.ts new file mode 100644 index 0000000..e963e04 --- /dev/null +++ b/src/serverApi/v3/models/board-response.ts @@ -0,0 +1,63 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ColumnResponse } from './column-response'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface BoardResponse + */ +export interface BoardResponse { + /** + * + * @type {string} + * @memberof BoardResponse + */ + id: string; + /** + * + * @type {string} + * @memberof BoardResponse + */ + title: string; + /** + * + * @type {Array} + * @memberof BoardResponse + */ + columns: Array; + /** + * + * @type {TimestampsResponse} + * @memberof BoardResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {boolean} + * @memberof BoardResponse + */ + isVisible: boolean; + /** + * + * @type {string} + * @memberof BoardResponse + */ + layout: string; +} + + diff --git a/src/serverApi/v3/models/card-list-response.ts b/src/serverApi/v3/models/card-list-response.ts new file mode 100644 index 0000000..fed4cfc --- /dev/null +++ b/src/serverApi/v3/models/card-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CardResponse } from './card-response'; + +/** + * + * @export + * @interface CardListResponse + */ +export interface CardListResponse { + /** + * + * @type {Array} + * @memberof CardListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/card-response.ts b/src/serverApi/v3/models/card-response.ts new file mode 100644 index 0000000..fc5ec6a --- /dev/null +++ b/src/serverApi/v3/models/card-response.ts @@ -0,0 +1,70 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CollaborativeTextEditorElementResponse } from './collaborative-text-editor-element-response'; +import { DrawingElementResponse } from './drawing-element-response'; +import { ExternalToolElementResponse } from './external-tool-element-response'; +import { FileElementResponse } from './file-element-response'; +import { LinkElementResponse } from './link-element-response'; +import { RichTextElementResponse } from './rich-text-element-response'; +import { SubmissionContainerElementResponse } from './submission-container-element-response'; +import { TimestampsResponse } from './timestamps-response'; +import { VisibilitySettingsResponse } from './visibility-settings-response'; + +/** + * + * @export + * @interface CardResponse + */ +export interface CardResponse { + /** + * + * @type {string} + * @memberof CardResponse + */ + id: string; + /** + * + * @type {string} + * @memberof CardResponse + */ + title?: string; + /** + * + * @type {number} + * @memberof CardResponse + */ + height: number; + /** + * + * @type {Array} + * @memberof CardResponse + */ + elements: Array; + /** + * + * @type {VisibilitySettingsResponse} + * @memberof CardResponse + */ + visibilitySettings: VisibilitySettingsResponse; + /** + * + * @type {TimestampsResponse} + * @memberof CardResponse + */ + timestamps: TimestampsResponse; +} + + diff --git a/src/serverApi/v3/models/card-skeleton-response.ts b/src/serverApi/v3/models/card-skeleton-response.ts new file mode 100644 index 0000000..1c89434 --- /dev/null +++ b/src/serverApi/v3/models/card-skeleton-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CardSkeletonResponse + */ +export interface CardSkeletonResponse { + /** + * + * @type {string} + * @memberof CardSkeletonResponse + */ + cardId: string; + /** + * The approximate height of the referenced card. Intended to be used for prerendering purposes. Note, that different devices can lead to this value not being precise + * @type {number} + * @memberof CardSkeletonResponse + */ + height: number; +} + + diff --git a/src/serverApi/v3/models/change-language-params.ts b/src/serverApi/v3/models/change-language-params.ts new file mode 100644 index 0000000..00fcff6 --- /dev/null +++ b/src/serverApi/v3/models/change-language-params.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { LanguageType } from './language-type'; + +/** + * + * @export + * @interface ChangeLanguageParams + */ +export interface ChangeLanguageParams { + /** + * + * @type {LanguageType} + * @memberof ChangeLanguageParams + */ + language: LanguageType; +} + + diff --git a/src/serverApi/v3/models/class-info-response.ts b/src/serverApi/v3/models/class-info-response.ts new file mode 100644 index 0000000..07f13c3 --- /dev/null +++ b/src/serverApi/v3/models/class-info-response.ts @@ -0,0 +1,90 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CourseInfoResponse } from './course-info-response'; + +/** + * + * @export + * @interface ClassInfoResponse + */ +export interface ClassInfoResponse { + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + id: string; + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + type: ClassInfoResponseType; + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + name: string; + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + externalSourceName?: string; + /** + * + * @type {Array} + * @memberof ClassInfoResponse + */ + teacherNames: Array; + /** + * + * @type {string} + * @memberof ClassInfoResponse + */ + schoolYear?: string; + /** + * + * @type {boolean} + * @memberof ClassInfoResponse + */ + isUpgradable?: boolean; + /** + * + * @type {number} + * @memberof ClassInfoResponse + */ + studentCount: number; + /** + * + * @type {Array} + * @memberof ClassInfoResponse + */ + synchronizedCourses?: Array; +} + +/** + * @export + * @enum {string} + */ +export enum ClassInfoResponseType { + CLASS = 'class', + GROUP = 'group' +} + + + diff --git a/src/serverApi/v3/models/class-info-search-list-response.ts b/src/serverApi/v3/models/class-info-search-list-response.ts new file mode 100644 index 0000000..6f5ffa6 --- /dev/null +++ b/src/serverApi/v3/models/class-info-search-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ClassInfoResponse } from './class-info-response'; + +/** + * + * @export + * @interface ClassInfoSearchListResponse + */ +export interface ClassInfoSearchListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof ClassInfoSearchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof ClassInfoSearchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof ClassInfoSearchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof ClassInfoSearchListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/class-request-context.ts b/src/serverApi/v3/models/class-request-context.ts new file mode 100644 index 0000000..f2eccf9 --- /dev/null +++ b/src/serverApi/v3/models/class-request-context.ts @@ -0,0 +1,28 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum ClassRequestContext { + COURSE = 'course', + CLASS_OVERVIEW = 'class-overview' +} + + + diff --git a/src/serverApi/v3/models/class-response.ts b/src/serverApi/v3/models/class-response.ts new file mode 100644 index 0000000..a89480e --- /dev/null +++ b/src/serverApi/v3/models/class-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ClassResponse + */ +export interface ClassResponse { + /** + * + * @type {string} + * @memberof ClassResponse + */ + name: string; + /** + * + * @type {number} + * @memberof ClassResponse + */ + gradeLevel: number; +} + + diff --git a/src/serverApi/v3/models/class-sort-query-type.ts b/src/serverApi/v3/models/class-sort-query-type.ts new file mode 100644 index 0000000..89a6eab --- /dev/null +++ b/src/serverApi/v3/models/class-sort-query-type.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum ClassSortQueryType { + NAME = 'name', + EXTERNAL_SOURCE_NAME = 'externalSourceName', + SYNCHRONIZED_COURSES = 'synchronizedCourses', + STUDENT_COUNT = 'studentCount', + TEACHER_NAMES = 'teacherNames' +} + + + diff --git a/src/serverApi/v3/models/collaborative-text-editor-element-response.ts b/src/serverApi/v3/models/collaborative-text-editor-element-response.ts new file mode 100644 index 0000000..0f36619 --- /dev/null +++ b/src/serverApi/v3/models/collaborative-text-editor-element-response.ts @@ -0,0 +1,51 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface CollaborativeTextEditorElementResponse + */ +export interface CollaborativeTextEditorElementResponse { + /** + * + * @type {string} + * @memberof CollaborativeTextEditorElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof CollaborativeTextEditorElementResponse + */ + type: ContentElementType; + /** + * + * @type {TimestampsResponse} + * @memberof CollaborativeTextEditorElementResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {object} + * @memberof CollaborativeTextEditorElementResponse + */ + content: object; +} + + diff --git a/src/serverApi/v3/models/collaborative-text-editor-parent-type.ts b/src/serverApi/v3/models/collaborative-text-editor-parent-type.ts new file mode 100644 index 0000000..225151c --- /dev/null +++ b/src/serverApi/v3/models/collaborative-text-editor-parent-type.ts @@ -0,0 +1,27 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum CollaborativeTextEditorParentType { + CONTENT_ELEMENT = 'content-element' +} + + + diff --git a/src/serverApi/v3/models/collaborative-text-editor-response.ts b/src/serverApi/v3/models/collaborative-text-editor-response.ts new file mode 100644 index 0000000..b90df0f --- /dev/null +++ b/src/serverApi/v3/models/collaborative-text-editor-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CollaborativeTextEditorResponse + */ +export interface CollaborativeTextEditorResponse { + /** + * + * @type {string} + * @memberof CollaborativeTextEditorResponse + */ + url: string; +} + + diff --git a/src/serverApi/v3/models/collapsable-body-params.ts b/src/serverApi/v3/models/collapsable-body-params.ts new file mode 100644 index 0000000..2a65905 --- /dev/null +++ b/src/serverApi/v3/models/collapsable-body-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CollapsableBodyParams + */ +export interface CollapsableBodyParams { + /** + * + * @type {boolean} + * @memberof CollapsableBodyParams + */ + collapsed: boolean; +} + + diff --git a/src/serverApi/v3/models/color-body-params.ts b/src/serverApi/v3/models/color-body-params.ts new file mode 100644 index 0000000..5efc42d --- /dev/null +++ b/src/serverApi/v3/models/color-body-params.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MediaBoardColors } from './media-board-colors'; + +/** + * + * @export + * @interface ColorBodyParams + */ +export interface ColorBodyParams { + /** + * + * @type {MediaBoardColors} + * @memberof ColorBodyParams + */ + backgroundColor: MediaBoardColors; +} + + diff --git a/src/serverApi/v3/models/column-response.ts b/src/serverApi/v3/models/column-response.ts new file mode 100644 index 0000000..b4a1423 --- /dev/null +++ b/src/serverApi/v3/models/column-response.ts @@ -0,0 +1,51 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CardSkeletonResponse } from './card-skeleton-response'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface ColumnResponse + */ +export interface ColumnResponse { + /** + * + * @type {string} + * @memberof ColumnResponse + */ + id: string; + /** + * + * @type {string} + * @memberof ColumnResponse + */ + title: string; + /** + * + * @type {Array} + * @memberof ColumnResponse + */ + cards: Array; + /** + * + * @type {TimestampsResponse} + * @memberof ColumnResponse + */ + timestamps: TimestampsResponse; +} + + diff --git a/src/serverApi/v3/models/config-response.ts b/src/serverApi/v3/models/config-response.ts new file mode 100644 index 0000000..fef6f00 --- /dev/null +++ b/src/serverApi/v3/models/config-response.ts @@ -0,0 +1,430 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { LanguageType } from './language-type'; +import { SchulcloudTheme } from './schulcloud-theme'; +import { Timezone } from './timezone'; + +/** + * + * @export + * @interface ConfigResponse + */ +export interface ConfigResponse { + /** + * + * @type {string} + * @memberof ConfigResponse + */ + ACCESSIBILITY_REPORT_EMAIL: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_NEW_SCHOOL_ADMINISTRATION_PAGE_AS_DEFAULT_ENABLED: boolean; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + MIGRATION_END_GRACE_PERIOD_MS: number; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_CTL_TOOLS_TAB_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_LTI_TOOLS_TAB_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SHOW_OUTDATED_USERS: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_ENABLE_LDAP_SYNC_DURING_MIGRATION: boolean; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + CTL_TOOLS_RELOAD_TIME_MS: number; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SHOW_NEW_CLASS_VIEW_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_CTL_TOOLS_COPY_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SHOW_MIGRATION_WIZARD: boolean; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + MIGRATION_WIZARD_DOCUMENTATION_LINK?: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_TLDRAW_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + TLDRAW__ASSETS_ENABLED: boolean; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + TLDRAW__ASSETS_MAX_SIZE: number; + /** + * + * @type {Array} + * @memberof ConfigResponse + */ + TLDRAW__ASSETS_ALLOWED_MIME_TYPES_LIST: Array; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + ADMIN_TABLES_DISPLAY_CONSENT_COLUMN: boolean; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + ALERT_STATUS_URL: string | null; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_ES_COLLECTIONS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_EXTENSIONS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_TEAMS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_LERNSTORE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_ADMIN_TOGGLE_STUDENT_LERNSTORE_VIEW_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + TEACHER_STUDENT_VISIBILITY__IS_CONFIGURABLE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + TEACHER_STUDENT_VISIBILITY__IS_ENABLED_BY_DEFAULT: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + TEACHER_STUDENT_VISIBILITY__IS_VISIBLE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHOOL_POLICY_ENABLED_NEW: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHOOL_TERMS_OF_USE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_NEXBOARD_COPY_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_VIDEOCONFERENCE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_SUBMISSIONS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_COLLABORATIVE_TEXT_EDITOR_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_LINK_ELEMENT_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_EXTERNAL_TOOLS_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_SHARE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COLUMN_BOARD_SOCKET_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COURSE_SHARE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_LOGIN_LINK_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_LESSON_SHARE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_TASK_SHARE: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_BOARD_LAYOUT_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_USER_MIGRATION_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COPY_SERVICE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_CONSENT_NECESSARY: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COMMON_CARTRIDGE_COURSE_EXPORT_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_COMMON_CARTRIDGE_COURSE_IMPORT_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHOOL_SANIS_USER_MIGRATION_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHULCONNEX_COURSE_SYNC_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_ALLOW_INSECURE_LDAP_URL_ENABLED: boolean; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + GHOST_BASE_URL: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + ROCKETCHAT_SERVICE_ENABLED: boolean; + /** + * + * @type {Array} + * @memberof ConfigResponse + */ + I18N__AVAILABLE_LANGUAGES: Array; + /** + * + * @type {LanguageType} + * @memberof ConfigResponse + */ + I18N__DEFAULT_LANGUAGE: LanguageType; + /** + * + * @type {LanguageType} + * @memberof ConfigResponse + */ + I18N__FALLBACK_LANGUAGE: LanguageType; + /** + * + * @type {Timezone} + * @memberof ConfigResponse + */ + I18N__DEFAULT_TIMEZONE: Timezone; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + JWT_SHOW_TIMEOUT_WARNING_SECONDS: number; + /** + * + * @type {number} + * @memberof ConfigResponse + */ + JWT_TIMEOUT_SECONDS: number; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + NOT_AUTHENTICATED_REDIRECT_URL: string; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + DOCUMENT_BASE_DIR: string; + /** + * + * @type {SchulcloudTheme} + * @memberof ConfigResponse + */ + SC_THEME: SchulcloudTheme; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + SC_TITLE: string; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + TRAINING_URL: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_MEDIA_SHELF_ENABLED: boolean; + /** + * + * @type {string} + * @memberof ConfigResponse + */ + BOARD_COLLABORATION_URI: string; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_SCHULCONNEX_MEDIA_LICENSE_ENABLED: boolean; + /** + * + * @type {boolean} + * @memberof ConfigResponse + */ + FEATURE_AI_TUTOR_ENABLED: boolean; +} + + diff --git a/src/serverApi/v3/models/consent-request-body.ts b/src/serverApi/v3/models/consent-request-body.ts new file mode 100644 index 0000000..503d7a8 --- /dev/null +++ b/src/serverApi/v3/models/consent-request-body.ts @@ -0,0 +1,73 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ConsentRequestBody + */ +export interface ConsentRequestBody { + /** + * The error should follow the OAuth2 error format (e.g. invalid_request, login_required). Defaults to request_denied. + * @type {string} + * @memberof ConsentRequestBody + */ + error?: string; + /** + * Debug contains information to help resolve the problem as a developer. Usually not exposed to the public but only in the server logs. + * @type {string} + * @memberof ConsentRequestBody + */ + error_debug?: string; + /** + * Description of the error in a human readable format. + * @type {string} + * @memberof ConsentRequestBody + */ + error_description?: string; + /** + * Hint to help resolve the error. + * @type {string} + * @memberof ConsentRequestBody + */ + error_hint?: string; + /** + * Represents the HTTP status code of the error (e.g. 401 or 403). Defaults to 400. + * @type {number} + * @memberof ConsentRequestBody + */ + status_code?: number; + /** + * The Oauth2 client id. + * @type {Array} + * @memberof ConsentRequestBody + */ + grant_scope?: Array; + /** + * Remember, if set to true, tells the oauth provider to remember this consent authorization and reuse it if the same client asks the same user for the same, or a subset of, scope. + * @type {boolean} + * @memberof ConsentRequestBody + */ + remember?: boolean; + /** + * RememberFor sets how long the consent authorization should be remembered for in seconds. If set to 0, the authorization will be remembered indefinitely. + * @type {number} + * @memberof ConsentRequestBody + */ + remember_for?: number; +} + + diff --git a/src/serverApi/v3/models/consent-response.ts b/src/serverApi/v3/models/consent-response.ts new file mode 100644 index 0000000..8ce4dec --- /dev/null +++ b/src/serverApi/v3/models/consent-response.ts @@ -0,0 +1,105 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { OauthClientResponse } from './oauth-client-response'; +import { OidcContextResponse } from './oidc-context-response'; + +/** + * + * @export + * @interface ConsentResponse + */ +export interface ConsentResponse { + /** + * ACR represents the Authentication AuthorizationContext Class Reference value for this authentication session + * @type {string} + * @memberof ConsentResponse + */ + acr: string; + /** + * + * @type {Array} + * @memberof ConsentResponse + */ + amr?: Array; + /** + * Is the id/authorization challenge of the consent authorization request. It is used to identify the session. + * @type {string} + * @memberof ConsentResponse + */ + challenge: string; + /** + * + * @type {OauthClientResponse} + * @memberof ConsentResponse + */ + client: OauthClientResponse; + /** + * + * @type {object} + * @memberof ConsentResponse + */ + context: object; + /** + * LoginChallenge is the login challenge this consent challenge belongs to. + * @type {string} + * @memberof ConsentResponse + */ + login_challenge: string; + /** + * LoginSessionID is the login session ID. + * @type {string} + * @memberof ConsentResponse + */ + login_session_id: string; + /** + * + * @type {OidcContextResponse} + * @memberof ConsentResponse + */ + oidc_context: OidcContextResponse; + /** + * RequestUrl is the original OAuth 2.0 Authorization URL requested by the OAuth 2.0 client. + * @type {string} + * @memberof ConsentResponse + */ + request_url: string; + /** + * + * @type {Array} + * @memberof ConsentResponse + */ + requested_access_token_audience?: Array; + /** + * The request scopes of the login request. + * @type {Array} + * @memberof ConsentResponse + */ + requested_scope?: Array; + /** + * Skip, if true, implies that the client has requested the same scopes from the same user previously. + * @type {boolean} + * @memberof ConsentResponse + */ + skip: boolean; + /** + * Subject is the user id of the end-user that is authenticated. + * @type {string} + * @memberof ConsentResponse + */ + subject: string; +} + + diff --git a/src/serverApi/v3/models/consent-session-response.ts b/src/serverApi/v3/models/consent-session-response.ts new file mode 100644 index 0000000..c757c57 --- /dev/null +++ b/src/serverApi/v3/models/consent-session-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ConsentSessionResponse + */ +export interface ConsentSessionResponse { + /** + * The id of the client. + * @type {string} + * @memberof ConsentSessionResponse + */ + client_id: string; + /** + * The name of the client. + * @type {string} + * @memberof ConsentSessionResponse + */ + client_name: string; + /** + * The id/challenge of the consent authorization request. + * @type {string} + * @memberof ConsentSessionResponse + */ + challenge: string; +} + + diff --git a/src/serverApi/v3/models/consents-response.ts b/src/serverApi/v3/models/consents-response.ts new file mode 100644 index 0000000..644cd69 --- /dev/null +++ b/src/serverApi/v3/models/consents-response.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ParentConsentResponse } from './parent-consent-response'; +import { UserConsentResponse } from './user-consent-response'; + +/** + * + * @export + * @interface ConsentsResponse + */ +export interface ConsentsResponse { + /** + * + * @type {UserConsentResponse} + * @memberof ConsentsResponse + */ + userConsent: UserConsentResponse; + /** + * + * @type {Array} + * @memberof ConsentsResponse + */ + parentConsents: Array; +} + + diff --git a/src/serverApi/v3/models/content-element-type.ts b/src/serverApi/v3/models/content-element-type.ts new file mode 100644 index 0000000..d4de337 --- /dev/null +++ b/src/serverApi/v3/models/content-element-type.ts @@ -0,0 +1,33 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum ContentElementType { + FILE = 'file', + DRAWING = 'drawing', + LINK = 'link', + RICH_TEXT = 'richText', + SUBMISSION_CONTAINER = 'submissionContainer', + EXTERNAL_TOOL = 'externalTool', + COLLABORATIVE_TEXT_EDITOR = 'collaborativeTextEditor' +} + + + diff --git a/src/serverApi/v3/models/context-external-tool-body-params.ts b/src/serverApi/v3/models/context-external-tool-body-params.ts new file mode 100644 index 0000000..f7628b2 --- /dev/null +++ b/src/serverApi/v3/models/context-external-tool-body-params.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ToolContextType } from './tool-context-type'; + +/** + * + * @export + * @interface ContextExternalToolBodyParams + */ +export interface ContextExternalToolBodyParams { + /** + * + * @type {string} + * @memberof ContextExternalToolBodyParams + */ + contextId: string; + /** + * + * @type {ToolContextType} + * @memberof ContextExternalToolBodyParams + */ + contextType: ToolContextType; +} + + diff --git a/src/serverApi/v3/models/context-external-tool-configuration-status-response.ts b/src/serverApi/v3/models/context-external-tool-configuration-status-response.ts new file mode 100644 index 0000000..ae4a66f --- /dev/null +++ b/src/serverApi/v3/models/context-external-tool-configuration-status-response.ts @@ -0,0 +1,61 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ContextExternalToolConfigurationStatusResponse + */ +export interface ContextExternalToolConfigurationStatusResponse { + /** + * Is the tool outdated on school scope, because of non matching versions or required parameter changes on ExternalTool? + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isOutdatedOnScopeSchool: boolean; + /** + * Is the tool outdated on context scope, because of non matching versions or required parameter changes on SchoolExternalTool? + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isOutdatedOnScopeContext: boolean; + /** + * True, if a mandatory parameter on the context external tool is missing a value + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isIncompleteOnScopeContext: boolean; + /** + * True, if a optional parameter on the context external tool is missing a value. This is happening, when course is copied. + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isIncompleteOperationalOnScopeContext: boolean; + /** + * Is the tool deactivated, because of superhero or school administrator + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isDeactivated: boolean; + /** + * True if the tool is not licensed for user + * @type {boolean} + * @memberof ContextExternalToolConfigurationStatusResponse + */ + isNotLicensed: boolean; +} + + diff --git a/src/serverApi/v3/models/context-external-tool-configuration-template-list-response.ts b/src/serverApi/v3/models/context-external-tool-configuration-template-list-response.ts new file mode 100644 index 0000000..275409b --- /dev/null +++ b/src/serverApi/v3/models/context-external-tool-configuration-template-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContextExternalToolConfigurationTemplateResponse } from './context-external-tool-configuration-template-response'; + +/** + * + * @export + * @interface ContextExternalToolConfigurationTemplateListResponse + */ +export interface ContextExternalToolConfigurationTemplateListResponse { + /** + * + * @type {Array} + * @memberof ContextExternalToolConfigurationTemplateListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/context-external-tool-configuration-template-response.ts b/src/serverApi/v3/models/context-external-tool-configuration-template-response.ts new file mode 100644 index 0000000..bf26995 --- /dev/null +++ b/src/serverApi/v3/models/context-external-tool-configuration-template-response.ts @@ -0,0 +1,62 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CustomParameterResponse } from './custom-parameter-response'; + +/** + * + * @export + * @interface ContextExternalToolConfigurationTemplateResponse + */ +export interface ContextExternalToolConfigurationTemplateResponse { + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + externalToolId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + schoolExternalToolId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + name: string; + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + logoUrl?: string; + /** + * + * @type {Array} + * @memberof ContextExternalToolConfigurationTemplateResponse + */ + parameters: Array; +} + + diff --git a/src/serverApi/v3/models/context-external-tool-count-per-context-response.ts b/src/serverApi/v3/models/context-external-tool-count-per-context-response.ts new file mode 100644 index 0000000..946d85f --- /dev/null +++ b/src/serverApi/v3/models/context-external-tool-count-per-context-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ContextExternalToolCountPerContextResponse + */ +export interface ContextExternalToolCountPerContextResponse { + /** + * + * @type {number} + * @memberof ContextExternalToolCountPerContextResponse + */ + course: number; + /** + * + * @type {number} + * @memberof ContextExternalToolCountPerContextResponse + */ + boardElement: number; + /** + * + * @type {number} + * @memberof ContextExternalToolCountPerContextResponse + */ + mediaBoard: number; +} + + diff --git a/src/serverApi/v3/models/context-external-tool-post-params.ts b/src/serverApi/v3/models/context-external-tool-post-params.ts new file mode 100644 index 0000000..88c040d --- /dev/null +++ b/src/serverApi/v3/models/context-external-tool-post-params.ts @@ -0,0 +1,56 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CustomParameterEntryParam } from './custom-parameter-entry-param'; + +/** + * + * @export + * @interface ContextExternalToolPostParams + */ +export interface ContextExternalToolPostParams { + /** + * + * @type {string} + * @memberof ContextExternalToolPostParams + */ + schoolToolId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolPostParams + */ + contextId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolPostParams + */ + contextType: string; + /** + * + * @type {string} + * @memberof ContextExternalToolPostParams + */ + displayName?: string; + /** + * + * @type {Array} + * @memberof ContextExternalToolPostParams + */ + parameters?: Array; +} + + diff --git a/src/serverApi/v3/models/context-external-tool-response.ts b/src/serverApi/v3/models/context-external-tool-response.ts new file mode 100644 index 0000000..ba05031 --- /dev/null +++ b/src/serverApi/v3/models/context-external-tool-response.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CustomParameterEntryResponse } from './custom-parameter-entry-response'; + +/** + * + * @export + * @interface ContextExternalToolResponse + */ +export interface ContextExternalToolResponse { + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + id: string; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + schoolToolId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + contextId: string; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + contextType: ContextExternalToolResponseContextType; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + displayName?: string; + /** + * + * @type {Array} + * @memberof ContextExternalToolResponse + */ + parameters: Array; + /** + * + * @type {string} + * @memberof ContextExternalToolResponse + */ + logoUrl?: string; +} + +/** + * @export + * @enum {string} + */ +export enum ContextExternalToolResponseContextType { + COURSE = 'course', + BOARD_ELEMENT = 'board-element', + MEDIA_BOARD = 'media-board' +} + + + diff --git a/src/serverApi/v3/models/context-external-tool-search-list-response.ts b/src/serverApi/v3/models/context-external-tool-search-list-response.ts new file mode 100644 index 0000000..366eafe --- /dev/null +++ b/src/serverApi/v3/models/context-external-tool-search-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContextExternalToolResponse } from './context-external-tool-response'; + +/** + * + * @export + * @interface ContextExternalToolSearchListResponse + */ +export interface ContextExternalToolSearchListResponse { + /** + * + * @type {Array} + * @memberof ContextExternalToolSearchListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/copy-api-response.ts b/src/serverApi/v3/models/copy-api-response.ts new file mode 100644 index 0000000..f5739b9 --- /dev/null +++ b/src/serverApi/v3/models/copy-api-response.ts @@ -0,0 +1,119 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CopyApiResponse + */ +export interface CopyApiResponse { + /** + * Id of copied element + * @type {string} + * @memberof CopyApiResponse + */ + id?: string; + /** + * Title of copied element + * @type {string} + * @memberof CopyApiResponse + */ + title?: string; + /** + * Type of copied element + * @type {string} + * @memberof CopyApiResponse + */ + type: CopyApiResponseType; + /** + * Id of destination course + * @type {string} + * @memberof CopyApiResponse + */ + destinationCourseId?: string; + /** + * Copy progress status of copied element + * @type {string} + * @memberof CopyApiResponse + */ + status: CopyApiResponseStatus; + /** + * List of included sub elements with recursive type structure + * @type {Array} + * @memberof CopyApiResponse + */ + elements?: Array; +} + +/** + * @export + * @enum {string} + */ +export enum CopyApiResponseType { + BOARD = 'BOARD', + CARD = 'CARD', + COLLABORATIVE_TEXT_EDITOR_ELEMENT = 'COLLABORATIVE_TEXT_EDITOR_ELEMENT', + COLUMN = 'COLUMN', + COLUMNBOARD = 'COLUMNBOARD', + CONTENT = 'CONTENT', + COURSE = 'COURSE', + COURSEGROUP_GROUP = 'COURSEGROUP_GROUP', + EXTERNAL_TOOL = 'EXTERNAL_TOOL', + EXTERNAL_TOOL_ELEMENT = 'EXTERNAL_TOOL_ELEMENT', + FILE = 'FILE', + FILE_ELEMENT = 'FILE_ELEMENT', + DRAWING_ELEMENT = 'DRAWING_ELEMENT', + FILE_GROUP = 'FILE_GROUP', + LEAF = 'LEAF', + LESSON = 'LESSON', + LESSON_CONTENT_ETHERPAD = 'LESSON_CONTENT_ETHERPAD', + LESSON_CONTENT_GEOGEBRA = 'LESSON_CONTENT_GEOGEBRA', + LESSON_CONTENT_GROUP = 'LESSON_CONTENT_GROUP', + LESSON_CONTENT_LERNSTORE = 'LESSON_CONTENT_LERNSTORE', + LESSON_CONTENT_NEXBOARD = 'LESSON_CONTENT_NEXBOARD', + LESSON_CONTENT_TASK = 'LESSON_CONTENT_TASK', + LESSON_CONTENT_TEXT = 'LESSON_CONTENT_TEXT', + LERNSTORE_MATERIAL = 'LERNSTORE_MATERIAL', + LERNSTORE_MATERIAL_GROUP = 'LERNSTORE_MATERIAL_GROUP', + LINK_ELEMENT = 'LINK_ELEMENT', + LTITOOL_GROUP = 'LTITOOL_GROUP', + MEDIA_BOARD = 'MEDIA_BOARD', + MEDIA_LINE = 'MEDIA_LINE', + MEDIA_EXTERNAL_TOOL_ELEMENT = 'MEDIA_EXTERNAL_TOOL_ELEMENT', + METADATA = 'METADATA', + RICHTEXT_ELEMENT = 'RICHTEXT_ELEMENT', + SUBMISSION_CONTAINER_ELEMENT = 'SUBMISSION_CONTAINER_ELEMENT', + SUBMISSION_ITEM = 'SUBMISSION_ITEM', + SUBMISSION_GROUP = 'SUBMISSION_GROUP', + TASK = 'TASK', + TASK_GROUP = 'TASK_GROUP', + TIME_GROUP = 'TIME_GROUP', + USER_GROUP = 'USER_GROUP' +} +/** + * @export + * @enum {string} + */ +export enum CopyApiResponseStatus { + SUCCESS = 'success', + FAILURE = 'failure', + NOT_DOING = 'not-doing', + NOT_IMPLEMENTED = 'not-implemented', + PARTIAL = 'partial' +} + + + diff --git a/src/serverApi/v3/models/county-response.ts b/src/serverApi/v3/models/county-response.ts new file mode 100644 index 0000000..5bf3c3a --- /dev/null +++ b/src/serverApi/v3/models/county-response.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CountyResponse + */ +export interface CountyResponse { + /** + * + * @type {string} + * @memberof CountyResponse + */ + id: string; + /** + * + * @type {string} + * @memberof CountyResponse + */ + name: string; + /** + * + * @type {number} + * @memberof CountyResponse + */ + countyId: number; + /** + * + * @type {string} + * @memberof CountyResponse + */ + antaresKey: string; +} + + diff --git a/src/serverApi/v3/models/course-export-body-params.ts b/src/serverApi/v3/models/course-export-body-params.ts new file mode 100644 index 0000000..7bdbce2 --- /dev/null +++ b/src/serverApi/v3/models/course-export-body-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CourseExportBodyParams + */ +export interface CourseExportBodyParams { + /** + * The list of ids of topics which should be exported. If empty no topics are exported. + * @type {Array} + * @memberof CourseExportBodyParams + */ + topics: Array; + /** + * The list of ids of tasks which should be exported. If empty no tasks are exported. + * @type {Array} + * @memberof CourseExportBodyParams + */ + tasks: Array; + /** + * The list of ids of column boards which should be exported. If empty no column boards are exported. + * @type {Array} + * @memberof CourseExportBodyParams + */ + columnBoards: Array; +} + + diff --git a/src/serverApi/v3/models/course-info-response.ts b/src/serverApi/v3/models/course-info-response.ts new file mode 100644 index 0000000..326416d --- /dev/null +++ b/src/serverApi/v3/models/course-info-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CourseInfoResponse + */ +export interface CourseInfoResponse { + /** + * + * @type {string} + * @memberof CourseInfoResponse + */ + id: string; + /** + * + * @type {string} + * @memberof CourseInfoResponse + */ + name: string; +} + + diff --git a/src/serverApi/v3/models/course-metadata-list-response.ts b/src/serverApi/v3/models/course-metadata-list-response.ts new file mode 100644 index 0000000..e785745 --- /dev/null +++ b/src/serverApi/v3/models/course-metadata-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CourseMetadataResponse } from './course-metadata-response'; + +/** + * + * @export + * @interface CourseMetadataListResponse + */ +export interface CourseMetadataListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof CourseMetadataListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof CourseMetadataListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof CourseMetadataListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof CourseMetadataListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/course-metadata-response.ts b/src/serverApi/v3/models/course-metadata-response.ts new file mode 100644 index 0000000..2091a47 --- /dev/null +++ b/src/serverApi/v3/models/course-metadata-response.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CourseMetadataResponse + */ +export interface CourseMetadataResponse { + /** + * The id of the Grid element + * @type {string} + * @memberof CourseMetadataResponse + */ + id: string; + /** + * Title of the Grid element + * @type {string} + * @memberof CourseMetadataResponse + */ + title: string; + /** + * Short title of the Grid element + * @type {string} + * @memberof CourseMetadataResponse + */ + shortTitle: string; + /** + * Color of the Grid element + * @type {string} + * @memberof CourseMetadataResponse + */ + displayColor: string; + /** + * Start date of the course + * @type {string} + * @memberof CourseMetadataResponse + */ + startDate?: string; + /** + * End date of the course. After this the course counts as archived + * @type {string} + * @memberof CourseMetadataResponse + */ + untilDate?: string; + /** + * Start of the copying process if it is still ongoing - otherwise property is not set. + * @type {string} + * @memberof CourseMetadataResponse + */ + copyingSince?: string; +} + + diff --git a/src/serverApi/v3/models/create-board-body-params.ts b/src/serverApi/v3/models/create-board-body-params.ts new file mode 100644 index 0000000..451b2f9 --- /dev/null +++ b/src/serverApi/v3/models/create-board-body-params.ts @@ -0,0 +1,51 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { BoardLayout } from './board-layout'; +import { BoardParentType } from './board-parent-type'; + +/** + * + * @export + * @interface CreateBoardBodyParams + */ +export interface CreateBoardBodyParams { + /** + * The title of the board + * @type {string} + * @memberof CreateBoardBodyParams + */ + title: string; + /** + * The id of the parent + * @type {string} + * @memberof CreateBoardBodyParams + */ + parentId: string; + /** + * + * @type {BoardParentType} + * @memberof CreateBoardBodyParams + */ + parentType: BoardParentType; + /** + * + * @type {BoardLayout} + * @memberof CreateBoardBodyParams + */ + layout: BoardLayout; +} + + diff --git a/src/serverApi/v3/models/create-board-response.ts b/src/serverApi/v3/models/create-board-response.ts new file mode 100644 index 0000000..200d807 --- /dev/null +++ b/src/serverApi/v3/models/create-board-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CreateBoardResponse + */ +export interface CreateBoardResponse { + /** + * + * @type {string} + * @memberof CreateBoardResponse + */ + id: string; +} + + diff --git a/src/serverApi/v3/models/create-card-body-params.ts b/src/serverApi/v3/models/create-card-body-params.ts new file mode 100644 index 0000000..5f91737 --- /dev/null +++ b/src/serverApi/v3/models/create-card-body-params.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CreateCardBodyParams + */ +export interface CreateCardBodyParams { + /** + * + * @type {Array} + * @memberof CreateCardBodyParams + */ + requiredEmptyElements?: Array; +} + +/** + * @export + * @enum {string} + */ +export enum CreateCardBodyParamsRequiredEmptyElements { + FILE = 'file', + DRAWING = 'drawing', + LINK = 'link', + RICH_TEXT = 'richText', + SUBMISSION_CONTAINER = 'submissionContainer', + EXTERNAL_TOOL = 'externalTool', + COLLABORATIVE_TEXT_EDITOR = 'collaborativeTextEditor' +} + + + diff --git a/src/serverApi/v3/models/create-content-element-body-params.ts b/src/serverApi/v3/models/create-content-element-body-params.ts new file mode 100644 index 0000000..2731715 --- /dev/null +++ b/src/serverApi/v3/models/create-content-element-body-params.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; + +/** + * + * @export + * @interface CreateContentElementBodyParams + */ +export interface CreateContentElementBodyParams { + /** + * + * @type {ContentElementType} + * @memberof CreateContentElementBodyParams + */ + type: ContentElementType; + /** + * to bring element to a specific position, default is last position + * @type {number} + * @memberof CreateContentElementBodyParams + */ + toPosition?: number; +} + + diff --git a/src/serverApi/v3/models/create-media-element-body-params.ts b/src/serverApi/v3/models/create-media-element-body-params.ts new file mode 100644 index 0000000..d2f346b --- /dev/null +++ b/src/serverApi/v3/models/create-media-element-body-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CreateMediaElementBodyParams + */ +export interface CreateMediaElementBodyParams { + /** + * The id of the line where the element is created + * @type {string} + * @memberof CreateMediaElementBodyParams + */ + lineId: string; + /** + * The position where the element is created + * @type {number} + * @memberof CreateMediaElementBodyParams + */ + position: number; + /** + * The id of the school external tool + * @type {string} + * @memberof CreateMediaElementBodyParams + */ + schoolExternalToolId: string; +} + + diff --git a/src/serverApi/v3/models/create-news-params.ts b/src/serverApi/v3/models/create-news-params.ts new file mode 100644 index 0000000..f7bc445 --- /dev/null +++ b/src/serverApi/v3/models/create-news-params.ts @@ -0,0 +1,66 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CreateNewsParams + */ +export interface CreateNewsParams { + /** + * Title of the News entity + * @type {string} + * @memberof CreateNewsParams + */ + title: string; + /** + * Content of the News entity + * @type {string} + * @memberof CreateNewsParams + */ + content: string; + /** + * The point in time from when the News entity schould be displayed. Defaults to now so that the news is published + * @type {string} + * @memberof CreateNewsParams + */ + displayAt?: string; + /** + * Target model to which the News entity is related + * @type {string} + * @memberof CreateNewsParams + */ + targetModel: CreateNewsParamsTargetModel; + /** + * Specific target id to which the News entity is related + * @type {string} + * @memberof CreateNewsParams + */ + targetId: string; +} + +/** + * @export + * @enum {string} + */ +export enum CreateNewsParamsTargetModel { + SCHOOLS = 'schools', + COURSES = 'courses', + TEAMS = 'teams' +} + + + diff --git a/src/serverApi/v3/models/create-submission-item-body-params.ts b/src/serverApi/v3/models/create-submission-item-body-params.ts new file mode 100644 index 0000000..bacc9f4 --- /dev/null +++ b/src/serverApi/v3/models/create-submission-item-body-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CreateSubmissionItemBodyParams + */ +export interface CreateSubmissionItemBodyParams { + /** + * Boolean indicating whether the submission is completed. + * @type {boolean} + * @memberof CreateSubmissionItemBodyParams + */ + completed: boolean; +} + + diff --git a/src/serverApi/v3/models/custom-parameter-entry-param.ts b/src/serverApi/v3/models/custom-parameter-entry-param.ts new file mode 100644 index 0000000..fea9a40 --- /dev/null +++ b/src/serverApi/v3/models/custom-parameter-entry-param.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CustomParameterEntryParam + */ +export interface CustomParameterEntryParam { + /** + * + * @type {string} + * @memberof CustomParameterEntryParam + */ + name: string; + /** + * + * @type {string} + * @memberof CustomParameterEntryParam + */ + value?: string; +} + + diff --git a/src/serverApi/v3/models/custom-parameter-entry-response.ts b/src/serverApi/v3/models/custom-parameter-entry-response.ts new file mode 100644 index 0000000..12b936a --- /dev/null +++ b/src/serverApi/v3/models/custom-parameter-entry-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CustomParameterEntryResponse + */ +export interface CustomParameterEntryResponse { + /** + * + * @type {string} + * @memberof CustomParameterEntryResponse + */ + name: string; + /** + * + * @type {string} + * @memberof CustomParameterEntryResponse + */ + value?: string; +} + + diff --git a/src/serverApi/v3/models/custom-parameter-post-params.ts b/src/serverApi/v3/models/custom-parameter-post-params.ts new file mode 100644 index 0000000..d99fb57 --- /dev/null +++ b/src/serverApi/v3/models/custom-parameter-post-params.ts @@ -0,0 +1,91 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CustomParameterPostParams + */ +export interface CustomParameterPostParams { + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + name: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + displayName: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + description?: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + defaultValue?: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + regex?: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + regexComment?: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + scope: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + location: string; + /** + * + * @type {string} + * @memberof CustomParameterPostParams + */ + type: string; + /** + * + * @type {boolean} + * @memberof CustomParameterPostParams + */ + isOptional: boolean; + /** + * + * @type {boolean} + * @memberof CustomParameterPostParams + */ + isProtected: boolean; +} + + diff --git a/src/serverApi/v3/models/custom-parameter-response.ts b/src/serverApi/v3/models/custom-parameter-response.ts new file mode 100644 index 0000000..43cfcfb --- /dev/null +++ b/src/serverApi/v3/models/custom-parameter-response.ts @@ -0,0 +1,126 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface CustomParameterResponse + */ +export interface CustomParameterResponse { + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + name: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + displayName: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + description?: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + defaultValue?: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + regex?: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + regexComment?: string; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + scope: CustomParameterResponseScope; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + location: CustomParameterResponseLocation; + /** + * + * @type {string} + * @memberof CustomParameterResponse + */ + type: CustomParameterResponseType; + /** + * + * @type {boolean} + * @memberof CustomParameterResponse + */ + isOptional: boolean; + /** + * + * @type {boolean} + * @memberof CustomParameterResponse + */ + isProtected: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum CustomParameterResponseScope { + GLOBAL = 'global', + SCHOOL = 'school', + CONTEXT = 'context' +} +/** + * @export + * @enum {string} + */ +export enum CustomParameterResponseLocation { + PATH = 'path', + BODY = 'body', + QUERY = 'query' +} +/** + * @export + * @enum {string} + */ +export enum CustomParameterResponseType { + STRING = 'string', + NUMBER = 'number', + BOOLEAN = 'boolean', + AUTO_CONTEXTID = 'auto_contextid', + AUTO_CONTEXTNAME = 'auto_contextname', + AUTO_SCHOOLID = 'auto_schoolid', + AUTO_SCHOOLNUMBER = 'auto_schoolnumber', + AUTO_MEDIUMID = 'auto_mediumid', + AUTO_GROUP_EXTERNALUUID = 'auto_group_externaluuid' +} + + + diff --git a/src/serverApi/v3/models/dashboard-grid-element-response.ts b/src/serverApi/v3/models/dashboard-grid-element-response.ts new file mode 100644 index 0000000..26e747d --- /dev/null +++ b/src/serverApi/v3/models/dashboard-grid-element-response.ts @@ -0,0 +1,86 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { DashboardGridSubElementResponse } from './dashboard-grid-sub-element-response'; + +/** + * + * @export + * @interface DashboardGridElementResponse + */ +export interface DashboardGridElementResponse { + /** + * The id of the Grid element + * @type {string} + * @memberof DashboardGridElementResponse + */ + id: string; + /** + * Title of the Grid element + * @type {string} + * @memberof DashboardGridElementResponse + */ + title: string; + /** + * Short title of the Grid element + * @type {string} + * @memberof DashboardGridElementResponse + */ + shortTitle: string; + /** + * Color of the Grid element + * @type {string} + * @memberof DashboardGridElementResponse + */ + displayColor: string; + /** + * X position of the Grid element + * @type {number} + * @memberof DashboardGridElementResponse + */ + xPosition: number; + /** + * Y position of the Grid element + * @type {number} + * @memberof DashboardGridElementResponse + */ + yPosition: number; + /** + * The id of the group element + * @type {string} + * @memberof DashboardGridElementResponse + */ + groupId: string; + /** + * List of all subelements in the group + * @type {Array} + * @memberof DashboardGridElementResponse + */ + groupElements: Array; + /** + * Start of the copying process if it is still ongoing - otherwise property is not set. + * @type {string} + * @memberof DashboardGridElementResponse + */ + copyingSince: string; + /** + * Is the course synchronized with a group? + * @type {boolean} + * @memberof DashboardGridElementResponse + */ + isSynchronized: boolean; +} + + diff --git a/src/serverApi/v3/models/dashboard-grid-sub-element-response.ts b/src/serverApi/v3/models/dashboard-grid-sub-element-response.ts new file mode 100644 index 0000000..d125474 --- /dev/null +++ b/src/serverApi/v3/models/dashboard-grid-sub-element-response.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface DashboardGridSubElementResponse + */ +export interface DashboardGridSubElementResponse { + /** + * The id of the Grid element + * @type {string} + * @memberof DashboardGridSubElementResponse + */ + id: string; + /** + * Title of the Grid element + * @type {string} + * @memberof DashboardGridSubElementResponse + */ + title: string; + /** + * Short title of the Grid element + * @type {string} + * @memberof DashboardGridSubElementResponse + */ + shortTitle: string; + /** + * Color of the Grid element + * @type {string} + * @memberof DashboardGridSubElementResponse + */ + displayColor: string; +} + + diff --git a/src/serverApi/v3/models/dashboard-response.ts b/src/serverApi/v3/models/dashboard-response.ts new file mode 100644 index 0000000..395c190 --- /dev/null +++ b/src/serverApi/v3/models/dashboard-response.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { DashboardGridElementResponse } from './dashboard-grid-element-response'; + +/** + * + * @export + * @interface DashboardResponse + */ +export interface DashboardResponse { + /** + * The id of the Dashboard entity + * @type {string} + * @memberof DashboardResponse + */ + id: string; + /** + * List of all elements visible on the dashboard + * @type {Array} + * @memberof DashboardResponse + */ + gridElements: Array; +} + + diff --git a/src/serverApi/v3/models/drawing-content-body.ts b/src/serverApi/v3/models/drawing-content-body.ts new file mode 100644 index 0000000..a4dee0a --- /dev/null +++ b/src/serverApi/v3/models/drawing-content-body.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface DrawingContentBody + */ +export interface DrawingContentBody { + /** + * + * @type {string} + * @memberof DrawingContentBody + */ + description: string; +} + + diff --git a/src/serverApi/v3/models/drawing-element-content-body.ts b/src/serverApi/v3/models/drawing-element-content-body.ts new file mode 100644 index 0000000..eed2fb5 --- /dev/null +++ b/src/serverApi/v3/models/drawing-element-content-body.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { DrawingContentBody } from './drawing-content-body'; + +/** + * + * @export + * @interface DrawingElementContentBody + */ +export interface DrawingElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof DrawingElementContentBody + */ + type: ContentElementType; + /** + * + * @type {DrawingContentBody} + * @memberof DrawingElementContentBody + */ + content: DrawingContentBody; +} + + diff --git a/src/serverApi/v3/models/drawing-element-content.ts b/src/serverApi/v3/models/drawing-element-content.ts new file mode 100644 index 0000000..96b3e6f --- /dev/null +++ b/src/serverApi/v3/models/drawing-element-content.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface DrawingElementContent + */ +export interface DrawingElementContent { + /** + * + * @type {string} + * @memberof DrawingElementContent + */ + description: string; +} + + diff --git a/src/serverApi/v3/models/drawing-element-response.ts b/src/serverApi/v3/models/drawing-element-response.ts new file mode 100644 index 0000000..39c1eaf --- /dev/null +++ b/src/serverApi/v3/models/drawing-element-response.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { DrawingElementContent } from './drawing-element-content'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface DrawingElementResponse + */ +export interface DrawingElementResponse { + /** + * + * @type {string} + * @memberof DrawingElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof DrawingElementResponse + */ + type: ContentElementType; + /** + * + * @type {TimestampsResponse} + * @memberof DrawingElementResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {DrawingElementContent} + * @memberof DrawingElementResponse + */ + content: DrawingElementContent; +} + + diff --git a/src/serverApi/v3/models/entity-not-found-error.ts b/src/serverApi/v3/models/entity-not-found-error.ts new file mode 100644 index 0000000..822d78b --- /dev/null +++ b/src/serverApi/v3/models/entity-not-found-error.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface EntityNotFoundError + */ +export interface EntityNotFoundError { + /** + * The response status code. + * @type {number} + * @memberof EntityNotFoundError + */ + code: number; + /** + * The error type. + * @type {string} + * @memberof EntityNotFoundError + */ + type: string; + /** + * The error title. + * @type {string} + * @memberof EntityNotFoundError + */ + title: string; + /** + * The error message. + * @type {string} + * @memberof EntityNotFoundError + */ + message: string; + /** + * The error details. + * @type {object} + * @memberof EntityNotFoundError + */ + details?: object; +} + + diff --git a/src/serverApi/v3/models/external-source-response.ts b/src/serverApi/v3/models/external-source-response.ts new file mode 100644 index 0000000..4b16542 --- /dev/null +++ b/src/serverApi/v3/models/external-source-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ExternalSourceResponse + */ +export interface ExternalSourceResponse { + /** + * + * @type {string} + * @memberof ExternalSourceResponse + */ + externalId: string; + /** + * + * @type {string} + * @memberof ExternalSourceResponse + */ + systemId: string; +} + + diff --git a/src/serverApi/v3/models/external-tool-bulk-create-params.ts b/src/serverApi/v3/models/external-tool-bulk-create-params.ts new file mode 100644 index 0000000..16e4095 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-bulk-create-params.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ExternalToolCreateParams } from './external-tool-create-params'; + +/** + * + * @export + * @interface ExternalToolBulkCreateParams + */ +export interface ExternalToolBulkCreateParams { + /** + * List of external tools + * @type {Array} + * @memberof ExternalToolBulkCreateParams + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/external-tool-content-body.ts b/src/serverApi/v3/models/external-tool-content-body.ts new file mode 100644 index 0000000..72001a8 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-content-body.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ExternalToolContentBody + */ +export interface ExternalToolContentBody { + /** + * + * @type {string} + * @memberof ExternalToolContentBody + */ + contextExternalToolId?: string; +} + + diff --git a/src/serverApi/v3/models/external-tool-create-params.ts b/src/serverApi/v3/models/external-tool-create-params.ts new file mode 100644 index 0000000..c49486e --- /dev/null +++ b/src/serverApi/v3/models/external-tool-create-params.ts @@ -0,0 +1,103 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { BasicToolConfigParams } from './basic-tool-config-params'; +import { CustomParameterPostParams } from './custom-parameter-post-params'; +import { ExternalToolMediumParams } from './external-tool-medium-params'; +import { Lti11ToolConfigCreateParams } from './lti11-tool-config-create-params'; +import { Oauth2ToolConfigCreateParams } from './oauth2-tool-config-create-params'; +import { ToolContextType } from './tool-context-type'; + +/** + * + * @export + * @interface ExternalToolCreateParams + */ +export interface ExternalToolCreateParams { + /** + * Name of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + name: string; + /** + * Description of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + description?: string; + /** + * URL of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + url?: string; + /** + * URL of the logo of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + logoUrl?: string; + /** + * URL of the thumbnail of the external tool + * @type {string} + * @memberof ExternalToolCreateParams + */ + thumbnailUrl?: string; + /** + * Configuration of the external tool + * @type {BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams} + * @memberof ExternalToolCreateParams + */ + config: BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams; + /** + * Custom parameters of the external tool + * @type {Array} + * @memberof ExternalToolCreateParams + */ + parameters?: Array; + /** + * Tool can be hidden, those tools cant be added to e.g. school, course or board + * @type {boolean} + * @memberof ExternalToolCreateParams + */ + isHidden: boolean; + /** + * Tool can be deactivated, related tools can not be added to e.g. school, course or board anymore + * @type {boolean} + * @memberof ExternalToolCreateParams + */ + isDeactivated: boolean; + /** + * Tool should be opened in a new tab + * @type {boolean} + * @memberof ExternalToolCreateParams + */ + openNewTab: boolean; + /** + * Restrict tools to specific contexts + * @type {Array} + * @memberof ExternalToolCreateParams + */ + restrictToContexts?: Array; + /** + * Medium of the external tool + * @type {ExternalToolMediumParams} + * @memberof ExternalToolCreateParams + */ + medium?: ExternalToolMediumParams; +} + + diff --git a/src/serverApi/v3/models/external-tool-element-content-body.ts b/src/serverApi/v3/models/external-tool-element-content-body.ts new file mode 100644 index 0000000..8a4dbb8 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-element-content-body.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { ExternalToolContentBody } from './external-tool-content-body'; + +/** + * + * @export + * @interface ExternalToolElementContentBody + */ +export interface ExternalToolElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof ExternalToolElementContentBody + */ + type: ContentElementType; + /** + * + * @type {ExternalToolContentBody} + * @memberof ExternalToolElementContentBody + */ + content: ExternalToolContentBody; +} + + diff --git a/src/serverApi/v3/models/external-tool-element-content.ts b/src/serverApi/v3/models/external-tool-element-content.ts new file mode 100644 index 0000000..b818316 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-element-content.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ExternalToolElementContent + */ +export interface ExternalToolElementContent { + /** + * + * @type {string} + * @memberof ExternalToolElementContent + */ + contextExternalToolId: string | null; +} + + diff --git a/src/serverApi/v3/models/external-tool-element-response.ts b/src/serverApi/v3/models/external-tool-element-response.ts new file mode 100644 index 0000000..a517990 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-element-response.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { ExternalToolElementContent } from './external-tool-element-content'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface ExternalToolElementResponse + */ +export interface ExternalToolElementResponse { + /** + * + * @type {string} + * @memberof ExternalToolElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof ExternalToolElementResponse + */ + type: ContentElementType; + /** + * + * @type {ExternalToolElementContent} + * @memberof ExternalToolElementResponse + */ + content: ExternalToolElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof ExternalToolElementResponse + */ + timestamps: TimestampsResponse; +} + + diff --git a/src/serverApi/v3/models/external-tool-medium-params.ts b/src/serverApi/v3/models/external-tool-medium-params.ts new file mode 100644 index 0000000..05f28dd --- /dev/null +++ b/src/serverApi/v3/models/external-tool-medium-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ExternalToolMediumParams + */ +export interface ExternalToolMediumParams { + /** + * Id of the medium + * @type {string} + * @memberof ExternalToolMediumParams + */ + mediumId: string; + /** + * Publisher of the medium + * @type {string} + * @memberof ExternalToolMediumParams + */ + publisher?: string; + /** + * The id of the media source + * @type {string} + * @memberof ExternalToolMediumParams + */ + mediaSourceId?: string; +} + + diff --git a/src/serverApi/v3/models/external-tool-medium-response.ts b/src/serverApi/v3/models/external-tool-medium-response.ts new file mode 100644 index 0000000..341a218 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-medium-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ExternalToolMediumResponse + */ +export interface ExternalToolMediumResponse { + /** + * Id of the medium + * @type {string} + * @memberof ExternalToolMediumResponse + */ + mediumId: string; + /** + * Publisher of the medium + * @type {string} + * @memberof ExternalToolMediumResponse + */ + publisher?: string; + /** + * The id of the media source + * @type {string} + * @memberof ExternalToolMediumResponse + */ + mediaSourceId?: string; +} + + diff --git a/src/serverApi/v3/models/external-tool-metadata-response.ts b/src/serverApi/v3/models/external-tool-metadata-response.ts new file mode 100644 index 0000000..62cf31a --- /dev/null +++ b/src/serverApi/v3/models/external-tool-metadata-response.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContextExternalToolCountPerContextResponse } from './context-external-tool-count-per-context-response'; + +/** + * + * @export + * @interface ExternalToolMetadataResponse + */ +export interface ExternalToolMetadataResponse { + /** + * + * @type {number} + * @memberof ExternalToolMetadataResponse + */ + schoolExternalToolCount: number; + /** + * + * @type {ContextExternalToolCountPerContextResponse} + * @memberof ExternalToolMetadataResponse + */ + contextExternalToolCountPerContext: ContextExternalToolCountPerContextResponse; +} + + diff --git a/src/serverApi/v3/models/external-tool-response.ts b/src/serverApi/v3/models/external-tool-response.ts new file mode 100644 index 0000000..92b22f1 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-response.ts @@ -0,0 +1,109 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { BasicToolConfigParams } from './basic-tool-config-params'; +import { CustomParameterResponse } from './custom-parameter-response'; +import { ExternalToolMediumResponse } from './external-tool-medium-response'; +import { Lti11ToolConfigCreateParams } from './lti11-tool-config-create-params'; +import { Oauth2ToolConfigCreateParams } from './oauth2-tool-config-create-params'; +import { ToolContextType } from './tool-context-type'; + +/** + * + * @export + * @interface ExternalToolResponse + */ +export interface ExternalToolResponse { + /** + * Id of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + id: string; + /** + * Name of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + name: string; + /** + * Description of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + description?: string; + /** + * URL of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + url?: string; + /** + * URL of the logo of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + logoUrl?: string; + /** + * URL of the thumbnail of the external tool + * @type {string} + * @memberof ExternalToolResponse + */ + thumbnailUrl?: string; + /** + * Configuration of the external tool + * @type {BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams} + * @memberof ExternalToolResponse + */ + config: BasicToolConfigParams | Lti11ToolConfigCreateParams | Oauth2ToolConfigCreateParams; + /** + * Custom parameters of the external tool + * @type {Array} + * @memberof ExternalToolResponse + */ + parameters: Array; + /** + * Is the external tool hidden + * @type {boolean} + * @memberof ExternalToolResponse + */ + isHidden: boolean; + /** + * Is the external tool deactivated + * @type {boolean} + * @memberof ExternalToolResponse + */ + isDeactivated: boolean; + /** + * Should the external tool be opened in a new tab + * @type {boolean} + * @memberof ExternalToolResponse + */ + openNewTab: boolean; + /** + * Contexts in which the external tool is restricted + * @type {Array} + * @memberof ExternalToolResponse + */ + restrictToContexts?: Array; + /** + * Medium of the external tool + * @type {ExternalToolMediumResponse} + * @memberof ExternalToolResponse + */ + medium?: ExternalToolMediumResponse; +} + + diff --git a/src/serverApi/v3/models/external-tool-search-list-response.ts b/src/serverApi/v3/models/external-tool-search-list-response.ts new file mode 100644 index 0000000..cb28cc2 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-search-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ExternalToolResponse } from './external-tool-response'; + +/** + * + * @export + * @interface ExternalToolSearchListResponse + */ +export interface ExternalToolSearchListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof ExternalToolSearchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof ExternalToolSearchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof ExternalToolSearchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof ExternalToolSearchListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/external-tool-update-params.ts b/src/serverApi/v3/models/external-tool-update-params.ts new file mode 100644 index 0000000..f5e6af4 --- /dev/null +++ b/src/serverApi/v3/models/external-tool-update-params.ts @@ -0,0 +1,109 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { BasicToolConfigParams } from './basic-tool-config-params'; +import { CustomParameterPostParams } from './custom-parameter-post-params'; +import { ExternalToolMediumParams } from './external-tool-medium-params'; +import { Lti11ToolConfigUpdateParams } from './lti11-tool-config-update-params'; +import { Oauth2ToolConfigUpdateParams } from './oauth2-tool-config-update-params'; +import { ToolContextType } from './tool-context-type'; + +/** + * + * @export + * @interface ExternalToolUpdateParams + */ +export interface ExternalToolUpdateParams { + /** + * ID of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + id: string; + /** + * + * @type {string} + * @memberof ExternalToolUpdateParams + */ + name: string; + /** + * Description of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + description?: string; + /** + * URL of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + url?: string; + /** + * URL of the logo of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + logoUrl?: string; + /** + * URL of the thumbnail of the external tool + * @type {string} + * @memberof ExternalToolUpdateParams + */ + thumbnailUrl?: string; + /** + * Configuration of the external tool + * @type {BasicToolConfigParams | Lti11ToolConfigUpdateParams | Oauth2ToolConfigUpdateParams} + * @memberof ExternalToolUpdateParams + */ + config: BasicToolConfigParams | Lti11ToolConfigUpdateParams | Oauth2ToolConfigUpdateParams; + /** + * Custom parameters of the external tool + * @type {Array} + * @memberof ExternalToolUpdateParams + */ + parameters?: Array; + /** + * + * @type {boolean} + * @memberof ExternalToolUpdateParams + */ + isHidden: boolean; + /** + * Tool can be deactivated, related tools can not be added to e.g. school, course or board anymore + * @type {boolean} + * @memberof ExternalToolUpdateParams + */ + isDeactivated: boolean; + /** + * Open the tool in a new tab + * @type {boolean} + * @memberof ExternalToolUpdateParams + */ + openNewTab: boolean; + /** + * Restrict the tool to certain contexts + * @type {Array} + * @memberof ExternalToolUpdateParams + */ + restrictToContexts?: Array; + /** + * Medium of the external tool + * @type {ExternalToolMediumParams} + * @memberof ExternalToolUpdateParams + */ + medium?: ExternalToolMediumParams; +} + + diff --git a/src/serverApi/v3/models/federal-state-response.ts b/src/serverApi/v3/models/federal-state-response.ts new file mode 100644 index 0000000..e6c4035 --- /dev/null +++ b/src/serverApi/v3/models/federal-state-response.ts @@ -0,0 +1,56 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CountyResponse } from './county-response'; + +/** + * + * @export + * @interface FederalStateResponse + */ +export interface FederalStateResponse { + /** + * + * @type {string} + * @memberof FederalStateResponse + */ + id: string; + /** + * + * @type {string} + * @memberof FederalStateResponse + */ + name: string; + /** + * + * @type {string} + * @memberof FederalStateResponse + */ + abbreviation: string; + /** + * + * @type {string} + * @memberof FederalStateResponse + */ + logoUrl: string; + /** + * + * @type {Array} + * @memberof FederalStateResponse + */ + counties: Array; +} + + diff --git a/src/serverApi/v3/models/file-content-body.ts b/src/serverApi/v3/models/file-content-body.ts new file mode 100644 index 0000000..d40475e --- /dev/null +++ b/src/serverApi/v3/models/file-content-body.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface FileContentBody + */ +export interface FileContentBody { + /** + * + * @type {string} + * @memberof FileContentBody + */ + caption: string; + /** + * + * @type {string} + * @memberof FileContentBody + */ + alternativeText: string; +} + + diff --git a/src/serverApi/v3/models/file-element-content-body.ts b/src/serverApi/v3/models/file-element-content-body.ts new file mode 100644 index 0000000..6de7a1b --- /dev/null +++ b/src/serverApi/v3/models/file-element-content-body.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { FileContentBody } from './file-content-body'; + +/** + * + * @export + * @interface FileElementContentBody + */ +export interface FileElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof FileElementContentBody + */ + type: ContentElementType; + /** + * + * @type {FileContentBody} + * @memberof FileElementContentBody + */ + content: FileContentBody; +} + + diff --git a/src/serverApi/v3/models/file-element-content.ts b/src/serverApi/v3/models/file-element-content.ts new file mode 100644 index 0000000..cd671fc --- /dev/null +++ b/src/serverApi/v3/models/file-element-content.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface FileElementContent + */ +export interface FileElementContent { + /** + * + * @type {string} + * @memberof FileElementContent + */ + caption: string; + /** + * + * @type {string} + * @memberof FileElementContent + */ + alternativeText: string; +} + + diff --git a/src/serverApi/v3/models/file-element-response.ts b/src/serverApi/v3/models/file-element-response.ts new file mode 100644 index 0000000..9b22557 --- /dev/null +++ b/src/serverApi/v3/models/file-element-response.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { FileElementContent } from './file-element-content'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface FileElementResponse + */ +export interface FileElementResponse { + /** + * + * @type {string} + * @memberof FileElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof FileElementResponse + */ + type: ContentElementType; + /** + * + * @type {FileElementContent} + * @memberof FileElementResponse + */ + content: FileElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof FileElementResponse + */ + timestamps: TimestampsResponse; +} + + diff --git a/src/serverApi/v3/models/file-storage-type.ts b/src/serverApi/v3/models/file-storage-type.ts new file mode 100644 index 0000000..26143bb --- /dev/null +++ b/src/serverApi/v3/models/file-storage-type.ts @@ -0,0 +1,27 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum FileStorageType { + AWS_S3 = 'awsS3' +} + + + diff --git a/src/serverApi/v3/models/forbidden-operation-error.ts b/src/serverApi/v3/models/forbidden-operation-error.ts new file mode 100644 index 0000000..d5b7f1f --- /dev/null +++ b/src/serverApi/v3/models/forbidden-operation-error.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ForbiddenOperationError + */ +export interface ForbiddenOperationError { + /** + * The response status code. + * @type {number} + * @memberof ForbiddenOperationError + */ + code: number; + /** + * The error type. + * @type {string} + * @memberof ForbiddenOperationError + */ + type: string; + /** + * The error title. + * @type {string} + * @memberof ForbiddenOperationError + */ + title: string; + /** + * The error message. + * @type {string} + * @memberof ForbiddenOperationError + */ + message: string; + /** + * The error details. + * @type {object} + * @memberof ForbiddenOperationError + */ + details?: object; +} + + diff --git a/src/serverApi/v3/models/force-migration-params.ts b/src/serverApi/v3/models/force-migration-params.ts new file mode 100644 index 0000000..7702015 --- /dev/null +++ b/src/serverApi/v3/models/force-migration-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ForceMigrationParams + */ +export interface ForceMigrationParams { + /** + * Email of the administrator + * @type {string} + * @memberof ForceMigrationParams + */ + email: string; + /** + * Target externalId to link it with an external account + * @type {string} + * @memberof ForceMigrationParams + */ + externalUserId: string; + /** + * Target externalId to link it with an external school + * @type {string} + * @memberof ForceMigrationParams + */ + externalSchoolId: string; +} + + diff --git a/src/serverApi/v3/models/get-meta-tag-data-body.ts b/src/serverApi/v3/models/get-meta-tag-data-body.ts new file mode 100644 index 0000000..89b7147 --- /dev/null +++ b/src/serverApi/v3/models/get-meta-tag-data-body.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface GetMetaTagDataBody + */ +export interface GetMetaTagDataBody { + /** + * + * @type {string} + * @memberof GetMetaTagDataBody + */ + url: string; +} + + diff --git a/src/serverApi/v3/models/group-list-response.ts b/src/serverApi/v3/models/group-list-response.ts new file mode 100644 index 0000000..b742655 --- /dev/null +++ b/src/serverApi/v3/models/group-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { GroupResponse } from './group-response'; + +/** + * + * @export + * @interface GroupListResponse + */ +export interface GroupListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof GroupListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof GroupListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof GroupListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof GroupListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/group-response.ts b/src/serverApi/v3/models/group-response.ts new file mode 100644 index 0000000..63ad071 --- /dev/null +++ b/src/serverApi/v3/models/group-response.ts @@ -0,0 +1,74 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ExternalSourceResponse } from './external-source-response'; +import { GroupUserResponse } from './group-user-response'; + +/** + * + * @export + * @interface GroupResponse + */ +export interface GroupResponse { + /** + * + * @type {string} + * @memberof GroupResponse + */ + id: string; + /** + * + * @type {string} + * @memberof GroupResponse + */ + name: string; + /** + * + * @type {string} + * @memberof GroupResponse + */ + type: GroupResponseType; + /** + * + * @type {Array} + * @memberof GroupResponse + */ + users: Array; + /** + * + * @type {ExternalSourceResponse} + * @memberof GroupResponse + */ + externalSource?: ExternalSourceResponse; + /** + * + * @type {string} + * @memberof GroupResponse + */ + organizationId?: string; +} + +/** + * @export + * @enum {string} + */ +export enum GroupResponseType { + CLASS = 'class', + COURSE = 'course', + OTHER = 'other' +} + + + diff --git a/src/serverApi/v3/models/group-user-response.ts b/src/serverApi/v3/models/group-user-response.ts new file mode 100644 index 0000000..d0bd7d9 --- /dev/null +++ b/src/serverApi/v3/models/group-user-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { RoleName } from './role-name'; + +/** + * + * @export + * @interface GroupUserResponse + */ +export interface GroupUserResponse { + /** + * + * @type {string} + * @memberof GroupUserResponse + */ + id: string; + /** + * + * @type {string} + * @memberof GroupUserResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof GroupUserResponse + */ + lastName: string; + /** + * + * @type {RoleName} + * @memberof GroupUserResponse + */ + role: RoleName; +} + + diff --git a/src/serverApi/v3/models/import-user-list-response.ts b/src/serverApi/v3/models/import-user-list-response.ts new file mode 100644 index 0000000..ce7b763 --- /dev/null +++ b/src/serverApi/v3/models/import-user-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ImportUserResponse } from './import-user-response'; + +/** + * + * @export + * @interface ImportUserListResponse + */ +export interface ImportUserListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof ImportUserListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof ImportUserListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof ImportUserListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof ImportUserListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/import-user-response.ts b/src/serverApi/v3/models/import-user-response.ts new file mode 100644 index 0000000..ee0e1a4 --- /dev/null +++ b/src/serverApi/v3/models/import-user-response.ts @@ -0,0 +1,85 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { UserMatchResponse } from './user-match-response'; + +/** + * + * @export + * @interface ImportUserResponse + */ +export interface ImportUserResponse { + /** + * id reference to a import user + * @type {string} + * @memberof ImportUserResponse + */ + importUserId: string; + /** + * login name from external system + * @type {string} + * @memberof ImportUserResponse + */ + loginName: string; + /** + * external systems user firstname + * @type {string} + * @memberof ImportUserResponse + */ + firstName: string; + /** + * external systems user lastname + * @type {string} + * @memberof ImportUserResponse + */ + lastName: string; + /** + * list of user roles from external system: student, teacher, admin + * @type {Array} + * @memberof ImportUserResponse + */ + roleNames: Array; + /** + * names of classes the user attends from external system + * @type {Array} + * @memberof ImportUserResponse + */ + classNames: Array; + /** + * assignemnt to a local user account + * @type {UserMatchResponse} + * @memberof ImportUserResponse + */ + match?: UserMatchResponse; + /** + * manual flag to apply it as filter + * @type {boolean} + * @memberof ImportUserResponse + */ + flagged: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum ImportUserResponseRoleNames { + STUDENT = 'student', + TEACHER = 'teacher', + ADMIN = 'admin' +} + + + diff --git a/src/serverApi/v3/models/index.ts b/src/serverApi/v3/models/index.ts new file mode 100644 index 0000000..86cca12 --- /dev/null +++ b/src/serverApi/v3/models/index.ts @@ -0,0 +1,257 @@ +export * from './account-by-id-body-params'; +export * from './account-response'; +export * from './account-search-list-response'; +export * from './action'; +export * from './alert-response'; +export * from './api-validation-error'; +export * from './authorization-body-params'; +export * from './authorization-context-params'; +export * from './authorized-reponse'; +export * from './basic-tool-config-params'; +export * from './board-context-response'; +export * from './board-element-response'; +export * from './board-external-reference-type'; +export * from './board-layout'; +export * from './board-parent-type'; +export * from './board-response'; +export * from './card-list-response'; +export * from './card-response'; +export * from './card-skeleton-response'; +export * from './change-language-params'; +export * from './class-info-response'; +export * from './class-info-search-list-response'; +export * from './class-request-context'; +export * from './class-response'; +export * from './class-sort-query-type'; +export * from './collaborative-text-editor-element-response'; +export * from './collaborative-text-editor-parent-type'; +export * from './collaborative-text-editor-response'; +export * from './collapsable-body-params'; +export * from './color-body-params'; +export * from './column-response'; +export * from './config-response'; +export * from './consent-request-body'; +export * from './consent-response'; +export * from './consent-session-response'; +export * from './consents-response'; +export * from './content-element-type'; +export * from './context-external-tool-body-params'; +export * from './context-external-tool-configuration-status-response'; +export * from './context-external-tool-configuration-template-list-response'; +export * from './context-external-tool-configuration-template-response'; +export * from './context-external-tool-count-per-context-response'; +export * from './context-external-tool-post-params'; +export * from './context-external-tool-response'; +export * from './context-external-tool-search-list-response'; +export * from './copy-api-response'; +export * from './county-response'; +export * from './course-export-body-params'; +export * from './course-info-response'; +export * from './course-metadata-list-response'; +export * from './course-metadata-response'; +export * from './create-board-body-params'; +export * from './create-board-response'; +export * from './create-card-body-params'; +export * from './create-content-element-body-params'; +export * from './create-media-element-body-params'; +export * from './create-news-params'; +export * from './create-submission-item-body-params'; +export * from './custom-parameter-entry-param'; +export * from './custom-parameter-entry-response'; +export * from './custom-parameter-post-params'; +export * from './custom-parameter-response'; +export * from './dashboard-grid-element-response'; +export * from './dashboard-grid-sub-element-response'; +export * from './dashboard-response'; +export * from './drawing-content-body'; +export * from './drawing-element-content'; +export * from './drawing-element-content-body'; +export * from './drawing-element-response'; +export * from './entity-not-found-error'; +export * from './external-source-response'; +export * from './external-tool-bulk-create-params'; +export * from './external-tool-content-body'; +export * from './external-tool-create-params'; +export * from './external-tool-element-content'; +export * from './external-tool-element-content-body'; +export * from './external-tool-element-response'; +export * from './external-tool-medium-params'; +export * from './external-tool-medium-response'; +export * from './external-tool-metadata-response'; +export * from './external-tool-response'; +export * from './external-tool-search-list-response'; +export * from './external-tool-update-params'; +export * from './federal-state-response'; +export * from './file-content-body'; +export * from './file-element-content'; +export * from './file-element-content-body'; +export * from './file-element-response'; +export * from './file-storage-type'; +export * from './forbidden-operation-error'; +export * from './force-migration-params'; +export * from './get-meta-tag-data-body'; +export * from './group-list-response'; +export * from './group-response'; +export * from './group-user-response'; +export * from './import-user-list-response'; +export * from './import-user-response'; +export * from './instance-feature'; +export * from './language-type'; +export * from './layout-body-params'; +export * from './ldap-authorization-body-params'; +export * from './lesson-content-response'; +export * from './lesson-copy-api-params'; +export * from './lesson-metadata-list-response'; +export * from './lesson-metadata-response'; +export * from './lesson-response'; +export * from './link-content-body'; +export * from './link-element-content'; +export * from './link-element-content-body'; +export * from './link-element-response'; +export * from './local-authorization-body-params'; +export * from './login-request-body'; +export * from './login-response'; +export * from './lti11-tool-config-create-params'; +export * from './lti11-tool-config-update-params'; +export * from './lti-message-type'; +export * from './lti-privacy-permission'; +export * from './material-response'; +export * from './me-account-response'; +export * from './me-response'; +export * from './me-role-response'; +export * from './me-school-logo-response'; +export * from './me-school-response'; +export * from './me-user-response'; +export * from './media-available-line-element-response'; +export * from './media-available-line-response'; +export * from './media-board-colors'; +export * from './media-board-layout-type'; +export * from './media-board-response'; +export * from './media-external-tool-element-content'; +export * from './media-external-tool-element-response'; +export * from './media-line-response'; +export * from './message'; +export * from './message-origin'; +export * from './meta-tag-extractor-response'; +export * from './move-card-body-params'; +export * from './move-column-body-params'; +export * from './move-content-element-body'; +export * from './move-element-body-params'; +export * from './move-element-params'; +export * from './move-element-position-params'; +export * from './news-list-response'; +export * from './news-response'; +export * from './news-target-model'; +export * from './oauth-token-dto'; +export * from './oauth2-authorization-body-params'; +export * from './oauth2-migration-params'; +export * from './oauth2-tool-config-create-params'; +export * from './oauth2-tool-config-update-params'; +export * from './oauth-client-create-body'; +export * from './oauth-client-response'; +export * from './oauth-client-update-body'; +export * from './oauth-config-response'; +export * from './oidc-context-response'; +export * from './parent-consent-response'; +export * from './patch-group-params'; +export * from './patch-my-account-params'; +export * from './patch-my-password-params'; +export * from './patch-order-params'; +export * from './patch-visibility-params'; +export * from './permission'; +export * from './provider-config-response'; +export * from './pseudonym-response'; +export * from './public-system-list-response'; +export * from './public-system-response'; +export * from './redirect-response'; +export * from './rename-body-params'; +export * from './resolved-user-response'; +export * from './rich-text'; +export * from './rich-text-content-body'; +export * from './rich-text-element-content'; +export * from './rich-text-element-content-body'; +export * from './rich-text-element-response'; +export * from './role-name'; +export * from './school-exists-response'; +export * from './school-external-tool-configuration-status-response'; +export * from './school-external-tool-configuration-template-list-response'; +export * from './school-external-tool-configuration-template-response'; +export * from './school-external-tool-metadata-response'; +export * from './school-external-tool-post-params'; +export * from './school-external-tool-response'; +export * from './school-external-tool-search-list-response'; +export * from './school-feature'; +export * from './school-for-external-invite-response'; +export * from './school-for-ldap-login-response'; +export * from './school-info-response'; +export * from './school-logo'; +export * from './school-permissions-params'; +export * from './school-purpose'; +export * from './school-response'; +export * from './school-system-response'; +export * from './school-update-body-params'; +export * from './school-year-query-type'; +export * from './school-year-response'; +export * from './schul-conne-xprovisioning-options-params'; +export * from './schul-conne-xprovisioning-options-response'; +export * from './schulcloud-theme'; +export * from './set-height-body-params'; +export * from './share-token-body-params'; +export * from './share-token-import-body-params'; +export * from './share-token-info-response'; +export * from './share-token-payload-response'; +export * from './share-token-response'; +export * from './single-column-board-response'; +export * from './student-permission-params'; +export * from './submission-container-content-body'; +export * from './submission-container-element-content'; +export * from './submission-container-element-content-body'; +export * from './submission-container-element-response'; +export * from './submission-item-response'; +export * from './submission-status-list-response'; +export * from './submission-status-response'; +export * from './submissions-response'; +export * from './successful-response'; +export * from './system-for-ldap-login-response'; +export * from './system-type'; +export * from './target-info-response'; +export * from './task-copy-api-params'; +export * from './task-list-response'; +export * from './task-response'; +export * from './task-status-response'; +export * from './teacher-permission-params'; +export * from './team-permissions-body'; +export * from './timestamps-response'; +export * from './timezone'; +export * from './tool-config-type'; +export * from './tool-context-type'; +export * from './tool-context-types-list-response'; +export * from './tool-launch-request-response'; +export * from './tool-reference-list-response'; +export * from './tool-reference-response'; +export * from './update-board-title-params'; +export * from './update-element-content-body-params'; +export * from './update-flag-params'; +export * from './update-match-params'; +export * from './update-news-params'; +export * from './update-submission-item-body-params'; +export * from './user-consent-response'; +export * from './user-data-response'; +export * from './user-info-response'; +export * from './user-list-response'; +export * from './user-login-migration-mandatory-params'; +export * from './user-login-migration-response'; +export * from './user-login-migration-search-list-response'; +export * from './user-match-list-response'; +export * from './user-match-response'; +export * from './user-response'; +export * from './validation-error'; +export * from './video-conference-create-params'; +export * from './video-conference-info-response'; +export * from './video-conference-join-response'; +export * from './video-conference-options-response'; +export * from './video-conference-scope'; +export * from './video-conference-state-response'; +export * from './visibility-body-params'; +export * from './visibility-settings-response'; +export * from './years-response'; diff --git a/src/serverApi/v3/models/instance-feature.ts b/src/serverApi/v3/models/instance-feature.ts new file mode 100644 index 0000000..082b9e3 --- /dev/null +++ b/src/serverApi/v3/models/instance-feature.ts @@ -0,0 +1,27 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum InstanceFeature { + IS_TEAM_CREATION_BY_STUDENTS_ENABLED = 'isTeamCreationByStudentsEnabled' +} + + + diff --git a/src/serverApi/v3/models/language-type.ts b/src/serverApi/v3/models/language-type.ts new file mode 100644 index 0000000..b5bc323 --- /dev/null +++ b/src/serverApi/v3/models/language-type.ts @@ -0,0 +1,30 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum LanguageType { + DE = 'de', + EN = 'en', + ES = 'es', + UK = 'uk' +} + + + diff --git a/src/serverApi/v3/models/layout-body-params.ts b/src/serverApi/v3/models/layout-body-params.ts new file mode 100644 index 0000000..8596bc3 --- /dev/null +++ b/src/serverApi/v3/models/layout-body-params.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MediaBoardLayoutType } from './media-board-layout-type'; + +/** + * + * @export + * @interface LayoutBodyParams + */ +export interface LayoutBodyParams { + /** + * + * @type {MediaBoardLayoutType} + * @memberof LayoutBodyParams + */ + layout: MediaBoardLayoutType; +} + + diff --git a/src/serverApi/v3/models/ldap-authorization-body-params.ts b/src/serverApi/v3/models/ldap-authorization-body-params.ts new file mode 100644 index 0000000..7aedde9 --- /dev/null +++ b/src/serverApi/v3/models/ldap-authorization-body-params.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface LdapAuthorizationBodyParams + */ +export interface LdapAuthorizationBodyParams { + /** + * + * @type {string} + * @memberof LdapAuthorizationBodyParams + */ + systemId: string; + /** + * + * @type {string} + * @memberof LdapAuthorizationBodyParams + */ + username: string; + /** + * + * @type {string} + * @memberof LdapAuthorizationBodyParams + */ + password: string; + /** + * + * @type {string} + * @memberof LdapAuthorizationBodyParams + */ + schoolId: string; +} + + diff --git a/src/serverApi/v3/models/lesson-content-response.ts b/src/serverApi/v3/models/lesson-content-response.ts new file mode 100644 index 0000000..a41820e --- /dev/null +++ b/src/serverApi/v3/models/lesson-content-response.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface LessonContentResponse + */ +export interface LessonContentResponse { + /** + * + * @type {object} + * @memberof LessonContentResponse + */ + content: object; + /** + * The id of the Material entity + * @type {string} + * @memberof LessonContentResponse + * @deprecated + */ + _id: string; + /** + * The id of the Material entity + * @type {string} + * @memberof LessonContentResponse + */ + id: string; + /** + * Title of the Material entity + * @type {string} + * @memberof LessonContentResponse + */ + title: string; + /** + * + * @type {string} + * @memberof LessonContentResponse + */ + component: LessonContentResponseComponent; + /** + * + * @type {boolean} + * @memberof LessonContentResponse + */ + hidden: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum LessonContentResponseComponent { + ETHERPAD = 'Etherpad', + GEO_GEBRA = 'geoGebra', + INTERNAL = 'internal', + RESOURCES = 'resources', + TEXT = 'text', + NE_XBOARD = 'neXboard' +} + + + diff --git a/src/serverApi/v3/models/lesson-copy-api-params.ts b/src/serverApi/v3/models/lesson-copy-api-params.ts new file mode 100644 index 0000000..dae9382 --- /dev/null +++ b/src/serverApi/v3/models/lesson-copy-api-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface LessonCopyApiParams + */ +export interface LessonCopyApiParams { + /** + * Destination course parent Id the lesson is copied to + * @type {string} + * @memberof LessonCopyApiParams + */ + courseId?: string; +} + + diff --git a/src/serverApi/v3/models/lesson-metadata-list-response.ts b/src/serverApi/v3/models/lesson-metadata-list-response.ts new file mode 100644 index 0000000..36beee8 --- /dev/null +++ b/src/serverApi/v3/models/lesson-metadata-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { LessonMetadataResponse } from './lesson-metadata-response'; + +/** + * + * @export + * @interface LessonMetadataListResponse + */ +export interface LessonMetadataListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof LessonMetadataListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof LessonMetadataListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof LessonMetadataListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof LessonMetadataListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/lesson-metadata-response.ts b/src/serverApi/v3/models/lesson-metadata-response.ts new file mode 100644 index 0000000..b62574d --- /dev/null +++ b/src/serverApi/v3/models/lesson-metadata-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface LessonMetadataResponse + */ +export interface LessonMetadataResponse { + /** + * The id of the Lesson entity + * @type {string} + * @memberof LessonMetadataResponse + */ + _id: string; + /** + * Name of the Lesson entity + * @type {string} + * @memberof LessonMetadataResponse + */ + name: string; +} + + diff --git a/src/serverApi/v3/models/lesson-response.ts b/src/serverApi/v3/models/lesson-response.ts new file mode 100644 index 0000000..4e50d0f --- /dev/null +++ b/src/serverApi/v3/models/lesson-response.ts @@ -0,0 +1,82 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { LessonContentResponse } from './lesson-content-response'; +import { MaterialResponse } from './material-response'; + +/** + * + * @export + * @interface LessonResponse + */ +export interface LessonResponse { + /** + * The id of the Lesson entity + * @type {string} + * @memberof LessonResponse + * @deprecated + */ + _id: string; + /** + * The id of the Lesson entity + * @type {string} + * @memberof LessonResponse + */ + id: string; + /** + * Name of the Lesson entity + * @type {string} + * @memberof LessonResponse + */ + name: string; + /** + * The id of the Course entity + * @type {string} + * @memberof LessonResponse + */ + courseId?: string; + /** + * The id of the Course-group entity + * @type {string} + * @memberof LessonResponse + */ + courseGroupId?: string; + /** + * Hidden status of the Lesson entity + * @type {boolean} + * @memberof LessonResponse + */ + hidden: boolean; + /** + * Position of the Lesson entity + * @type {number} + * @memberof LessonResponse + */ + position: number; + /** + * Contents of the Lesson entity + * @type {Array} + * @memberof LessonResponse + */ + contents: Array; + /** + * Materials of the Lesson entity + * @type {Array} + * @memberof LessonResponse + */ + materials: Array; +} + + diff --git a/src/serverApi/v3/models/link-content-body.ts b/src/serverApi/v3/models/link-content-body.ts new file mode 100644 index 0000000..a320815 --- /dev/null +++ b/src/serverApi/v3/models/link-content-body.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface LinkContentBody + */ +export interface LinkContentBody { + /** + * + * @type {string} + * @memberof LinkContentBody + */ + url: string; + /** + * + * @type {string} + * @memberof LinkContentBody + */ + title: string; + /** + * + * @type {string} + * @memberof LinkContentBody + */ + description: string; + /** + * + * @type {string} + * @memberof LinkContentBody + */ + imageUrl: string; +} + + diff --git a/src/serverApi/v3/models/link-element-content-body.ts b/src/serverApi/v3/models/link-element-content-body.ts new file mode 100644 index 0000000..10769e1 --- /dev/null +++ b/src/serverApi/v3/models/link-element-content-body.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { LinkContentBody } from './link-content-body'; + +/** + * + * @export + * @interface LinkElementContentBody + */ +export interface LinkElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof LinkElementContentBody + */ + type: ContentElementType; + /** + * + * @type {LinkContentBody} + * @memberof LinkElementContentBody + */ + content: LinkContentBody; +} + + diff --git a/src/serverApi/v3/models/link-element-content.ts b/src/serverApi/v3/models/link-element-content.ts new file mode 100644 index 0000000..e11d853 --- /dev/null +++ b/src/serverApi/v3/models/link-element-content.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface LinkElementContent + */ +export interface LinkElementContent { + /** + * + * @type {string} + * @memberof LinkElementContent + */ + url: string; + /** + * + * @type {string} + * @memberof LinkElementContent + */ + title: string; + /** + * + * @type {string} + * @memberof LinkElementContent + */ + description?: string; + /** + * + * @type {string} + * @memberof LinkElementContent + */ + imageUrl?: string; +} + + diff --git a/src/serverApi/v3/models/link-element-response.ts b/src/serverApi/v3/models/link-element-response.ts new file mode 100644 index 0000000..8216523 --- /dev/null +++ b/src/serverApi/v3/models/link-element-response.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { LinkElementContent } from './link-element-content'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface LinkElementResponse + */ +export interface LinkElementResponse { + /** + * + * @type {string} + * @memberof LinkElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof LinkElementResponse + */ + type: ContentElementType; + /** + * + * @type {LinkElementContent} + * @memberof LinkElementResponse + */ + content: LinkElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof LinkElementResponse + */ + timestamps: TimestampsResponse; +} + + diff --git a/src/serverApi/v3/models/local-authorization-body-params.ts b/src/serverApi/v3/models/local-authorization-body-params.ts new file mode 100644 index 0000000..4308538 --- /dev/null +++ b/src/serverApi/v3/models/local-authorization-body-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface LocalAuthorizationBodyParams + */ +export interface LocalAuthorizationBodyParams { + /** + * + * @type {string} + * @memberof LocalAuthorizationBodyParams + */ + username: string; + /** + * + * @type {string} + * @memberof LocalAuthorizationBodyParams + */ + password: string; +} + + diff --git a/src/serverApi/v3/models/login-request-body.ts b/src/serverApi/v3/models/login-request-body.ts new file mode 100644 index 0000000..c57f11c --- /dev/null +++ b/src/serverApi/v3/models/login-request-body.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface LoginRequestBody + */ +export interface LoginRequestBody { + /** + * The error should follow the OAuth2 error format (e.g. invalid_request, login_required). Defaults to request_denied. + * @type {string} + * @memberof LoginRequestBody + */ + error?: string; + /** + * Debug contains information to help resolve the problem as a developer. Usually not exposed to the public but only in the server logs. + * @type {string} + * @memberof LoginRequestBody + */ + error_debug?: string; + /** + * Description of the error in a human readable format. + * @type {string} + * @memberof LoginRequestBody + */ + error_description?: string; + /** + * Hint to help resolve the error. + * @type {string} + * @memberof LoginRequestBody + */ + error_hint?: string; + /** + * Represents the HTTP status code of the error (e.g. 401 or 403). Defaults to 400. + * @type {number} + * @memberof LoginRequestBody + */ + status_code?: number; + /** + * Remember, if set to true, tells the oauth provider to remember this consent authorization and reuse it if the same client asks the same user for the same, or a subset of, scope. + * @type {boolean} + * @memberof LoginRequestBody + */ + remember?: boolean; + /** + * RememberFor sets how long the consent authorization should be remembered for in seconds. If set to 0, the authorization will be remembered indefinitely. + * @type {number} + * @memberof LoginRequestBody + */ + remember_for?: number; +} + + diff --git a/src/serverApi/v3/models/login-response.ts b/src/serverApi/v3/models/login-response.ts new file mode 100644 index 0000000..ace81b4 --- /dev/null +++ b/src/serverApi/v3/models/login-response.ts @@ -0,0 +1,87 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { OauthClientResponse } from './oauth-client-response'; +import { OidcContextResponse } from './oidc-context-response'; + +/** + * + * @export + * @interface LoginResponse + */ +export interface LoginResponse { + /** + * Id of the corresponding client. + * @type {string} + * @memberof LoginResponse + */ + client_id: string; + /** + * The id/challenge of the consent login request. + * @type {string} + * @memberof LoginResponse + */ + challenge: string; + /** + * + * @type {OauthClientResponse} + * @memberof LoginResponse + */ + client: OauthClientResponse; + /** + * + * @type {OidcContextResponse} + * @memberof LoginResponse + */ + oidc_context: OidcContextResponse; + /** + * The original oauth2.0 authorization url request by the client. + * @type {string} + * @memberof LoginResponse + */ + request_url: string; + /** + * + * @type {Array} + * @memberof LoginResponse + */ + requested_access_token_audience: Array; + /** + * The request scopes of the login request. + * @type {Array} + * @memberof LoginResponse + */ + requested_scope?: Array; + /** + * The login session id. This parameter is used as sid for the oidc front-/backchannel logout. + * @type {string} + * @memberof LoginResponse + */ + session_id: string; + /** + * Skip, if true, implies that the client has requested the same scopes from the same user previously. + * @type {boolean} + * @memberof LoginResponse + */ + skip: boolean; + /** + * User id of the end-user that is authenticated. + * @type {string} + * @memberof LoginResponse + */ + subject: string; +} + + diff --git a/src/serverApi/v3/models/lti-message-type.ts b/src/serverApi/v3/models/lti-message-type.ts new file mode 100644 index 0000000..451ee51 --- /dev/null +++ b/src/serverApi/v3/models/lti-message-type.ts @@ -0,0 +1,27 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum LtiMessageType { + BASIC_LTI_LAUNCH_REQUEST = 'basic-lti-launch-request' +} + + + diff --git a/src/serverApi/v3/models/lti-privacy-permission.ts b/src/serverApi/v3/models/lti-privacy-permission.ts new file mode 100644 index 0000000..905853f --- /dev/null +++ b/src/serverApi/v3/models/lti-privacy-permission.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum LtiPrivacyPermission { + ANONYMOUS = 'anonymous', + E_MAIL = 'e-mail', + NAME = 'name', + PUBLIC = 'public', + PSEUDONYMOUS = 'pseudonymous' +} + + + diff --git a/src/serverApi/v3/models/lti11-tool-config-create-params.ts b/src/serverApi/v3/models/lti11-tool-config-create-params.ts new file mode 100644 index 0000000..1b095ce --- /dev/null +++ b/src/serverApi/v3/models/lti11-tool-config-create-params.ts @@ -0,0 +1,70 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { LtiMessageType } from './lti-message-type'; +import { LtiPrivacyPermission } from './lti-privacy-permission'; +import { ToolConfigType } from './tool-config-type'; + +/** + * + * @export + * @interface Lti11ToolConfigCreateParams + */ +export interface Lti11ToolConfigCreateParams { + /** + * + * @type {ToolConfigType} + * @memberof Lti11ToolConfigCreateParams + */ + type: ToolConfigType; + /** + * + * @type {string} + * @memberof Lti11ToolConfigCreateParams + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof Lti11ToolConfigCreateParams + */ + key: string; + /** + * + * @type {string} + * @memberof Lti11ToolConfigCreateParams + */ + secret: string; + /** + * + * @type {LtiMessageType} + * @memberof Lti11ToolConfigCreateParams + */ + lti_message_type: LtiMessageType; + /** + * + * @type {LtiPrivacyPermission} + * @memberof Lti11ToolConfigCreateParams + */ + privacy_permission: LtiPrivacyPermission; + /** + * + * @type {string} + * @memberof Lti11ToolConfigCreateParams + */ + launch_presentation_locale: string; +} + + diff --git a/src/serverApi/v3/models/lti11-tool-config-update-params.ts b/src/serverApi/v3/models/lti11-tool-config-update-params.ts new file mode 100644 index 0000000..2d64d7c --- /dev/null +++ b/src/serverApi/v3/models/lti11-tool-config-update-params.ts @@ -0,0 +1,70 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { LtiMessageType } from './lti-message-type'; +import { LtiPrivacyPermission } from './lti-privacy-permission'; +import { ToolConfigType } from './tool-config-type'; + +/** + * + * @export + * @interface Lti11ToolConfigUpdateParams + */ +export interface Lti11ToolConfigUpdateParams { + /** + * + * @type {ToolConfigType} + * @memberof Lti11ToolConfigUpdateParams + */ + type: ToolConfigType; + /** + * + * @type {string} + * @memberof Lti11ToolConfigUpdateParams + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof Lti11ToolConfigUpdateParams + */ + key: string; + /** + * + * @type {string} + * @memberof Lti11ToolConfigUpdateParams + */ + secret?: string; + /** + * + * @type {LtiMessageType} + * @memberof Lti11ToolConfigUpdateParams + */ + lti_message_type: LtiMessageType; + /** + * + * @type {LtiPrivacyPermission} + * @memberof Lti11ToolConfigUpdateParams + */ + privacy_permission: LtiPrivacyPermission; + /** + * + * @type {string} + * @memberof Lti11ToolConfigUpdateParams + */ + launch_presentation_locale: string; +} + + diff --git a/src/serverApi/v3/models/material-response.ts b/src/serverApi/v3/models/material-response.ts new file mode 100644 index 0000000..7b03683 --- /dev/null +++ b/src/serverApi/v3/models/material-response.ts @@ -0,0 +1,73 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MaterialResponse + */ +export interface MaterialResponse { + /** + * The id of the Material entity + * @type {string} + * @memberof MaterialResponse + */ + _id: string; + /** + * The id of the Material entity + * @type {string} + * @memberof MaterialResponse + */ + id: string; + /** + * Title of the Material entity + * @type {string} + * @memberof MaterialResponse + */ + title: string; + /** + * ? + * @type {Array} + * @memberof MaterialResponse + */ + relatedResources: Array; + /** + * Url of the material + * @type {string} + * @memberof MaterialResponse + */ + url: string; + /** + * Position of the Lesson entity + * @type {string} + * @memberof MaterialResponse + */ + client: string; + /** + * Description of the material license + * @type {Array} + * @memberof MaterialResponse + */ + license: Array; + /** + * For material from Merlin, the Merlin reference + * @type {string} + * @memberof MaterialResponse + */ + merlinReference: string; +} + + diff --git a/src/serverApi/v3/models/me-account-response.ts b/src/serverApi/v3/models/me-account-response.ts new file mode 100644 index 0000000..c2e9789 --- /dev/null +++ b/src/serverApi/v3/models/me-account-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MeAccountResponse + */ +export interface MeAccountResponse { + /** + * + * @type {string} + * @memberof MeAccountResponse + */ + id: string; +} + + diff --git a/src/serverApi/v3/models/me-response.ts b/src/serverApi/v3/models/me-response.ts new file mode 100644 index 0000000..de91a77 --- /dev/null +++ b/src/serverApi/v3/models/me-response.ts @@ -0,0 +1,66 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { LanguageType } from './language-type'; +import { MeAccountResponse } from './me-account-response'; +import { MeRoleResponse } from './me-role-response'; +import { MeSchoolResponse } from './me-school-response'; +import { MeUserResponse } from './me-user-response'; + +/** + * + * @export + * @interface MeResponse + */ +export interface MeResponse { + /** + * + * @type {MeSchoolResponse} + * @memberof MeResponse + */ + school: MeSchoolResponse; + /** + * + * @type {MeUserResponse} + * @memberof MeResponse + */ + user: MeUserResponse; + /** + * + * @type {Array} + * @memberof MeResponse + */ + roles: Array; + /** + * + * @type {Array} + * @memberof MeResponse + */ + permissions: Array; + /** + * + * @type {LanguageType} + * @memberof MeResponse + */ + language: LanguageType; + /** + * + * @type {MeAccountResponse} + * @memberof MeResponse + */ + account: MeAccountResponse; +} + + diff --git a/src/serverApi/v3/models/me-role-response.ts b/src/serverApi/v3/models/me-role-response.ts new file mode 100644 index 0000000..10cc574 --- /dev/null +++ b/src/serverApi/v3/models/me-role-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MeRoleResponse + */ +export interface MeRoleResponse { + /** + * + * @type {string} + * @memberof MeRoleResponse + */ + id: string; + /** + * + * @type {string} + * @memberof MeRoleResponse + */ + name: string; +} + + diff --git a/src/serverApi/v3/models/me-school-logo-response.ts b/src/serverApi/v3/models/me-school-logo-response.ts new file mode 100644 index 0000000..ba1bffe --- /dev/null +++ b/src/serverApi/v3/models/me-school-logo-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MeSchoolLogoResponse + */ +export interface MeSchoolLogoResponse { + /** + * + * @type {string} + * @memberof MeSchoolLogoResponse + */ + url?: string; + /** + * + * @type {string} + * @memberof MeSchoolLogoResponse + */ + name?: string; +} + + diff --git a/src/serverApi/v3/models/me-school-response.ts b/src/serverApi/v3/models/me-school-response.ts new file mode 100644 index 0000000..1a0a1de --- /dev/null +++ b/src/serverApi/v3/models/me-school-response.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MeSchoolLogoResponse } from './me-school-logo-response'; + +/** + * + * @export + * @interface MeSchoolResponse + */ +export interface MeSchoolResponse { + /** + * + * @type {string} + * @memberof MeSchoolResponse + */ + id: string; + /** + * + * @type {string} + * @memberof MeSchoolResponse + */ + name: string; + /** + * + * @type {MeSchoolLogoResponse} + * @memberof MeSchoolResponse + */ + logo: MeSchoolLogoResponse; +} + + diff --git a/src/serverApi/v3/models/me-user-response.ts b/src/serverApi/v3/models/me-user-response.ts new file mode 100644 index 0000000..ac35a38 --- /dev/null +++ b/src/serverApi/v3/models/me-user-response.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MeUserResponse + */ +export interface MeUserResponse { + /** + * + * @type {string} + * @memberof MeUserResponse + */ + id: string; + /** + * + * @type {string} + * @memberof MeUserResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof MeUserResponse + */ + lastName: string; + /** + * + * @type {string} + * @memberof MeUserResponse + */ + customAvatarBackgroundColor?: string; +} + + diff --git a/src/serverApi/v3/models/media-available-line-element-response.ts b/src/serverApi/v3/models/media-available-line-element-response.ts new file mode 100644 index 0000000..d644761 --- /dev/null +++ b/src/serverApi/v3/models/media-available-line-element-response.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MediaAvailableLineElementResponse + */ +export interface MediaAvailableLineElementResponse { + /** + * School External tool id of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + schoolExternalToolId: string; + /** + * Name of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + name: string; + /** + * Description of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + description?: string; + /** + * Logo url of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + logoUrl?: string; + /** + * Thumbnail url of the media available line element + * @type {string} + * @memberof MediaAvailableLineElementResponse + */ + thumbnailUrl?: string; +} + + diff --git a/src/serverApi/v3/models/media-available-line-response.ts b/src/serverApi/v3/models/media-available-line-response.ts new file mode 100644 index 0000000..95f7de6 --- /dev/null +++ b/src/serverApi/v3/models/media-available-line-response.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MediaAvailableLineElementResponse } from './media-available-line-element-response'; +import { MediaBoardColors } from './media-board-colors'; + +/** + * + * @export + * @interface MediaAvailableLineResponse + */ +export interface MediaAvailableLineResponse { + /** + * Available media elements in the line + * @type {Array} + * @memberof MediaAvailableLineResponse + */ + elements: Array; + /** + * + * @type {MediaBoardColors} + * @memberof MediaAvailableLineResponse + */ + backgroundColor: MediaBoardColors; + /** + * Collapse available media line + * @type {boolean} + * @memberof MediaAvailableLineResponse + */ + collapsed: boolean; +} + + diff --git a/src/serverApi/v3/models/media-board-colors.ts b/src/serverApi/v3/models/media-board-colors.ts new file mode 100644 index 0000000..ec79094 --- /dev/null +++ b/src/serverApi/v3/models/media-board-colors.ts @@ -0,0 +1,46 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum MediaBoardColors { + TRANSPARENT = 'transparent', + RED = 'red', + PINK = 'pink', + PURPLE = 'purple', + DEEP_PURPLE = 'deepPurple', + INDIGO = 'indigo', + BLUE = 'blue', + LIGHT_BLUE = 'lightBlue', + CYAN = 'cyan', + TEAL = 'teal', + GREEN = 'green', + LIGHT_GREEN = 'lightGreen', + LIME = 'lime', + YELLOW = 'yellow', + AMBER = 'amber', + ORANGE = 'orange', + DEEP_ORANGE = 'deepOrange', + BROWN = 'brown', + GREY = 'grey', + BLUE_GREY = 'blueGrey' +} + + + diff --git a/src/serverApi/v3/models/media-board-layout-type.ts b/src/serverApi/v3/models/media-board-layout-type.ts new file mode 100644 index 0000000..2bd537f --- /dev/null +++ b/src/serverApi/v3/models/media-board-layout-type.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum MediaBoardLayoutType { + COLUMNS = 'columns', + LIST = 'list', + GRID = 'grid' +} + + + diff --git a/src/serverApi/v3/models/media-board-response.ts b/src/serverApi/v3/models/media-board-response.ts new file mode 100644 index 0000000..31caab8 --- /dev/null +++ b/src/serverApi/v3/models/media-board-response.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MediaBoardLayoutType } from './media-board-layout-type'; +import { MediaLineResponse } from './media-line-response'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface MediaBoardResponse + */ +export interface MediaBoardResponse { + /** + * The id of the media board + * @type {string} + * @memberof MediaBoardResponse + */ + id: string; + /** + * The lines of the media board + * @type {Array} + * @memberof MediaBoardResponse + */ + lines: Array; + /** + * The timestamps of the media board + * @type {TimestampsResponse} + * @memberof MediaBoardResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {MediaBoardLayoutType} + * @memberof MediaBoardResponse + */ + layout: MediaBoardLayoutType; +} + + diff --git a/src/serverApi/v3/models/media-external-tool-element-content.ts b/src/serverApi/v3/models/media-external-tool-element-content.ts new file mode 100644 index 0000000..1db2f10 --- /dev/null +++ b/src/serverApi/v3/models/media-external-tool-element-content.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MediaExternalToolElementContent + */ +export interface MediaExternalToolElementContent { + /** + * The id of the context external tool + * @type {string} + * @memberof MediaExternalToolElementContent + */ + contextExternalToolId: string; +} + + diff --git a/src/serverApi/v3/models/media-external-tool-element-response.ts b/src/serverApi/v3/models/media-external-tool-element-response.ts new file mode 100644 index 0000000..63e95c4 --- /dev/null +++ b/src/serverApi/v3/models/media-external-tool-element-response.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MediaExternalToolElementContent } from './media-external-tool-element-content'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface MediaExternalToolElementResponse + */ +export interface MediaExternalToolElementResponse { + /** + * The id of the media external tool element + * @type {string} + * @memberof MediaExternalToolElementResponse + */ + id: string; + /** + * The content of the media external tool element + * @type {MediaExternalToolElementContent} + * @memberof MediaExternalToolElementResponse + */ + content: MediaExternalToolElementContent; + /** + * The timestamps of the media external tool element + * @type {TimestampsResponse} + * @memberof MediaExternalToolElementResponse + */ + timestamps: TimestampsResponse; +} + + diff --git a/src/serverApi/v3/models/media-line-response.ts b/src/serverApi/v3/models/media-line-response.ts new file mode 100644 index 0000000..b78be46 --- /dev/null +++ b/src/serverApi/v3/models/media-line-response.ts @@ -0,0 +1,64 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MediaBoardColors } from './media-board-colors'; +import { MediaExternalToolElementResponse } from './media-external-tool-element-response'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface MediaLineResponse + */ +export interface MediaLineResponse { + /** + * The id of the media line + * @type {string} + * @memberof MediaLineResponse + */ + id: string; + /** + * The title of the media line + * @type {string} + * @memberof MediaLineResponse + */ + title: string; + /** + * The elements of the media line + * @type {Array} + * @memberof MediaLineResponse + */ + elements: Array; + /** + * The timestamps of the media line + * @type {TimestampsResponse} + * @memberof MediaLineResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {MediaBoardColors} + * @memberof MediaLineResponse + */ + backgroundColor: MediaBoardColors; + /** + * Collapse the media line + * @type {boolean} + * @memberof MediaLineResponse + */ + collapsed: boolean; +} + + diff --git a/src/serverApi/v3/models/message-origin.ts b/src/serverApi/v3/models/message-origin.ts new file mode 100644 index 0000000..d40c815 --- /dev/null +++ b/src/serverApi/v3/models/message-origin.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MessageOrigin + */ +export interface MessageOrigin { + /** + * + * @type {number} + * @memberof MessageOrigin + */ + message_id: number; + /** + * + * @type {string} + * @memberof MessageOrigin + */ + page: string; +} + + diff --git a/src/serverApi/v3/models/message.ts b/src/serverApi/v3/models/message.ts new file mode 100644 index 0000000..15921bc --- /dev/null +++ b/src/serverApi/v3/models/message.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MessageOrigin } from './message-origin'; + +/** + * + * @export + * @interface Message + */ +export interface Message { + /** + * + * @type {string} + * @memberof Message + */ + title: string; + /** + * + * @type {string} + * @memberof Message + */ + text: string; + /** + * + * @type {string} + * @memberof Message + */ + timestamp: string; + /** + * + * @type {MessageOrigin} + * @memberof Message + */ + origin: MessageOrigin; + /** + * + * @type {string} + * @memberof Message + */ + url: string; + /** + * + * @type {string} + * @memberof Message + */ + status: string; + /** + * + * @type {string} + * @memberof Message + */ + createdAt: string; +} + + diff --git a/src/serverApi/v3/models/meta-tag-extractor-response.ts b/src/serverApi/v3/models/meta-tag-extractor-response.ts new file mode 100644 index 0000000..8d755f5 --- /dev/null +++ b/src/serverApi/v3/models/meta-tag-extractor-response.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MetaTagExtractorResponse + */ +export interface MetaTagExtractorResponse { + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + url: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + title: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + description: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + imageUrl: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + type: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + parentTitle: string; + /** + * + * @type {string} + * @memberof MetaTagExtractorResponse + */ + parentType: string; +} + + diff --git a/src/serverApi/v3/models/move-card-body-params.ts b/src/serverApi/v3/models/move-card-body-params.ts new file mode 100644 index 0000000..c6fcef2 --- /dev/null +++ b/src/serverApi/v3/models/move-card-body-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MoveCardBodyParams + */ +export interface MoveCardBodyParams { + /** + * + * @type {string} + * @memberof MoveCardBodyParams + */ + toColumnId: string; + /** + * + * @type {number} + * @memberof MoveCardBodyParams + */ + toPosition: number; +} + + diff --git a/src/serverApi/v3/models/move-column-body-params.ts b/src/serverApi/v3/models/move-column-body-params.ts new file mode 100644 index 0000000..fb8d54c --- /dev/null +++ b/src/serverApi/v3/models/move-column-body-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MoveColumnBodyParams + */ +export interface MoveColumnBodyParams { + /** + * The id of the target board + * @type {string} + * @memberof MoveColumnBodyParams + */ + toBoardId: string; + /** + * + * @type {number} + * @memberof MoveColumnBodyParams + */ + toPosition: number; +} + + diff --git a/src/serverApi/v3/models/move-content-element-body.ts b/src/serverApi/v3/models/move-content-element-body.ts new file mode 100644 index 0000000..33a65a8 --- /dev/null +++ b/src/serverApi/v3/models/move-content-element-body.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MoveContentElementBody + */ +export interface MoveContentElementBody { + /** + * + * @type {string} + * @memberof MoveContentElementBody + */ + toCardId: string; + /** + * + * @type {number} + * @memberof MoveContentElementBody + */ + toPosition: number; +} + + diff --git a/src/serverApi/v3/models/move-element-body-params.ts b/src/serverApi/v3/models/move-element-body-params.ts new file mode 100644 index 0000000..ea2a44a --- /dev/null +++ b/src/serverApi/v3/models/move-element-body-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MoveElementBodyParams + */ +export interface MoveElementBodyParams { + /** + * The id of the line where the element is moved to + * @type {string} + * @memberof MoveElementBodyParams + */ + toLineId: string; + /** + * The position where the element is moved to + * @type {number} + * @memberof MoveElementBodyParams + */ + toPosition: number; +} + + diff --git a/src/serverApi/v3/models/move-element-params.ts b/src/serverApi/v3/models/move-element-params.ts new file mode 100644 index 0000000..71e88f1 --- /dev/null +++ b/src/serverApi/v3/models/move-element-params.ts @@ -0,0 +1,38 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { MoveElementPositionParams } from './move-element-position-params'; + +/** + * + * @export + * @interface MoveElementParams + */ +export interface MoveElementParams { + /** + * + * @type {MoveElementPositionParams} + * @memberof MoveElementParams + */ + from: MoveElementPositionParams; + /** + * + * @type {MoveElementPositionParams} + * @memberof MoveElementParams + */ + to: MoveElementPositionParams; +} + + diff --git a/src/serverApi/v3/models/move-element-position-params.ts b/src/serverApi/v3/models/move-element-position-params.ts new file mode 100644 index 0000000..f728249 --- /dev/null +++ b/src/serverApi/v3/models/move-element-position-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface MoveElementPositionParams + */ +export interface MoveElementPositionParams { + /** + * + * @type {number} + * @memberof MoveElementPositionParams + */ + x: number; + /** + * + * @type {number} + * @memberof MoveElementPositionParams + */ + y: number; + /** + * used to identify a position within a group. + * @type {number} + * @memberof MoveElementPositionParams + */ + groupIndex?: number; +} + + diff --git a/src/serverApi/v3/models/news-list-response.ts b/src/serverApi/v3/models/news-list-response.ts new file mode 100644 index 0000000..a2e955c --- /dev/null +++ b/src/serverApi/v3/models/news-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { NewsResponse } from './news-response'; + +/** + * + * @export + * @interface NewsListResponse + */ +export interface NewsListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof NewsListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof NewsListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof NewsListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof NewsListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/news-response.ts b/src/serverApi/v3/models/news-response.ts new file mode 100644 index 0000000..af1c311 --- /dev/null +++ b/src/serverApi/v3/models/news-response.ts @@ -0,0 +1,129 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { NewsTargetModel } from './news-target-model'; +import { SchoolInfoResponse } from './school-info-response'; +import { TargetInfoResponse } from './target-info-response'; +import { UserInfoResponse } from './user-info-response'; + +/** + * + * @export + * @interface NewsResponse + */ +export interface NewsResponse { + /** + * The id of the News entity + * @type {string} + * @memberof NewsResponse + */ + id: string; + /** + * Title of the News entity + * @type {string} + * @memberof NewsResponse + */ + title: string; + /** + * Content of the News entity + * @type {string} + * @memberof NewsResponse + */ + content: string; + /** + * The point in time from when the News entity schould be displayed + * @type {string} + * @memberof NewsResponse + */ + displayAt: string; + /** + * The type of source of the News entity + * @type {string} + * @memberof NewsResponse + */ + source?: NewsResponseSource; + /** + * The source description of the News entity + * @type {string} + * @memberof NewsResponse + */ + sourceDescription?: string; + /** + * + * @type {NewsTargetModel} + * @memberof NewsResponse + */ + targetModel: NewsTargetModel; + /** + * Specific target id to which the News entity is related + * @type {string} + * @memberof NewsResponse + */ + targetId: string; + /** + * The target object with id and name, could be the school, team, or course name + * @type {TargetInfoResponse} + * @memberof NewsResponse + */ + target: TargetInfoResponse; + /** + * The School ownership + * @type {SchoolInfoResponse} + * @memberof NewsResponse + */ + school: SchoolInfoResponse; + /** + * Reference to the User that created the News entity + * @type {UserInfoResponse} + * @memberof NewsResponse + */ + creator: UserInfoResponse; + /** + * Reference to the User that updated the News entity + * @type {UserInfoResponse} + * @memberof NewsResponse + */ + updater?: UserInfoResponse; + /** + * The creation timestamp + * @type {string} + * @memberof NewsResponse + */ + createdAt: string; + /** + * The update timestamp + * @type {string} + * @memberof NewsResponse + */ + updatedAt: string; + /** + * List of permissions the current user has for the News entity + * @type {Array} + * @memberof NewsResponse + */ + permissions: Array; +} + +/** + * @export + * @enum {string} + */ +export enum NewsResponseSource { + INTERNAL = 'internal', + RSS = 'rss' +} + + + diff --git a/src/serverApi/v3/models/news-target-model.ts b/src/serverApi/v3/models/news-target-model.ts new file mode 100644 index 0000000..740df38 --- /dev/null +++ b/src/serverApi/v3/models/news-target-model.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum NewsTargetModel { + SCHOOLS = 'schools', + COURSES = 'courses', + TEAMS = 'teams' +} + + + diff --git a/src/serverApi/v3/models/oauth-client-create-body.ts b/src/serverApi/v3/models/oauth-client-create-body.ts new file mode 100644 index 0000000..eb743bb --- /dev/null +++ b/src/serverApi/v3/models/oauth-client-create-body.ts @@ -0,0 +1,85 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface OauthClientCreateBody + */ +export interface OauthClientCreateBody { + /** + * The Oauth2 client id. + * @type {string} + * @memberof OauthClientCreateBody + */ + client_id: string; + /** + * The Oauth2 client name. + * @type {string} + * @memberof OauthClientCreateBody + */ + client_name: string; + /** + * The Oauth2 client secret. + * @type {string} + * @memberof OauthClientCreateBody + */ + client_secret: string; + /** + * The allowed redirect urls of the Oauth2 client. + * @type {Array} + * @memberof OauthClientCreateBody + */ + redirect_uris?: Array; + /** + * Requested Client Authentication method for the Token Endpoint. The options are client_secret_post, client_secret_basic, private_key_jwt, and none. + * @type {string} + * @memberof OauthClientCreateBody + */ + token_endpoint_auth_method: string; + /** + * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. + * @type {string} + * @memberof OauthClientCreateBody + */ + subject_type: string; + /** + * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. + * @type {string} + * @memberof OauthClientCreateBody + */ + scope?: string; + /** + * Thr frontchannel logout uri. + * @type {string} + * @memberof OauthClientCreateBody + */ + frontchannel_logout_uri?: string; + /** + * The grant types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientCreateBody + */ + grant_types?: Array; + /** + * The response types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientCreateBody + */ + response_types?: Array; +} + + diff --git a/src/serverApi/v3/models/oauth-client-response.ts b/src/serverApi/v3/models/oauth-client-response.ts new file mode 100644 index 0000000..4891fa4 --- /dev/null +++ b/src/serverApi/v3/models/oauth-client-response.ts @@ -0,0 +1,301 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface OauthClientResponse + */ +export interface OauthClientResponse { + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + allowed_cors_origins?: Array; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + audience: Array; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + authorization_code_grant_access_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + authorization_code_grant_id_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + authorization_code_grant_refresh_token_lifespan: string; + /** + * Boolean value specifying whether the RP requires that a sid (session ID) Claim. + * @type {boolean} + * @memberof OauthClientResponse + */ + backchannel_logout_session_required: boolean; + /** + * RP URL that will cause the RP to log itself out when sent a Logout Token by the OP. + * @type {string} + * @memberof OauthClientResponse + */ + backchannel_logout_uri: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + client_credentials_grant_access_token_lifespan: string; + /** + * Id of the client. + * @type {string} + * @memberof OauthClientResponse + */ + client_id: string; + /** + * Human-readable string name of the client presented to the end-user. + * @type {string} + * @memberof OauthClientResponse + */ + client_name: string; + /** + * SecretExpiresAt is an integer holding the time at which the client secret will expire or 0 if it will not expire. + * @type {number} + * @memberof OauthClientResponse + */ + client_secret_expires_at: number; + /** + * ClientUri is an URL string of a web page providing information about the client. + * @type {string} + * @memberof OauthClientResponse + */ + client_uri: string; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + contacts?: Array; + /** + * CreatedAt returns the timestamp of the clients creation. + * @type {string} + * @memberof OauthClientResponse + */ + created_at: string; + /** + * Boolean value specifying whether the RP requires that iss (issuer) and sid (session ID) query parameters. + * @type {boolean} + * @memberof OauthClientResponse + */ + frontchannel_logout_session_required: boolean; + /** + * RP URL that will cause the RP to log itself out when rendered in an iframe by the OP. + * @type {string} + * @memberof OauthClientResponse + */ + frontchannel_logout_uri: string; + /** + * The grant types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientResponse + */ + grant_types?: Array; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + implicit_grant_access_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + implicit_grant_id_token_lifespan: string; + /** + * + * @type {object} + * @memberof OauthClientResponse + */ + jwks: object; + /** + * URL for the clients JSON Web Key Set [JWK] document + * @type {string} + * @memberof OauthClientResponse + */ + jwks_uri: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + jwt_bearer_grant_access_token_lifespan: string; + /** + * LogoUri is an URL string that references a logo for the client. + * @type {string} + * @memberof OauthClientResponse + */ + logo_uri: string; + /** + * + * @type {object} + * @memberof OauthClientResponse + */ + metadata: object; + /** + * Owner is a string identifying the owner of the OAuth 2.0 Client. + * @type {string} + * @memberof OauthClientResponse + */ + owner: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + password_grant_access_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + password_grant_refresh_token_lifespan: string; + /** + * PolicyUri is a URL string that points to a human-readable privacy policy document + * @type {string} + * @memberof OauthClientResponse + */ + policy_uri: string; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + post_logout_redirect_uris?: Array; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + redirect_uris?: Array; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + refresh_token_grant_access_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + refresh_token_grant_id_token_lifespan: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + refresh_token_grant_refresh_token_lifespan: string; + /** + * RegistrationAccessToken can be used to update, get, or delete the OAuth2 Client. + * @type {string} + * @memberof OauthClientResponse + */ + registration_access_token: string; + /** + * RegistrationClientURI is the URL used to update, get, or delete the OAuth2 Client. + * @type {string} + * @memberof OauthClientResponse + */ + registration_client_uri: string; + /** + * JWS [JWS] alg algorithm [JWA] that MUST be used for signing Request Objects sent to the OP. + * @type {string} + * @memberof OauthClientResponse + */ + request_object_signing_alg: string; + /** + * + * @type {Array} + * @memberof OauthClientResponse + */ + request_uris?: Array; + /** + * The response types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientResponse + */ + response_types?: Array; + /** + * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. + * @type {string} + * @memberof OauthClientResponse + */ + scope: string; + /** + * URL using the https scheme to be used in calculating Pseudonymous Identifiers by the OP. + * @type {string} + * @memberof OauthClientResponse + */ + sector_identifier_uri: string; + /** + * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. + * @type {string} + * @memberof OauthClientResponse + */ + subject_type: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + token_endpoint_auth_method: string; + /** + * + * @type {string} + * @memberof OauthClientResponse + */ + token_endpoint_auth_signing_alg: string; + /** + * TermsOfServiceUri is a URL string that points to a human-readable terms of service document for the client. + * @type {string} + * @memberof OauthClientResponse + */ + tos_uri: string; + /** + * UpdatedAt returns the timestamp of the last update. + * @type {string} + * @memberof OauthClientResponse + */ + updated_at: string; + /** + * JWS alg algorithm [JWA] REQUIRED for signing UserInfo Responses. + * @type {string} + * @memberof OauthClientResponse + */ + userinfo_signed_response_alg: string; +} + + diff --git a/src/serverApi/v3/models/oauth-client-update-body.ts b/src/serverApi/v3/models/oauth-client-update-body.ts new file mode 100644 index 0000000..2f9ca23 --- /dev/null +++ b/src/serverApi/v3/models/oauth-client-update-body.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface OauthClientUpdateBody + */ +export interface OauthClientUpdateBody { + /** + * The Oauth2 client name. + * @type {string} + * @memberof OauthClientUpdateBody + */ + client_name: string; + /** + * The Oauth2 client secret. + * @type {string} + * @memberof OauthClientUpdateBody + */ + client_secret?: string; + /** + * The allowed redirect urls of the Oauth2 client. + * @type {Array} + * @memberof OauthClientUpdateBody + */ + redirect_uris?: Array; + /** + * Requested Client Authentication method for the Token Endpoint. The options are client_secret_post, client_secret_basic, private_key_jwt, and none. + * @type {string} + * @memberof OauthClientUpdateBody + */ + token_endpoint_auth_method: string; + /** + * SubjectType requested for responses to this Client. The subject_types_supported Discovery parameter contains a list of the supported subject_type values for this server. Valid types include pairwise and public. + * @type {string} + * @memberof OauthClientUpdateBody + */ + subject_type: string; + /** + * Scope is a string containing a space-separated list of scope values (as described in Section 3.3 of OAuth 2.0 [RFC6749]) that the client can use when requesting access tokens. + * @type {string} + * @memberof OauthClientUpdateBody + */ + scope?: string; + /** + * Thr frontchannel logout uri. + * @type {string} + * @memberof OauthClientUpdateBody + */ + frontchannel_logout_uri?: string; + /** + * The grant types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientUpdateBody + */ + grant_types?: Array; + /** + * The response types of the Oauth2 client. + * @type {Array} + * @memberof OauthClientUpdateBody + */ + response_types?: Array; +} + + diff --git a/src/serverApi/v3/models/oauth-config-response.ts b/src/serverApi/v3/models/oauth-config-response.ts new file mode 100644 index 0000000..668c031 --- /dev/null +++ b/src/serverApi/v3/models/oauth-config-response.ts @@ -0,0 +1,97 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface OauthConfigResponse + */ +export interface OauthConfigResponse { + /** + * Client id + * @type {string} + * @memberof OauthConfigResponse + */ + clientId: string; + /** + * Hint for idp redirects (optional) + * @type {string} + * @memberof OauthConfigResponse + */ + idpHint?: string | null; + /** + * Redirect uri + * @type {string} + * @memberof OauthConfigResponse + */ + redirectUri: string; + /** + * Grant type + * @type {string} + * @memberof OauthConfigResponse + */ + grantType: string; + /** + * Token endpoint + * @type {string} + * @memberof OauthConfigResponse + */ + tokenEndpoint: string; + /** + * Auth endpoint + * @type {string} + * @memberof OauthConfigResponse + */ + authEndpoint: string; + /** + * Response type + * @type {string} + * @memberof OauthConfigResponse + */ + responseType: string; + /** + * Scope + * @type {string} + * @memberof OauthConfigResponse + */ + scope: string; + /** + * Provider + * @type {string} + * @memberof OauthConfigResponse + */ + provider: string; + /** + * Logout endpoint + * @type {string} + * @memberof OauthConfigResponse + */ + logoutEndpoint?: string; + /** + * Issuer + * @type {string} + * @memberof OauthConfigResponse + */ + issuer: string; + /** + * Jwks endpoint + * @type {string} + * @memberof OauthConfigResponse + */ + jwksEndpoint: string; +} + + diff --git a/src/serverApi/v3/models/oauth-token-dto.ts b/src/serverApi/v3/models/oauth-token-dto.ts new file mode 100644 index 0000000..d094b53 --- /dev/null +++ b/src/serverApi/v3/models/oauth-token-dto.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface OAuthTokenDto + */ +export interface OAuthTokenDto { + /** + * + * @type {string} + * @memberof OAuthTokenDto + */ + idToken: string; + /** + * + * @type {string} + * @memberof OAuthTokenDto + */ + refreshToken: string; + /** + * + * @type {string} + * @memberof OAuthTokenDto + */ + accessToken: string; +} + + diff --git a/src/serverApi/v3/models/oauth2-authorization-body-params.ts b/src/serverApi/v3/models/oauth2-authorization-body-params.ts new file mode 100644 index 0000000..1118d22 --- /dev/null +++ b/src/serverApi/v3/models/oauth2-authorization-body-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface Oauth2AuthorizationBodyParams + */ +export interface Oauth2AuthorizationBodyParams { + /** + * + * @type {string} + * @memberof Oauth2AuthorizationBodyParams + */ + redirectUri: string; + /** + * + * @type {string} + * @memberof Oauth2AuthorizationBodyParams + */ + code: string; + /** + * + * @type {string} + * @memberof Oauth2AuthorizationBodyParams + */ + systemId: string; +} + + diff --git a/src/serverApi/v3/models/oauth2-migration-params.ts b/src/serverApi/v3/models/oauth2-migration-params.ts new file mode 100644 index 0000000..9d0468c --- /dev/null +++ b/src/serverApi/v3/models/oauth2-migration-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface Oauth2MigrationParams + */ +export interface Oauth2MigrationParams { + /** + * + * @type {string} + * @memberof Oauth2MigrationParams + */ + redirectUri: string; + /** + * + * @type {string} + * @memberof Oauth2MigrationParams + */ + code: string; + /** + * + * @type {string} + * @memberof Oauth2MigrationParams + */ + systemId: string; +} + + diff --git a/src/serverApi/v3/models/oauth2-tool-config-create-params.ts b/src/serverApi/v3/models/oauth2-tool-config-create-params.ts new file mode 100644 index 0000000..51d21e0 --- /dev/null +++ b/src/serverApi/v3/models/oauth2-tool-config-create-params.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface Oauth2ToolConfigCreateParams + */ +export interface Oauth2ToolConfigCreateParams { + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + type: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + clientId: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + clientSecret: string; + /** + * + * @type {boolean} + * @memberof Oauth2ToolConfigCreateParams + */ + skipConsent: boolean; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + frontchannelLogoutUri?: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + scope?: string; + /** + * + * @type {Array} + * @memberof Oauth2ToolConfigCreateParams + */ + redirectUris: Array; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigCreateParams + */ + tokenEndpointAuthMethod: string; +} + + diff --git a/src/serverApi/v3/models/oauth2-tool-config-update-params.ts b/src/serverApi/v3/models/oauth2-tool-config-update-params.ts new file mode 100644 index 0000000..04e451d --- /dev/null +++ b/src/serverApi/v3/models/oauth2-tool-config-update-params.ts @@ -0,0 +1,79 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface Oauth2ToolConfigUpdateParams + */ +export interface Oauth2ToolConfigUpdateParams { + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + type: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + clientId: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + clientSecret?: string; + /** + * + * @type {boolean} + * @memberof Oauth2ToolConfigUpdateParams + */ + skipConsent: boolean; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + frontchannelLogoutUri?: string; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + scope?: string; + /** + * + * @type {Array} + * @memberof Oauth2ToolConfigUpdateParams + */ + redirectUris: Array; + /** + * + * @type {string} + * @memberof Oauth2ToolConfigUpdateParams + */ + tokenEndpointAuthMethod: string; +} + + diff --git a/src/serverApi/v3/models/oidc-context-response.ts b/src/serverApi/v3/models/oidc-context-response.ts new file mode 100644 index 0000000..f69ee4f --- /dev/null +++ b/src/serverApi/v3/models/oidc-context-response.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface OidcContextResponse + */ +export interface OidcContextResponse { + /** + * + * @type {Array} + * @memberof OidcContextResponse + */ + acr_values: Array; + /** + * + * @type {string} + * @memberof OidcContextResponse + */ + display: string; + /** + * + * @type {object} + * @memberof OidcContextResponse + */ + id_token_hint_claims: object; + /** + * + * @type {string} + * @memberof OidcContextResponse + */ + login_hint: string; + /** + * + * @type {Array} + * @memberof OidcContextResponse + */ + ui_locales: Array; +} + + diff --git a/src/serverApi/v3/models/parent-consent-response.ts b/src/serverApi/v3/models/parent-consent-response.ts new file mode 100644 index 0000000..5e74f58 --- /dev/null +++ b/src/serverApi/v3/models/parent-consent-response.ts @@ -0,0 +1,61 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ParentConsentResponse + */ +export interface ParentConsentResponse { + /** + * + * @type {string} + * @memberof ParentConsentResponse + */ + form: string; + /** + * + * @type {boolean} + * @memberof ParentConsentResponse + */ + privacyConsent: boolean; + /** + * + * @type {boolean} + * @memberof ParentConsentResponse + */ + termsOfUseConsent: boolean; + /** + * + * @type {string} + * @memberof ParentConsentResponse + */ + dateOfPrivacyConsent: string; + /** + * + * @type {string} + * @memberof ParentConsentResponse + */ + dateOfTermsOfUseConsent: string; + /** + * + * @type {string} + * @memberof ParentConsentResponse + */ + _id: string; +} + + diff --git a/src/serverApi/v3/models/patch-group-params.ts b/src/serverApi/v3/models/patch-group-params.ts new file mode 100644 index 0000000..e31c6a8 --- /dev/null +++ b/src/serverApi/v3/models/patch-group-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface PatchGroupParams + */ +export interface PatchGroupParams { + /** + * Title of the Group grid element + * @type {string} + * @memberof PatchGroupParams + */ + title: string; +} + + diff --git a/src/serverApi/v3/models/patch-my-account-params.ts b/src/serverApi/v3/models/patch-my-account-params.ts new file mode 100644 index 0000000..93849c7 --- /dev/null +++ b/src/serverApi/v3/models/patch-my-account-params.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface PatchMyAccountParams + */ +export interface PatchMyAccountParams { + /** + * The current user password to authorize the update action. + * @type {string} + * @memberof PatchMyAccountParams + */ + passwordOld: string; + /** + * The new password for the current user. + * @type {string} + * @memberof PatchMyAccountParams + */ + passwordNew?: string | null; + /** + * The new email address for the current user. + * @type {string} + * @memberof PatchMyAccountParams + */ + email?: string | null; + /** + * The new first name for the current user. + * @type {string} + * @memberof PatchMyAccountParams + */ + firstName?: string | null; + /** + * The new last name for the current user. + * @type {string} + * @memberof PatchMyAccountParams + */ + lastName?: string | null; +} + + diff --git a/src/serverApi/v3/models/patch-my-password-params.ts b/src/serverApi/v3/models/patch-my-password-params.ts new file mode 100644 index 0000000..d221393 --- /dev/null +++ b/src/serverApi/v3/models/patch-my-password-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface PatchMyPasswordParams + */ +export interface PatchMyPasswordParams { + /** + * The new user password. + * @type {string} + * @memberof PatchMyPasswordParams + */ + password: string; + /** + * The confirmed new user password. Must match the password field. + * @type {string} + * @memberof PatchMyPasswordParams + */ + confirmPassword: string; +} + + diff --git a/src/serverApi/v3/models/patch-order-params.ts b/src/serverApi/v3/models/patch-order-params.ts new file mode 100644 index 0000000..c48c90c --- /dev/null +++ b/src/serverApi/v3/models/patch-order-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface PatchOrderParams + */ +export interface PatchOrderParams { + /** + * Array ids determining the new order + * @type {Array} + * @memberof PatchOrderParams + */ + elements: Array; +} + + diff --git a/src/serverApi/v3/models/patch-visibility-params.ts b/src/serverApi/v3/models/patch-visibility-params.ts new file mode 100644 index 0000000..9bfa309 --- /dev/null +++ b/src/serverApi/v3/models/patch-visibility-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface PatchVisibilityParams + */ +export interface PatchVisibilityParams { + /** + * true to publish the element, false to unpublish + * @type {boolean} + * @memberof PatchVisibilityParams + */ + visibility: boolean; +} + + diff --git a/src/serverApi/v3/models/permission.ts b/src/serverApi/v3/models/permission.ts new file mode 100644 index 0000000..cb9a6b6 --- /dev/null +++ b/src/serverApi/v3/models/permission.ts @@ -0,0 +1,186 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum Permission { + ACCOUNT_CREATE = 'ACCOUNT_CREATE', + ACCOUNT_DELETE = 'ACCOUNT_DELETE', + ACCOUNT_EDIT = 'ACCOUNT_EDIT', + ACCOUNT_VIEW = 'ACCOUNT_VIEW', + ADD_SCHOOL_MEMBERS = 'ADD_SCHOOL_MEMBERS', + ADMIN_EDIT = 'ADMIN_EDIT', + ADMIN_VIEW = 'ADMIN_VIEW', + BASE_VIEW = 'BASE_VIEW', + CALENDAR_CREATE = 'CALENDAR_CREATE', + CALENDAR_EDIT = 'CALENDAR_EDIT', + CALENDAR_VIEW = 'CALENDAR_VIEW', + CHANGE_TEAM_ROLES = 'CHANGE_TEAM_ROLES', + CLASS_CREATE = 'CLASS_CREATE', + CLASS_EDIT = 'CLASS_EDIT', + CLASS_FULL_ADMIN = 'CLASS_FULL_ADMIN', + CLASS_LIST = 'CLASS_LIST', + CLASS_REMOVE = 'CLASS_REMOVE', + CLASS_VIEW = 'CLASS_VIEW', + COMMENTS_CREATE = 'COMMENTS_CREATE', + COMMENTS_EDIT = 'COMMENTS_EDIT', + COMMENTS_VIEW = 'COMMENTS_VIEW', + CONTENT_NON_OER_VIEW = 'CONTENT_NON_OER_VIEW', + CONTENT_VIEW = 'CONTENT_VIEW', + CONTEXT_TOOL_ADMIN = 'CONTEXT_TOOL_ADMIN', + CONTEXT_TOOL_USER = 'CONTEXT_TOOL_USER', + COURSEGROUP_CREATE = 'COURSEGROUP_CREATE', + COURSEGROUP_EDIT = 'COURSEGROUP_EDIT', + COURSE_CREATE = 'COURSE_CREATE', + COURSE_DELETE = 'COURSE_DELETE', + COURSE_EDIT = 'COURSE_EDIT', + COURSE_REMOVE = 'COURSE_REMOVE', + COURSE_VIEW = 'COURSE_VIEW', + CREATE_SUPPORT_JWT = 'CREATE_SUPPORT_JWT', + CREATE_TOPICS_AND_TASKS = 'CREATE_TOPICS_AND_TASKS', + DASHBOARD_VIEW = 'DASHBOARD_VIEW', + DATASOURCES_CREATE = 'DATASOURCES_CREATE', + DATASOURCES_DELETE = 'DATASOURCES_DELETE', + DATASOURCES_EDIT = 'DATASOURCES_EDIT', + DATASOURCES_RUN = 'DATASOURCES_RUN', + DATASOURCES_RUN_VIEW = 'DATASOURCES_RUN_VIEW', + DATASOURCES_VIEW = 'DATASOURCES_VIEW', + DEFAULT_FILE_PERMISSIONS = 'DEFAULT_FILE_PERMISSIONS', + DELETE_TEAM = 'DELETE_TEAM', + EDIT_ALL_FILES = 'EDIT_ALL_FILES', + ENTERTHECLOUD_START = 'ENTERTHECLOUD_START', + FEDERALSTATE_CREATE = 'FEDERALSTATE_CREATE', + FEDERALSTATE_EDIT = 'FEDERALSTATE_EDIT', + FEDERALSTATE_VIEW = 'FEDERALSTATE_VIEW', + FILESTORAGE_CREATE = 'FILESTORAGE_CREATE', + FILESTORAGE_EDIT = 'FILESTORAGE_EDIT', + FILESTORAGE_REMOVE = 'FILESTORAGE_REMOVE', + FILESTORAGE_VIEW = 'FILESTORAGE_VIEW', + FILE_CREATE = 'FILE_CREATE', + FILE_DELETE = 'FILE_DELETE', + FILE_MOVE = 'FILE_MOVE', + FOLDER_CREATE = 'FOLDER_CREATE', + FOLDER_DELETE = 'FOLDER_DELETE', + GROUP_LIST = 'GROUP_LIST', + GROUP_FULL_ADMIN = 'GROUP_FULL_ADMIN', + GROUP_VIEW = 'GROUP_VIEW', + HELPDESK_CREATE = 'HELPDESK_CREATE', + HELPDESK_EDIT = 'HELPDESK_EDIT', + HELPDESK_VIEW = 'HELPDESK_VIEW', + HOMEWORK_CREATE = 'HOMEWORK_CREATE', + HOMEWORK_EDIT = 'HOMEWORK_EDIT', + HOMEWORK_VIEW = 'HOMEWORK_VIEW', + IMPORT_USER_MIGRATE = 'IMPORT_USER_MIGRATE', + IMPORT_USER_UPDATE = 'IMPORT_USER_UPDATE', + IMPORT_USER_VIEW = 'IMPORT_USER_VIEW', + INSTANCE_VIEW = 'INSTANCE_VIEW', + INVITE_ADMINISTRATORS = 'INVITE_ADMINISTRATORS', + INVITE_EXPERTS = 'INVITE_EXPERTS', + JOIN_MEETING = 'JOIN_MEETING', + LEAVE_TEAM = 'LEAVE_TEAM', + LERNSTORE_VIEW = 'LERNSTORE_VIEW', + LESSONS_CREATE = 'LESSONS_CREATE', + LESSONS_VIEW = 'LESSONS_VIEW', + LINK_CREATE = 'LINK_CREATE', + NEWS_CREATE = 'NEWS_CREATE', + NEWS_EDIT = 'NEWS_EDIT', + NEWS_VIEW = 'NEWS_VIEW', + NEXTCLOUD_USER = 'NEXTCLOUD_USER', + NOTIFICATION_CREATE = 'NOTIFICATION_CREATE', + NOTIFICATION_EDIT = 'NOTIFICATION_EDIT', + NOTIFICATION_VIEW = 'NOTIFICATION_VIEW', + OAUTH_CLIENT_EDIT = 'OAUTH_CLIENT_EDIT', + OAUTH_CLIENT_VIEW = 'OAUTH_CLIENT_VIEW', + PASSWORD_EDIT = 'PASSWORD_EDIT', + PWRECOVERY_CREATE = 'PWRECOVERY_CREATE', + PWRECOVERY_EDIT = 'PWRECOVERY_EDIT', + PWRECOVERY_VIEW = 'PWRECOVERY_VIEW', + RELEASES_CREATE = 'RELEASES_CREATE', + RELEASES_EDIT = 'RELEASES_EDIT', + RELEASES_VIEW = 'RELEASES_VIEW', + REMOVE_MEMBERS = 'REMOVE_MEMBERS', + RENAME_TEAM = 'RENAME_TEAM', + REQUEST_CONSENTS = 'REQUEST_CONSENTS', + ROLE_CREATE = 'ROLE_CREATE', + ROLE_EDIT = 'ROLE_EDIT', + ROLE_VIEW = 'ROLE_VIEW', + SCHOOL_CHAT_MANAGE = 'SCHOOL_CHAT_MANAGE', + SCHOOL_CREATE = 'SCHOOL_CREATE', + SCHOOL_EDIT = 'SCHOOL_EDIT', + SCHOOL_LOGO_MANAGE = 'SCHOOL_LOGO_MANAGE', + SCHOOL_NEWS_EDIT = 'SCHOOL_NEWS_EDIT', + SCHOOL_PERMISSION_CHANGE = 'SCHOOL_PERMISSION_CHANGE', + SCHOOL_PERMISSION_VIEW = 'SCHOOL_PERMISSION_VIEW', + SCHOOL_STUDENT_TEAM_MANAGE = 'SCHOOL_STUDENT_TEAM_MANAGE', + SCHOOL_SYSTEM_EDIT = 'SCHOOL_SYSTEM_EDIT', + SCHOOL_SYSTEM_VIEW = 'SCHOOL_SYSTEM_VIEW', + SCHOOL_TOOL_ADMIN = 'SCHOOL_TOOL_ADMIN', + SCOPE_PERMISSIONS_VIEW = 'SCOPE_PERMISSIONS_VIEW', + START_MEETING = 'START_MEETING', + STUDENT_CREATE = 'STUDENT_CREATE', + STUDENT_DELETE = 'STUDENT_DELETE', + STUDENT_EDIT = 'STUDENT_EDIT', + STUDENT_LIST = 'STUDENT_LIST', + STUDENT_SKIP_REGISTRATION = 'STUDENT_SKIP_REGISTRATION', + SUBMISSIONS_CREATE = 'SUBMISSIONS_CREATE', + SUBMISSIONS_EDIT = 'SUBMISSIONS_EDIT', + SUBMISSIONS_SCHOOL_VIEW = 'SUBMISSIONS_SCHOOL_VIEW', + SUBMISSIONS_VIEW = 'SUBMISSIONS_VIEW', + SYNC_START = 'SYNC_START', + SYSTEM_CREATE = 'SYSTEM_CREATE', + SYSTEM_EDIT = 'SYSTEM_EDIT', + SYSTEM_VIEW = 'SYSTEM_VIEW', + TASK_DASHBOARD_TEACHER_VIEW_V3 = 'TASK_DASHBOARD_TEACHER_VIEW_V3', + TASK_DASHBOARD_VIEW_V3 = 'TASK_DASHBOARD_VIEW_V3', + TEACHER_CREATE = 'TEACHER_CREATE', + TEACHER_DELETE = 'TEACHER_DELETE', + TEACHER_EDIT = 'TEACHER_EDIT', + TEACHER_LIST = 'TEACHER_LIST', + TEACHER_SKIP_REGISTRATION = 'TEACHER_SKIP_REGISTRATION', + TEAM_CREATE = 'TEAM_CREATE', + TOOL_CREATE_ETHERPAD = 'TOOL_CREATE_ETHERPAD', + TEAM_EDIT = 'TEAM_EDIT', + TEAM_INVITE_EXTERNAL = 'TEAM_INVITE_EXTERNAL', + TEAM_VIEW = 'TEAM_VIEW', + TOOL_ADMIN = 'TOOL_ADMIN', + TOOL_CREATE = 'TOOL_CREATE', + TOOL_EDIT = 'TOOL_EDIT', + TOOL_NEW_VIEW = 'TOOL_NEW_VIEW', + TOOL_VIEW = 'TOOL_VIEW', + TOPIC_CREATE = 'TOPIC_CREATE', + TOPIC_EDIT = 'TOPIC_EDIT', + TOPIC_VIEW = 'TOPIC_VIEW', + UPLOAD_FILES = 'UPLOAD_FILES', + USE_LIBREOFFICE = 'USE_LIBREOFFICE', + USE_ROCKETCHAT = 'USE_ROCKETCHAT', + USERGROUP_CREATE = 'USERGROUP_CREATE', + USERGROUP_EDIT = 'USERGROUP_EDIT', + USERGROUP_VIEW = 'USERGROUP_VIEW', + USER_CHANGE_OWN_NAME = 'USER_CHANGE_OWN_NAME', + USER_CREATE = 'USER_CREATE', + USER_LOGIN_MIGRATION_ADMIN = 'USER_LOGIN_MIGRATION_ADMIN', + USER_LOGIN_MIGRATION_ROLLBACK = 'USER_LOGIN_MIGRATION_ROLLBACK', + USER_LOGIN_MIGRATION_FORCE = 'USER_LOGIN_MIGRATION_FORCE', + USER_MIGRATE = 'USER_MIGRATE', + USER_UPDATE = 'USER_UPDATE', + YEARS_EDIT = 'YEARS_EDIT' +} + + + diff --git a/src/serverApi/v3/models/provider-config-response.ts b/src/serverApi/v3/models/provider-config-response.ts new file mode 100644 index 0000000..1e3b7df --- /dev/null +++ b/src/serverApi/v3/models/provider-config-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ProviderConfigResponse + */ +export interface ProviderConfigResponse { + /** + * + * @type {string} + * @memberof ProviderConfigResponse + */ + provider: string; +} + + diff --git a/src/serverApi/v3/models/pseudonym-response.ts b/src/serverApi/v3/models/pseudonym-response.ts new file mode 100644 index 0000000..c967008 --- /dev/null +++ b/src/serverApi/v3/models/pseudonym-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface PseudonymResponse + */ +export interface PseudonymResponse { + /** + * + * @type {string} + * @memberof PseudonymResponse + */ + id: string; + /** + * + * @type {string} + * @memberof PseudonymResponse + */ + toolId: string; + /** + * + * @type {string} + * @memberof PseudonymResponse + */ + userId: string; +} + + diff --git a/src/serverApi/v3/models/public-system-list-response.ts b/src/serverApi/v3/models/public-system-list-response.ts new file mode 100644 index 0000000..424136a --- /dev/null +++ b/src/serverApi/v3/models/public-system-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { PublicSystemResponse } from './public-system-response'; + +/** + * + * @export + * @interface PublicSystemListResponse + */ +export interface PublicSystemListResponse { + /** + * + * @type {Array} + * @memberof PublicSystemListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/public-system-response.ts b/src/serverApi/v3/models/public-system-response.ts new file mode 100644 index 0000000..6b2b246 --- /dev/null +++ b/src/serverApi/v3/models/public-system-response.ts @@ -0,0 +1,56 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { OauthConfigResponse } from './oauth-config-response'; + +/** + * + * @export + * @interface PublicSystemResponse + */ +export interface PublicSystemResponse { + /** + * Id of the system. + * @type {string} + * @memberof PublicSystemResponse + */ + id: string; + /** + * Flag to request only systems with oauth-config. + * @type {string} + * @memberof PublicSystemResponse + */ + type?: string | null; + /** + * Alias of the system. + * @type {string} + * @memberof PublicSystemResponse + */ + alias?: string | null; + /** + * Display name of the system. + * @type {string} + * @memberof PublicSystemResponse + */ + displayName?: string | null; + /** + * Oauth config of the system. + * @type {OauthConfigResponse} + * @memberof PublicSystemResponse + */ + oauthConfig?: OauthConfigResponse | null; +} + + diff --git a/src/serverApi/v3/models/redirect-response.ts b/src/serverApi/v3/models/redirect-response.ts new file mode 100644 index 0000000..ade4f4d --- /dev/null +++ b/src/serverApi/v3/models/redirect-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface RedirectResponse + */ +export interface RedirectResponse { + /** + * RedirectURL is the URL which you should redirect the user to once the authentication process is completed. + * @type {string} + * @memberof RedirectResponse + */ + redirect_to: string; +} + + diff --git a/src/serverApi/v3/models/rename-body-params.ts b/src/serverApi/v3/models/rename-body-params.ts new file mode 100644 index 0000000..e1a7c81 --- /dev/null +++ b/src/serverApi/v3/models/rename-body-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface RenameBodyParams + */ +export interface RenameBodyParams { + /** + * + * @type {string} + * @memberof RenameBodyParams + */ + title: string; +} + + diff --git a/src/serverApi/v3/models/resolved-user-response.ts b/src/serverApi/v3/models/resolved-user-response.ts new file mode 100644 index 0000000..182d657 --- /dev/null +++ b/src/serverApi/v3/models/resolved-user-response.ts @@ -0,0 +1,73 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ResolvedUserResponse + */ +export interface ResolvedUserResponse { + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + lastName: string; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + id: string; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + updatedAt: string; + /** + * + * @type {Array} + * @memberof ResolvedUserResponse + */ + roles: Array; + /** + * + * @type {Array} + * @memberof ResolvedUserResponse + */ + permissions: Array; + /** + * + * @type {string} + * @memberof ResolvedUserResponse + */ + schoolId: string; +} + + diff --git a/src/serverApi/v3/models/rich-text-content-body.ts b/src/serverApi/v3/models/rich-text-content-body.ts new file mode 100644 index 0000000..bf4f5c9 --- /dev/null +++ b/src/serverApi/v3/models/rich-text-content-body.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface RichTextContentBody + */ +export interface RichTextContentBody { + /** + * + * @type {string} + * @memberof RichTextContentBody + */ + text: string; + /** + * + * @type {string} + * @memberof RichTextContentBody + */ + inputFormat: string; +} + + diff --git a/src/serverApi/v3/models/rich-text-element-content-body.ts b/src/serverApi/v3/models/rich-text-element-content-body.ts new file mode 100644 index 0000000..5d1cc2d --- /dev/null +++ b/src/serverApi/v3/models/rich-text-element-content-body.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { RichTextContentBody } from './rich-text-content-body'; + +/** + * + * @export + * @interface RichTextElementContentBody + */ +export interface RichTextElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof RichTextElementContentBody + */ + type: ContentElementType; + /** + * + * @type {RichTextContentBody} + * @memberof RichTextElementContentBody + */ + content: RichTextContentBody; +} + + diff --git a/src/serverApi/v3/models/rich-text-element-content.ts b/src/serverApi/v3/models/rich-text-element-content.ts new file mode 100644 index 0000000..70f3617 --- /dev/null +++ b/src/serverApi/v3/models/rich-text-element-content.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface RichTextElementContent + */ +export interface RichTextElementContent { + /** + * + * @type {string} + * @memberof RichTextElementContent + */ + text: string; + /** + * + * @type {string} + * @memberof RichTextElementContent + */ + inputFormat: string; +} + + diff --git a/src/serverApi/v3/models/rich-text-element-response.ts b/src/serverApi/v3/models/rich-text-element-response.ts new file mode 100644 index 0000000..439a368 --- /dev/null +++ b/src/serverApi/v3/models/rich-text-element-response.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { RichTextElementContent } from './rich-text-element-content'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface RichTextElementResponse + */ +export interface RichTextElementResponse { + /** + * + * @type {string} + * @memberof RichTextElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof RichTextElementResponse + */ + type: ContentElementType; + /** + * + * @type {RichTextElementContent} + * @memberof RichTextElementResponse + */ + content: RichTextElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof RichTextElementResponse + */ + timestamps: TimestampsResponse; +} + + diff --git a/src/serverApi/v3/models/rich-text.ts b/src/serverApi/v3/models/rich-text.ts new file mode 100644 index 0000000..dde790e --- /dev/null +++ b/src/serverApi/v3/models/rich-text.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface RichText + */ +export interface RichText { + /** + * Content of the rich text element + * @type {string} + * @memberof RichText + */ + content: string; + /** + * Input format of the rich text element + * @type {string} + * @memberof RichText + */ + type: RichTextType; +} + +/** + * @export + * @enum {string} + */ +export enum RichTextType { + PLAIN_TEXT = 'plainText', + RICH_TEXT_CK5_SIMPLE = 'richTextCk5Simple', + RICH_TEXT_CK4 = 'richTextCk4', + RICH_TEXT_CK5 = 'richTextCk5' +} + + + diff --git a/src/serverApi/v3/models/role-name.ts b/src/serverApi/v3/models/role-name.ts new file mode 100644 index 0000000..c6c0030 --- /dev/null +++ b/src/serverApi/v3/models/role-name.ts @@ -0,0 +1,45 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum RoleName { + ADMINISTRATOR = 'administrator', + COURSE_ADMINISTRATOR = 'courseAdministrator', + COURSE_STUDENT = 'courseStudent', + COURSE_SUBSTITUTION_TEACHER = 'courseSubstitutionTeacher', + COURSE_TEACHER = 'courseTeacher', + DEMO = 'demo', + DEMO_STUDENT = 'demoStudent', + DEMO_TEACHER = 'demoTeacher', + EXPERT = 'expert', + HELPDESK = 'helpdesk', + STUDENT = 'student', + SUPERHERO = 'superhero', + TEACHER = 'teacher', + TEAMADMINISTRATOR = 'teamadministrator', + TEAMEXPERT = 'teamexpert', + TEAMLEADER = 'teamleader', + TEAMMEMBER = 'teammember', + TEAMOWNER = 'teamowner', + USER = 'user' +} + + + diff --git a/src/serverApi/v3/models/school-exists-response.ts b/src/serverApi/v3/models/school-exists-response.ts new file mode 100644 index 0000000..82bc0e9 --- /dev/null +++ b/src/serverApi/v3/models/school-exists-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SchoolExistsResponse + */ +export interface SchoolExistsResponse { + /** + * + * @type {boolean} + * @memberof SchoolExistsResponse + */ + exists: boolean; +} + + diff --git a/src/serverApi/v3/models/school-external-tool-configuration-status-response.ts b/src/serverApi/v3/models/school-external-tool-configuration-status-response.ts new file mode 100644 index 0000000..62c0b90 --- /dev/null +++ b/src/serverApi/v3/models/school-external-tool-configuration-status-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SchoolExternalToolConfigurationStatusResponse + */ +export interface SchoolExternalToolConfigurationStatusResponse { + /** + * Is the tool outdated on school scope, because of non matching versions or required parameter changes on ExternalTool? + * @type {boolean} + * @memberof SchoolExternalToolConfigurationStatusResponse + */ + isOutdatedOnScopeSchool: boolean; + /** + * Is the tool deactivated, because of instance administrator? + * @type {boolean} + * @memberof SchoolExternalToolConfigurationStatusResponse + */ + isGloballyDeactivated: boolean; +} + + diff --git a/src/serverApi/v3/models/school-external-tool-configuration-template-list-response.ts b/src/serverApi/v3/models/school-external-tool-configuration-template-list-response.ts new file mode 100644 index 0000000..511cbf3 --- /dev/null +++ b/src/serverApi/v3/models/school-external-tool-configuration-template-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { SchoolExternalToolConfigurationTemplateResponse } from './school-external-tool-configuration-template-response'; + +/** + * + * @export + * @interface SchoolExternalToolConfigurationTemplateListResponse + */ +export interface SchoolExternalToolConfigurationTemplateListResponse { + /** + * + * @type {Array} + * @memberof SchoolExternalToolConfigurationTemplateListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/school-external-tool-configuration-template-response.ts b/src/serverApi/v3/models/school-external-tool-configuration-template-response.ts new file mode 100644 index 0000000..fb52087 --- /dev/null +++ b/src/serverApi/v3/models/school-external-tool-configuration-template-response.ts @@ -0,0 +1,56 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CustomParameterResponse } from './custom-parameter-response'; + +/** + * + * @export + * @interface SchoolExternalToolConfigurationTemplateResponse + */ +export interface SchoolExternalToolConfigurationTemplateResponse { + /** + * + * @type {string} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + externalToolId: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + name: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + baseUrl: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + logoUrl?: string; + /** + * + * @type {Array} + * @memberof SchoolExternalToolConfigurationTemplateResponse + */ + parameters: Array; +} + + diff --git a/src/serverApi/v3/models/school-external-tool-metadata-response.ts b/src/serverApi/v3/models/school-external-tool-metadata-response.ts new file mode 100644 index 0000000..2a370bd --- /dev/null +++ b/src/serverApi/v3/models/school-external-tool-metadata-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContextExternalToolCountPerContextResponse } from './context-external-tool-count-per-context-response'; + +/** + * + * @export + * @interface SchoolExternalToolMetadataResponse + */ +export interface SchoolExternalToolMetadataResponse { + /** + * + * @type {ContextExternalToolCountPerContextResponse} + * @memberof SchoolExternalToolMetadataResponse + */ + contextExternalToolCountPerContext: ContextExternalToolCountPerContextResponse; +} + + diff --git a/src/serverApi/v3/models/school-external-tool-post-params.ts b/src/serverApi/v3/models/school-external-tool-post-params.ts new file mode 100644 index 0000000..d16021c --- /dev/null +++ b/src/serverApi/v3/models/school-external-tool-post-params.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CustomParameterEntryParam } from './custom-parameter-entry-param'; + +/** + * + * @export + * @interface SchoolExternalToolPostParams + */ +export interface SchoolExternalToolPostParams { + /** + * + * @type {string} + * @memberof SchoolExternalToolPostParams + */ + toolId: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolPostParams + */ + schoolId: string; + /** + * + * @type {Array} + * @memberof SchoolExternalToolPostParams + */ + parameters?: Array; + /** + * Tool can be deactivated, related tools can not be added to e.g. course or board anymore + * @type {boolean} + * @memberof SchoolExternalToolPostParams + */ + isDeactivated: boolean; +} + + diff --git a/src/serverApi/v3/models/school-external-tool-response.ts b/src/serverApi/v3/models/school-external-tool-response.ts new file mode 100644 index 0000000..b22fd2e --- /dev/null +++ b/src/serverApi/v3/models/school-external-tool-response.ts @@ -0,0 +1,69 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CustomParameterEntryResponse } from './custom-parameter-entry-response'; +import { SchoolExternalToolConfigurationStatusResponse } from './school-external-tool-configuration-status-response'; + +/** + * + * @export + * @interface SchoolExternalToolResponse + */ +export interface SchoolExternalToolResponse { + /** + * + * @type {string} + * @memberof SchoolExternalToolResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolResponse + */ + name: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolResponse + */ + toolId: string; + /** + * + * @type {string} + * @memberof SchoolExternalToolResponse + */ + schoolId: string; + /** + * + * @type {boolean} + * @memberof SchoolExternalToolResponse + */ + isDeactivated: boolean; + /** + * + * @type {Array} + * @memberof SchoolExternalToolResponse + */ + parameters: Array; + /** + * + * @type {SchoolExternalToolConfigurationStatusResponse} + * @memberof SchoolExternalToolResponse + */ + status: SchoolExternalToolConfigurationStatusResponse; +} + + diff --git a/src/serverApi/v3/models/school-external-tool-search-list-response.ts b/src/serverApi/v3/models/school-external-tool-search-list-response.ts new file mode 100644 index 0000000..007a69f --- /dev/null +++ b/src/serverApi/v3/models/school-external-tool-search-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { SchoolExternalToolResponse } from './school-external-tool-response'; + +/** + * + * @export + * @interface SchoolExternalToolSearchListResponse + */ +export interface SchoolExternalToolSearchListResponse { + /** + * + * @type {Array} + * @memberof SchoolExternalToolSearchListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/school-feature.ts b/src/serverApi/v3/models/school-feature.ts new file mode 100644 index 0000000..7fb440f --- /dev/null +++ b/src/serverApi/v3/models/school-feature.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum SchoolFeature { + ROCKET_CHAT = 'rocketChat', + VIDEOCONFERENCE = 'videoconference', + NEXTCLOUD = 'nextcloud', + STUDENT_VISIBILITY = 'studentVisibility', + LDAP_UNIVENTION_MIGRATION_SCHOOL = 'ldapUniventionMigrationSchool', + OAUTH_PROVISIONING_ENABLED = 'oauthProvisioningEnabled', + SHOW_OUTDATED_USERS = 'showOutdatedUsers', + ENABLE_LDAP_SYNC_DURING_MIGRATION = 'enableLdapSyncDuringMigration', + AI_TUTOR = 'aiTutor' +} + + + diff --git a/src/serverApi/v3/models/school-for-external-invite-response.ts b/src/serverApi/v3/models/school-for-external-invite-response.ts new file mode 100644 index 0000000..48f6d4b --- /dev/null +++ b/src/serverApi/v3/models/school-for-external-invite-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SchoolForExternalInviteResponse + */ +export interface SchoolForExternalInviteResponse { + /** + * + * @type {string} + * @memberof SchoolForExternalInviteResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolForExternalInviteResponse + */ + name: string; +} + + diff --git a/src/serverApi/v3/models/school-for-ldap-login-response.ts b/src/serverApi/v3/models/school-for-ldap-login-response.ts new file mode 100644 index 0000000..146fb9f --- /dev/null +++ b/src/serverApi/v3/models/school-for-ldap-login-response.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { SystemForLdapLoginResponse } from './system-for-ldap-login-response'; + +/** + * + * @export + * @interface SchoolForLdapLoginResponse + */ +export interface SchoolForLdapLoginResponse { + /** + * + * @type {string} + * @memberof SchoolForLdapLoginResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolForLdapLoginResponse + */ + name: string; + /** + * + * @type {Array} + * @memberof SchoolForLdapLoginResponse + */ + systems: Array; +} + + diff --git a/src/serverApi/v3/models/school-info-response.ts b/src/serverApi/v3/models/school-info-response.ts new file mode 100644 index 0000000..2b288d1 --- /dev/null +++ b/src/serverApi/v3/models/school-info-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SchoolInfoResponse + */ +export interface SchoolInfoResponse { + /** + * The id of the School entity + * @type {string} + * @memberof SchoolInfoResponse + */ + id: string; + /** + * The name of the School entity + * @type {string} + * @memberof SchoolInfoResponse + */ + name: string; +} + + diff --git a/src/serverApi/v3/models/school-logo.ts b/src/serverApi/v3/models/school-logo.ts new file mode 100644 index 0000000..bda456a --- /dev/null +++ b/src/serverApi/v3/models/school-logo.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SchoolLogo + */ +export interface SchoolLogo { + /** + * + * @type {string} + * @memberof SchoolLogo + */ + dataUrl?: string; + /** + * + * @type {string} + * @memberof SchoolLogo + */ + name?: string; +} + + diff --git a/src/serverApi/v3/models/school-permissions-params.ts b/src/serverApi/v3/models/school-permissions-params.ts new file mode 100644 index 0000000..28e5faf --- /dev/null +++ b/src/serverApi/v3/models/school-permissions-params.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { StudentPermissionParams } from './student-permission-params'; +import { TeacherPermissionParams } from './teacher-permission-params'; + +/** + * + * @export + * @interface SchoolPermissionsParams + */ +export interface SchoolPermissionsParams { + /** + * + * @type {TeacherPermissionParams} + * @memberof SchoolPermissionsParams + */ + teacher?: TeacherPermissionParams; + /** + * + * @type {StudentPermissionParams} + * @memberof SchoolPermissionsParams + */ + student?: StudentPermissionParams; +} + + diff --git a/src/serverApi/v3/models/school-purpose.ts b/src/serverApi/v3/models/school-purpose.ts new file mode 100644 index 0000000..9fa5d3f --- /dev/null +++ b/src/serverApi/v3/models/school-purpose.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum SchoolPurpose { + EXPERT = 'expert', + TOMBSTONE = 'tombstone', + DEMO = 'demo', + TEST = 'test', + MINT_EC = 'MINT-EC' +} + + + diff --git a/src/serverApi/v3/models/school-response.ts b/src/serverApi/v3/models/school-response.ts new file mode 100644 index 0000000..f06a3da --- /dev/null +++ b/src/serverApi/v3/models/school-response.ts @@ -0,0 +1,160 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { CountyResponse } from './county-response'; +import { FederalStateResponse } from './federal-state-response'; +import { FileStorageType } from './file-storage-type'; +import { InstanceFeature } from './instance-feature'; +import { SchoolFeature } from './school-feature'; +import { SchoolLogo } from './school-logo'; +import { SchoolPurpose } from './school-purpose'; +import { SchoolYearResponse } from './school-year-response'; +import { YearsResponse } from './years-response'; + +/** + * + * @export + * @interface SchoolResponse + */ +export interface SchoolResponse { + /** + * + * @type {string} + * @memberof SchoolResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + updatedAt: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + name: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + officialSchoolNumber?: string; + /** + * + * @type {SchoolYearResponse} + * @memberof SchoolResponse + */ + currentYear?: SchoolYearResponse; + /** + * + * @type {FederalStateResponse} + * @memberof SchoolResponse + */ + federalState: FederalStateResponse; + /** + * + * @type {CountyResponse} + * @memberof SchoolResponse + */ + county?: CountyResponse; + /** + * + * @type {SchoolPurpose} + * @memberof SchoolResponse + */ + purpose?: SchoolPurpose; + /** + * + * @type {Array} + * @memberof SchoolResponse + */ + features: Array; + /** + * + * @type {Array} + * @memberof SchoolResponse + */ + systemIds: Array; + /** + * + * @type {boolean} + * @memberof SchoolResponse + */ + inUserMigration?: boolean; + /** + * + * @type {boolean} + * @memberof SchoolResponse + */ + inMaintenance: boolean; + /** + * + * @type {boolean} + * @memberof SchoolResponse + */ + isExternal: boolean; + /** + * + * @type {SchoolLogo} + * @memberof SchoolResponse + */ + logo?: SchoolLogo; + /** + * + * @type {FileStorageType} + * @memberof SchoolResponse + */ + fileStorageType?: FileStorageType; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + language?: string; + /** + * + * @type {string} + * @memberof SchoolResponse + */ + timezone?: string; + /** + * + * @type {object} + * @memberof SchoolResponse + */ + permissions?: object; + /** + * + * @type {YearsResponse} + * @memberof SchoolResponse + */ + years: YearsResponse; + /** + * + * @type {Array} + * @memberof SchoolResponse + */ + instanceFeatures: Array; +} + + diff --git a/src/serverApi/v3/models/school-system-response.ts b/src/serverApi/v3/models/school-system-response.ts new file mode 100644 index 0000000..5c96d12 --- /dev/null +++ b/src/serverApi/v3/models/school-system-response.ts @@ -0,0 +1,56 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ProviderConfigResponse } from './provider-config-response'; + +/** + * + * @export + * @interface SchoolSystemResponse + */ +export interface SchoolSystemResponse { + /** + * + * @type {string} + * @memberof SchoolSystemResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolSystemResponse + */ + type: string; + /** + * + * @type {string} + * @memberof SchoolSystemResponse + */ + alias?: string; + /** + * + * @type {ProviderConfigResponse} + * @memberof SchoolSystemResponse + */ + ldapConfig?: ProviderConfigResponse; + /** + * + * @type {ProviderConfigResponse} + * @memberof SchoolSystemResponse + */ + oauthConfig?: ProviderConfigResponse; +} + + diff --git a/src/serverApi/v3/models/school-update-body-params.ts b/src/serverApi/v3/models/school-update-body-params.ts new file mode 100644 index 0000000..fdf075d --- /dev/null +++ b/src/serverApi/v3/models/school-update-body-params.ts @@ -0,0 +1,92 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { LanguageType } from './language-type'; +import { SchoolFeature } from './school-feature'; +import { SchoolLogo } from './school-logo'; +import { SchoolPermissionsParams } from './school-permissions-params'; + +/** + * + * @export + * @interface SchoolUpdateBodyParams + */ +export interface SchoolUpdateBodyParams { + /** + * + * @type {string} + * @memberof SchoolUpdateBodyParams + */ + name?: string; + /** + * + * @type {string} + * @memberof SchoolUpdateBodyParams + */ + officialSchoolNumber?: string; + /** + * + * @type {SchoolLogo} + * @memberof SchoolUpdateBodyParams + */ + logo?: SchoolLogo; + /** + * + * @type {string} + * @memberof SchoolUpdateBodyParams + */ + fileStorageType?: SchoolUpdateBodyParamsFileStorageType; + /** + * + * @type {LanguageType} + * @memberof SchoolUpdateBodyParams + */ + language?: LanguageType; + /** + * + * @type {Array} + * @memberof SchoolUpdateBodyParams + */ + features?: Array; + /** + * + * @type {SchoolPermissionsParams} + * @memberof SchoolUpdateBodyParams + */ + permissions?: SchoolPermissionsParams; + /** + * + * @type {string} + * @memberof SchoolUpdateBodyParams + */ + countyId?: string; + /** + * + * @type {boolean} + * @memberof SchoolUpdateBodyParams + */ + enableStudentTeamCreation?: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum SchoolUpdateBodyParamsFileStorageType { + AWS_S3 = 'awsS3' +} + + + diff --git a/src/serverApi/v3/models/school-year-query-type.ts b/src/serverApi/v3/models/school-year-query-type.ts new file mode 100644 index 0000000..51fbdeb --- /dev/null +++ b/src/serverApi/v3/models/school-year-query-type.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum SchoolYearQueryType { + NEXT_YEAR = 'nextYear', + CURRENT_YEAR = 'currentYear', + PREVIOUS_YEARS = 'previousYears' +} + + + diff --git a/src/serverApi/v3/models/school-year-response.ts b/src/serverApi/v3/models/school-year-response.ts new file mode 100644 index 0000000..3aa40de --- /dev/null +++ b/src/serverApi/v3/models/school-year-response.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SchoolYearResponse + */ +export interface SchoolYearResponse { + /** + * + * @type {string} + * @memberof SchoolYearResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SchoolYearResponse + */ + name: string; + /** + * + * @type {string} + * @memberof SchoolYearResponse + */ + startDate: string; + /** + * + * @type {string} + * @memberof SchoolYearResponse + */ + endDate: string; +} + + diff --git a/src/serverApi/v3/models/schul-conne-xprovisioning-options-params.ts b/src/serverApi/v3/models/schul-conne-xprovisioning-options-params.ts new file mode 100644 index 0000000..6b78636 --- /dev/null +++ b/src/serverApi/v3/models/schul-conne-xprovisioning-options-params.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SchulConneXProvisioningOptionsParams + */ +export interface SchulConneXProvisioningOptionsParams { + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsParams + */ + groupProvisioningClassesEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsParams + */ + groupProvisioningCoursesEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsParams + */ + groupProvisioningOtherEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsParams + */ + schoolExternalToolProvisioningEnabled: boolean; +} + + diff --git a/src/serverApi/v3/models/schul-conne-xprovisioning-options-response.ts b/src/serverApi/v3/models/schul-conne-xprovisioning-options-response.ts new file mode 100644 index 0000000..02ffbf2 --- /dev/null +++ b/src/serverApi/v3/models/schul-conne-xprovisioning-options-response.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SchulConneXProvisioningOptionsResponse + */ +export interface SchulConneXProvisioningOptionsResponse { + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsResponse + */ + groupProvisioningClassesEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsResponse + */ + groupProvisioningCoursesEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsResponse + */ + groupProvisioningOtherEnabled: boolean; + /** + * + * @type {boolean} + * @memberof SchulConneXProvisioningOptionsResponse + */ + schoolExternalToolProvisioningEnabled: boolean; +} + + diff --git a/src/serverApi/v3/models/schulcloud-theme.ts b/src/serverApi/v3/models/schulcloud-theme.ts new file mode 100644 index 0000000..2343475 --- /dev/null +++ b/src/serverApi/v3/models/schulcloud-theme.ts @@ -0,0 +1,30 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum SchulcloudTheme { + BRB = 'brb', + DEFAULT = 'default', + N21 = 'n21', + THR = 'thr' +} + + + diff --git a/src/serverApi/v3/models/set-height-body-params.ts b/src/serverApi/v3/models/set-height-body-params.ts new file mode 100644 index 0000000..826f309 --- /dev/null +++ b/src/serverApi/v3/models/set-height-body-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SetHeightBodyParams + */ +export interface SetHeightBodyParams { + /** + * + * @type {number} + * @memberof SetHeightBodyParams + */ + height: number; +} + + diff --git a/src/serverApi/v3/models/share-token-body-params.ts b/src/serverApi/v3/models/share-token-body-params.ts new file mode 100644 index 0000000..161695f --- /dev/null +++ b/src/serverApi/v3/models/share-token-body-params.ts @@ -0,0 +1,61 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ShareTokenBodyParams + */ +export interface ShareTokenBodyParams { + /** + * the type of the object being shared + * @type {string} + * @memberof ShareTokenBodyParams + */ + parentType: ShareTokenBodyParamsParentType; + /** + * the id of the object being shared. + * @type {string} + * @memberof ShareTokenBodyParams + */ + parentId: string; + /** + * when defined, the sharetoken will expire after the given number of days. + * @type {number} + * @memberof ShareTokenBodyParams + */ + expiresInDays?: number | null; + /** + * when defined, the sharetoken will be usable exclusively by members of the users school. + * @type {boolean} + * @memberof ShareTokenBodyParams + */ + schoolExclusive?: boolean | null; +} + +/** + * @export + * @enum {string} + */ +export enum ShareTokenBodyParamsParentType { + COURSES = 'courses', + TASKS = 'tasks', + LESSONS = 'lessons', + COLUMN_BOARD = 'columnBoard' +} + + + diff --git a/src/serverApi/v3/models/share-token-import-body-params.ts b/src/serverApi/v3/models/share-token-import-body-params.ts new file mode 100644 index 0000000..20c7c3f --- /dev/null +++ b/src/serverApi/v3/models/share-token-import-body-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ShareTokenImportBodyParams + */ +export interface ShareTokenImportBodyParams { + /** + * the new name of the imported object. + * @type {string} + * @memberof ShareTokenImportBodyParams + */ + newName: string; + /** + * Id of the course to which the lesson/task will be added + * @type {string} + * @memberof ShareTokenImportBodyParams + */ + destinationCourseId?: string | null; +} + + diff --git a/src/serverApi/v3/models/share-token-info-response.ts b/src/serverApi/v3/models/share-token-info-response.ts new file mode 100644 index 0000000..96da6e3 --- /dev/null +++ b/src/serverApi/v3/models/share-token-info-response.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ShareTokenInfoResponse + */ +export interface ShareTokenInfoResponse { + /** + * + * @type {string} + * @memberof ShareTokenInfoResponse + */ + token: string; + /** + * + * @type {string} + * @memberof ShareTokenInfoResponse + */ + parentType: ShareTokenInfoResponseParentType; + /** + * + * @type {string} + * @memberof ShareTokenInfoResponse + */ + parentName: string; +} + +/** + * @export + * @enum {string} + */ +export enum ShareTokenInfoResponseParentType { + COURSES = 'courses', + TASKS = 'tasks', + LESSONS = 'lessons', + COLUMN_BOARD = 'columnBoard' +} + + + diff --git a/src/serverApi/v3/models/share-token-payload-response.ts b/src/serverApi/v3/models/share-token-payload-response.ts new file mode 100644 index 0000000..8dbc217 --- /dev/null +++ b/src/serverApi/v3/models/share-token-payload-response.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ShareTokenPayloadResponse + */ +export interface ShareTokenPayloadResponse { + /** + * + * @type {string} + * @memberof ShareTokenPayloadResponse + */ + parentType: ShareTokenPayloadResponseParentType; + /** + * + * @type {string} + * @memberof ShareTokenPayloadResponse + */ + parentId: string; +} + +/** + * @export + * @enum {string} + */ +export enum ShareTokenPayloadResponseParentType { + COURSES = 'courses', + TASKS = 'tasks', + LESSONS = 'lessons', + COLUMN_BOARD = 'columnBoard' +} + + + diff --git a/src/serverApi/v3/models/share-token-response.ts b/src/serverApi/v3/models/share-token-response.ts new file mode 100644 index 0000000..59cc8b9 --- /dev/null +++ b/src/serverApi/v3/models/share-token-response.ts @@ -0,0 +1,44 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ShareTokenPayloadResponse } from './share-token-payload-response'; + +/** + * + * @export + * @interface ShareTokenResponse + */ +export interface ShareTokenResponse { + /** + * + * @type {string} + * @memberof ShareTokenResponse + */ + token: string; + /** + * + * @type {ShareTokenPayloadResponse} + * @memberof ShareTokenResponse + */ + payload: ShareTokenPayloadResponse; + /** + * + * @type {string} + * @memberof ShareTokenResponse + */ + expiresAt?: string; +} + + diff --git a/src/serverApi/v3/models/single-column-board-response.ts b/src/serverApi/v3/models/single-column-board-response.ts new file mode 100644 index 0000000..cffdf72 --- /dev/null +++ b/src/serverApi/v3/models/single-column-board-response.ts @@ -0,0 +1,62 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { BoardElementResponse } from './board-element-response'; + +/** + * + * @export + * @interface SingleColumnBoardResponse + */ +export interface SingleColumnBoardResponse { + /** + * The id of the room this board belongs to + * @type {string} + * @memberof SingleColumnBoardResponse + */ + roomId: string; + /** + * Title of the Board + * @type {string} + * @memberof SingleColumnBoardResponse + */ + title: string; + /** + * Color of the Board + * @type {string} + * @memberof SingleColumnBoardResponse + */ + displayColor: string; + /** + * Array of board specific tasks or lessons with matching type property + * @type {Array} + * @memberof SingleColumnBoardResponse + */ + elements: Array; + /** + * Boolean if the room this board belongs to is archived + * @type {boolean} + * @memberof SingleColumnBoardResponse + */ + isArchived: boolean; + /** + * Is the course synchronized with a group? + * @type {boolean} + * @memberof SingleColumnBoardResponse + */ + isSynchronized: boolean; +} + + diff --git a/src/serverApi/v3/models/student-permission-params.ts b/src/serverApi/v3/models/student-permission-params.ts new file mode 100644 index 0000000..4729bd6 --- /dev/null +++ b/src/serverApi/v3/models/student-permission-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface StudentPermissionParams + */ +export interface StudentPermissionParams { + /** + * + * @type {boolean} + * @memberof StudentPermissionParams + */ + LERNSTORE_VIEW?: boolean; +} + + diff --git a/src/serverApi/v3/models/submission-container-content-body.ts b/src/serverApi/v3/models/submission-container-content-body.ts new file mode 100644 index 0000000..e0824f1 --- /dev/null +++ b/src/serverApi/v3/models/submission-container-content-body.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SubmissionContainerContentBody + */ +export interface SubmissionContainerContentBody { + /** + * The point in time until when a submission can be handed in. + * @type {string} + * @memberof SubmissionContainerContentBody + */ + dueDate?: string; +} + + diff --git a/src/serverApi/v3/models/submission-container-element-content-body.ts b/src/serverApi/v3/models/submission-container-element-content-body.ts new file mode 100644 index 0000000..bca6532 --- /dev/null +++ b/src/serverApi/v3/models/submission-container-element-content-body.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { SubmissionContainerContentBody } from './submission-container-content-body'; + +/** + * + * @export + * @interface SubmissionContainerElementContentBody + */ +export interface SubmissionContainerElementContentBody { + /** + * + * @type {ContentElementType} + * @memberof SubmissionContainerElementContentBody + */ + type: ContentElementType; + /** + * + * @type {SubmissionContainerContentBody} + * @memberof SubmissionContainerElementContentBody + */ + content: SubmissionContainerContentBody; +} + + diff --git a/src/serverApi/v3/models/submission-container-element-content.ts b/src/serverApi/v3/models/submission-container-element-content.ts new file mode 100644 index 0000000..0c34099 --- /dev/null +++ b/src/serverApi/v3/models/submission-container-element-content.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SubmissionContainerElementContent + */ +export interface SubmissionContainerElementContent { + /** + * The dueDate as date string or null of not set + * @type {string} + * @memberof SubmissionContainerElementContent + */ + dueDate: string; +} + + diff --git a/src/serverApi/v3/models/submission-container-element-response.ts b/src/serverApi/v3/models/submission-container-element-response.ts new file mode 100644 index 0000000..4fc95e0 --- /dev/null +++ b/src/serverApi/v3/models/submission-container-element-response.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContentElementType } from './content-element-type'; +import { SubmissionContainerElementContent } from './submission-container-element-content'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface SubmissionContainerElementResponse + */ +export interface SubmissionContainerElementResponse { + /** + * + * @type {string} + * @memberof SubmissionContainerElementResponse + */ + id: string; + /** + * + * @type {ContentElementType} + * @memberof SubmissionContainerElementResponse + */ + type: ContentElementType; + /** + * + * @type {SubmissionContainerElementContent} + * @memberof SubmissionContainerElementResponse + */ + content: SubmissionContainerElementContent; + /** + * + * @type {TimestampsResponse} + * @memberof SubmissionContainerElementResponse + */ + timestamps: TimestampsResponse; +} + + diff --git a/src/serverApi/v3/models/submission-item-response.ts b/src/serverApi/v3/models/submission-item-response.ts new file mode 100644 index 0000000..61766ef --- /dev/null +++ b/src/serverApi/v3/models/submission-item-response.ts @@ -0,0 +1,58 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { FileElementResponse } from './file-element-response'; +import { RichTextElementResponse } from './rich-text-element-response'; +import { TimestampsResponse } from './timestamps-response'; + +/** + * + * @export + * @interface SubmissionItemResponse + */ +export interface SubmissionItemResponse { + /** + * + * @type {string} + * @memberof SubmissionItemResponse + */ + id: string; + /** + * + * @type {TimestampsResponse} + * @memberof SubmissionItemResponse + */ + timestamps: TimestampsResponse; + /** + * + * @type {boolean} + * @memberof SubmissionItemResponse + */ + completed: boolean; + /** + * + * @type {string} + * @memberof SubmissionItemResponse + */ + userId: string; + /** + * + * @type {Array} + * @memberof SubmissionItemResponse + */ + elements: Array; +} + + diff --git a/src/serverApi/v3/models/submission-status-list-response.ts b/src/serverApi/v3/models/submission-status-list-response.ts new file mode 100644 index 0000000..f4049a9 --- /dev/null +++ b/src/serverApi/v3/models/submission-status-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { SubmissionStatusResponse } from './submission-status-response'; + +/** + * + * @export + * @interface SubmissionStatusListResponse + */ +export interface SubmissionStatusListResponse { + /** + * + * @type {Array} + * @memberof SubmissionStatusListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/submission-status-response.ts b/src/serverApi/v3/models/submission-status-response.ts new file mode 100644 index 0000000..4cfc5b1 --- /dev/null +++ b/src/serverApi/v3/models/submission-status-response.ts @@ -0,0 +1,61 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SubmissionStatusResponse + */ +export interface SubmissionStatusResponse { + /** + * + * @type {string} + * @memberof SubmissionStatusResponse + */ + id: string; + /** + * + * @type {Array} + * @memberof SubmissionStatusResponse + */ + submitters: Array; + /** + * + * @type {boolean} + * @memberof SubmissionStatusResponse + */ + isSubmitted: boolean; + /** + * + * @type {number} + * @memberof SubmissionStatusResponse + */ + grade?: number; + /** + * + * @type {boolean} + * @memberof SubmissionStatusResponse + */ + isGraded: boolean; + /** + * + * @type {string} + * @memberof SubmissionStatusResponse + */ + submittingCourseGroupName?: string; +} + + diff --git a/src/serverApi/v3/models/submissions-response.ts b/src/serverApi/v3/models/submissions-response.ts new file mode 100644 index 0000000..76d8c72 --- /dev/null +++ b/src/serverApi/v3/models/submissions-response.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { SubmissionItemResponse } from './submission-item-response'; +import { UserDataResponse } from './user-data-response'; + +/** + * + * @export + * @interface SubmissionsResponse + */ +export interface SubmissionsResponse { + /** + * + * @type {Array} + * @memberof SubmissionsResponse + */ + submissionItemsResponse: Array; + /** + * + * @type {Array} + * @memberof SubmissionsResponse + */ + users: Array; +} + + diff --git a/src/serverApi/v3/models/successful-response.ts b/src/serverApi/v3/models/successful-response.ts new file mode 100644 index 0000000..89fd53a --- /dev/null +++ b/src/serverApi/v3/models/successful-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SuccessfulResponse + */ +export interface SuccessfulResponse { + /** + * + * @type {boolean} + * @memberof SuccessfulResponse + */ + successful: boolean; +} + + diff --git a/src/serverApi/v3/models/system-for-ldap-login-response.ts b/src/serverApi/v3/models/system-for-ldap-login-response.ts new file mode 100644 index 0000000..dadc4b9 --- /dev/null +++ b/src/serverApi/v3/models/system-for-ldap-login-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface SystemForLdapLoginResponse + */ +export interface SystemForLdapLoginResponse { + /** + * + * @type {string} + * @memberof SystemForLdapLoginResponse + */ + id: string; + /** + * + * @type {string} + * @memberof SystemForLdapLoginResponse + */ + type: string; + /** + * + * @type {string} + * @memberof SystemForLdapLoginResponse + */ + alias: string; +} + + diff --git a/src/serverApi/v3/models/system-type.ts b/src/serverApi/v3/models/system-type.ts new file mode 100644 index 0000000..5bf9851 --- /dev/null +++ b/src/serverApi/v3/models/system-type.ts @@ -0,0 +1,36 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum SystemType { + OAUTH = 'oauth', + LDAP = 'ldap', + OIDC = 'oidc', + TSP_BASE = 'tsp-base', + TSP_SCHOOL = 'tsp-school', + LOCAL = 'local', + ISERV = 'iserv', + LERNSAX = 'lernsax', + ITSLEARNING = 'itslearning', + MOODLE = 'moodle' +} + + + diff --git a/src/serverApi/v3/models/target-info-response.ts b/src/serverApi/v3/models/target-info-response.ts new file mode 100644 index 0000000..c5a7bbb --- /dev/null +++ b/src/serverApi/v3/models/target-info-response.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface TargetInfoResponse + */ +export interface TargetInfoResponse { + /** + * The id of the Target entity + * @type {string} + * @memberof TargetInfoResponse + */ + id: string; + /** + * The name of the Target entity + * @type {string} + * @memberof TargetInfoResponse + */ + name: string; +} + + diff --git a/src/serverApi/v3/models/task-copy-api-params.ts b/src/serverApi/v3/models/task-copy-api-params.ts new file mode 100644 index 0000000..ac4f39b --- /dev/null +++ b/src/serverApi/v3/models/task-copy-api-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface TaskCopyApiParams + */ +export interface TaskCopyApiParams { + /** + * Destination course parent Id the task is copied to + * @type {string} + * @memberof TaskCopyApiParams + */ + courseId?: string; + /** + * Destination lesson parent Id the task is copied to + * @type {string} + * @memberof TaskCopyApiParams + */ + lessonId?: string; +} + + diff --git a/src/serverApi/v3/models/task-list-response.ts b/src/serverApi/v3/models/task-list-response.ts new file mode 100644 index 0000000..02df753 --- /dev/null +++ b/src/serverApi/v3/models/task-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { TaskResponse } from './task-response'; + +/** + * + * @export + * @interface TaskListResponse + */ +export interface TaskListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof TaskListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof TaskListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof TaskListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof TaskListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/task-response.ts b/src/serverApi/v3/models/task-response.ts new file mode 100644 index 0000000..c83e1c4 --- /dev/null +++ b/src/serverApi/v3/models/task-response.ts @@ -0,0 +1,105 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { RichText } from './rich-text'; +import { TaskStatusResponse } from './task-status-response'; + +/** + * + * @export + * @interface TaskResponse + */ +export interface TaskResponse { + /** + * + * @type {string} + * @memberof TaskResponse + */ + id: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + name: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + availableDate?: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + dueDate?: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + courseName: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + lessonName?: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + courseId: string; + /** + * Task description object, with props content: string and type: input format types + * @type {RichText} + * @memberof TaskResponse + */ + description?: RichText; + /** + * + * @type {boolean} + * @memberof TaskResponse + */ + lessonHidden: boolean; + /** + * + * @type {string} + * @memberof TaskResponse + */ + displayColor?: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof TaskResponse + */ + updatedAt: string; + /** + * + * @type {TaskStatusResponse} + * @memberof TaskResponse + */ + status: TaskStatusResponse; +} + + diff --git a/src/serverApi/v3/models/task-status-response.ts b/src/serverApi/v3/models/task-status-response.ts new file mode 100644 index 0000000..1ec00c8 --- /dev/null +++ b/src/serverApi/v3/models/task-status-response.ts @@ -0,0 +1,61 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface TaskStatusResponse + */ +export interface TaskStatusResponse { + /** + * + * @type {number} + * @memberof TaskStatusResponse + */ + submitted: number; + /** + * + * @type {number} + * @memberof TaskStatusResponse + */ + maxSubmissions: number; + /** + * + * @type {number} + * @memberof TaskStatusResponse + */ + graded: number; + /** + * + * @type {boolean} + * @memberof TaskStatusResponse + */ + isDraft: boolean; + /** + * + * @type {boolean} + * @memberof TaskStatusResponse + */ + isSubstitutionTeacher: boolean; + /** + * + * @type {boolean} + * @memberof TaskStatusResponse + */ + isFinished: boolean; +} + + diff --git a/src/serverApi/v3/models/teacher-permission-params.ts b/src/serverApi/v3/models/teacher-permission-params.ts new file mode 100644 index 0000000..a07ea17 --- /dev/null +++ b/src/serverApi/v3/models/teacher-permission-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface TeacherPermissionParams + */ +export interface TeacherPermissionParams { + /** + * + * @type {boolean} + * @memberof TeacherPermissionParams + */ + STUDENT_LIST?: boolean; +} + + diff --git a/src/serverApi/v3/models/team-permissions-body.ts b/src/serverApi/v3/models/team-permissions-body.ts new file mode 100644 index 0000000..5af11a5 --- /dev/null +++ b/src/serverApi/v3/models/team-permissions-body.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface TeamPermissionsBody + */ +export interface TeamPermissionsBody { + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + read: boolean; + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + write: boolean; + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + create: boolean; + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + _delete: boolean; + /** + * + * @type {boolean} + * @memberof TeamPermissionsBody + */ + share: boolean; +} + + diff --git a/src/serverApi/v3/models/timestamps-response.ts b/src/serverApi/v3/models/timestamps-response.ts new file mode 100644 index 0000000..6fbb137 --- /dev/null +++ b/src/serverApi/v3/models/timestamps-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface TimestampsResponse + */ +export interface TimestampsResponse { + /** + * + * @type {string} + * @memberof TimestampsResponse + */ + lastUpdatedAt: string; + /** + * + * @type {string} + * @memberof TimestampsResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof TimestampsResponse + */ + deletedAt?: string; +} + + diff --git a/src/serverApi/v3/models/timezone.ts b/src/serverApi/v3/models/timezone.ts new file mode 100644 index 0000000..a0a8689 --- /dev/null +++ b/src/serverApi/v3/models/timezone.ts @@ -0,0 +1,27 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum Timezone { + EUROPE_BERLIN = 'Europe/Berlin' +} + + + diff --git a/src/serverApi/v3/models/tool-config-type.ts b/src/serverApi/v3/models/tool-config-type.ts new file mode 100644 index 0000000..e015531 --- /dev/null +++ b/src/serverApi/v3/models/tool-config-type.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum ToolConfigType { + BASIC = 'basic', + OAUTH2 = 'oauth2', + LTI11 = 'lti11' +} + + + diff --git a/src/serverApi/v3/models/tool-context-type.ts b/src/serverApi/v3/models/tool-context-type.ts new file mode 100644 index 0000000..ef78088 --- /dev/null +++ b/src/serverApi/v3/models/tool-context-type.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum ToolContextType { + COURSE = 'course', + BOARD_ELEMENT = 'board-element', + MEDIA_BOARD = 'media-board' +} + + + diff --git a/src/serverApi/v3/models/tool-context-types-list-response.ts b/src/serverApi/v3/models/tool-context-types-list-response.ts new file mode 100644 index 0000000..9d6debf --- /dev/null +++ b/src/serverApi/v3/models/tool-context-types-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ToolContextType } from './tool-context-type'; + +/** + * + * @export + * @interface ToolContextTypesListResponse + */ +export interface ToolContextTypesListResponse { + /** + * + * @type {Array} + * @memberof ToolContextTypesListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/tool-launch-request-response.ts b/src/serverApi/v3/models/tool-launch-request-response.ts new file mode 100644 index 0000000..b835498 --- /dev/null +++ b/src/serverApi/v3/models/tool-launch-request-response.ts @@ -0,0 +1,59 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ToolLaunchRequestResponse + */ +export interface ToolLaunchRequestResponse { + /** + * The Launch Request method (GET or POST) + * @type {string} + * @memberof ToolLaunchRequestResponse + */ + method: ToolLaunchRequestResponseMethod; + /** + * The URL for the Tool Launch Request + * @type {string} + * @memberof ToolLaunchRequestResponse + */ + url: string; + /** + * The payload for the Tool Launch Request (optional) + * @type {string} + * @memberof ToolLaunchRequestResponse + */ + payload?: string; + /** + * Specifies whether the Tool should be launched in a new tab + * @type {boolean} + * @memberof ToolLaunchRequestResponse + */ + openNewTab?: boolean; +} + +/** + * @export + * @enum {string} + */ +export enum ToolLaunchRequestResponseMethod { + GET = 'GET', + POST = 'POST' +} + + + diff --git a/src/serverApi/v3/models/tool-reference-list-response.ts b/src/serverApi/v3/models/tool-reference-list-response.ts new file mode 100644 index 0000000..4d264ff --- /dev/null +++ b/src/serverApi/v3/models/tool-reference-list-response.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ToolReferenceResponse } from './tool-reference-response'; + +/** + * + * @export + * @interface ToolReferenceListResponse + */ +export interface ToolReferenceListResponse { + /** + * + * @type {Array} + * @memberof ToolReferenceListResponse + */ + data: Array; +} + + diff --git a/src/serverApi/v3/models/tool-reference-response.ts b/src/serverApi/v3/models/tool-reference-response.ts new file mode 100644 index 0000000..ddbf345 --- /dev/null +++ b/src/serverApi/v3/models/tool-reference-response.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ContextExternalToolConfigurationStatusResponse } from './context-external-tool-configuration-status-response'; + +/** + * + * @export + * @interface ToolReferenceResponse + */ +export interface ToolReferenceResponse { + /** + * The id of the tool in the context + * @type {string} + * @memberof ToolReferenceResponse + */ + contextToolId: string; + /** + * The description of the tool + * @type {string} + * @memberof ToolReferenceResponse + */ + description?: string; + /** + * The url of the logo which is stored in the db + * @type {string} + * @memberof ToolReferenceResponse + */ + logoUrl?: string; + /** + * The url of the thumbnail which is stored in the db + * @type {string} + * @memberof ToolReferenceResponse + */ + thumbnailUrl?: string; + /** + * The display name of the tool + * @type {string} + * @memberof ToolReferenceResponse + */ + displayName: string; + /** + * Whether the tool should be opened in a new tab + * @type {boolean} + * @memberof ToolReferenceResponse + */ + openInNewTab: boolean; + /** + * The status of the tool + * @type {ContextExternalToolConfigurationStatusResponse} + * @memberof ToolReferenceResponse + */ + status: ContextExternalToolConfigurationStatusResponse; +} + + diff --git a/src/serverApi/v3/models/update-board-title-params.ts b/src/serverApi/v3/models/update-board-title-params.ts new file mode 100644 index 0000000..3687ab3 --- /dev/null +++ b/src/serverApi/v3/models/update-board-title-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UpdateBoardTitleParams + */ +export interface UpdateBoardTitleParams { + /** + * + * @type {string} + * @memberof UpdateBoardTitleParams + */ + title: string; +} + + diff --git a/src/serverApi/v3/models/update-element-content-body-params.ts b/src/serverApi/v3/models/update-element-content-body-params.ts new file mode 100644 index 0000000..85b97c7 --- /dev/null +++ b/src/serverApi/v3/models/update-element-content-body-params.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { DrawingElementContentBody } from './drawing-element-content-body'; +import { ExternalToolElementContentBody } from './external-tool-element-content-body'; +import { FileElementContentBody } from './file-element-content-body'; +import { LinkElementContentBody } from './link-element-content-body'; +import { RichTextElementContentBody } from './rich-text-element-content-body'; +import { SubmissionContainerElementContentBody } from './submission-container-element-content-body'; + +/** + * + * @export + * @interface UpdateElementContentBodyParams + */ +export interface UpdateElementContentBodyParams { + /** + * + * @type {FileElementContentBody | LinkElementContentBody | RichTextElementContentBody | SubmissionContainerElementContentBody | ExternalToolElementContentBody | DrawingElementContentBody} + * @memberof UpdateElementContentBodyParams + */ + data: FileElementContentBody | LinkElementContentBody | RichTextElementContentBody | SubmissionContainerElementContentBody | ExternalToolElementContentBody | DrawingElementContentBody; +} + + diff --git a/src/serverApi/v3/models/update-flag-params.ts b/src/serverApi/v3/models/update-flag-params.ts new file mode 100644 index 0000000..0c7b916 --- /dev/null +++ b/src/serverApi/v3/models/update-flag-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UpdateFlagParams + */ +export interface UpdateFlagParams { + /** + * updates flag for an import user + * @type {boolean} + * @memberof UpdateFlagParams + */ + flagged: boolean; +} + + diff --git a/src/serverApi/v3/models/update-match-params.ts b/src/serverApi/v3/models/update-match-params.ts new file mode 100644 index 0000000..a261d8b --- /dev/null +++ b/src/serverApi/v3/models/update-match-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UpdateMatchParams + */ +export interface UpdateMatchParams { + /** + * updates local user reference for an import user + * @type {string} + * @memberof UpdateMatchParams + */ + userId: string; +} + + diff --git a/src/serverApi/v3/models/update-news-params.ts b/src/serverApi/v3/models/update-news-params.ts new file mode 100644 index 0000000..4633f65 --- /dev/null +++ b/src/serverApi/v3/models/update-news-params.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UpdateNewsParams + */ +export interface UpdateNewsParams { + /** + * Title of the News entity + * @type {string} + * @memberof UpdateNewsParams + */ + title?: string; + /** + * Content of the News entity + * @type {string} + * @memberof UpdateNewsParams + */ + content?: string; + /** + * The point in time from when the News entity schould be displayed + * @type {string} + * @memberof UpdateNewsParams + */ + displayAt?: string; +} + + diff --git a/src/serverApi/v3/models/update-submission-item-body-params.ts b/src/serverApi/v3/models/update-submission-item-body-params.ts new file mode 100644 index 0000000..ed64943 --- /dev/null +++ b/src/serverApi/v3/models/update-submission-item-body-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UpdateSubmissionItemBodyParams + */ +export interface UpdateSubmissionItemBodyParams { + /** + * Boolean indicating whether the submission is completed. + * @type {boolean} + * @memberof UpdateSubmissionItemBodyParams + */ + completed: boolean; +} + + diff --git a/src/serverApi/v3/models/user-consent-response.ts b/src/serverApi/v3/models/user-consent-response.ts new file mode 100644 index 0000000..5ec99a6 --- /dev/null +++ b/src/serverApi/v3/models/user-consent-response.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UserConsentResponse + */ +export interface UserConsentResponse { + /** + * + * @type {string} + * @memberof UserConsentResponse + */ + form: string; + /** + * + * @type {boolean} + * @memberof UserConsentResponse + */ + privacyConsent: boolean; + /** + * + * @type {boolean} + * @memberof UserConsentResponse + */ + termsOfUseConsent: boolean; + /** + * + * @type {string} + * @memberof UserConsentResponse + */ + dateOfPrivacyConsent: string; + /** + * + * @type {string} + * @memberof UserConsentResponse + */ + dateOfTermsOfUseConsent: string; +} + + diff --git a/src/serverApi/v3/models/user-data-response.ts b/src/serverApi/v3/models/user-data-response.ts new file mode 100644 index 0000000..d6c414e --- /dev/null +++ b/src/serverApi/v3/models/user-data-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UserDataResponse + */ +export interface UserDataResponse { + /** + * + * @type {string} + * @memberof UserDataResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof UserDataResponse + */ + lastName: string; + /** + * + * @type {string} + * @memberof UserDataResponse + */ + userId: string; +} + + diff --git a/src/serverApi/v3/models/user-info-response.ts b/src/serverApi/v3/models/user-info-response.ts new file mode 100644 index 0000000..5b721a4 --- /dev/null +++ b/src/serverApi/v3/models/user-info-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UserInfoResponse + */ +export interface UserInfoResponse { + /** + * The id of the User entity + * @type {string} + * @memberof UserInfoResponse + */ + id: string; + /** + * First name of the user + * @type {string} + * @memberof UserInfoResponse + */ + firstName?: string; + /** + * Last name of the user + * @type {string} + * @memberof UserInfoResponse + */ + lastName?: string; +} + + diff --git a/src/serverApi/v3/models/user-list-response.ts b/src/serverApi/v3/models/user-list-response.ts new file mode 100644 index 0000000..9f8e898 --- /dev/null +++ b/src/serverApi/v3/models/user-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { UserResponse } from './user-response'; + +/** + * + * @export + * @interface UserListResponse + */ +export interface UserListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof UserListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof UserListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof UserListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof UserListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/user-login-migration-mandatory-params.ts b/src/serverApi/v3/models/user-login-migration-mandatory-params.ts new file mode 100644 index 0000000..871694d --- /dev/null +++ b/src/serverApi/v3/models/user-login-migration-mandatory-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UserLoginMigrationMandatoryParams + */ +export interface UserLoginMigrationMandatoryParams { + /** + * + * @type {boolean} + * @memberof UserLoginMigrationMandatoryParams + */ + mandatory: boolean; +} + + diff --git a/src/serverApi/v3/models/user-login-migration-response.ts b/src/serverApi/v3/models/user-login-migration-response.ts new file mode 100644 index 0000000..c42dff6 --- /dev/null +++ b/src/serverApi/v3/models/user-login-migration-response.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UserLoginMigrationResponse + */ +export interface UserLoginMigrationResponse { + /** + * Id of the migration + * @type {string} + * @memberof UserLoginMigrationResponse + */ + id: string; + /** + * Id of the system which is the origin of the migration + * @type {string} + * @memberof UserLoginMigrationResponse + */ + sourceSystemId?: string; + /** + * Id of the system which is the target of the migration + * @type {string} + * @memberof UserLoginMigrationResponse + */ + targetSystemId: string; + /** + * Date when the migration was marked as required + * @type {string} + * @memberof UserLoginMigrationResponse + */ + mandatorySince?: string; + /** + * Date when the migration was started + * @type {string} + * @memberof UserLoginMigrationResponse + */ + startedAt: string; + /** + * Date when the migration was completed + * @type {string} + * @memberof UserLoginMigrationResponse + */ + closedAt?: string; + /** + * Date when the migration was completed including the grace period + * @type {string} + * @memberof UserLoginMigrationResponse + */ + finishedAt?: string; +} + + diff --git a/src/serverApi/v3/models/user-login-migration-search-list-response.ts b/src/serverApi/v3/models/user-login-migration-search-list-response.ts new file mode 100644 index 0000000..14d90fb --- /dev/null +++ b/src/serverApi/v3/models/user-login-migration-search-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { UserLoginMigrationResponse } from './user-login-migration-response'; + +/** + * + * @export + * @interface UserLoginMigrationSearchListResponse + */ +export interface UserLoginMigrationSearchListResponse { + /** + * Contains user login migration responses + * @type {Array} + * @memberof UserLoginMigrationSearchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof UserLoginMigrationSearchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof UserLoginMigrationSearchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof UserLoginMigrationSearchListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/user-match-list-response.ts b/src/serverApi/v3/models/user-match-list-response.ts new file mode 100644 index 0000000..e66f1e7 --- /dev/null +++ b/src/serverApi/v3/models/user-match-list-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { UserMatchResponse } from './user-match-response'; + +/** + * + * @export + * @interface UserMatchListResponse + */ +export interface UserMatchListResponse { + /** + * The items for the current page. + * @type {Array} + * @memberof UserMatchListResponse + */ + data: Array; + /** + * The total amount of items. + * @type {number} + * @memberof UserMatchListResponse + */ + total: number; + /** + * The amount of items skipped from the start. + * @type {number} + * @memberof UserMatchListResponse + */ + skip: number; + /** + * The page size of the response. + * @type {number} + * @memberof UserMatchListResponse + */ + limit: number; +} + + diff --git a/src/serverApi/v3/models/user-match-response.ts b/src/serverApi/v3/models/user-match-response.ts new file mode 100644 index 0000000..4ac2c6b --- /dev/null +++ b/src/serverApi/v3/models/user-match-response.ts @@ -0,0 +1,80 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface UserMatchResponse + */ +export interface UserMatchResponse { + /** + * local user id + * @type {string} + * @memberof UserMatchResponse + */ + userId: string; + /** + * login name of local user + * @type {string} + * @memberof UserMatchResponse + */ + loginName: string; + /** + * firstname of local user + * @type {string} + * @memberof UserMatchResponse + */ + firstName: string; + /** + * lastname of local user + * @type {string} + * @memberof UserMatchResponse + */ + lastName: string; + /** + * list of user roles from external system: student, teacher, admin + * @type {Array} + * @memberof UserMatchResponse + */ + roleNames: Array; + /** + * match type: admin (manual) or auto (set, when names match exactly for a single user + * @type {string} + * @memberof UserMatchResponse + */ + matchedBy?: UserMatchResponseMatchedBy; +} + +/** + * @export + * @enum {string} + */ +export enum UserMatchResponseRoleNames { + STUDENT = 'student', + TEACHER = 'teacher', + ADMIN = 'admin' +} +/** + * @export + * @enum {string} + */ +export enum UserMatchResponseMatchedBy { + AUTO = 'auto', + ADMIN = 'admin' +} + + + diff --git a/src/serverApi/v3/models/user-response.ts b/src/serverApi/v3/models/user-response.ts new file mode 100644 index 0000000..d57b33a --- /dev/null +++ b/src/serverApi/v3/models/user-response.ts @@ -0,0 +1,105 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { ClassResponse } from './class-response'; +import { ConsentsResponse } from './consents-response'; + +/** + * + * @export + * @interface UserResponse + */ +export interface UserResponse { + /** + * + * @type {string} + * @memberof UserResponse + */ + _id: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + firstName: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + lastName: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + email: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + createdAt: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + birthday: string; + /** + * + * @type {object} + * @memberof UserResponse + */ + preferences: object; + /** + * + * @type {string} + * @memberof UserResponse + */ + consentStatus: string; + /** + * + * @type {ConsentsResponse} + * @memberof UserResponse + */ + consent: ConsentsResponse; + /** + * + * @type {Array} + * @memberof UserResponse + */ + classes: Array; + /** + * + * @type {string} + * @memberof UserResponse + */ + importHash: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + lastLoginSystemChange: string; + /** + * + * @type {string} + * @memberof UserResponse + */ + outdatedSince: string; +} + + diff --git a/src/serverApi/v3/models/validation-error.ts b/src/serverApi/v3/models/validation-error.ts new file mode 100644 index 0000000..0306ac1 --- /dev/null +++ b/src/serverApi/v3/models/validation-error.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface ValidationError + */ +export interface ValidationError { + /** + * The response status code. + * @type {number} + * @memberof ValidationError + */ + code: number; + /** + * The error type. + * @type {string} + * @memberof ValidationError + */ + type: string; + /** + * The error title. + * @type {string} + * @memberof ValidationError + */ + title: string; + /** + * The error message. + * @type {string} + * @memberof ValidationError + */ + message: string; + /** + * The error details. + * @type {object} + * @memberof ValidationError + */ + details?: object; +} + + diff --git a/src/serverApi/v3/models/video-conference-create-params.ts b/src/serverApi/v3/models/video-conference-create-params.ts new file mode 100644 index 0000000..6d7893d --- /dev/null +++ b/src/serverApi/v3/models/video-conference-create-params.ts @@ -0,0 +1,49 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface VideoConferenceCreateParams + */ +export interface VideoConferenceCreateParams { + /** + * + * @type {boolean} + * @memberof VideoConferenceCreateParams + */ + everyAttendeeJoinsMuted?: boolean; + /** + * + * @type {boolean} + * @memberof VideoConferenceCreateParams + */ + everybodyJoinsAsModerator?: boolean; + /** + * + * @type {boolean} + * @memberof VideoConferenceCreateParams + */ + moderatorMustApproveJoinRequests?: boolean; + /** + * The URL that the BigBlueButton client will go to after users click the OK button on the ‘You have been logged out’ or ’This session was ended’ message. Has to be a URL from the same domain that the conference is started from. + * @type {string} + * @memberof VideoConferenceCreateParams + */ + logoutUrl?: string; +} + + diff --git a/src/serverApi/v3/models/video-conference-info-response.ts b/src/serverApi/v3/models/video-conference-info-response.ts new file mode 100644 index 0000000..19b01a3 --- /dev/null +++ b/src/serverApi/v3/models/video-conference-info-response.ts @@ -0,0 +1,39 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { VideoConferenceOptionsResponse } from './video-conference-options-response'; +import { VideoConferenceStateResponse } from './video-conference-state-response'; + +/** + * + * @export + * @interface VideoConferenceInfoResponse + */ +export interface VideoConferenceInfoResponse { + /** + * + * @type {VideoConferenceStateResponse} + * @memberof VideoConferenceInfoResponse + */ + state: VideoConferenceStateResponse; + /** + * The options for the video conference. + * @type {VideoConferenceOptionsResponse} + * @memberof VideoConferenceInfoResponse + */ + options: VideoConferenceOptionsResponse; +} + + diff --git a/src/serverApi/v3/models/video-conference-join-response.ts b/src/serverApi/v3/models/video-conference-join-response.ts new file mode 100644 index 0000000..b281192 --- /dev/null +++ b/src/serverApi/v3/models/video-conference-join-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface VideoConferenceJoinResponse + */ +export interface VideoConferenceJoinResponse { + /** + * The URL to join the video conference. + * @type {string} + * @memberof VideoConferenceJoinResponse + */ + url: string; +} + + diff --git a/src/serverApi/v3/models/video-conference-options-response.ts b/src/serverApi/v3/models/video-conference-options-response.ts new file mode 100644 index 0000000..a38f1bb --- /dev/null +++ b/src/serverApi/v3/models/video-conference-options-response.ts @@ -0,0 +1,43 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface VideoConferenceOptionsResponse + */ +export interface VideoConferenceOptionsResponse { + /** + * Every attendee joins muted + * @type {boolean} + * @memberof VideoConferenceOptionsResponse + */ + everyAttendeeJoinsMuted: boolean; + /** + * Every attendee joins as a moderator + * @type {boolean} + * @memberof VideoConferenceOptionsResponse + */ + everybodyJoinsAsModerator: boolean; + /** + * Moderator must approve join requests + * @type {boolean} + * @memberof VideoConferenceOptionsResponse + */ + moderatorMustApproveJoinRequests: boolean; +} + + diff --git a/src/serverApi/v3/models/video-conference-scope.ts b/src/serverApi/v3/models/video-conference-scope.ts new file mode 100644 index 0000000..943afca --- /dev/null +++ b/src/serverApi/v3/models/video-conference-scope.ts @@ -0,0 +1,28 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum VideoConferenceScope { + COURSE = 'course', + EVENT = 'event' +} + + + diff --git a/src/serverApi/v3/models/video-conference-state-response.ts b/src/serverApi/v3/models/video-conference-state-response.ts new file mode 100644 index 0000000..64dd8bb --- /dev/null +++ b/src/serverApi/v3/models/video-conference-state-response.ts @@ -0,0 +1,29 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @enum {string} + */ +export enum VideoConferenceStateResponse { + NOT_STARTED = 'NOT_STARTED', + RUNNING = 'RUNNING', + FINISHED = 'FINISHED' +} + + + diff --git a/src/serverApi/v3/models/visibility-body-params.ts b/src/serverApi/v3/models/visibility-body-params.ts new file mode 100644 index 0000000..117b26f --- /dev/null +++ b/src/serverApi/v3/models/visibility-body-params.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface VisibilityBodyParams + */ +export interface VisibilityBodyParams { + /** + * + * @type {boolean} + * @memberof VisibilityBodyParams + */ + isVisible: boolean; +} + + diff --git a/src/serverApi/v3/models/visibility-settings-response.ts b/src/serverApi/v3/models/visibility-settings-response.ts new file mode 100644 index 0000000..26ed3c9 --- /dev/null +++ b/src/serverApi/v3/models/visibility-settings-response.ts @@ -0,0 +1,31 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + + +/** + * + * @export + * @interface VisibilitySettingsResponse + */ +export interface VisibilitySettingsResponse { + /** + * + * @type {string} + * @memberof VisibilitySettingsResponse + */ + publishedAt?: string; +} + + diff --git a/src/serverApi/v3/models/years-response.ts b/src/serverApi/v3/models/years-response.ts new file mode 100644 index 0000000..5302210 --- /dev/null +++ b/src/serverApi/v3/models/years-response.ts @@ -0,0 +1,50 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * Schulcloud-Verbund-Software Server API + * This is v3 of Schulcloud-Verbund-Software Server. Checkout /docs for v1. + * + * The version of the OpenAPI document: 3.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import { SchoolYearResponse } from './school-year-response'; + +/** + * + * @export + * @interface YearsResponse + */ +export interface YearsResponse { + /** + * + * @type {Array} + * @memberof YearsResponse + */ + schoolYears: Array; + /** + * + * @type {SchoolYearResponse} + * @memberof YearsResponse + */ + activeYear: SchoolYearResponse; + /** + * + * @type {SchoolYearResponse} + * @memberof YearsResponse + */ + lastYear: SchoolYearResponse; + /** + * + * @type {SchoolYearResponse} + * @memberof YearsResponse + */ + nextYear: SchoolYearResponse; +} + + diff --git a/tests/test-utils/factory/meResponseFactory.ts b/tests/test-utils/factory/meResponseFactory.ts index 3b4e19d..e2840fe 100644 --- a/tests/test-utils/factory/meResponseFactory.ts +++ b/tests/test-utils/factory/meResponseFactory.ts @@ -18,7 +18,7 @@ export const meResponseFactory = Factory.define(({ sequence }) => ({ }, roles: [], permissions: [], - language: LanguageType.De, + language: LanguageType.DE, account: { id: `account-${sequence}`, }, From a269fe98e72e87278b32756291e83b6e66b22b27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Thu, 8 Aug 2024 14:06:46 +0200 Subject: [PATCH 23/26] adjust deployment, fix api tests --- ansible/group_vars/develop/shd-client.yml | 1 - .../shd-client-core/defaults/main.yml} | 1 - .../roles/shd-client-core/templates/configmap.yml.j2 | 2 -- .../roles/shd-client-core/templates/deployment.yml.j2 | 4 ++-- ansible/roles/shd-client-core/templates/ingress.yml.j2 | 2 +- ansible/roles/shd-client-core/templates/svc.yml.j2 | 2 +- src/modules/data/auth/auth.store.unit.ts | 8 ++++---- src/modules/data/env-config/envConfig.store.unit.ts | 10 ++++++---- 8 files changed, 14 insertions(+), 16 deletions(-) rename ansible/{group_vars/all/shd-client.yml => roles/shd-client-core/defaults/main.yml} (89%) diff --git a/ansible/group_vars/develop/shd-client.yml b/ansible/group_vars/develop/shd-client.yml index a3f9a28..434fda7 100644 --- a/ansible/group_vars/develop/shd-client.yml +++ b/ansible/group_vars/develop/shd-client.yml @@ -1,4 +1,3 @@ --- -PORT: 4100 SHD_CLIENT_IMAGE: ghcr.io/hpi-schul-cloud/shd-client SHD_CLIENT_PREFIX: shd2- \ No newline at end of file diff --git a/ansible/group_vars/all/shd-client.yml b/ansible/roles/shd-client-core/defaults/main.yml similarity index 89% rename from ansible/group_vars/all/shd-client.yml rename to ansible/roles/shd-client-core/defaults/main.yml index 9dd752b..98b2ed5 100644 --- a/ansible/group_vars/all/shd-client.yml +++ b/ansible/roles/shd-client-core/defaults/main.yml @@ -1,4 +1,3 @@ --- -PORT: 4100 SHD_CLIENT_IMAGE: quay.io/schulcloudverbund/shd-client SHD_CLIENT_PREFIX: dashboard2. diff --git a/ansible/roles/shd-client-core/templates/configmap.yml.j2 b/ansible/roles/shd-client-core/templates/configmap.yml.j2 index 8a8dba4..e1950fd 100644 --- a/ansible/roles/shd-client-core/templates/configmap.yml.j2 +++ b/ansible/roles/shd-client-core/templates/configmap.yml.j2 @@ -7,7 +7,5 @@ metadata: labels: app: shd-client data: - # general - NODE_ENV: "production" TZ: "Europe/Berlin" API_URL: "https://{{ DOMAIN }}/api" diff --git a/ansible/roles/shd-client-core/templates/deployment.yml.j2 b/ansible/roles/shd-client-core/templates/deployment.yml.j2 index 735d36b..a820ded 100644 --- a/ansible/roles/shd-client-core/templates/deployment.yml.j2 +++ b/ansible/roles/shd-client-core/templates/deployment.yml.j2 @@ -82,10 +82,10 @@ spec: resources: limits: cpu: {{ SHD_CLIENT_CPU_LIMITS|default("1000m", true) }} - memory: {{ SHD_CLIENT_MEMORY_LIMITS|default("256Mi", true) }} + memory: {{ SHD_CLIENT_MEMORY_LIMITS|default("2Gi", true) }} requests: cpu: {{ SHD_CLIENT_CPU_REQUESTS|default("100m", true) }} - memory: {{ SHD_CLIENT_MEMORY_REQUESTS|default("32Mi", true) }} + memory: {{ SHD_CLIENT_MEMORY_REQUESTS|default("128Mi", true) }} {% if AFFINITY_ENABLE is defined and AFFINITY_ENABLE|bool %} affinity: podAffinity: diff --git a/ansible/roles/shd-client-core/templates/ingress.yml.j2 b/ansible/roles/shd-client-core/templates/ingress.yml.j2 index 4af2346..d27dab5 100644 --- a/ansible/roles/shd-client-core/templates/ingress.yml.j2 +++ b/ansible/roles/shd-client-core/templates/ingress.yml.j2 @@ -37,4 +37,4 @@ spec: service: name: shd-client-svc port: - number: {{ PORT }} + number: 4100 diff --git a/ansible/roles/shd-client-core/templates/svc.yml.j2 b/ansible/roles/shd-client-core/templates/svc.yml.j2 index 6ab25a6..59c3f5e 100644 --- a/ansible/roles/shd-client-core/templates/svc.yml.j2 +++ b/ansible/roles/shd-client-core/templates/svc.yml.j2 @@ -8,7 +8,7 @@ metadata: spec: type: ClusterIP ports: - - port: {{ PORT }} + - port: 4100 targetPort: 4100 protocol: TCP name: shd-client diff --git a/src/modules/data/auth/auth.store.unit.ts b/src/modules/data/auth/auth.store.unit.ts index 1fa7bc5..089ba2e 100644 --- a/src/modules/data/auth/auth.store.unit.ts +++ b/src/modules/data/auth/auth.store.unit.ts @@ -1,4 +1,4 @@ -import * as serverApi from "@/serverApi/v3/api"; +import * as serverMeApi from "@/serverApi/v3/api/me-api"; import { meResponseFactory } from "@@/tests/test-utils/factory"; import { mockApiResponse } from "@@/tests/test-utils/mockApiResponse"; import { createMock, DeepMocked } from "@golevelup/ts-jest"; @@ -6,14 +6,14 @@ import { createPinia, setActivePinia } from "pinia"; import { useAuthStore } from "./auth.store"; describe("AuthStore", () => { - let meApi: DeepMocked; + let meApi: DeepMocked; beforeEach(() => { setActivePinia(createPinia()); - meApi = createMock(); + meApi = createMock(); - jest.spyOn(serverApi, "MeApiFactory").mockReturnValue(meApi); + jest.spyOn(serverMeApi, "MeApiFactory").mockReturnValue(meApi); }); afterEach(() => { diff --git a/src/modules/data/env-config/envConfig.store.unit.ts b/src/modules/data/env-config/envConfig.store.unit.ts index 00cc9e6..a0a5ce2 100644 --- a/src/modules/data/env-config/envConfig.store.unit.ts +++ b/src/modules/data/env-config/envConfig.store.unit.ts @@ -1,4 +1,4 @@ -import * as serverApi from "@/serverApi/v3/api"; +import * as serverDefaultApi from "@/serverApi/v3/api/default-api"; import { envsFactory } from "@@/tests/test-utils/factory"; import { mockApiResponse } from "@@/tests/test-utils/mockApiResponse"; import { createMock, DeepMocked } from "@golevelup/ts-jest"; @@ -6,14 +6,16 @@ import { createPinia, setActivePinia } from "pinia"; import { useEnvConfigStore } from "./envConfig.store"; describe("EnvConfigStore", () => { - let defaultApi: DeepMocked; + let defaultApi: DeepMocked; beforeEach(() => { setActivePinia(createPinia()); - defaultApi = createMock(); + defaultApi = createMock(); - jest.spyOn(serverApi, "DefaultApiFactory").mockReturnValue(defaultApi); + jest + .spyOn(serverDefaultApi, "DefaultApiFactory") + .mockReturnValue(defaultApi); }); afterEach(() => { From cdc61f4368372d386249f06c051c1c3727e0dae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Mon, 12 Aug 2024 13:04:18 +0200 Subject: [PATCH 24/26] remove legacy scss styles, change to full webpack build --- .eslintrc.js | 1 + Dockerfile | 8 +- babel.config.js | 2 +- .../docker}/nginx.conf.template | 0 .../webpack}/nonce-placeholder-plugin.js | 0 .../webpack}/vue-i18n-loader.js | 0 config/webpack/webpack.common.js | 195 + config/webpack/webpack.dev.js | 26 + config/webpack/webpack.prod.js | 18 + jest.config.js | 50 +- package-lock.json | 18249 +++++++--------- package.json | 71 +- sonar-project.properties | 3 +- src/global.d.ts | 4 + src/main.ts | 3 +- src/plugins/i18n.d.ts | 8 - src/plugins/vuetify.options.ts | 1 + src/plugins/vuetify.ts | 3 +- src/router/index.ts | 2 +- src/styles/css-variables/_breakpoints.scss | 8 - src/styles/css-variables/_durations.scss | 16 - src/styles/css-variables/_layers.scss | 11 - src/styles/css-variables/_sizes.scss | 15 - src/styles/css-variables/_spacing.scss | 18 - src/styles/css-variables/_typography.scss | 41 - .../{utility/_fonts.scss => fonts.scss} | 0 src/styles/global.scss | 17 - src/styles/main.scss | 4 + src/styles/settings.scss | 4 + src/styles/typography.scss | 7 + src/styles/utility/_body.scss | 56 - src/styles/utility/_breakpoints.scss | 23 - src/styles/utility/_buttons.scss | 11 - src/styles/utility/_cards.scss | 3 - src/styles/utility/_colors.scss | 12 - src/styles/utility/_icons.scss | 27 - src/styles/utility/_links.scss | 3 - src/styles/utility/_spacing.scss | 50 - src/styles/utility/_typography.scss | 95 - src/styles/variables.scss | 79 - src/utils/api/api.ts | 23 +- src/utils/api/api.unit.ts | 88 +- tests/setup.js | 29 +- tsconfig.json | 5 +- vue.config.js | 102 - 45 files changed, 8203 insertions(+), 11188 deletions(-) rename {dockerconf => config/docker}/nginx.conf.template (100%) rename {webpack-config => config/webpack}/nonce-placeholder-plugin.js (100%) rename {webpack-config => config/webpack}/vue-i18n-loader.js (100%) create mode 100644 config/webpack/webpack.common.js create mode 100644 config/webpack/webpack.dev.js create mode 100644 config/webpack/webpack.prod.js create mode 100644 src/global.d.ts delete mode 100644 src/plugins/i18n.d.ts delete mode 100644 src/styles/css-variables/_breakpoints.scss delete mode 100644 src/styles/css-variables/_durations.scss delete mode 100644 src/styles/css-variables/_layers.scss delete mode 100644 src/styles/css-variables/_sizes.scss delete mode 100644 src/styles/css-variables/_spacing.scss delete mode 100644 src/styles/css-variables/_typography.scss rename src/styles/{utility/_fonts.scss => fonts.scss} (100%) delete mode 100644 src/styles/global.scss create mode 100644 src/styles/main.scss create mode 100644 src/styles/typography.scss delete mode 100644 src/styles/utility/_body.scss delete mode 100644 src/styles/utility/_breakpoints.scss delete mode 100644 src/styles/utility/_buttons.scss delete mode 100644 src/styles/utility/_cards.scss delete mode 100644 src/styles/utility/_colors.scss delete mode 100644 src/styles/utility/_icons.scss delete mode 100644 src/styles/utility/_links.scss delete mode 100644 src/styles/utility/_spacing.scss delete mode 100644 src/styles/utility/_typography.scss delete mode 100644 src/styles/variables.scss delete mode 100644 vue.config.js diff --git a/.eslintrc.js b/.eslintrc.js index 6b3ccfc..991ad16 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -95,6 +95,7 @@ module.exports = { globals: { mount: false, shallowMount: false, + fail: false, }, }, ], diff --git a/Dockerfile b/Dockerfile index d9c7285..acb312e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,19 +9,19 @@ WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci -COPY babel.config.js .eslintrc.js LICENSE.md .prettierrc.json tsconfig.json tsconfig.build.json vue.config.js .eslintignore .prettierignore index.html ./ +COPY babel.config.js .eslintrc.js LICENSE.md .prettierrc.json tsconfig.json tsconfig.build.json .eslintignore .prettierignore index.html ./ COPY public ./public COPY src ./src -COPY webpack-config ./webpack-config +COPY config/webpack ./config/webpack RUN NODE_ENV=production npm run build -COPY .git ./ +COPY .git ./git RUN echo "{\"sha\": \"$(git rev-parse HEAD)\", \"version\": \"$(git describe --tags --abbrev=0)\", \"commitDate\": \"$(git log -1 --format=%cd --date=format:'%Y-%m-%dT%H:%M:%SZ')\", \"birthdate\": \"$(date +%Y-%m-%dT%H:%M:%SZ)\"}" > ./dist/version # run stage FROM docker.io/nginx:1.27 RUN mkdir /etc/nginx/templates -COPY dockerconf/nginx.conf.template /etc/nginx/templates/default.conf.template +COPY config/docker/nginx.conf.template /etc/nginx/templates/default.conf.template COPY --from=build-stage /app/dist /usr/share/nginx/html/frontend EXPOSE 4100 diff --git a/babel.config.js b/babel.config.js index 99916a7..2882c01 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,3 +1,3 @@ module.exports = { - presets: ["@vue/cli-plugin-babel/preset"], + presets: ["@babel/preset-env"], }; diff --git a/dockerconf/nginx.conf.template b/config/docker/nginx.conf.template similarity index 100% rename from dockerconf/nginx.conf.template rename to config/docker/nginx.conf.template diff --git a/webpack-config/nonce-placeholder-plugin.js b/config/webpack/nonce-placeholder-plugin.js similarity index 100% rename from webpack-config/nonce-placeholder-plugin.js rename to config/webpack/nonce-placeholder-plugin.js diff --git a/webpack-config/vue-i18n-loader.js b/config/webpack/vue-i18n-loader.js similarity index 100% rename from webpack-config/vue-i18n-loader.js rename to config/webpack/vue-i18n-loader.js diff --git a/config/webpack/webpack.common.js b/config/webpack/webpack.common.js new file mode 100644 index 0000000..e59d446 --- /dev/null +++ b/config/webpack/webpack.common.js @@ -0,0 +1,195 @@ +const path = require("path"); +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const { VueLoaderPlugin } = require("vue-loader"); +const { VuetifyPlugin } = require("webpack-plugin-vuetify"); +const NoncePlaceholderPlugin = require("./nonce-placeholder-plugin"); +const { DefinePlugin, ProgressPlugin } = require("webpack"); +const CopyPlugin = require("copy-webpack-plugin"); +const ESLintWebpackPlugin = require("eslint-webpack-plugin"); + +const __base = path.resolve(__dirname, "../.."); +const __src = path.resolve(__base, "src"); + +const getDir = (subPath) => path.resolve(__base, subPath); + +module.exports = { + devtool: false, // "source-map", see https://webpack.js.org/configuration/devtool/ + + // Entry: main file + entry: { + app: [path.resolve(__src, "main.ts")], + }, + + // Output + output: { + filename: "_vue/js/[name].js", + path: path.resolve(__base, "dist"), + publicPath: "/", + chunkFilename: "_vue/js/[name].js", + clean: true, + }, + + // Optimizations + optimization: { + realContentHash: false, + splitChunks: { + cacheGroups: { + defaultVendors: { + name: "chunk-vendors", + test: /[\\/]node_modules[\\/]/, + priority: -10, + chunks: "initial", + }, + common: { + name: "chunk-common", + minChunks: 2, + priority: -20, + chunks: "initial", + reuseExistingChunk: true, + }, + }, + }, + }, + + // Plugins + plugins: [ + new DefinePlugin({ + __VUE_OPTIONS_API__: "false", + __VUE_PROD_DEVTOOLS__: "false", + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: "false", + }), + + new ProgressPlugin(), + + new VueLoaderPlugin(), + new VuetifyPlugin({ styles: { configFile: "src/styles/settings.scss" } }), + + new NoncePlaceholderPlugin(), + + new HtmlWebpackPlugin({ + title: "Superhero-Dashboard", + scriptLoading: "defer", + favicon: path.resolve(__base, "public", "favicon.png"), + template: path.resolve(__base, "index.html"), + }), + + new CopyPlugin({ + patterns: [ + { + from: path.resolve(__base, "public"), + to: path.resolve(__base, "dist"), + toType: "dir", + noErrorOnMissing: true, + globOptions: { + ignore: ["**/.DS_Store"], + }, + info: { + minimized: true, + }, + }, + ], + }), + + new ESLintWebpackPlugin({ + extensions: [".js", ".jsx", ".vue", ".ts", ".tsx"], + failOnWarning: false, + failOnError: true, + }), + ], + + resolve: { + alias: { + "@": path.resolve(__src), + "@data": getDir("src/modules/data"), + "@feature": getDir("src/modules/feature"), + "@ui": getDir("src/modules/ui"), + "@util": getDir("src/modules/util"), + "@page": getDir("src/modules/page"), + }, + extensions: [".tsx", ".ts", ".mjs", ".js", ".jsx", ".vue", ".json"], + }, + + //Webpack dosent know how to handler all type of files and what to do with them, so this section + //we can capture and configure a specific type of file and determine a loader plugin to process it + module: { + rules: [ + // Javascript + { + test: /\.m?jsx?$/, + exclude: /node_modules/, + use: ["babel-loader"], + }, + // Typescript + { + test: /\.tsx?$/, + use: [ + { + loader: "babel-loader", + }, + { + loader: "ts-loader", + options: { + transpileOnly: true, + appendTsSuffixTo: [/\.vue$/], + happyPackMode: false, + configFile: path.resolve(__base, "tsconfig.build.json"), + }, + }, + ], + }, + // I18n - TS + { + test: /\.ts$/, + type: "javascript/auto", + loader: path.resolve(__dirname, "vue-i18n-loader.js"), + include: [path.resolve(__src, "locales")], + }, + // Vue + { + test: /\.vue$/, + loader: "vue-loader", + }, + // SVG + { + test: /\.(svg)(\?.*)?$/, + type: "asset/resource", + generator: { + filename: "_vue/img/[name].[hash:8][ext]", + }, + }, + // Images + { + test: /\.(png|jpe?g|gif|webp|avif)(\?.*)?$/, + type: "asset", + generator: { + filename: "_vue/img/[name].[hash:8][ext]", + }, + }, + // Media + { + test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/, + type: "asset", + generator: { + filename: "_vue/media/[name].[hash:8][ext]", + }, + }, + // Fonts + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/i, + type: "asset", + generator: { + filename: "_vue/fonts/[name].[hash:8][ext]", + }, + }, + // CSS, SCSS + { + test: /\.css$/, + use: ["vue-style-loader", "css-loader"], + }, + { + test: /\.(s([ac])ss)$/, + use: ["vue-style-loader", "css-loader", "sass-loader"], + }, + ], + }, +}; diff --git a/config/webpack/webpack.dev.js b/config/webpack/webpack.dev.js new file mode 100644 index 0000000..9c04ed8 --- /dev/null +++ b/config/webpack/webpack.dev.js @@ -0,0 +1,26 @@ +const { merge } = require("webpack-merge"); +const common = require("./webpack.common"); +const { DefinePlugin } = require("webpack"); + +//Configure dev enviroment by combining common configuration and adding some more options +module.exports = merge(common, { + mode: "development", + devtool: "inline-source-map", + plugins: [ + new DefinePlugin({ + "process.env": { + NODE_ENV: '"development"', + }, + }), + ], + devServer: + process.env.NODE_ENV === "development" + ? { + port: 4100, + allowedHosts: "all", + client: { + overlay: false, + }, + } + : {}, +}); diff --git a/config/webpack/webpack.prod.js b/config/webpack/webpack.prod.js new file mode 100644 index 0000000..8f91a9f --- /dev/null +++ b/config/webpack/webpack.prod.js @@ -0,0 +1,18 @@ +const { merge } = require("webpack-merge"); +const common = require("./webpack.common"); +const { DefinePlugin } = require("webpack"); + +// Configure prod enviroment by using common configuration and adding some more options +module.exports = merge(common, { + mode: "production", + devtool: false, + plugins: [ + new DefinePlugin({ + "process.env": { + NODE_ENV: '"production"', + }, + }), + ], + // we can add many of optimizations configurations as minification, compression and so on, + // but to be a minumal project example so its needs to have only minimal configuration +}); diff --git a/jest.config.js b/jest.config.js index 223fbe9..4385fdd 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,16 +1,17 @@ -const deepmerge = require("deepmerge"); -const defaultPreset = require("@vue/cli-plugin-unit-jest/presets/typescript-and-babel/jest-preset.js"); +const config = { + verbose: true, + coverageProvider: "v8", -const config = deepmerge(defaultPreset, { - testMatch: ["**/*.unit.{j,t}s?(x)"], - - moduleFileExtensions: ["mjs"], - transform: { - "^.+\\.mjs$": "babel-jest", + testEnvironment: "jsdom", + testEnvironmentOptions: { + customExportConditions: ["node", "node-addons"], }, + injectGlobals: true, + moduleDirectories: ["node_modules"], + moduleFileExtensions: ["js", "jsx", "json", "vue", "ts", "tsx", "mjs"], + moduleNameMapper: { - "^axios$": require.resolve("axios"), "\\.(jpg|ico|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/tests/test-utils/mediaFileMock.js", "^@data/(.*)$": "/src/modules/data/$1", @@ -22,24 +23,39 @@ const config = deepmerge(defaultPreset, { "^@@/(.*)$": "/$1", }, + testPathIgnorePatterns: ["/node_modules/"], + testMatch: ["**/*.unit.{j,t}s?(x)"], + preset: "ts-jest", setupFiles: ["./tests/setup.js"], + transform: { + "^.+\\.vue$": "@vue/vue3-jest", + + ".+\\.(css|styl|less|sass|scss|jpg|jpeg|png|svg|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga|avif)$": + "jest-transform-stub", + + "^.+\\.mjs$": "babel-jest", + "^.+\\.jsx?$": "babel-jest", + "^.+\\.tsx?$": [ + "ts-jest", + { + babelConfig: true, + }, + ], + }, + transformIgnorePatterns: ["/node_modules/(?!vuetify)/"], collectCoverageFrom: [ // Include - // TODO Vue files are excluded for now, since they don't report the correct coverage - "/src/layouts/**/*.{js,ts}", // add vue files - "/src/modules/**/*.{js,ts}", // add vue files + "/src/layouts/**/*.{js,ts,vue}", + "/src/modules/**/*.{js,ts,vue}", "/src/plugins/**/*.(js|ts)", "/src/router/guards/**/*.(js|ts)", "/src/utils/**/*.(js|ts)", // Exclude "!/src/**/index.(js|ts)", + "!/src/**/*.d.(js|ts)", ], -}); - -// we have to overwrite(!) config.transformIgnorePatterns here -// otherwise the rule would be added and have no effect -config.transformIgnorePatterns = ["/node_modules/(?!vuetify)/"]; +}; module.exports = config; diff --git a/package-lock.json b/package-lock.json index be33661..749db56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,67 +17,65 @@ "vue-dompurify-html": "^5.1.0", "vue-i18n": "^9.13.1", "vue-router": "^4.4.0", - "vuetify": "^3.6.13" + "vuetify": "^3.6.14" }, "devDependencies": { + "@babel/core": "^7.24.3", + "@babel/preset-env": "^7.24.3", "@golevelup/ts-jest": "^0.5.0", - "@intlify/bundle-utils": "^7.5.1", + "@intlify/bundle-utils": "^8.0.0", + "@jest/globals": "^29.7.0", "@mdi/js": "^7.4.47", "@openapitools/openapi-generator-cli": "^2.13.4", "@pinia/testing": "^0.1.4", - "@types/jest": "^27.5.2", - "@typescript-eslint/eslint-plugin": "^6.13.2", - "@typescript-eslint/parser": "^6.13.2", - "@vue/cli-plugin-babel": "~5.0.8", - "@vue/cli-plugin-eslint": "~5.0.8", - "@vue/cli-plugin-router": "~5.0.8", - "@vue/cli-plugin-typescript": "~5.0.8", - "@vue/cli-plugin-unit-jest": "~5.0.8", - "@vue/cli-service": "~5.0.8", - "@vue/eslint-config-typescript": "^12.0.0", - "@vue/test-utils": "^2.4.6", - "@vue/vue3-jest": "^27.0.0", + "@types/jest": "^29.5.12", + "@types/webpack-env": "^1.18.5", + "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/parser": "^7.4.0", + "@vue/eslint-config-typescript": "^13.0.0", + "@vue/test-utils": "^2.4.5", + "@vue/vue3-jest": "^29.2.6", "arg": "^5.0.2", - "babel-jest": "^27.1.1", - "eslint": "8.56", + "babel-jest": "^29.7.0", + "babel-loader": "^9.1.3", + "copy-webpack-plugin": "^12.0.2", + "css-loader": "^6.10.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-vue": "^9.27.0", - "eslint-plugin-vuetify": "^2.4.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-vue": "^9.23.0", + "eslint-webpack-plugin": "^4.1.0", "fishery": "^2.2.2", - "jest": "^27.5.1", + "html-webpack-plugin": "^5.6.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-transform-stub": "^2.0.0", "prettier": "^3.3.3", - "sass": "^1.67.0", - "sass-loader": "^13.3.3", - "ts-jest": "^27.1.5", - "typescript": "^4.9.5", + "sass": "^1.77.8", + "sass-loader": "^16.0.0", + "ts-jest": "^29.1.2", + "ts-loader": "^9.5.1", + "typescript": "^5.4.3", "vue-component-type-helpers": "^2.0.29", - "webpack-plugin-vuetify": "^2.0.1" + "vue-loader": "^17.4.2", + "vue-style-loader": "^4.1.3", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.4", + "webpack-merge": "^5.10.0", + "webpack-plugin-vuetify": "^3.0.3" }, "engines": { "node": "20", "npm": ">=9" } }, - "node_modules/@achrinza/node-ipc": { - "version": "9.2.9", - "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.9.tgz", - "integrity": "sha512-7s0VcTwiK/0tNOVdSX9FWMeFdOEcsAOz9HesBldXxFMaGvIak7KC2z9tV9EgsQXn6KUsWsfIkViMNuIo0GoZDQ==", - "dev": true, - "dependencies": { - "@node-ipc/js-queue": "2.0.3", - "event-pubsub": "4.3.0", - "js-message": "1.0.7" - }, - "engines": { - "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21 || 22" - } - }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -91,6 +89,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" @@ -104,6 +103,7 @@ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -113,6 +113,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", @@ -143,6 +144,7 @@ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.25.0", "@jridgewell/gen-mapping": "^0.3.5", @@ -158,6 +160,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -170,6 +173,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -183,6 +187,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.25.2", "@babel/helper-validator-option": "^7.24.8", @@ -199,6 +204,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.0.tgz", "integrity": "sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-member-expression-to-functions": "^7.24.8", @@ -220,6 +226,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "regexpu-core": "^5.3.1", @@ -237,6 +244,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -253,6 +261,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.8", "@babel/types": "^7.24.8" @@ -266,6 +275,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -279,6 +289,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", @@ -297,6 +308,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -309,6 +321,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -318,6 +331,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-wrap-function": "^7.25.0", @@ -335,6 +349,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.24.8", "@babel/helper-optimise-call-expression": "^7.24.7", @@ -352,6 +367,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -365,6 +381,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -377,7 +394,7 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -386,7 +403,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -396,6 +413,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -405,6 +423,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.25.0", "@babel/traverse": "^7.25.0", @@ -419,6 +438,7 @@ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.25.0", "@babel/types": "^7.25.0" @@ -432,6 +452,7 @@ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -443,9 +464,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.0.tgz", - "integrity": "sha512-CzdIU9jdP0dg7HdyB+bHvDJGagUv+qtzZt5rYCWwW6tITNqV9odjp6Qu41gkG0ca5UfdDUWrKkiAnHHdGRnOrA==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -454,13 +479,14 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.0.tgz", - "integrity": "sha512-dG0aApncVQwAUJa8tP1VHTnmU67BeIQvKafd3raEx315H54FfkZSz3B/TT+33ZQAjatGJA79gZqTtqL5QZUKXw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/traverse": "^7.25.3" }, "engines": { "node": ">=6.9.0" @@ -474,6 +500,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8" }, @@ -489,6 +516,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8" }, @@ -504,6 +532,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", @@ -521,6 +550,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/traverse": "^7.25.0" @@ -532,45 +562,12 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", - "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-decorators": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -583,6 +580,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -595,6 +593,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -607,6 +606,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -619,6 +619,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -629,26 +630,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", - "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -661,6 +648,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -673,6 +661,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz", "integrity": "sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -688,6 +677,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -703,6 +693,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -715,6 +706,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -727,6 +719,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -742,6 +735,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -754,6 +748,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -766,6 +761,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -778,6 +774,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -790,6 +787,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -802,6 +800,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -814,6 +813,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -829,6 +829,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -844,6 +845,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -859,6 +861,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -875,6 +878,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -890,6 +894,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-remap-async-to-generator": "^7.25.0", @@ -908,6 +913,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -925,6 +931,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -940,6 +947,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8" }, @@ -955,6 +963,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -971,6 +980,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -988,6 +998,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.0.tgz", "integrity": "sha512-xyi6qjr/fYU304fiRwFbekzkqVJZ6A7hOjWZd+89FVcBqPV3S9Wuozz82xdpLspckeaafntbzglaW4pqpzvtSw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-compilation-targets": "^7.24.8", @@ -1008,6 +1019,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/template": "^7.24.7" @@ -1024,6 +1036,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8" }, @@ -1039,6 +1052,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1055,6 +1069,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1070,6 +1085,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.0", "@babel/helper-plugin-utils": "^7.24.8" @@ -1086,6 +1102,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -1102,6 +1119,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1118,6 +1136,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -1134,6 +1153,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" @@ -1150,6 +1170,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.24.8", "@babel/helper-plugin-utils": "^7.24.8", @@ -1167,6 +1188,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -1183,6 +1205,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8" }, @@ -1198,6 +1221,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" @@ -1214,6 +1238,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1229,6 +1254,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1245,6 +1271,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.24.8", "@babel/helper-plugin-utils": "^7.24.8", @@ -1262,6 +1289,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.25.0", "@babel/helper-plugin-utils": "^7.24.8", @@ -1280,6 +1308,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1296,6 +1325,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1312,6 +1342,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1327,6 +1358,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1343,6 +1375,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1359,6 +1392,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7", @@ -1377,6 +1411,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-replace-supers": "^7.24.7" @@ -1393,6 +1428,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -1409,6 +1445,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", @@ -1426,6 +1463,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1441,6 +1479,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1457,6 +1496,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-create-class-features-plugin": "^7.24.7", @@ -1475,6 +1515,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1490,6 +1531,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "regenerator-transform": "^0.15.2" @@ -1506,6 +1548,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1516,31 +1559,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", - "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.1", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1556,6 +1580,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" @@ -1572,6 +1597,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1587,6 +1613,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1602,6 +1629,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.8" }, @@ -1617,6 +1645,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -1632,6 +1661,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1648,6 +1678,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1664,6 +1695,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz", "integrity": "sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -1676,16 +1708,17 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.2.tgz", - "integrity": "sha512-Y2Vkwy3ITW4id9c6KXshVV/x5yCGK7VdJmKkzOzNsDZMojRKfSA/033rRbLqlRozmhRXCejxWHLSJOg/wUHfzw==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.25.2", "@babel/helper-compilation-targets": "^7.25.2", "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.0", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", @@ -1777,6 +1810,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1790,13 +1824,15 @@ "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@babel/runtime": { "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dev": true, + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1809,6 +1845,7 @@ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/parser": "^7.25.0", @@ -1819,14 +1856,15 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.2.tgz", - "integrity": "sha512-s4/r+a7xTnny2O6FcZzqgT6nE4/GHEdcqj4qAeglbUOh0TeglEfmNJFAd/OLoVtGd6ZhAO8GCVvCNUO5t/VJVQ==", + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.0", + "@babel/parser": "^7.25.3", "@babel/template": "^7.25.0", "@babel/types": "^7.25.2", "debug": "^4.3.1", @@ -1840,7 +1878,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", @@ -1854,12 +1892,14 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -1871,6 +1911,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1881,6 +1922,7 @@ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -1890,6 +1932,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -1905,6 +1948,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -1914,6 +1958,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -1936,13 +1981,26 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -1958,6 +2016,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1965,11 +2024,25 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -1978,34 +2051,21 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@golevelup/ts-jest": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@golevelup/ts-jest/-/ts-jest-0.5.0.tgz", - "integrity": "sha512-UniUNOBraDD8vf6QNUPkpWMzhUXBtw40nCHekgBlaHy2p99MDV0aYLp4ZXifiyPOsFmg4BZQGs60lF6EpV7JpA==", - "dev": true - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "dev": true - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@golevelup/ts-jest/-/ts-jest-0.5.1.tgz", + "integrity": "sha512-1DfWJ4d2X3Ik7wKH2+WOtVHoYgdQAhgptoTRJOgJm18f02eKEnDyppxL7SREM3dbLx+jlFma+RcM+e5dl2Dymg==", "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } + "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", @@ -2013,6 +2073,7 @@ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -2022,11 +2083,36 @@ "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2040,13 +2126,15 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@intlify/bundle-utils": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-7.5.1.tgz", - "integrity": "sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@intlify/bundle-utils/-/bundle-utils-8.0.0.tgz", + "integrity": "sha512-1B++zykRnMwQ+20SpsZI1JCnV/YJt9Oq7AGlEurzkWJOFtFAVqaGc/oV36PBRYeiKnTbY9VYfjBimr2Vt42wLQ==", "dev": true, + "license": "MIT", "dependencies": { "@intlify/message-compiler": "^9.4.0", "@intlify/shared": "^9.4.0", @@ -2054,7 +2142,6 @@ "escodegen": "^2.1.0", "estree-walker": "^2.0.2", "jsonc-eslint-parser": "^2.3.0", - "magic-string": "^0.30.0", "mlly": "^1.2.0", "source-map-js": "^1.0.1", "yaml-eslint-parser": "^1.2.2" @@ -2075,6 +2162,7 @@ "version": "9.13.1", "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.13.1.tgz", "integrity": "sha512-+bcQRkJO9pcX8d0gel9ZNfrzU22sZFSA0WVhfXrf5jdJOS24a+Bp8pozuS9sBI9Hk/tGz83pgKfmqcn/Ci7/8w==", + "license": "MIT", "dependencies": { "@intlify/message-compiler": "9.13.1", "@intlify/shared": "9.13.1" @@ -2090,6 +2178,7 @@ "version": "9.13.1", "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.13.1.tgz", "integrity": "sha512-SKsVa4ajYGBVm7sHMXd5qX70O2XXjm55zdZB3VeMFCvQyvLew/dLvq3MqnaIsTMF1VkkOb9Ttr6tHcMlyPDL9w==", + "license": "MIT", "dependencies": { "@intlify/shared": "9.13.1", "source-map-js": "^1.0.2" @@ -2105,6 +2194,7 @@ "version": "9.13.1", "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.13.1.tgz", "integrity": "sha512-u3b6BKGhE6j/JeRU6C/RL2FgyJfy6LakbtfeVF8fJXURpZZTzfh3e05J0bu0XPw447Q6/WUp3C4ajv4TMS4YsQ==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -2117,6 +2207,7 @@ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2134,6 +2225,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2146,6 +2238,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2157,13 +2250,15 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -2181,6 +2276,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2196,6 +2292,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -2213,6 +2310,7 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -2229,25 +2327,27 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/console/node_modules/ansi-styles": { @@ -2255,6 +2355,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2270,6 +2371,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2286,6 +2388,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2297,42 +2400,25 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jest/console/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/console/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/@jest/console/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2341,42 +2427,43 @@ } }, "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "emittery": "^0.8.1", + "ci-info": "^3.2.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", "micromatch": "^4.0.4", - "rimraf": "^3.0.0", + "pretty-format": "^29.7.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" @@ -2392,6 +2479,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2407,6 +2495,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2423,6 +2512,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2434,42 +2524,25 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/core/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/@jest/core/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2478,42 +2551,132 @@ } }, "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "jest-mock": "^27.5.1" + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/@jest/fake-timers/node_modules/ansi-styles": { + "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2524,11 +2687,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/fake-timers/node_modules/chalk": { + "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2540,11 +2704,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/fake-timers/node_modules/color-convert": { + "node_modules/@jest/reporters/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2552,46 +2717,59 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/fake-timers/node_modules/color-name": { + "node_modules/@jest/reporters/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@jest/fake-timers/node_modules/has-flag": { + "node_modules/@jest/reporters/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/fake-timers/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/@jest/fake-timers/node_modules/supports-color": { + "node_modules/@jest/reporters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2599,25 +2777,99 @@ "node": ">=8" } }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/globals/node_modules/ansi-styles": { + "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2628,11 +2880,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/globals/node_modules/chalk": { + "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2644,11 +2897,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/globals/node_modules/color-convert": { + "node_modules/@jest/transform/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -2656,61 +2910,29 @@ "node": ">=7.0.0" } }, - "node_modules/@jest/globals/node_modules/color-name": { + "node_modules/@jest/transform/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/globals/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "license": "MIT" }, - "node_modules/@jest/globals/node_modules/has-flag": { + "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/globals/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals/node_modules/supports-color": { + "node_modules/@jest/transform/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -2718,287 +2940,30 @@ "node": ">=8" } }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, + "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { + "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3014,6 +2979,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3030,6 +2996,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3041,13 +3008,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jest/types/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3057,6 +3026,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3069,6 +3039,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -3082,6 +3053,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -3091,6 +3063,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -3100,6 +3073,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -3108,29 +3082,90 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", + "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@lukeed/csprng": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3139,13 +3174,15 @@ "version": "7.4.47", "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz", "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@nestjs/axios": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@nestjs/axios/-/axios-3.0.2.tgz", "integrity": "sha512-Z6GuOUdNQjP7FX+OuV2Ybyamse+/e0BFdTWBX5JxpBDKA+YkdLynDgG6HTF04zy6e9zPa19UX0WA2VDoehwhXQ==", "dev": true, + "license": "MIT", "peerDependencies": { "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", "axios": "^1.3.1", @@ -3157,6 +3194,7 @@ "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.3.0.tgz", "integrity": "sha512-DGv34UHsZBxCM3H5QGE2XE/+oLJzz5+714JQjBhjD9VccFlQs3LRxo/epso4l7nJIiNlZkPyIUC8WzfU/5RTsQ==", "dev": true, + "license": "MIT", "dependencies": { "iterare": "1.2.1", "tslib": "2.6.2", @@ -3187,6 +3225,7 @@ "integrity": "sha512-N06P5ncknW/Pm8bj964WvLIZn2gNhHliCBoAO1LeBvNImYkecqKcrmLbY49Fa1rmMfEM3MuBHeDys3edeuYAOA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", @@ -3219,23 +3258,12 @@ } } }, - "node_modules/@node-ipc/js-queue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", - "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", - "dev": true, - "dependencies": { - "easy-stack": "1.0.1" - }, - "engines": { - "node": ">=1.0.0" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3249,6 +3277,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -3258,6 +3287,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3271,6 +3301,7 @@ "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "consola": "^2.15.0", @@ -3289,6 +3320,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3304,6 +3336,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3320,6 +3353,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3331,13 +3365,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@nuxtjs/opencollective/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3347,6 +3383,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3358,7 +3395,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@openapitools/openapi-generator-cli": { "version": "2.13.4", @@ -3366,6 +3404,7 @@ "integrity": "sha512-4JKyrk55ohQK2FcuZbPdNvxdyXD14jjOIvE8hYjJ+E1cHbRbfXQXbYnjTODFE52Gx8eAxz8C9icuhDYDLn7nww==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "@nestjs/axios": "3.0.2", "@nestjs/common": "10.3.0", @@ -3402,6 +3441,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3417,6 +3457,7 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -3428,6 +3469,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3444,6 +3486,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3455,13 +3498,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@openapitools/openapi-generator-cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3471,6 +3516,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3479,18 +3525,19 @@ } }, "node_modules/@pinia/testing": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@pinia/testing/-/testing-0.1.4.tgz", - "integrity": "sha512-DJ3oXYqVa6SfAngZoUmKKBp+WmQ50XV41NWThgX49p66ptTeR756QRXd0lg42FC17sIWlAbtc9EEiu1T8Yzoig==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@pinia/testing/-/testing-0.1.5.tgz", + "integrity": "sha512-AcGzuotkzhRoF00htuxLfIPBBHVE6HjjB3YC5Y3os8vRgKu6ipknK5GBQq9+pduwYQhZ+BcCZDC9TyLAUlUpoQ==", "dev": true, + "license": "MIT", "dependencies": { - "vue-demi": "^0.14.8" + "vue-demi": "^0.14.10" }, "funding": { "url": "https://github.com/sponsors/posva" }, "peerDependencies": { - "pinia": ">=2.2.0" + "pinia": ">=2.2.1" } }, "node_modules/@pinia/testing/node_modules/vue-demi": { @@ -3499,6 +3546,7 @@ "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" @@ -3524,6 +3572,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -3534,6 +3583,7 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -3541,185 +3591,86 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.25", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", - "dev": true - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", - "dev": true, - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", - "dev": true - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", - "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "error-stack-parser": "^2.0.6", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } + "license": "MIT" }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "type-detect": "4.0.8" } }, - "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@sinonjs/commons": "^3.0.0" } }, - "node_modules/@soda/get-current-script": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@soda/get-current-script/-/get-current-script-1.0.2.tgz", - "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", - "dev": true - }, "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10.13.0" + "node": ">= 10" } }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -3733,6 +3684,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } @@ -3742,6 +3694,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -3752,6 +3705,7 @@ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } @@ -3761,6 +3715,7 @@ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -3771,6 +3726,7 @@ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3780,6 +3736,7 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3789,6 +3746,7 @@ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, + "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -3797,13 +3755,15 @@ "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" }, "node_modules/@types/eslint": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.0.tgz", - "integrity": "sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==", + "version": "8.56.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", + "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3814,6 +3774,7 @@ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -3823,13 +3784,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -3842,6 +3805,7 @@ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3854,6 +3818,7 @@ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3862,19 +3827,22 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3883,13 +3851,15 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -3899,44 +3869,55 @@ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "version": "29.5.12", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.12.tgz", + "integrity": "sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, + "license": "MIT", "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz", - "integrity": "sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw==", + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.2.0.tgz", + "integrity": "sha512-bm6EG6/pCpkxDf/0gDNDdtDILMOHgaQBVOJGdwsqClnxA3xL6jtMv76rLBc006RVMWbmaf0xbmom4Z/5o2nRkQ==", + "license": "MIT", "dependencies": { - "undici-types": "~6.11.1" + "undici-types": "~6.13.0" } }, "node_modules/@types/node-forge": { @@ -3944,57 +3925,38 @@ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, "node_modules/@types/qs": { "version": "6.9.15", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -4005,6 +3967,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, + "license": "MIT", "dependencies": { "@types/express": "*" } @@ -4014,6 +3977,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -4025,6 +3989,7 @@ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4033,45 +3998,59 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/strip-json-comments": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/web-bluetooth": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==" + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" }, "node_modules/@types/webpack-env": { "version": "1.18.5", "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.5.tgz", "integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { "version": "8.5.12", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "16.0.9", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.9.tgz", - "integrity": "sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -4080,36 +4059,36 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", + "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/type-utils": "7.18.0", + "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -4117,39 +4096,28 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", + "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -4158,16 +4126,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", + "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -4175,25 +4144,26 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", + "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/typescript-estree": "7.18.0", + "@typescript-eslint/utils": "7.18.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" }, "peerDependenciesMeta": { "typescript": { @@ -4202,12 +4172,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", + "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -4215,22 +4186,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", + "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/visitor-keys": "7.18.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -4242,35 +4214,12 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4279,53 +4228,40 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "7.18.0", + "@typescript-eslint/types": "7.18.0", + "@typescript-eslint/typescript-estree": "7.18.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", + "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.18.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -4336,3427 +4272,653 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@vue/babel-helper-vue-jsx-merge-props": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", - "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", - "dev": true - }, - "node_modules/@vue/babel-helper-vue-transform-on": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.2.tgz", - "integrity": "sha512-nOttamHUR3YzdEqdM/XXDyCSdxMA9VizUKoroLX6yTyRtggzQMHXcmwh8a7ZErcJttIBIc9s68a1B8GZ+Dmvsw==", - "dev": true - }, - "node_modules/@vue/babel-plugin-jsx": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.2.tgz", - "integrity": "sha512-nYTkZUVTu4nhP199UoORePsql0l+wj7v/oyQjtThUVhJl1U+6qHuoVhIvR3bf7eVKjbCK+Cs2AWd7mi9Mpz9rA==", "dev": true, - "dependencies": { - "@babel/helper-module-imports": "~7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9", - "@vue/babel-helper-vue-transform-on": "1.2.2", - "@vue/babel-plugin-resolve-type": "1.2.2", - "camelcase": "^6.3.0", - "html-tags": "^3.3.1", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - } - } + "license": "ISC" }, - "node_modules/@vue/babel-plugin-jsx/node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, + "node_modules/@vue/compiler-core": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.37.tgz", + "integrity": "sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@vue/babel-plugin-jsx/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@babel/parser": "^7.24.7", + "@vue/shared": "3.4.37", + "entities": "^5.0.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" } }, - "node_modules/@vue/babel-plugin-resolve-type": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.2.tgz", - "integrity": "sha512-EntyroPwNg5IPVdUJupqs0CFzuf6lUrVvCspmv2J1FITLeGnUCuoGNNk78dgCusxEiYj6RMkTJflGSxk5aIC4A==", - "dev": true, + "node_modules/@vue/compiler-dom": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.37.tgz", + "integrity": "sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/helper-module-imports": "~7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/parser": "^7.23.9", - "@vue/compiler-sfc": "^3.4.15" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@vue/compiler-core": "3.4.37", + "@vue/shared": "3.4.37" } }, - "node_modules/@vue/babel-plugin-resolve-type/node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", - "dev": true, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.37.tgz", + "integrity": "sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" + "@babel/parser": "^7.24.7", + "@vue/compiler-core": "3.4.37", + "@vue/compiler-dom": "3.4.37", + "@vue/compiler-ssr": "3.4.37", + "@vue/shared": "3.4.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.10", + "postcss": "^8.4.40", + "source-map-js": "^1.2.0" } }, - "node_modules/@vue/babel-plugin-transform-vue-jsx": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", - "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", - "dev": true, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.37.tgz", + "integrity": "sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "html-tags": "^2.0.0", - "lodash.kebabcase": "^4.1.1", - "svg-tags": "^1.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@vue/compiler-dom": "3.4.37", + "@vue/shared": "3.4.37" } }, - "node_modules/@vue/babel-plugin-transform-vue-jsx/node_modules/html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/@vue/devtools-api": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.3.tgz", + "integrity": "sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==", + "license": "MIT" }, - "node_modules/@vue/babel-preset-app": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-5.0.8.tgz", - "integrity": "sha512-yl+5qhpjd8e1G4cMXfORkkBlvtPCIgmRf3IYCWYDKIQ7m+PPa5iTm4feiNmCMD6yGqQWMhhK/7M3oWGL9boKwg==", + "node_modules/@vue/eslint-config-typescript": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", + "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.12.16", - "@babel/helper-compilation-targets": "^7.12.16", - "@babel/helper-module-imports": "^7.12.13", - "@babel/plugin-proposal-class-properties": "^7.12.13", - "@babel/plugin-proposal-decorators": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-jsx": "^7.12.13", - "@babel/plugin-transform-runtime": "^7.12.15", - "@babel/preset-env": "^7.12.16", - "@babel/runtime": "^7.12.13", - "@vue/babel-plugin-jsx": "^1.0.3", - "@vue/babel-preset-jsx": "^1.1.2", - "babel-plugin-dynamic-import-node": "^2.3.3", - "core-js": "^3.8.3", - "core-js-compat": "^3.8.3", - "semver": "^7.3.4" - }, - "peerDependencies": { - "@babel/core": "*", - "core-js": "^3", - "vue": "^2 || ^3.2.13" - }, - "peerDependenciesMeta": { - "core-js": { - "optional": true - }, - "vue": { - "optional": true - } - } - }, - "node_modules/@vue/babel-preset-app/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "vue-eslint-parser": "^9.3.1" }, "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/babel-preset-jsx": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", - "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", - "dev": true, - "dependencies": { - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", - "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", - "@vue/babel-sugar-functional-vue": "^1.4.0", - "@vue/babel-sugar-inject-h": "^1.4.0", - "@vue/babel-sugar-v-model": "^1.4.0", - "@vue/babel-sugar-v-on": "^1.4.0" + "node": "^18.18.0 || >=20.0.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0", - "vue": "*" + "eslint": "^8.56.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": ">=4.7.4" }, "peerDependenciesMeta": { - "vue": { + "typescript": { "optional": true } } }, - "node_modules/@vue/babel-sugar-composition-api-inject-h": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", - "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@vue/babel-sugar-composition-api-render-instance": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", - "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", - "dev": true, + "node_modules/@vue/reactivity": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.37.tgz", + "integrity": "sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==", + "license": "MIT", "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@vue/shared": "3.4.37" } }, - "node_modules/@vue/babel-sugar-functional-vue": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", - "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", - "dev": true, + "node_modules/@vue/runtime-core": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.37.tgz", + "integrity": "sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==", + "license": "MIT", "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@vue/reactivity": "3.4.37", + "@vue/shared": "3.4.37" } }, - "node_modules/@vue/babel-sugar-inject-h": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", - "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", - "dev": true, + "node_modules/@vue/runtime-dom": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.37.tgz", + "integrity": "sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==", + "license": "MIT", "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@vue/reactivity": "3.4.37", + "@vue/runtime-core": "3.4.37", + "@vue/shared": "3.4.37", + "csstype": "^3.1.3" } }, - "node_modules/@vue/babel-sugar-v-model": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", - "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", - "dev": true, + "node_modules/@vue/server-renderer": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.37.tgz", + "integrity": "sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==", + "license": "MIT", "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "camelcase": "^5.0.0", - "html-tags": "^2.0.0", - "svg-tags": "^1.0.0" + "@vue/compiler-ssr": "3.4.37", + "@vue/shared": "3.4.37" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "vue": "3.4.37" } }, - "node_modules/@vue/babel-sugar-v-model/node_modules/html-tags": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", - "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/@vue/shared": { + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.37.tgz", + "integrity": "sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==", + "license": "MIT" }, - "node_modules/@vue/babel-sugar-v-on": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", - "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", + "node_modules/@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/plugin-syntax-jsx": "^7.2.0", - "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", - "camelcase": "^5.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" } }, - "node_modules/@vue/cli-overlay": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", - "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", - "dev": true - }, - "node_modules/@vue/cli-plugin-babel": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-5.0.8.tgz", - "integrity": "sha512-a4qqkml3FAJ3auqB2kN2EMPocb/iu0ykeELwed+9B1c1nQ1HKgslKMHMPavYx3Cd/QAx2mBD4hwKBqZXEI/CsQ==", + "node_modules/@vue/vue3-jest": { + "version": "29.2.6", + "resolved": "https://registry.npmjs.org/@vue/vue3-jest/-/vue3-jest-29.2.6.tgz", + "integrity": "sha512-Hy4i2BsV5fUmER5LplYiAeRkLTDCSB3ZbnAeEawXtjto/ILaOnamBAoAvEqARgPpR6NRtiYjSgGKmllMtnFd9g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.12.16", - "@vue/babel-preset-app": "^5.0.8", - "@vue/cli-shared-utils": "^5.0.8", - "babel-loader": "^8.2.2", - "thread-loader": "^3.0.0", - "webpack": "^5.54.0" + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "chalk": "^2.1.0", + "convert-source-map": "^1.6.0", + "css-tree": "^2.0.1", + "source-map": "0.5.6", + "tsconfig": "^7.0.0" + }, + "engines": { + "node": ">10" }, "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + "@babel/core": "7.x", + "babel-jest": "29.x", + "jest": "29.x", + "typescript": ">= 4.3", + "vue": "^3.0.0-0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@vue/cli-plugin-eslint": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-5.0.8.tgz", - "integrity": "sha512-d11+I5ONYaAPW1KyZj9GlrV/E6HZePq5L5eAF5GgoVdu6sxr6bDgEoxzhcS1Pk2eh8rn1MxG/FyyR+eCBj/CNg==", + "node_modules/@vue/vue3-jest/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true, + "license": "MIT" + }, + "node_modules/@vuetify/loader-shared": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.0.3.tgz", + "integrity": "sha512-Ss3GC7eJYkp2SF6xVzsT7FAruEmdihmn4OCk2+UocREerlXKWgOKKzTN5PN3ZVN5q05jHHrsNhTuWbhN61Bpdg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "@vue/cli-shared-utils": "^5.0.8", - "eslint-webpack-plugin": "^3.1.0", - "globby": "^11.0.2", - "webpack": "^5.54.0", - "yorkie": "^2.0.0" + "upath": "^2.0.1" }, "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", - "eslint": ">=7.5.0" + "vue": "^3.0.0", + "vuetify": "^3.0.0" } }, - "node_modules/@vue/cli-plugin-router": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", - "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", - "dev": true, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", "dependencies": { - "@vue/cli-shared-utils": "^5.0.8" + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@vue/cli-plugin-typescript": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-typescript/-/cli-plugin-typescript-5.0.8.tgz", - "integrity": "sha512-JKJOwzJshBqsmp4yLBexwVMebOZ4VGJgbnYvmHVxasJOStF2RxwyW28ZF+zIvASGdat4sAUuo/3mAQyVhm7JHg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.16", - "@types/webpack-env": "^1.15.2", - "@vue/cli-shared-utils": "^5.0.8", - "babel-loader": "^8.2.2", - "fork-ts-checker-webpack-plugin": "^6.4.0", - "globby": "^11.0.2", - "thread-loader": "^3.0.0", - "ts-loader": "^9.2.5", - "webpack": "^5.54.0" + "node_modules/@vueuse/core/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" }, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", - "cache-loader": "^4.1.0", - "typescript": ">=2", - "vue": "^2 || ^3.2.13", - "vue-template-compiler": "^2.0.0" + "engines": { + "node": ">=12" }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/@vue/cli-plugin-unit-jest": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-5.0.8.tgz", - "integrity": "sha512-8aTmXUxEUdhJEjMHHoHI1wgi2SHzVRgCQQWIn5lgCAV2xJnXng09+wv8Ap0dhO4Z5vOOA/7xnubMQ9pDLqiskg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.16", - "@babel/plugin-transform-modules-commonjs": "^7.15.0", - "@types/jest": "^27.0.1", - "@vue/cli-shared-utils": "^5.0.8", - "babel-jest": "^27.1.0", - "deepmerge": "^4.2.2", - "jest": "^27.1.0", - "jest-serializer-vue": "^2.0.2", - "jest-transform-stub": "^2.0.0", - "jest-watch-typeahead": "^1.0.0" + "funding": { + "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0", - "@vue/vue2-jest": "^27.0.0-alpha.3", - "@vue/vue3-jest": "^27.0.0-alpha.3", - "jest": "^27.1.0", - "ts-jest": "^27.0.4" + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" }, "peerDependenciesMeta": { - "@vue/vue2-jest": { - "optional": true - }, - "@vue/vue3-jest": { - "optional": true - }, - "ts-jest": { + "@vue/composition-api": { "optional": true } } }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.24.1" + "vue-demi": ">=0.14.8" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dev": true, - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@vue/cli-plugin-unit-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@vue/cli-plugin-vuex": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", - "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", - "dev": true, - "peerDependencies": { - "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - } - }, - "node_modules/@vue/cli-service": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-5.0.8.tgz", - "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.12.16", - "@soda/friendly-errors-webpack-plugin": "^1.8.0", - "@soda/get-current-script": "^1.0.2", - "@types/minimist": "^1.2.0", - "@vue/cli-overlay": "^5.0.8", - "@vue/cli-plugin-router": "^5.0.8", - "@vue/cli-plugin-vuex": "^5.0.8", - "@vue/cli-shared-utils": "^5.0.8", - "@vue/component-compiler-utils": "^3.3.0", - "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", - "@vue/web-component-wrapper": "^1.3.0", - "acorn": "^8.0.5", - "acorn-walk": "^8.0.2", - "address": "^1.1.2", - "autoprefixer": "^10.2.4", - "browserslist": "^4.16.3", - "case-sensitive-paths-webpack-plugin": "^2.3.0", - "cli-highlight": "^2.1.10", - "clipboardy": "^2.3.0", - "cliui": "^7.0.4", - "copy-webpack-plugin": "^9.0.1", - "css-loader": "^6.5.0", - "css-minimizer-webpack-plugin": "^3.0.2", - "cssnano": "^5.0.0", - "debug": "^4.1.1", - "default-gateway": "^6.0.3", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "hash-sum": "^2.0.0", - "html-webpack-plugin": "^5.1.0", - "is-file-esm": "^1.0.0", - "launch-editor-middleware": "^2.2.1", - "lodash.defaultsdeep": "^4.6.1", - "lodash.mapvalues": "^4.6.0", - "mini-css-extract-plugin": "^2.5.3", - "minimist": "^1.2.5", - "module-alias": "^2.2.2", - "portfinder": "^1.0.26", - "postcss": "^8.2.6", - "postcss-loader": "^6.1.1", - "progress-webpack-plugin": "^1.0.12", - "ssri": "^8.0.1", - "terser-webpack-plugin": "^5.1.1", - "thread-loader": "^3.0.0", - "vue-loader": "^17.0.0", - "vue-style-loader": "^4.1.3", - "webpack": "^5.54.0", - "webpack-bundle-analyzer": "^4.4.0", - "webpack-chain": "^6.5.1", - "webpack-dev-server": "^4.7.3", - "webpack-merge": "^5.7.3", - "webpack-virtual-modules": "^0.4.2", - "whatwg-fetch": "^3.6.2" - }, - "bin": { - "vue-cli-service": "bin/vue-cli-service.js" - }, - "engines": { - "node": "^12.0.0 || >= 14.0.0" - }, - "peerDependencies": { - "vue-template-compiler": "^2.0.0", - "webpack-sources": "*" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "less-loader": { - "optional": true - }, - "pug-plain-loader": { - "optional": true - }, - "raw-loader": { - "optional": true - }, - "sass-loader": { - "optional": true - }, - "stylus-loader": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/@vue/cli-service/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/cli-shared-utils": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", - "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", - "dev": true, - "dependencies": { - "@achrinza/node-ipc": "^9.2.5", - "chalk": "^4.1.2", - "execa": "^1.0.0", - "joi": "^17.4.0", - "launch-editor": "^2.2.1", - "lru-cache": "^6.0.0", - "node-fetch": "^2.6.7", - "open": "^8.0.2", - "ora": "^5.3.0", - "read-pkg": "^5.1.1", - "semver": "^7.3.4", - "strip-ansi": "^6.0.0" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@vue/cli-shared-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@vue/cli-shared-utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@vue/compiler-core": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.34.tgz", - "integrity": "sha512-Z0izUf32+wAnQewjHu+pQf1yw00EGOmevl1kE+ljjjMe7oEfpQ+BI3/JNK7yMB4IrUsqLDmPecUrpj3mCP+yJQ==", - "dependencies": { - "@babel/parser": "^7.24.7", - "@vue/shared": "3.4.34", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.34.tgz", - "integrity": "sha512-3PUOTS1h5cskdOJMExCu2TInXuM0j60DRPpSCJDqOCupCfUZCJoyQmKtRmA8EgDNZ5kcEE7vketamRZfrEuVDw==", - "dependencies": { - "@vue/compiler-core": "3.4.34", - "@vue/shared": "3.4.34" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.34.tgz", - "integrity": "sha512-x6lm0UrM03jjDXTPZgD9Ad8bIVD1ifWNit2EaWQIZB5CULr46+FbLQ5RpK7AXtDHGjx9rmvC7QRCTjsiGkAwRw==", - "dependencies": { - "@babel/parser": "^7.24.7", - "@vue/compiler-core": "3.4.34", - "@vue/compiler-dom": "3.4.34", - "@vue/compiler-ssr": "3.4.34", - "@vue/shared": "3.4.34", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.39", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.34.tgz", - "integrity": "sha512-8TDBcLaTrFm5rnF+Qm4BlliaopJgqJ28Nsrc80qazynm5aJO+Emu7y0RWw34L8dNnTRdcVBpWzJxhGYzsoVu4g==", - "dependencies": { - "@vue/compiler-dom": "3.4.34", - "@vue/shared": "3.4.34" - } - }, - "node_modules/@vue/component-compiler-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", - "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", - "dev": true, - "dependencies": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.36", - "postcss-selector-parser": "^6.0.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "optionalDependencies": { - "prettier": "^1.18.2 || ^2.0.0" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true - }, - "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/@vue/component-compiler-utils/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "optional": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.3.tgz", - "integrity": "sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==" - }, - "node_modules/@vue/eslint-config-typescript": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz", - "integrity": "sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "vue-eslint-parser": "^9.3.1" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", - "eslint-plugin-vue": "^9.0.0", - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/reactivity": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.34.tgz", - "integrity": "sha512-ua+Lo+wBRlBEX9TtgPOShE2JwIO7p6BTZ7t1KZVPoaBRfqbC7N3c8Mpzicx173fXxx5VXeU6ykiHo7WgLzJQDA==", - "dependencies": { - "@vue/shared": "3.4.34" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.34.tgz", - "integrity": "sha512-PXhkiRPwcPGJ1BnyBZFI96GfInCVskd0HPNIAZn7i3YOmLbtbTZpB7/kDTwC1W7IqdGPkTVC63IS7J2nZs4Ebg==", - "dependencies": { - "@vue/reactivity": "3.4.34", - "@vue/shared": "3.4.34" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.34.tgz", - "integrity": "sha512-dXqIe+RqFAK2Euak4UsvbIupalrhc67OuQKpD7HJ3W2fv8jlqvI7szfBCsAEcE8o/wyNpkloxB6J8viuF/E3gw==", - "dependencies": { - "@vue/reactivity": "3.4.34", - "@vue/runtime-core": "3.4.34", - "@vue/shared": "3.4.34", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.34.tgz", - "integrity": "sha512-GeyEUfMVRZMD/mZcNONEqg7MiU10QQ1DB3O/Qr6+8uXpbwdlmVgQ5Qs1/ZUAFX1X2UUtqMoGrDRbxdWfOJFT7Q==", - "dependencies": { - "@vue/compiler-ssr": "3.4.34", - "@vue/shared": "3.4.34" - }, - "peerDependencies": { - "vue": "3.4.34" - } - }, - "node_modules/@vue/shared": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.34.tgz", - "integrity": "sha512-x5LmiRLpRsd9KTjAB8MPKf0CDPMcuItjP0gbNqFCIgL1I8iYp4zglhj9w9FPCdIbHG2M91RVeIbArFfFTz9I3A==" - }, - "node_modules/@vue/test-utils": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", - "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", - "dev": true, - "dependencies": { - "js-beautify": "^1.14.9", - "vue-component-type-helpers": "^2.0.0" - } - }, - "node_modules/@vue/vue-loader-v15": { - "name": "vue-loader", - "version": "15.11.1", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.11.1.tgz", - "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", - "dev": true, - "dependencies": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - }, - "peerDependencies": { - "css-loader": "*", - "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "prettier": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true - }, - "node_modules/@vue/vue3-jest": { - "version": "27.0.0", - "resolved": "https://registry.npmjs.org/@vue/vue3-jest/-/vue3-jest-27.0.0.tgz", - "integrity": "sha512-VL61CgZBoQqayXfzlZJHHpZuX4lsT8dmdZMJzADhdAJjKu26JBpypHr/2ppevxItljPiuALQW4MKhhCXZRXnLg==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-modules-commonjs": "^7.2.0", - "chalk": "^2.1.0", - "convert-source-map": "^1.6.0", - "css-tree": "^2.0.1", - "source-map": "0.5.6", - "tsconfig": "^7.0.0" - }, - "peerDependencies": { - "@babel/core": "7.x", - "babel-jest": "27.x", - "jest": "27.x", - "ts-jest": "27.x", - "typescript": ">= 3.x", - "vue": "^3.0.0-0" - }, - "peerDependenciesMeta": { - "ts-jest": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/vue3-jest/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@vue/vue3-jest/node_modules/source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@vue/web-component-wrapper": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", - "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", - "dev": true - }, - "node_modules/@vuetify/loader-shared": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-1.7.1.tgz", - "integrity": "sha512-kLUvuAed6RCvkeeTNJzuy14pqnkur8lTuner7v7pNE/kVhPR97TuyXwBSBMR1cJeiLiOfu6SF5XlCYbXByEx1g==", - "devOptional": true, - "dependencies": { - "find-cache-dir": "^3.3.2", - "upath": "^2.0.1" - }, - "peerDependencies": { - "vue": "^3.0.0", - "vuetify": "^3.0.0-beta.4" - } - }, - "node_modules/@vueuse/core": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.0.tgz", - "integrity": "sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==", - "dependencies": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.11.0", - "@vueuse/shared": "10.11.0", - "vue-demi": ">=0.14.8" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/core/node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.0.tgz", - "integrity": "sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.0.tgz", - "integrity": "sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==", - "dependencies": { - "vue-demi": ">=0.14.8" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", - "devOptional": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "devOptional": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "devOptional": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "devOptional": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "devOptional": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "devOptional": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", - "devOptional": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "devOptional": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "devOptional": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "devOptional": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", - "devOptional": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", - "devOptional": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", - "devOptional": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", - "devOptional": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", - "devOptional": true, - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "devOptional": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "devOptional": true - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "devOptional": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "dev": true, - "engines": { - "node": ">= 10.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": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "devOptional": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "devOptional": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.19", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", - "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.23.0", - "caniuse-lite": "^1.0.30001599", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz", - "integrity": "sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.1", - "core-js-compat": "^3.36.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "devOptional": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", - "devOptional": true, - "engines": { - "node": "*" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001645", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001645.tgz", - "integrity": "sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==", - "devOptional": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "devOptional": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", - "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", - "dev": true - }, - "node_modules/clean-css": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cli-highlight/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cli-highlight/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cli-highlight/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cli-highlight/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/clipboardy": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", - "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", - "dev": true, - "dependencies": { - "arch": "^2.1.1", - "execa": "^1.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "devOptional": true - }, - "node_modules/compare-versions": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", - "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concurrently": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", - "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "date-fns": "^2.16.1", - "lodash": "^4.17.21", - "rxjs": "^6.6.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^8.1.0", - "tree-kill": "^1.2.2", - "yargs": "^16.2.0" - }, + "node_modules/@vueuse/shared/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", "bin": { - "concurrently": "bin/concurrently.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/concurrently/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" + "url": "https://github.com/sponsors/antfu" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } } }, - "node_modules/concurrently/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/concurrently/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "devOptional": true, + "license": "MIT" }, - "node_modules/concurrently/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "devOptional": true, + "license": "MIT" }, - "node_modules/concurrently/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "devOptional": true, + "license": "MIT" }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "devOptional": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/concurrently/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 + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "devOptional": true, + "license": "MIT" }, - "node_modules/condense-newlines": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz", - "integrity": "sha512-P7X+QL9Hb9B/c8HI5BFFKmjgBu2XpQuF98WZ9XkO+dBGgk5XgwiQz7o1SmpglNWId3581UcS0SFAWfoIhMHPfg==", - "dev": true, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "devOptional": true, + "license": "MIT", "dependencies": { - "extend-shallow": "^2.0.1", - "is-whitespace": "^0.3.0", - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", - "dev": true + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } }, - "node_modules/config-chain": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", - "dev": true, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true, - "engines": { - "node": ">=0.8" + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "devOptional": true, + "license": "MIT" }, - "node_modules/console.table": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", - "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", - "dev": true, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "devOptional": true, + "license": "MIT", "dependencies": { - "easy-table": "1.1.0" - }, - "engines": { - "node": "> 0.10" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, - "node_modules/consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", - "dev": true, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "devOptional": true, + "license": "MIT", "dependencies": { - "bluebird": "^3.1.1" - }, - "engines": { - "node": ">= 0.10.0" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/copy-webpack-plugin": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", - "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, - "dependencies": { - "fast-glob": "^3.2.7", - "glob-parent": "^6.0.1", - "globby": "^11.0.3", - "normalize-path": "^3.0.0", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">=14.15.0" }, "peerDependencies": { - "webpack": "^5.1.0" + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, + "license": "MIT", "engines": { - "node": ">= 10.13.0" + "node": ">=14.15.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/core-js": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", - "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "devOptional": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } + "license": "BSD-3-Clause" }, - "node_modules/core-js-compat": { - "version": "3.37.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", - "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", "dev": true, - "dependencies": { - "browserslist": "^4.23.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=4.8" + "node": ">=0.4.0" } }, - "node_modules/cross-spawn/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/css-declaration-sorter": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", - "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, + "license": "MIT", "peerDependencies": { - "postcss": "^8.0.9" + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/css-loader": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", - "dev": true, + "node_modules/acorn-walk": { + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "license": "MIT", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" + "acorn": "^8.11.0" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "node": ">=0.4.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "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, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dev": true, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "devOptional": true, + "license": "MIT", "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" }, "peerDependencies": { - "webpack": "^5.0.0" + "ajv": "^8.0.0" }, "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { + "ajv": { "optional": true } } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "node_modules/ajv-formats/node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -7768,1349 +4930,1481 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "type-fest": "^0.21.3" }, "engines": { - "node": ">= 12.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "color-convert": "^1.9.0" }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "engines": { + "node": ">=4" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">= 8" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "license": "MIT" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "@babel/core": "^7.8.0" } }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "css-tree": "^1.1.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8.0.0" + "node": ">=7.0.0" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0" + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" }, "engines": { - "node": ">=0.11" + "node": ">= 14.15.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" } }, - "node_modules/dayjs": { - "version": "1.11.12", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", - "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==" - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decache": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", - "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", - "devOptional": true, - "dependencies": { - "callsite": "^1.0.0" - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" }, "engines": { - "node": ">= 10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/default-gateway/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/default-gateway/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/default-gateway/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true, + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/default-gateway/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-gateway/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/default-gateway/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "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==", "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "2.0.0" } }, - "node_modules/define-lazy-prop": { + "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/define-properties": { + "node_modules/bonjour-service": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, + "license": "MIT", "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" } }, - "node_modules/delayed-stream": { + "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true, - "engines": { - "node": ">= 0.8" - } + "license": "ISC" }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, "engines": { "node": ">=8" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, "engines": { - "node": ">=0.3.1" + "node": ">= 6" } }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, + "license": "MIT", "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "run-applescript": "^7.0.0" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/doctrine": { + "node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "devOptional": true, + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "dependencies": { - "utila": "~0.4" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, + "node_modules/caniuse-lite": { + "version": "1.0.30001651", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", + "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "devOptional": true, "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, { "type": "github", - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { - "webidl-conversions": "^5.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { - "domelementtype": "^2.2.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 4" + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/dompurify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", - "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "is-glob": "^4.0.1" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": ">= 6" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6.0" } }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "node_modules/cjs-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz", + "integrity": "sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==", + "dev": true, + "license": "MIT" }, - "node_modules/easy-stack": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", - "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, "engines": { - "node": ">=6.0.0" + "node": ">= 10.0" } }, - "node_modules/easy-table": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", - "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "optionalDependencies": { - "wcwidth": ">=1.0.1" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/editorconfig": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", - "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { - "@one-ini/wasm": "0.1.1", - "commander": "^10.0.0", - "minimatch": "9.0.1", - "semver": "^7.5.3" - }, - "bin": { - "editorconfig": "bin/editorconfig" + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/editorconfig/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/editorconfig/node_modules/commander": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, + "license": "ISC", "engines": { - "node": ">=14" + "node": ">= 10" } }, - "node_modules/editorconfig/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/editorconfig/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" }, "engines": { - "node": ">=10" + "node": ">=7.0.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", - "devOptional": true + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "devOptional": true, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=6" } }, - "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==", + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { - "once": "^1.4.0" + "color-name": "1.1.3" } }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", - "devOptional": true, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "delayed-stream": "~1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.8" } }, - "node_modules/enhanced-resolve/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "devOptional": true, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 12" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "devOptional": true, + "license": "ISC" }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/compare-versions": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", + "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==", "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } + "license": "MIT" }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, + "license": "MIT", "dependencies": { - "stackframe": "^1.3.4" + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.8.0" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": ">= 0.4" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "devOptional": true - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "devOptional": true, - "engines": { - "node": ">=6" - } + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, - "engines": { - "node": ">=0.8.0" - } + "license": "MIT" }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "node_modules/concurrently": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz", + "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==", "dev": true, + "license": "MIT", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" + "chalk": "^4.1.0", + "date-fns": "^2.16.1", + "lodash": "^4.17.21", + "rxjs": "^6.6.3", + "spawn-command": "^0.0.2-1", + "supports-color": "^8.1.0", + "tree-kill": "^1.2.2", + "yargs": "^16.2.0" }, "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "concurrently": "bin/concurrently.js" }, "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" + "node": ">=10.0.0" } }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } + "node": ">=8" } }, - "node_modules/eslint-plugin-vue": { - "version": "9.27.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", - "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.0", - "vue-eslint-parser": "^9.4.3", - "xml-name-validator": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + "node": ">=7.0.0" + } + }, + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/eslint-plugin-vue/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/concurrently/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "type-fest": "^0.20.2" + "tslib": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "npm": ">=2.0.0" } }, - "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/eslint-plugin-vue/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/concurrently/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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "0BSD" + }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/eslint-plugin-vue/node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=0.8" } }, - "node_modules/eslint-plugin-vuetify": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vuetify/-/eslint-plugin-vuetify-2.4.0.tgz", - "integrity": "sha512-WAZjnGXPrxqHBzYjxxUT8jf30O69Hitmj+wYhTIEG/XgqfvnPwqVtqrU2FGLsDtfFskKva0vuZemfbiq8yA/fQ==", + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "dev": true, + "license": "MIT" + }, + "node_modules/console.table": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz", + "integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==", + "dev": true, + "license": "MIT", "dependencies": { - "eslint-plugin-vue": "^9.6.0", - "requireindex": "^1.2.0" + "easy-table": "1.1.0" }, - "peerDependencies": { - "eslint": "^8.0.0", - "vuetify": "^3.0.0" + "engines": { + "node": "> 0.10" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "devOptional": true, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.6" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "devOptional": true, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">= 0.6" } }, - "node_modules/eslint-visitor-keys": { - "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==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">= 0.6" } }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-webpack-plugin": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/@types/eslint": { - "version": "8.56.11", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", - "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "webpack": "^5.1.0" } }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/copy-webpack-plugin/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" + "license": "MIT", + "engines": { + "node": ">=12" }, - "peerDependencies": { - "ajv": "^8.8.2" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "node": ">=14.16" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/core-js-compat": { + "version": "3.38.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.0.tgz", + "integrity": "sha512-75LAicdLa4OJVwFxFbQR3NdnZjNgX6ILpVcVzcC4T2smerB5lELMrJQQQoWV6TiuC/vlaFqgU2tKQx9w5s0e0A==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" + "browserslist": "^4.23.3" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/core-js" } }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" }, - "engines": { - "node": ">=10" + "bin": { + "create-jest": "bin/create-jest.js" }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/eslint/node_modules/ansi-styles": { + "node_modules/create-jest/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9121,17 +6415,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/chalk": { + "node_modules/create-jest/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9143,11 +6432,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/color-convert": { + "node_modules/create-jest/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9155,17 +6445,48 @@ "node": ">=7.0.0" } }, - "node_modules/eslint/node_modules/color-name": { + "node_modules/create-jest/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" }, - "node_modules/eslint/node_modules/cross-spawn": { + "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9175,1918 +6496,2017 @@ "node": ">= 8" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/css-loader/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=10" } }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "cssom": "~0.3.6" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8" } }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "@babel/runtime": "^7.21.0" }, "engines": { - "node": ">=10" + "node": ">=0.11" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/dayjs": { + "version": "1.11.12", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.12.tgz", + "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "ms": "2.1.2" }, "engines": { - "node": ">=10" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/eslint/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "callsite": "^1.0.0" } }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" + "license": "MIT" + }, + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, - "engines": { - "node": ">=8" + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "execa": "^5.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 10" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "clone": "^1.0.2" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "devOptional": true, - "dependencies": { - "estraverse": "^5.2.0" + "node": ">= 0.4" }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "devOptional": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/esutils": { - "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" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/event-pubsub": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", - "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "devOptional": true, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { - "node": ">=0.8.x" + "node": ">=0.4.0" } }, - "node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "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", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, + "license": "MIT", "engines": { - "node": ">= 0.10.0" + "node": ">=8" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "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==", - "dev": true + "license": "MIT" }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "path-type": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "devOptional": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">=8.6.0" + "node": ">=6" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "is-glob": "^4.0.1" + "esutils": "^2.0.2" }, "engines": { - "node": ">= 6" + "node": ">=6.0.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "devOptional": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "utila": "~0.4" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, + "license": "MIT", "dependencies": { - "websocket-driver": ">=0.5.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, - "engines": { - "node": ">=0.8.0" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "dependencies": { - "bser": "2.1.1" + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, + "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "flat-cache": "^3.0.4" + "domelementtype": "^2.2.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "devOptional": true, + "node_modules/dompurify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==", + "license": "(MPL-2.0 OR Apache-2.0)" + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/file-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "devOptional": true, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/easy-table": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", + "integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "wcwidth": ">=1.0.1" + } + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" }, "engines": { - "node": ">=8.9.0" + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" } }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "devOptional": true, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "license": "ISC", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/editorconfig/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" }, "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/electron-to-chromium": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.6.tgz", + "integrity": "sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "devOptional": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "node": ">= 4" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "devOptional": true, + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/fishery": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/fishery/-/fishery-2.2.2.tgz", - "integrity": "sha512-jeU0nDhPHJkupmjX+r9niKgVMTBDB8X+U/pktoGHAiWOSyNlMd0HhmqnjrpjUOCDPJYaSSu4Ze16h6dZOKSp2w==", - "dev": true, - "dependencies": { - "lodash.mergewith": "^4.6.2" + "node_modules/entities": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-5.0.0.tgz", + "integrity": "sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, + "license": "MIT", "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "envinfo": "dist/cli.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.4" } }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">= 0.4" } }, - "node_modules/foreground-child/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/foreground-child/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "shebang-regex": "^3.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=8" + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/foreground-child/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/escodegen/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", + "optional": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, + "license": "MIT", "bin": { - "node-which": "bin/node-which" + "eslint-config-prettier": "bin/cli.js" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" }, "engines": { - "node": ">=10", - "yarn": ">=1.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { - "eslint": { + "@types/eslint": { "optional": true }, - "vue-template-compiler": { + "eslint-config-prettier": { "optional": true } } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint-plugin-vue": { + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", + "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint-plugin-vue/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=10" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/eslint-plugin-vue/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint-visitor-keys": { + "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, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "node_modules/eslint-webpack-plugin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz", + "integrity": "sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/eslint": "^8.56.10", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0" }, "engines": { - "node": ">= 8.9.0" + "node": ">= 14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^8.0.0 || ^9.0.0", + "webpack": "^5.0.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 6" + "node": ">=7.0.0" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "engines": { - "node": ">= 0.6" - } + "license": "MIT" }, - "node_modules/fraction.js": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fs-monkey": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, + "node": ">=8" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "pump": "^3.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/glob": { - "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", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" } }, - "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==", - "devOptional": true - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "get-intrinsic": "^1.1.3" + "estraverse": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "devOptional": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { - "duplexer": "^0.1.2" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.8.x" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", - "dev": true + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, - "bin": { - "he": "bin/he" + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "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", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": "*" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "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==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } + "license": "MIT" }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" } }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "~5.1.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { - "whatwg-encoding": "^1.0.5" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">= 6" } }, - "node_modules/html-entities": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/mdevils" - }, - { - "type": "patreon", - "url": "https://patreon.com/mdevils" - } - ] + "license": "MIT" }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4.9.1" } }, - "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.20.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "reusify": "^1.0.4" } }, - "node_modules/html-webpack-plugin/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], + "license": "Apache-2.0", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" + "bser": "2.1.1" } }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">= 0.8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "devOptional": true, + "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "devOptional": true, + "license": "MIT", "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">= 6" + "node": ">=8.9.0" } }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "debug": "4" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } + "minimatch": "^5.0.1" } }, - "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==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 14" + "node": ">=10" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">=10.17.0" + "node": ">=8" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "license": "MIT", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", - "dev": true + "license": "MIT" }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "dev": true, + "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" }, "engines": { - "node": ">=6" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/fishery": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/fishery/-/fishery-2.2.2.tgz", + "integrity": "sha512-jeU0nDhPHJkupmjX+r9niKgVMTBDB8X+U/pktoGHAiWOSyNlMd0HhmqnjrpjUOCDPJYaSSu4Ze16h6dZOKSp2w==", "dev": true, - "engines": { - "node": ">=0.8.19" + "license": "MIT", + "dependencies": { + "lodash.mergewith": "^4.6.2" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/inquirer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=7.0.0" + "node": ">= 6" } }, - "node_modules/inquirer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/inquirer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 10" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "dependencies": { - "ci-info": "^1.5.0" - }, - "bin": { - "is-ci": "bin.js" + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -11095,110 +8515,119 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-file-esm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-file-esm/-/is-file-esm-1.0.0.tgz", - "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "node_modules/glob": { + "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, + "license": "ISC", "dependencies": { - "read-pkg-up": "^7.0.1" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { - "is-extglob": "^2.1.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "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==", + "devOptional": true, + "license": "BSD-2-Clause" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.12.0" + "node": "*" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { "node": ">=10" }, @@ -11206,568 +8635,613 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { - "isobject": "^3.0.1" + "get-intrinsic": "^1.1.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "devOptional": true, + "license": "ISC" }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "license": "MIT" }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/is-whitespace": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", - "integrity": "sha512-RydPhl4S6JwAyj0JJjshWJEFG6hNye3pZFBRZaTUfZFwGHxzppNaNOVgQuS/E/SlhrApuMXrpnK1EEIXfdo3Dg==", + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { - "is-docker": "^2.0.0" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "bin": { + "he": "bin/he" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/istanbul-lib-report/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "safe-buffer": "~5.1.0" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "whatwg-encoding": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" }, - "node_modules/iterare": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", - "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "html-minifier-terser": "cli.js" }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "engines": { + "node": ">=12" } }, - "node_modules/javascript-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-2.1.0.tgz", - "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", - "dev": true - }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" }, "peerDependenciesMeta": { - "node-notifier": { + "@rspack/core": { + "optional": true + }, + "webpack": { "optional": true } } }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 0.8" } }, - "node_modules/jest-changed-files/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8.0.0" } }, - "node_modules/jest-changed-files/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">= 6" } }, - "node_modules/jest-changed-files/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "debug": "4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/jest-changed-files/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, "engines": { - "node": ">=8" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, - "node_modules/jest-changed-files/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "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, + "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "agent-base": "^7.0.2", + "debug": "4" }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/jest-changed-files/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=10.17.0" } }, - "node_modules/jest-changed-files/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10.18" } }, - "node_modules/jest-changed-files/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-changed-files/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "license": "ISC", "engines": { - "node": ">= 8" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">= 4" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-circus/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "find-up": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.8.19" } }, - "node_modules/jest-circus/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", + "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", + "dev": true, + "license": "MIT", "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" } }, - "node_modules/jest-cli/node_modules/ansi-styles": { + "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11778,11 +9252,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-cli/node_modules/chalk": { + "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11794,11 +9269,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-cli/node_modules/color-convert": { + "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11806,26 +9282,29 @@ "node": ">=7.0.0" } }, - "node_modules/jest-cli/node_modules/color-name": { + "node_modules/inquirer/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-cli/node_modules/has-flag": { + "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-cli/node_modules/supports-color": { + "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11833,553 +9312,464 @@ "node": ">=8" } }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } + "node": ">=10.13.0" } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "hasown": "^2.0.2" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "license": "MIT", + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">=7.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=6" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" + "node": ">=16" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=0.12.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "isobject": "^3.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=0.10.0" } }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" + "is-inside-container": "^1.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "license": "MIT" }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "license": "ISC" }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, + "license": "MIT", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": ">=0.10.0" } }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, + "license": "BSD-3-Clause", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "color-convert": "^2.0.1" + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "ansi-styles": "^4.1.0", + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-jasmine2/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/iterare": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", + "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { + "node_modules/jake/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12391,11 +9781,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { + "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12403,26 +9794,42 @@ "node": ">=7.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/color-name": { + "node_modules/jake/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { + "node_modules/jake/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12430,85 +9837,86 @@ "node": ">=8" } }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, "peerDependencies": { - "jest-resolve": "*" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "jest-resolve": { + "node-notifier": { "optional": true } } }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { + "node_modules/jest-circus/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12519,11 +9927,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-resolve/node_modules/chalk": { + "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12535,11 +9944,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-resolve/node_modules/color-convert": { + "node_modules/jest-circus/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12547,26 +9957,29 @@ "node": ">=7.0.0" } }, - "node_modules/jest-resolve/node_modules/color-name": { + "node_modules/jest-circus/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-resolve/node_modules/has-flag": { + "node_modules/jest-circus/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-resolve/node_modules/supports-color": { + "node_modules/jest-circus/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12574,43 +9987,46 @@ "node": ">=8" } }, - "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/jest-runner/node_modules/ansi-styles": { + "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12621,11 +10037,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-runner/node_modules/chalk": { + "node_modules/jest-cli/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12637,11 +10054,27 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runner/node_modules/color-convert": { + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12649,46 +10082,29 @@ "node": ">=7.0.0" } }, - "node_modules/jest-runner/node_modules/color-name": { + "node_modules/jest-cli/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-runner/node_modules/has-flag": { + "node_modules/jest-cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-runner/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { + "node_modules/jest-cli/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12696,225 +10112,250 @@ "node": ">=8" } }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=12" } }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=7.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/jest-runtime/node_modules/has-flag": { + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runtime/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runtime/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/jest-runtime/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/supports-color": { + "node_modules/jest-diff/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12922,81 +10363,42 @@ "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" + "detect-newline": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-serializer-vue": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz", - "integrity": "sha512-nK/YIFo6qe3i9Ge+hr3h4PpRehuPPGZFt8LDBdTHYldMb7ZWlkanZS8Ls7D8h6qmQP2lBQVDLP0DKn5bJ9QApQ==", - "dev": true, - "dependencies": { - "pretty": "2.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", + "@jest/types": "^29.6.3", "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { + "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13007,11 +10409,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/chalk": { + "node_modules/jest-each/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13023,11 +10426,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/color-convert": { + "node_modules/jest-each/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13035,108 +10439,154 @@ "node": ">=7.0.0" } }, - "node_modules/jest-snapshot/node_modules/color-name": { + "node_modules/jest-each/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-snapshot/node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" + "has-flag": "^4.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest-environment-jsdom": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", + "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0", + "jsdom": "^20.0.0" + }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/jest-snapshot/node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-transform-stub": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz", - "integrity": "sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==", - "dev": true - }, - "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13147,11 +10597,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-util/node_modules/chalk": { + "node_modules/jest-matcher-utils/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13163,11 +10614,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-util/node_modules/color-convert": { + "node_modules/jest-matcher-utils/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13175,26 +10627,29 @@ "node": ">=7.0.0" } }, - "node_modules/jest-util/node_modules/color-name": { + "node_modules/jest-matcher-utils/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-util/node_modules/has-flag": { + "node_modules/jest-matcher-utils/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-util/node_modules/supports-color": { + "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13202,28 +10657,33 @@ "node": ">=8" } }, - "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { + "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13234,23 +10694,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { + "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13262,11 +10711,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-validate/node_modules/color-convert": { + "node_modules/jest-message-util/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13274,26 +10724,29 @@ "node": ">=7.0.0" } }, - "node_modules/jest-validate/node_modules/color-name": { + "node_modules/jest-message-util/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-validate/node_modules/has-flag": { + "node_modules/jest-message-util/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-validate/node_modules/supports-color": { + "node_modules/jest-message-util/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13301,29 +10754,90 @@ "node": ">=8" } }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", + "@jest/types": "^29.6.3", "@types/node": "*", - "ansi-escapes": "^4.2.1", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13334,11 +10848,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/chalk": { + "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13350,11 +10865,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/color-convert": { + "node_modules/jest-resolve/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13362,26 +10878,29 @@ "node": ">=7.0.0" } }, - "node_modules/jest-watcher/node_modules/color-name": { + "node_modules/jest-resolve/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/jest-watcher/node_modules/has-flag": { + "node_modules/jest-resolve/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-watcher/node_modules/supports-color": { + "node_modules/jest-resolve/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13389,572 +10908,580 @@ "node": ">=8" } }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "devOptional": true, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">= 10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "devOptional": true, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "devOptional": true, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/js-beautify": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", - "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "dependencies": { - "config-chain": "^1.1.13", - "editorconfig": "^1.0.4", - "glob": "^10.3.3", - "js-cookie": "^3.0.5", - "nopt": "^7.2.0" - }, - "bin": { - "css-beautify": "js/bin/css-beautify.js", - "html-beautify": "js/bin/html-beautify.js", - "js-beautify": "js/bin/js-beautify.js" - }, + "license": "MIT" + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/js-beautify/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/js-beautify/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "color-convert": "^2.0.1" }, - "bin": { - "glob": "dist/esm/bin.mjs" + "engines": { + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/js-beautify/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/js-beautify/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=7.0.0" } }, - "node_modules/js-cookie": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", - "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "engines": { - "node": ">=14" - } + "license": "MIT" }, - "node_modules/js-message": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", - "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.6.0" + "node": ">=8" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "has-flag": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=8" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsdom/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 6.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jsdom/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jsdom/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 6" + "node": ">=7.0.0" } }, - "node_modules/jsdom/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "devOptional": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "devOptional": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "devOptional": true, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", "bin": { - "json5": "lib/cli.js" + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/jsonc-eslint-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", - "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" + "node": ">=8" } }, - "node_modules/jsonc-eslint-parser/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/jest-transform-stub": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz", + "integrity": "sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "license": "MIT" + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "color-convert": "^2.0.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "color-name": "~1.1.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=7.0.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/launch-editor": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", - "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/launch-editor-middleware": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.8.0.tgz", - "integrity": "sha512-0Az27jnPR2RgkUoZoLHluM5gg9zHeg7hPsUZESJxcTV8Rs6Fed+Nof7Lb2HmpsE8lN/3YzpU+mvK5exYWSftWw==", + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { - "launch-editor": "^2.8.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, "engines": { - "node": ">=6" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "devOptional": true, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=6.11.5" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=4.0.0" + "node": ">=7.0.0" } }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "license": "MIT" + }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "devOptional": true, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.defaultsdeep": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", - "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", - "dev": true - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "dev": true - }, - "node_modules/lodash.mapvalues": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", - "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { + "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13965,11 +11492,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/log-symbols/node_modules/chalk": { + "node_modules/jest-watcher/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13981,11 +11509,12 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/log-symbols/node_modules/color-convert": { + "node_modules/jest-watcher/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13993,26 +11522,29 @@ "node": ">=7.0.0" } }, - "node_modules/log-symbols/node_modules/color-name": { + "node_modules/jest-watcher/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/log-symbols/node_modules/has-flag": { + "node_modules/jest-watcher/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/log-symbols/node_modules/supports-color": { + "node_modules/jest-watcher/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -14020,1875 +11552,1839 @@ "node": ">=8" } }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "node_modules/js-beautify": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.1.tgz", + "integrity": "sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==", "dev": true, + "license": "MIT", "dependencies": { - "restore-cursor": "^2.0.0" + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.3.3", + "js-cookie": "^3.0.5", + "nopt": "^7.2.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" }, "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "node_modules/js-beautify/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, - "engines": { - "node": ">=4" + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/log-update/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^1.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, + "license": "MIT", "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "node_modules/log-update/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/jsdom/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "debug": "4" }, "engines": { - "node": ">=4" + "node": ">= 6.0.0" } }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^3.0.0" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "dependencies": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" }, "engines": { "node": ">=4" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } + "license": "MIT" }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "devOptional": true, + "license": "MIT" }, - "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "devOptional": true, + "license": "MIT" }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "devOptional": true, - "dependencies": { - "semver": "^6.0.0" + "license": "MIT", + "bin": { + "json5": "lib/cli.js" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "node_modules/jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", "dev": true, + "license": "MIT", "dependencies": { - "tmpl": "1.0.5" + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/jsonc-eslint-parser/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" } }, - "node_modules/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { - "fs-monkey": "^1.0.4" + "universalify": "^2.0.0" }, - "engines": { - "node": ">= 4.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "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==", - "dev": true - }, - "node_modules/merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { - "source-map": "^0.6.1" + "json-buffer": "3.0.1" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "devOptional": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "node_modules/launch-editor": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.1.tgz", + "integrity": "sha512-elBx2l/tp9z99X5H/qev8uyDywVh0VXAwEbjk8kJhnc5grOFkGh7aW6q55me9xnYbss261XtnUrysZ+XvGbhQA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8.0" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "devOptional": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=6.11.5" } }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, + "license": "MIT", "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": ">=4.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "minimist": "^1.2.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3" + "p-locate": "^4.1.0" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": ">=8" } }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } + "license": "MIT" }, - "node_modules/mini-css-extract-plugin/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" - } - }, - "node_modules/minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" }, - "bin": { - "mkdirp": "bin/cmd.js" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/mlly": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", - "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" - } - }, - "node_modules/module-alias": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", - "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", - "dev": true - }, - "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", - "dev": true, + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "color-name": "~1.1.4" }, - "bin": { - "multicast-dns": "cli.js" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } + "license": "MIT" }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=8" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "devOptional": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, + "license": "MIT", "dependencies": { - "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "yallist": "^3.0.2" } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "license": "MIT", "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, "engines": { - "node": ">= 6.13.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "devOptional": true - }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "node_modules/make-dir/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "abbrev": "^2.0.0" - }, + "license": "ISC", "bin": { - "nopt": "bin/nopt.js" + "semver": "bin/semver.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "tmpl": "1.0.5" } }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/memfs": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", + "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "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==", "dev": true, - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "engines": { + "node": ">=8.6" } }, - "node_modules/null-loader": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", - "devOptional": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "node": ">=4" } }, - "node_modules/null-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "devOptional": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { - "node": ">=8.9.0" + "node": ">= 0.6" } }, - "node_modules/null-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "devOptional": true, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" + "mime-db": "1.52.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/nwsapi": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", - "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "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==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true, - "engines": { - "node": ">= 0.4" - } + "license": "ISC" }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, + "license": "ISC", "engines": { - "node": ">= 0.8" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "devOptional": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", "dev": true, + "license": "MIT", "dependencies": { - "wrappy": "1" + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "multicast-dns": "cli.js" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } + "license": "MIT" }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, + "license": "MIT", "engines": { - "node": ">= 0.8.0" + "node": ">= 0.6" } }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, + "license": "MIT", "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "whatwg-url": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "4.x || >=6.0.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } + "license": "MIT" }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { - "node": ">=8" + "node": ">= 6.13.0" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "devOptional": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "devOptional": true, + "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" + "boolbase": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", "devOptional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, + "license": "MIT", "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, + "node_modules/null-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "devOptional": true, + "license": "MIT", "dependencies": { - "callsites": "^3.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=6" + "node": ">=8.9.0" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, + "node_modules/null-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "devOptional": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=8" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "node_modules/nwsapi": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", + "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } + "license": "MIT" }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } + "license": "MIT" }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "devOptional": true, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "engines": { - "node": ">=4" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "mimic-fn": "^2.1.0" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "node_modules/path-scurry/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pinia": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.0.tgz", - "integrity": "sha512-iPrIh26GMqfpUlMOGyxuDowGmYousTecbTHFwT0xZ1zJvh23oQ+Cj99ZoPQA1TnUPhU6AuRPv6/drkTCJ0VHQA==", + "license": "MIT", "dependencies": { - "@vue/devtools-api": "^6.6.3", - "vue-demi": "^0.14.8" - }, - "funding": { - "url": "https://github.com/sponsors/posva" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, - "peerDependencies": { - "@vue/composition-api": "^1.4.0", - "typescript": ">=4.4.4", - "vue": "^2.6.14 || ^3.3.0" + "engines": { + "node": ">=10" }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - }, - "typescript": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pinia/node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "devOptional": true, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", - "pathe": "^1.1.2" + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/portfinder": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", - "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "async": "^2.6.4", - "debug": "^3.2.7", - "mkdirp": "^0.5.6" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.12.0" + "node": ">=8" } }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "dependencies": { - "ms": "^2.1.1" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" + "p-limit": "^2.2.0" }, - "peerDependencies": { - "postcss": "^8.2.2" + "engines": { + "node": ">=8" } }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" + "p-try": "^2.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "node_modules/p-retry": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=16.17" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=6" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "license": "BlueOak-1.0.0" }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": ">=6" } }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">= 12.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "entities": "^4.4.0" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "bin": { - "semver": "bin/semver.js" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 0.8" } }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=0.10.0" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=8" } }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } + "license": "MIT" }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=16 || 14 >=14.18" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "node": ">=8" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=8.6" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", - "dev": true, + "node_modules/pinia": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.1.tgz", + "integrity": "sha512-ltEU3xwiz5ojVMizdP93AHi84Rtfz0+yKd8ud75hr9LVyWX2alxp7vLbY1kFm7MXFmHHr/9B08Xf8Jj6IHTEiQ==", + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" }, - "engines": { - "node": "^10 || ^12 || >= 14" + "funding": { + "url": "https://github.com/sponsors/posva" }, "peerDependencies": { - "postcss": "^8.1.0" + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" }, "engines": { - "node": "^10 || ^12 || >= 14" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "postcss": "^8.1.0" + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } } }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 6" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "devOptional": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "find-up": "^6.3.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=14.16" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "devOptional": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "devOptional": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "p-locate": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "devOptional": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "yocto-queue": "^1.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "devOptional": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "p-limit": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "devOptional": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=12.20" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "node_modules/pkg-types": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", + "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", "dev": true, + "license": "MIT", "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, - "peerDependencies": { - "postcss": "^8.2.15" + "engines": { + "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, + "license": "ISC", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.1.0" } }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, + "license": "MIT", "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.1.0" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, + "license": "ISC", "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.1.0" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "license": "ISC", "dependencies": { - "postcss-value-parser": "^4.2.0" + "icss-utils": "^5.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.1.0" } }, "node_modules/postcss-selector-parser": { @@ -15896,6 +13392,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -15904,48 +13401,19 @@ "node": ">=4" } }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -15955,6 +13423,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -15970,6 +13439,7 @@ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -15977,42 +13447,30 @@ "node": ">=6.0.0" } }, - "node_modules/pretty": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pretty/-/pretty-2.0.0.tgz", - "integrity": "sha512-G9xUchgTEiNpormdYBl+Pha50gOUovT18IvAe7EYMZ1/f9W/WWMPRn+xI68yXNMUk3QXHDwo/1wV/4NejVNe1w==", - "dev": true, - "dependencies": { - "condense-newlines": "^0.2.1", - "extend-shallow": "^2.0.1", - "js-beautify": "^1.6.12" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -16020,6 +13478,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -16031,42 +13490,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress-webpack-plugin": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", - "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", - "dev": true, - "dependencies": { - "chalk": "^2.1.0", - "figures": "^2.0.0", - "log-update": "^2.3.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "peerDependencies": { - "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" - } - }, - "node_modules/progress-webpack-plugin/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } + "license": "MIT" }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -16079,13 +13511,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -16099,6 +13533,7 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -16106,44 +13541,49 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -16158,7 +13598,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -16178,13 +13619,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "devOptional": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -16194,6 +13637,7 @@ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -16203,6 +13647,7 @@ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -16218,71 +13663,24 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -16297,6 +13695,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -16304,23 +13703,39 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -16332,13 +13747,15 @@ "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.15.2", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } @@ -16348,6 +13765,7 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", @@ -16365,6 +13783,7 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -16386,6 +13805,7 @@ "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -16395,6 +13815,7 @@ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, + "license": "MIT", "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -16408,6 +13829,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -16417,30 +13839,24 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "engines": { - "node": ">=0.10.5" - } - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -16458,6 +13874,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -16470,15 +13887,17 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -16488,6 +13907,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -16501,6 +13921,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -16510,6 +13931,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -16521,6 +13943,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -16531,11 +13954,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -16559,6 +13996,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -16568,6 +14006,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -16590,18 +14029,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sass": { - "version": "1.67.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.67.0.tgz", - "integrity": "sha512-SVrO9ZeX/QQyEGtuZYCVxoeAL5vGlYjJ9p4i4HFuekWl8y/LtJ7tJc10Z+ck1c8xOuoBm2MYzcLfTAffD0pl/A==", + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16617,29 +14058,30 @@ } }, "node_modules/sass-loader": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", + "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", "dev": true, + "license": "MIT", "dependencies": { "neo-async": "^2.6.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "fibers": ">= 3.1.0", + "@rspack/core": "0.x || 1.x", "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", "sass": "^1.3.0", "sass-embedded": "*", "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "fibers": { + "@rspack/core": { "optional": true }, "node-sass": { @@ -16650,50 +14092,95 @@ }, "sass-embedded": { "optional": true + }, + "webpack": { + "optional": true } } }, "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { - "xmlchars": "^2.2.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "engines": { - "node": ">=10" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" + "fast-deep-equal": "^3.1.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "ajv": "^8.8.2" } }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -16706,7 +14193,8 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "devOptional": true, + "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -16716,6 +14204,7 @@ "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -16740,6 +14229,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -16748,19 +14238,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "devOptional": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -16770,6 +14263,7 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -16788,6 +14282,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -16797,6 +14292,7 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -16806,6 +14302,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -16820,25 +14317,29 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -16848,6 +14349,7 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -16863,6 +14365,7 @@ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -16879,13 +14382,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -16893,34 +14398,27 @@ "node": ">=8" } }, - "node_modules/shallow-clone/node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shell-quote": { @@ -16928,6 +14426,7 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -16937,6 +14436,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -16954,33 +14454,22 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sirv": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.24", - "mrmime": "^2.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -16990,6 +14479,7 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -16997,10 +14487,11 @@ } }, "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", + "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -17009,63 +14500,44 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "devOptional": true, + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/spawn-command": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dev": true - }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -17082,6 +14554,7 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -17095,32 +14568,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -17133,21 +14589,17 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -17157,6 +14609,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -17166,6 +14619,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -17179,6 +14633,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -17194,6 +14649,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -17208,6 +14664,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -17221,6 +14678,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -17233,189 +14691,73 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=4" } }, - "node_modules/svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/synckit": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, + "license": "MIT", "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" @@ -17428,35 +14770,21 @@ } }, "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terser": { - "version": "5.31.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.3.tgz", - "integrity": "sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==", + "version": "5.31.5", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.5.tgz", + "integrity": "sha512-YPmas0L0rE1UyLL/llTWA0SiDOqIcAQYLeUj7cJYzXHlRTAnMSg9pPe4VJ5PlKvTrPQsdVFuiRiwyeNlYgwh2Q==", "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -17475,6 +14803,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -17504,11 +14833,37 @@ } } }, + "node_modules/terser-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -17522,17 +14877,56 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -17542,111 +14936,70 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/thread-loader": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", - "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", - "loader-utils": "^2.0.0", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" + "node": "*" } }, - "node_modules/thread-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } + "license": "MIT" }, - "node_modules/thread-loader/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, + "license": "Unlicense", "engines": { - "node": ">= 10.13.0" + "node": ">=10.18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "peerDependencies": { + "tslib": "^2" } }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -17658,13 +15011,14 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -17674,6 +15028,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -17686,24 +15041,17 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -17719,20 +15067,39 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, "engines": { - "node": ">=8" + "node": ">=12" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/tree-kill": { @@ -17740,6 +15107,7 @@ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, + "license": "MIT", "bin": { "tree-kill": "cli.js" } @@ -17749,6 +15117,7 @@ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -17757,38 +15126,44 @@ } }, "node_modules/ts-jest": { - "version": "27.1.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.5.tgz", - "integrity": "sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==", + "version": "29.2.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.4.tgz", + "integrity": "sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "0.x", + "ejs": "^3.1.10", "fast-json-stable-stringify": "2.x", - "jest-util": "^27.0.0", - "json5": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", "lodash.memoize": "4.x", "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@types/jest": "^27.0.0", - "babel-jest": ">=27.0.0 <28", - "jest": "^27.0.0", - "typescript": ">=3.8 <5.0" + "@jest/transform": "^29.0.0", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, - "@types/jest": { + "@jest/transform": { + "optional": true + }, + "@jest/types": { "optional": true }, "babel-jest": { @@ -17804,6 +15179,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -17816,6 +15192,7 @@ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -17836,6 +15213,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17851,6 +15229,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17867,6 +15246,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -17878,13 +15258,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ts-loader/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -17894,6 +15276,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -17906,6 +15289,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -17915,6 +15299,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17926,6 +15311,7 @@ "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -17967,13 +15353,15 @@ "node_modules/ts-node/node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "license": "MIT" }, "node_modules/tsconfig": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", "dev": true, + "license": "MIT", "dependencies": { "@types/strip-bom": "^3.0.0", "@types/strip-json-comments": "0.0.30", @@ -17986,6 +15374,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -17995,6 +15384,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18003,13 +15393,15 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -18022,6 +15414,7 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -18031,6 +15424,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -18043,6 +15437,7 @@ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -18051,38 +15446,32 @@ "node": ">= 0.6" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/ufo": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/uid": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", "dev": true, + "license": "MIT", "dependencies": { "@lukeed/csprng": "^1.0.0" }, @@ -18091,15 +15480,17 @@ } }, "node_modules/undici-types": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz", - "integrity": "sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ==" + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.13.0.tgz", + "integrity": "sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==", + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -18109,6 +15500,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -18122,6 +15514,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -18131,14 +15524,29 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universal-cookie": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.2.0.tgz", "integrity": "sha512-PvcyflJAYACJKr28HABxkGemML5vafHmiL4ICe3e+BEKXRMt0GaFLZhAwgv637kFFnnfiSJ8e6jknrKkMrU+PQ==", + "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^0.6.0" @@ -18149,6 +15557,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -18158,6 +15567,7 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -18167,6 +15577,7 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=4", "yarn": "*" @@ -18191,6 +15602,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.2", "picocolors": "^1.0.1" @@ -18207,6 +15619,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -18216,6 +15629,7 @@ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -18225,19 +15639,22 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -18247,6 +15664,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -18254,66 +15672,45 @@ "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" + "convert-source-map": "^2.0.0" }, "engines": { "node": ">=10.12.0" } }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vue": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.34.tgz", - "integrity": "sha512-VZze05HWlA3ItreQ/ka7Sx7PoD0/3St8FEiSlSTVgb6l4hL+RjtP2/8g5WQBzZgyf8WG2f+g1bXzC7zggLhAJA==", + "version": "3.4.37", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.37.tgz", + "integrity": "sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==", + "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.4.34", - "@vue/compiler-sfc": "3.4.34", - "@vue/runtime-dom": "3.4.34", - "@vue/server-renderer": "3.4.34", - "@vue/shared": "3.4.34" + "@vue/compiler-dom": "3.4.37", + "@vue/compiler-sfc": "3.4.37", + "@vue/runtime-dom": "3.4.37", + "@vue/server-renderer": "3.4.37", + "@vue/shared": "3.4.37" }, "peerDependencies": { "typescript": "*" @@ -18328,12 +15725,14 @@ "version": "2.0.29", "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.29.tgz", "integrity": "sha512-58i+ZhUAUpwQ+9h5Hck0D+jr1qbYl4voRt5KffBx8qzELViQ4XdT/Tuo+mzq8u63teAG8K0lLaOiL5ofqW38rg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vue-dompurify-html": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/vue-dompurify-html/-/vue-dompurify-html-5.1.0.tgz", "integrity": "sha512-616o2/PBdOLM2bwlRWLdzeEC9NerLkwiudqNgaIJ5vBQWXec+u7Kuzh+45DtQQrids67s4pHnTnJZLVfyPMxbA==", + "license": "MIT", "dependencies": { "dompurify": "^3.0.0" }, @@ -18346,6 +15745,7 @@ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "eslint-scope": "^7.1.1", @@ -18365,27 +15765,12 @@ "eslint": ">=6.0.0" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/vue-eslint-parser/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -18393,16 +15778,11 @@ "node": ">=10" } }, - "node_modules/vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", - "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", - "dev": true - }, "node_modules/vue-i18n": { "version": "9.13.1", "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.13.1.tgz", "integrity": "sha512-mh0GIxx0wPtPlcB1q4k277y0iKgo25xmDPWioVVYanjPufDBpvu5ySTjP5wOrSvlYQ2m1xI+CFhGdauv/61uQg==", + "license": "MIT", "dependencies": { "@intlify/core-base": "9.13.1", "@intlify/shared": "9.13.1", @@ -18423,6 +15803,7 @@ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "hash-sum": "^2.0.0", @@ -18445,6 +15826,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18460,6 +15842,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18476,6 +15859,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -18487,13 +15871,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vue-loader/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -18503,6 +15889,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18511,11 +15898,12 @@ } }, "node_modules/vue-router": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.0.tgz", - "integrity": "sha512-HB+t2p611aIZraV2aPSRNXf0Z/oLZFrlygJm+sZbdJaW6lcFqEDQwnzUBXn+DApw+/QzDU/I9TeWx9izEjTmsA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.3.tgz", + "integrity": "sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==", + "license": "MIT", "dependencies": { - "@vue/devtools-api": "^6.5.1" + "@vue/devtools-api": "^6.6.3" }, "funding": { "url": "https://github.com/sponsors/posva" @@ -18529,6 +15917,7 @@ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", "dev": true, + "license": "MIT", "dependencies": { "hash-sum": "^1.0.2", "loader-utils": "^1.0.2" @@ -18538,18 +15927,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", - "dev": true - }, - "node_modules/vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/vuetify": { - "version": "3.6.13", - "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.6.13.tgz", - "integrity": "sha512-Gz7jxXAkmff2m6CM0EUWOo/72TM322/3I6aDna++k1nPOW1/hNx4td1MZG4u75fzdn3r+uIe0dbF7SWuhu6DWA==", + "version": "3.6.14", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.6.14.tgz", + "integrity": "sha512-iSa3CgdTEt/7B0aGDmkBARe8rxDDycEYHu1zNtOf1Xpvs/Tv7Ql5yHGqM2XCY0h7SL8Dme39pJIovzg3q4JLbQ==", + "license": "MIT", "engines": { "node": "^12.20 || >=14.13" }, @@ -18579,26 +15964,17 @@ } } }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, + "license": "MIT", "dependencies": { - "xml-name-validator": "^3.0.0" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/walker": { @@ -18606,6 +15982,7 @@ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } @@ -18615,6 +15992,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "devOptional": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -18628,6 +16006,7 @@ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } @@ -18637,17 +16016,19 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=10.4" + "node": ">=12" } }, "node_modules/webpack": { @@ -18655,6 +16036,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.93.0.tgz", "integrity": "sha512-Y0m5oEY1LRuwly578VqluorkXbvXKh7U3rLoQCEO04M97ScRr44afGVkI0FQFsXzysk5OgFAxjZAb9rsGQVihA==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^1.0.5", @@ -18697,290 +16079,195 @@ } } }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, + "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "commander": "^7.2.0", - "debounce": "^1.2.1", - "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", - "html-escaper": "^2.0.2", - "opener": "^1.5.2", - "picocolors": "^1.0.0", - "sirv": "^2.0.3", - "ws": "^7.3.1" + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" }, "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" + "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" + "node": ">=14.15.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/webpack-chain": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-6.5.1.tgz", - "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", - "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", - "dev": true, - "dependencies": { - "deepmerge": "^1.5.2", - "javascript-stringify": "^2.0.1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/webpack-chain/node_modules/deepmerge": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", - "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.3.0.tgz", + "integrity": "sha512-xD2qnNew+F6KwOGZR7kWdbIou/ud7cVqLEXeK1q0nHcNsX/u7ul/fSdlOTX4ntSL5FNFy7ZJJXbf0piF591JYw==", "dev": true, + "license": "MIT", "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.4.3", + "memfs": "^4.6.0", "mime-types": "^2.1.31", + "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" + "webpack": "^5.0.0" }, - "peerDependencies": { - "ajv": "^8.8.2" + "peerDependenciesMeta": { + "webpack": { + "optional": true + } } }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "node_modules/webpack-dev-server": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.5", + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "default-gateway": "^6.0.3", "express": "^4.17.3", "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", + "html-entities": "^2.4.0", "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "launch-editor": "^2.6.0", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.4", - "ws": "^8.13.0" + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" }, "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" + "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "engines": { - "node": ">=10.0.0" }, "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" + "webpack": "^5.0.0" }, "peerDependenciesMeta": { - "bufferutil": { + "webpack": { "optional": true }, - "utf-8-validate": { + "webpack-cli": { "optional": true } } }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/webpack-merge": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -18991,34 +16278,54 @@ } }, "node_modules/webpack-plugin-vuetify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/webpack-plugin-vuetify/-/webpack-plugin-vuetify-2.0.1.tgz", - "integrity": "sha512-vopDoL1Il9lhDReAYdhToMi/OkFqV8BebEEyviZqMwFvQ3XnsRIdPyDDvee336h46QzCg3utp/FL5h2DhqeqAw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/webpack-plugin-vuetify/-/webpack-plugin-vuetify-3.0.3.tgz", + "integrity": "sha512-pYTLcrufc00PzqHZhG/zLylGE07uC0hB6SisvSYuN6hyjKCf9rtdm2UaIG7kExfhZa3U1WKU7mYXFi1jDEc+vQ==", "devOptional": true, + "license": "MIT", "dependencies": { - "@vuetify/loader-shared": "^1.7.1", + "@vuetify/loader-shared": "^2.0.3", "decache": "^4.6.0", "file-loader": "^6.2.0", - "find-cache-dir": "^3.3.2", + "find-cache-dir": "^5.0.0", "loader-utils": "^2.0.0", "mkdirp": "^1.0.4", "null-loader": "^4.0.1", "upath": "^2.0.1" }, "engines": { - "node": ">=12" + "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { "@vue/compiler-sfc": "^3.2.6", - "vuetify": "^3.0.0-beta.4", + "vue": "^3.2.6", + "vuetify": "^3.0.0", "webpack": "^5.0.0" } }, + "node_modules/webpack-plugin-vuetify/node_modules/find-cache-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-5.0.0.tgz", + "integrity": "sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/webpack-plugin-vuetify/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "devOptional": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -19028,38 +16335,46 @@ "node": ">=8.9.0" } }, - "node_modules/webpack-plugin-vuetify/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "devOptional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/webpack-virtual-modules": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", - "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", - "dev": true + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "devOptional": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "devOptional": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -19073,20 +16388,12 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/webpack/node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "devOptional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -19101,87 +16408,107 @@ "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } }, "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, + "license": "MIT", "dependencies": { - "iconv-lite": "0.4.24" + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" } }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", - "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", - "dev": true + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } }, "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/wrap-ansi-cjs": { @@ -19190,6 +16517,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -19207,6 +16535,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -19222,6 +16551,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -19233,13 +16563,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -19255,6 +16587,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -19266,37 +16599,42 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -19308,22 +16646,28 @@ } }, "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -19332,15 +16676,20 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/yaml-eslint-parser": { @@ -19348,6 +16697,7 @@ "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.0.0", "lodash": "^4.17.21", @@ -19360,23 +16710,12 @@ "url": "https://github.com/sponsors/ota-meshi" } }, - "node_modules/yaml-eslint-parser/node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -19391,10 +16730,21 @@ } }, "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -19403,6 +16753,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -19412,91 +16763,13 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/yorkie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", - "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "execa": "^0.8.0", - "is-ci": "^1.0.10", - "normalize-path": "^1.0.0", - "strip-indent": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/yorkie/node_modules/execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", - "dev": true, - "dependencies": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/yorkie/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/yorkie/node_modules/normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yorkie/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true } } } diff --git a/package.json b/package.json index 04141d5..9dbbfaf 100644 --- a/package.json +++ b/package.json @@ -7,12 +7,14 @@ "jest" ], "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build --mode production", + "serve": "NODE_ENV=development npm run build:dev", + "serve:windows": "set NODE_ENV=development&& npm run build:dev", + "build:dev": "set NODE_ENV=development&& webpack serve --config config/webpack/webpack.dev.js", + "build": "NODE_ENV=production webpack --config config/webpack/webpack.prod.js", "test": "npm run test:unit", - "test:unit": "vue-cli-service test:unit", + "test:unit": "npx jest", "test:unit:ci": "npm run test:unit -- --coverage --ci --maxWorkers=4", - "lint": "vue-cli-service lint", + "lint": "npx eslint 'src/**/*.{ts,js,vue}'", "generate-client:server": "node generate-client.js -c openapitools-for-server.json" }, "dependencies": { @@ -26,42 +28,53 @@ "vue-dompurify-html": "^5.1.0", "vue-i18n": "^9.13.1", "vue-router": "^4.4.0", - "vuetify": "^3.6.13" + "vuetify": "^3.6.14" }, "devDependencies": { + "@babel/core": "^7.24.3", + "@babel/preset-env": "^7.24.3", "@golevelup/ts-jest": "^0.5.0", - "@intlify/bundle-utils": "^7.5.1", + "@intlify/bundle-utils": "^8.0.0", + "@jest/globals": "^29.7.0", "@mdi/js": "^7.4.47", "@openapitools/openapi-generator-cli": "^2.13.4", "@pinia/testing": "^0.1.4", - "@types/jest": "^27.5.2", - "@typescript-eslint/eslint-plugin": "^6.13.2", - "@typescript-eslint/parser": "^6.13.2", - "@vue/cli-plugin-babel": "~5.0.8", - "@vue/cli-plugin-eslint": "~5.0.8", - "@vue/cli-plugin-router": "~5.0.8", - "@vue/cli-plugin-typescript": "~5.0.8", - "@vue/cli-plugin-unit-jest": "~5.0.8", - "@vue/cli-service": "~5.0.8", - "@vue/eslint-config-typescript": "^12.0.0", - "@vue/test-utils": "^2.4.6", - "@vue/vue3-jest": "^27.0.0", + "@types/jest": "^29.5.12", + "@types/webpack-env": "^1.18.5", + "@typescript-eslint/eslint-plugin": "^7.4.0", + "@typescript-eslint/parser": "^7.4.0", + "@vue/eslint-config-typescript": "^13.0.0", + "@vue/test-utils": "^2.4.5", + "@vue/vue3-jest": "^29.2.6", "arg": "^5.0.2", - "babel-jest": "^27.1.1", - "eslint": "8.56", + "babel-jest": "^29.7.0", + "babel-loader": "^9.1.3", + "copy-webpack-plugin": "^12.0.2", + "css-loader": "^6.10.0", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-vue": "^9.27.0", - "eslint-plugin-vuetify": "^2.4.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-vue": "^9.23.0", + "eslint-webpack-plugin": "^4.1.0", "fishery": "^2.2.2", - "jest": "^27.5.1", + "html-webpack-plugin": "^5.6.0", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-transform-stub": "^2.0.0", "prettier": "^3.3.3", - "sass": "^1.67.0", - "sass-loader": "^13.3.3", - "ts-jest": "^27.1.5", - "typescript": "^4.9.5", + "sass": "^1.77.8", + "sass-loader": "^16.0.0", + "ts-jest": "^29.1.2", + "ts-loader": "^9.5.1", + "typescript": "^5.4.3", + "vue-loader": "^17.4.2", + "vue-style-loader": "^4.1.3", "vue-component-type-helpers": "^2.0.29", - "webpack-plugin-vuetify": "^2.0.1" + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.0.4", + "webpack-merge": "^5.10.0", + "webpack-plugin-vuetify": "^3.0.3" }, "engines": { "node": "20", diff --git a/sonar-project.properties b/sonar-project.properties index a3794e3..9161d99 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -8,8 +8,7 @@ sonar.tests=. sonar.exclusions=src/serverApi/**/*,**/locales/**.ts # Exclude scripts from root folder, app setup scripts from src and route config from coverage -# TODO Vue files are excluded for now, since they don't report the correct coverage -sonar.coverage.exclusions=/*,src/*,src/router/*,webpack-config/**/*,**/*.vue +sonar.coverage.exclusions=/*,src/*,src/router/*,webpack-config/**/* # Include test files and test utils in test scope sonar.test.inclusions=tests/**/*,**/*.unit.ts,**/*.unit.js diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..0b88940 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1,4 @@ +type TestUtilsModule = typeof import("@vue/test-utils"); + +declare const mount: TestUtilsModule["mount"]; +declare const shallowMount: TestUtilsModule["shallowMount"]; diff --git a/src/main.ts b/src/main.ts index a379b1f..cb23d0e 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,6 @@ import { handleApplicationError } from "@/plugins/applicationErrorHandler"; import { createI18n } from "@/plugins/i18n"; +// Vuetify must be imported before any Component for the @layer styles to work import vuetify from "@/plugins/vuetify"; import router from "@/router"; import { initializeAxios } from "@/utils/api"; @@ -13,8 +14,6 @@ import { createApp } from "vue"; import VueDOMPurifyHTML from "vue-dompurify-html"; import App from "./App.vue"; -import "@/styles/global.scss"; - const app = createApp(App); app.config.errorHandler = handleApplicationError; diff --git a/src/plugins/i18n.d.ts b/src/plugins/i18n.d.ts deleted file mode 100644 index 1e493a6..0000000 --- a/src/plugins/i18n.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-unused-vars -import Vue from "vue"; - -declare module "vue/types/vue" { - interface Vue { - $ts(key: string): string; - } -} diff --git a/src/plugins/vuetify.options.ts b/src/plugins/vuetify.options.ts index 49e9c1c..efbe4db 100644 --- a/src/plugins/vuetify.options.ts +++ b/src/plugins/vuetify.options.ts @@ -41,6 +41,7 @@ const theme: ThemeDefinition = { export default { theme: { + cspNonce: "**CSP_NONCE**", options: { customProperties: true, cspNonce: window.nonce, diff --git a/src/plugins/vuetify.ts b/src/plugins/vuetify.ts index 0ec8762..2543a3a 100644 --- a/src/plugins/vuetify.ts +++ b/src/plugins/vuetify.ts @@ -1,4 +1,5 @@ -import "vuetify/styles"; +// Stylesheets must be imported before any Component for the @layer styles to work +import "@/styles/main.scss"; import { createVuetify } from "vuetify"; import theme from "./vuetify.options"; diff --git a/src/router/index.ts b/src/router/index.ts index 3bb9e1c..7ddb1a6 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -6,7 +6,7 @@ const router = createRouter({ routes, }); -// TODO add authentication +// TODO N21-2133: Add authentication // router.beforeEach(isAuthenticatedGuard); export default router; diff --git a/src/styles/css-variables/_breakpoints.scss b/src/styles/css-variables/_breakpoints.scss deleted file mode 100644 index 350c60e..0000000 --- a/src/styles/css-variables/_breakpoints.scss +++ /dev/null @@ -1,8 +0,0 @@ -:root { - --size-content-width-min: 30ch; - --size-content-width-max: 80ch; - --breakpoint-tablet: 750px; - --breakpoint-tablet-landscape: 1112px; - --breakpoint-desktop: 991px; - --breakpoint-desktop-lg: 1200px; -} diff --git a/src/styles/css-variables/_durations.scss b/src/styles/css-variables/_durations.scss deleted file mode 100644 index cc0a8ac..0000000 --- a/src/styles/css-variables/_durations.scss +++ /dev/null @@ -1,16 +0,0 @@ -$transition-base: 0.3s; - -:root { - --duration-transition-slow: calc(#{$transition-base} * 3); - --duration-transition-medium: #{$transition-base}; - --duration-transition-fast: calc(#{$transition-base} * 0.5); -} - -@media (prefers-reduced-motion: reduce) { - *, - *::before, - *::after { - transition-duration: 0.001s !important; - animation-duration: 0.001s !important; - } -} diff --git a/src/styles/css-variables/_layers.scss b/src/styles/css-variables/_layers.scss deleted file mode 100644 index 3a69997..0000000 --- a/src/styles/css-variables/_layers.scss +++ /dev/null @@ -1,11 +0,0 @@ -:root { - --layer-behind: -1; - --layer-page: 1; - --layer-sticky-header: 20; - --layer-dropdown: 30; - --layer-popover: 40; - --layer-tooltip: 50; - --layer-top-menu: 60; - --layer-fab: 100; - --layer-modal: 1000; -} diff --git a/src/styles/css-variables/_sizes.scss b/src/styles/css-variables/_sizes.scss deleted file mode 100644 index 442f66a..0000000 --- a/src/styles/css-variables/_sizes.scss +++ /dev/null @@ -1,15 +0,0 @@ -:root { - --radius-round: 100vmax; - --radius-xs: 0.15rem; - --radius-sm: 0.25rem; - --radius-md: 0.5rem; - --radius-lg: 1rem; - --border-width: 1px; - --border-width-bold: 2px; - --sidebar-width: 240px; - --sidebar-width-tablet: 60px; - --sidebar-item-height: 60px; - --sidebar-sub-item-height: 40px; - --topbar-height: 50px; - --content-max-width-vw: 100vw; -} diff --git a/src/styles/css-variables/_spacing.scss b/src/styles/css-variables/_spacing.scss deleted file mode 100644 index 8e01009..0000000 --- a/src/styles/css-variables/_spacing.scss +++ /dev/null @@ -1,18 +0,0 @@ -:root { - --space-xs-4: 0.125rem; - --space-xs-3: 0.25rem; - --space-xs-2: 0.375rem; - --space-xs: 0.5rem; - --space-sm: 0.75rem; - --space-md: 1rem; - --space-md-2: 1.25rem; - --space-lg: 1.5rem; - --space-xl: 2rem; - --space-xl-2: 2.5rem; - --space-xl-3: 3.25rem; - --space-xl-4: 5.25rem; - --space-xl-5: 8.5rem; - --space-base-vuetify: 4px; -} - -$spacer: 0.25rem; diff --git a/src/styles/css-variables/_typography.scss b/src/styles/css-variables/_typography.scss deleted file mode 100644 index afd82df..0000000 --- a/src/styles/css-variables/_typography.scss +++ /dev/null @@ -1,41 +0,0 @@ -@import "./breakpoints"; - -$system-fonts: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, ubuntu, - "Helvetica Neue", arial, sans-serif; - -:root { - --font-primary: "PT Sans", #{$system-fonts}; - --font-accent: "PT Sans Narrow", #{$system-fonts}; - - /* set base values */ - --text-base-size: 1rem; - --text-scale-ratio: 1.2; - --text-device-scale-ratio: 1.125; - - /* heading sizes */ - --heading-1: calc(var(--heading-2) * var(--text-scale-ratio)); - --heading-2: calc(var(--heading-3) * var(--text-scale-ratio)); - --heading-3: calc(var(--heading-4) * var(--text-scale-ratio)); - --heading-4: calc(var(--heading-5) * var(--text-scale-ratio)); - --heading-5: calc(var(--heading-6) * var(--text-scale-ratio)); - --heading-6: calc(var(--text-base-size) * var(--text-scale-ratio)); - - /* text sizes */ - --text-xs: calc( - var(--text-base-size) / var(--text-scale-ratio) / var(--text-scale-ratio) - ); - --text-sm: calc(var(--text-base-size) / var(--text-scale-ratio)); - --text-md: var(--text-base-size); - --text-lg: calc(var(--text-base-size) * var(--text-scale-ratio)); - - /* line-height */ - --line-height-sm: 1.05; - --line-height-md: 1.2; - --line-height-lg: 1.4; - --line-height-xl: 2; - - /* font-weight */ - --font-weight-light: 200; - --font-weight-normal: 400; - --font-weight-bold: 700; -} diff --git a/src/styles/utility/_fonts.scss b/src/styles/fonts.scss similarity index 100% rename from src/styles/utility/_fonts.scss rename to src/styles/fonts.scss diff --git a/src/styles/global.scss b/src/styles/global.scss deleted file mode 100644 index 85f3e43..0000000 --- a/src/styles/global.scss +++ /dev/null @@ -1,17 +0,0 @@ -@import "./utility/breakpoints"; -@import "./utility/colors"; -@import "./utility/fonts"; -@import "./utility/spacing"; -@import "./utility/typography"; -@import "./utility/body"; -@import "./utility/icons"; -@import "./utility/buttons"; -@import "./utility/cards"; -@import "./utility/links"; - -@import "./css-variables/breakpoints"; -@import "./css-variables/durations"; -@import "./css-variables/layers"; -@import "./css-variables/sizes"; -@import "./css-variables/spacing"; -@import "./css-variables/typography"; diff --git a/src/styles/main.scss b/src/styles/main.scss new file mode 100644 index 0000000..3250557 --- /dev/null +++ b/src/styles/main.scss @@ -0,0 +1,4 @@ +@use './fonts'; +@use './typography'; +@use './settings'; +@use 'vuetify'; \ No newline at end of file diff --git a/src/styles/settings.scss b/src/styles/settings.scss index aa69c6b..889ce1d 100644 --- a/src/styles/settings.scss +++ b/src/styles/settings.scss @@ -1,4 +1,8 @@ @forward 'vuetify/settings' with ( + // Enables the use of the @layer-api for css https://developer.mozilla.org/en-US/docs/Web/CSS/@layer + // This will be the default for Vuetify v4 + $layers: true, + $body-font-family: var(--font-primary), $heading-font-family: var(--font-accent), $line-height-root: var(--line-height-md), diff --git a/src/styles/typography.scss b/src/styles/typography.scss new file mode 100644 index 0000000..6e99847 --- /dev/null +++ b/src/styles/typography.scss @@ -0,0 +1,7 @@ +$system-fonts: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, ubuntu, + "Helvetica Neue", arial, sans-serif; + +:root { + --font-primary: "PT Sans", #{$system-fonts}; + --font-accent: "PT Sans Narrow", #{$system-fonts}; +} diff --git a/src/styles/utility/_body.scss b/src/styles/utility/_body.scss deleted file mode 100644 index 5a9fdce..0000000 --- a/src/styles/utility/_body.scss +++ /dev/null @@ -1,56 +0,0 @@ -body.is-noscroll { - position: fixed; - top: 0; - width: 100%; - overflow-y: hidden; -} - -.d-flex { - display: flex; -} - -textarea.v-field__input { - height: var(--text-base-size); -} - -.justify-content-space-between { - justify-content: space-between; -} - -.justify-content-center { - justify-content: center; -} - -.align-items-center { - align-items: center; -} - -@mixin visually-hidden { - /* https://snook.ca/archives/html_and_css/hiding-content-for-accessibility */ - position: absolute !important; - top: 0; - left: 0; - width: 1px; - height: 1px; - overflow: hidden; - clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ - clip: rect(1px, 1px, 1px, 1px); -} - -.visually-hidden { - @include visually-hidden; -} - -::-moz-focus-inner { - border: 0; -} - -:focus { - outline-offset: 2px; -} - -/* width */ - -.w-100 { - width: 100%; -} diff --git a/src/styles/utility/_breakpoints.scss b/src/styles/utility/_breakpoints.scss deleted file mode 100644 index 28758ff..0000000 --- a/src/styles/utility/_breakpoints.scss +++ /dev/null @@ -1,23 +0,0 @@ -$breakpoints: ( - tablet: 750px, - desktop: 991px, - desktop-lg: 1200px, -); - -// Usage: `@include breakpoint(tablet) { ... }` -@mixin breakpoint($breakpoint) { - @if map-has-key($breakpoints, $breakpoint) { - // Get the breakpoint value. - $breakpoint-value: map-get($breakpoints, $breakpoint); - - // Write the media query. - @media (min-width: $breakpoint-value) { - @content; - } - - // If the breakpoint doesn't exist in the map. - } @else { - // Log a warning. - @warn 'Invalid breakpoint: #{$breakpoint}.'; - } -} diff --git a/src/styles/utility/_buttons.scss b/src/styles/utility/_buttons.scss deleted file mode 100644 index 659e3f6..0000000 --- a/src/styles/utility/_buttons.scss +++ /dev/null @@ -1,11 +0,0 @@ -$button-font-size: 1rem; -.v-btn { - font-family: var(--font-accent); - - &--size-small, - &--size-default, - &--size-large, - &--size-x-large { - font-size: $button-font-size; - } -} \ No newline at end of file diff --git a/src/styles/utility/_cards.scss b/src/styles/utility/_cards.scss deleted file mode 100644 index d48fca8..0000000 --- a/src/styles/utility/_cards.scss +++ /dev/null @@ -1,3 +0,0 @@ -.v-card--variant-outlined { - border-color: rgba(0, 0, 0, 0.12) !important; -} diff --git a/src/styles/utility/_colors.scss b/src/styles/utility/_colors.scss deleted file mode 100644 index 900c26f..0000000 --- a/src/styles/utility/_colors.scss +++ /dev/null @@ -1,12 +0,0 @@ -// apply to toasts -.toasted.info { - background-color: rgba(var(--v-theme-info)) !important; -} - -.toasted.success { - background-color: rgba(var(--v-theme-success)) !important; -} - -.toasted.error { - background-color: rgba(var(--v-theme-error))!important; -} diff --git a/src/styles/utility/_icons.scss b/src/styles/utility/_icons.scss deleted file mode 100644 index ab68d85..0000000 --- a/src/styles/utility/_icons.scss +++ /dev/null @@ -1,27 +0,0 @@ -.icon { - display: inline-block; - width: 1em; - height: 1em; - vertical-align: baseline; -} - -.v-icon { - &.custom-icon { - width: 1em; - /* stylelint-disable-next-line sh-waqar/declaration-use-variable */ - font-size: calc(1em + 4px); - line-height: 100%; - vertical-align: middle; // should this be default? - fill: currentColor; - } - - &.custom-icon svg { - fill: currentColor; - } - - &.material-icon { - // remove material icon margin - width: calc(1em + 4px); - height: calc(1em + 4px); - } -} diff --git a/src/styles/utility/_links.scss b/src/styles/utility/_links.scss deleted file mode 100644 index eaf7a39..0000000 --- a/src/styles/utility/_links.scss +++ /dev/null @@ -1,3 +0,0 @@ -a { - color: rgba(var(--v-theme-primary)); -} diff --git a/src/styles/utility/_spacing.scss b/src/styles/utility/_spacing.scss deleted file mode 100644 index 0d11ee0..0000000 --- a/src/styles/utility/_spacing.scss +++ /dev/null @@ -1,50 +0,0 @@ -/* margins */ - -$space-sizes: 0, auto; -$space-size-vars: xs-4, xs-3, xs-2, xs, sm, md, lg, xl, xl-2, xl-3, xl-4, xl-5; - -@each $size in $space-sizes { - .mt--#{$size} { - margin-top: $size; - } - .mb--#{$size} { - margin-bottom: $size; - } - .ml--#{$size} { - margin-left: $size; - } - .mr--#{$size} { - margin-right: $size; - } - .mx--#{$size} { - margin-right: $size; - margin-left: $size; - } - .my--#{$size} { - margin-top: $size; - margin-bottom: $size; - } -} - -@each $size in $space-size-vars { - .mt--#{$size} { - margin-top: var(--space-#{$size}); - } - .mb--#{$size} { - margin-bottom: var(--space-#{$size}); - } - .ml--#{$size} { - margin-left: var(--space-#{$size}); - } - .mr--#{$size} { - margin-right: var(--space-#{$size}); - } - .mx--#{$size} { - margin-right: var(--space-#{$size}); - margin-left: var(--space-#{$size}); - } - .my--#{$size} { - margin-top: var(--space-#{$size}); - margin-bottom: var(--space-#{$size}); - } -} diff --git a/src/styles/utility/_typography.scss b/src/styles/utility/_typography.scss deleted file mode 100644 index c9a4363..0000000 --- a/src/styles/utility/_typography.scss +++ /dev/null @@ -1,95 +0,0 @@ -* { - tab-size: 2; -} - -body { - font-family: var(--font-primary); - font-size: var(--text-base-size); - line-height: var(--line-height-md); -} - -/* heading size */ -@for $i from 1 through 6 { - h#{$i}, - .h#{$i} { - margin-top: var(--space-xl); - margin-bottom: var(--space-sm); - font-family: var(--font-accent); - font-size: var(--heading-#{$i}); - font-weight: var(--font-weight-normal); - line-height: var(--line-height-sm); - } -} - -h1, -.h1 { - &:first-of-type { - margin-top: var(--space-md); - margin-bottom: var(--space-xl); - } -} - -h5, -h6, -.h5, -.h6 { - font-weight: var(--font-weight-bold); -} - -/* text size */ -.text-xs { - font-size: var(--text-xs); -} - -.text-sm { - font-size: var(--text-sm); -} - -.text-md { - font-size: var(--text-md); -} - -.text-lg { - font-size: var(--text-lg); -} - -p { - margin-bottom: var(--space-md); - line-height: var(--line-height-lg); -} - -b, -strong { - font-weight: var(--font-weight-bold); -} - -input, -select, -textarea, -button { - font-family: inherit; - font-size: var(--text-md); -} - -/* utility classes */ - -.truncate { - // truncate text if it exceeds parent - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -@include breakpoint(tablet) { - :root { - --text-base-size: calc(1rem * var(--text-device-scale-ratio)); - } -} - -@include breakpoint(desktop) { - :root { - --text-base-size: calc( - 1rem * var(--text-device-scale-ratio) * var(--text-device-scale-ratio) - ); - } -} diff --git a/src/styles/variables.scss b/src/styles/variables.scss deleted file mode 100644 index b04759e..0000000 --- a/src/styles/variables.scss +++ /dev/null @@ -1,79 +0,0 @@ -$body-font-family: var(--font-primary); -$heading-font-family: var(--font-accent); -$line-height-root: var(--line-height-md); - -// headings -$headings: ( - "h1": ( - "size": var(--heading-1), - "line-height": var(--line-height-sm), - ), - "h2": ( - "size": var(--heading-2), - "line-height": var(--line-height-sm), - ), - "h3": ( - "size": var(--heading-3), - "line-height": var(--line-height-sm), - ), - "h4": ( - "size": var(--heading-4), - "line-height": var(--line-height-sm), - ), - "h5": ( - "size": var(--heading-5), - "line-height": var(--line-height-sm), - "weight": var(--font-weight-bold), - ), - "h6": ( - "size": var(--heading-6), - "line-height": var(--line-height-sm), - "weight": var(--font-weight-bold), - ), -); - -// v-btn -$button-font-size: 1rem; -$btn-text-transform: none; -$btn-font-weight: var(--font-weight-bold); -$btn-letter-spacing: 0.044em; -$btn-focus-opacity: 0; - -.v-btn { - font-family: var(--font-accent); - - &.v-size--small, - &.v-size--default, - &.v-size--large, - &.v-size--x-large { - font-size: $button-font-size; - } -} - -.v-btn.primary { - &:hover { - background-color: rgba(var(--v-theme-primary-darken-1)) !important; - } -} - -// tabs -$tabs-item-letter-spacing: inherit; - -// table -$data-table-regular-header-font-size: 1rem; -$data-table-regular-row-font-size: 1rem; - -// card -$card-text-letter-spacing: normal; - -// treeview -$treeview-node-margin: 0; -$treeview-node-padding: 0; - -// tooltip -$tooltip-background-color: rgb(66, 66, 66); -$tooltip-text-color: white; -$tooltip-padding: 8px 8px 8px 12px; -$tooltip-transition-enter-duration: 300; -$tooltip-transition-leave-duration: 300; -$tooltip-opacity: 1; diff --git a/src/utils/api/api.ts b/src/utils/api/api.ts index 16bb944..84beccd 100644 --- a/src/utils/api/api.ts +++ b/src/utils/api/api.ts @@ -13,23 +13,30 @@ export const initializeAxios = (axios: AxiosInstance) => { } }; +export const defaultApiError: ApiResponseError | ApiValidationError = { + message: "UNKNOWN_ERROR", + code: 1, + title: "", + type: "Unknown error", +}; + export const mapAxiosErrorToResponseError = ( error: unknown ): ApiResponseError | ApiValidationError => { - let apiError: ApiResponseError | ApiValidationError = { - message: "UNKNOWN_ERROR", - code: 1, - title: "", - type: "Unknown error", - }; + let apiError: ApiResponseError | ApiValidationError = defaultApiError; if ( isAxiosError< - ApiValidationError | ApiResponseError, + ApiValidationError | ApiResponseError | string, Record >(error) ) { - const errorPayload = error.response?.data; + const errorPayload: + | ApiValidationError + | ApiResponseError + | string + | undefined = error.response?.data; + if (errorPayload && isObject(errorPayload)) { apiError = errorPayload; } else if (typeof errorPayload === "string") { diff --git a/src/utils/api/api.unit.ts b/src/utils/api/api.unit.ts index 778c1fa..1a4782e 100644 --- a/src/utils/api/api.unit.ts +++ b/src/utils/api/api.unit.ts @@ -4,7 +4,12 @@ import { } from "@@/tests/test-utils/factory"; import { mount } from "@vue/test-utils"; import axios, { isAxiosError } from "axios"; -import { $axios, initializeAxios, mapAxiosErrorToResponseError } from "./api"; +import { + $axios, + defaultApiError, + initializeAxios, + mapAxiosErrorToResponseError, +} from "./api"; jest.mock("axios"); const mockedIsAxiosError = jest.mocked(isAxiosError); @@ -66,80 +71,105 @@ describe("AxiosInstance", () => { code, response: { data, status, statusText }, }); - const expectedPayload = { - message: data, - code: status, - title: statusText, - type: code, - }; return { responseError, - expectedPayload, + status, + statusText, + data, + code, }; }; it("should return correctly payload", () => { mockedIsAxiosError.mockReturnValueOnce(true); - const { responseError, expectedPayload } = setup(); + const { responseError, data, status, statusText, code } = setup(); const result = mapAxiosErrorToResponseError(responseError); - expect(result).toStrictEqual(expectedPayload); + expect(result).toStrictEqual({ + message: data, + code: status, + title: statusText, + type: code, + }); }); }); - describe("when response props not set correctly", () => { + describe("when response payload is a string and status is missing", () => { const setup = () => { - mockedIsAxiosError.mockReturnValueOnce(true); - const data = "NOT_FOUND"; const responseError = axiosErrorFactory.build({ response: { data, status: undefined, statusText: undefined }, }); + mockedIsAxiosError.mockReturnValueOnce(true); + return { responseError, + data, }; }; it("should return correctly payload", () => { - const { responseError } = setup(); + const { responseError, data } = setup(); const result = mapAxiosErrorToResponseError(responseError); expect(result).toStrictEqual({ - message: "NOT_FOUND", - code: 1, - title: "", - type: "Unknown error", + message: data, + code: defaultApiError.code, + title: defaultApiError.title, + type: defaultApiError.type, }); }); }); - describe("when response payload is not AxiosError", () => { + describe("when response payload is undefined", () => { const setup = () => { - const responseError = new Error("Test error"); - const expectedPayload = { - message: "UNKNOWN_ERROR", - code: 1, - title: "", - type: "Unknown error", - }; + const responseError = axiosErrorFactory.build({ + response: { + data: undefined, + status: undefined, + statusText: undefined, + }, + }); + + mockedIsAxiosError.mockReturnValueOnce(true); return { responseError, - expectedPayload, }; }; it("should return correctly payload", () => { + const { responseError } = setup(); + + const result = mapAxiosErrorToResponseError(responseError); + + expect(result).toStrictEqual(defaultApiError); + }); + }); + + describe("when response is undefined", () => { + const setup = () => { + const responseError = axiosErrorFactory.build({ + response: undefined, + }); + mockedIsAxiosError.mockReturnValueOnce(true); - const { responseError, expectedPayload } = setup(); + + return { + responseError, + }; + }; + + it("should return correctly payload", () => { + const { responseError } = setup(); const result = mapAxiosErrorToResponseError(responseError); - expect(result).toStrictEqual(expectedPayload); + expect(result).toStrictEqual(defaultApiError); }); }); }); diff --git a/tests/setup.js b/tests/setup.js index ac2d601..3adef7a 100644 --- a/tests/setup.js +++ b/tests/setup.js @@ -1,4 +1,3 @@ -import { jest } from "@jest/globals"; import { config, mount, shallowMount } from "@vue/test-utils"; // enable rendering of default slot on stubbed components @@ -9,20 +8,32 @@ global.mount = mount; global.shallowMount = shallowMount; /** - * matchMedia is used by useBreakpoints from VueUse to distinguish breakpoints. + * matchMedia is used by + * - useBreakpoints from VueUse to distinguish breakpoints + * - VProgressLinear from vuetify with ('forced-colors: active') * We need to mock it to run tests that rely on useBreakpoints * @see https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom */ Object.defineProperty(window, "matchMedia", { writable: true, - value: jest.fn().mockImplementation((query) => ({ + value: (query) => ({ matches: false, media: query, onchange: null, - addListener: jest.fn(), // deprecated - removeListener: jest.fn(), // deprecated - addEventListener: jest.fn(), - removeEventListener: jest.fn(), - dispatchEvent: jest.fn(), - })), + addListener: () => { + return; + }, // deprecated + removeListener: () => { + return; + }, // deprecated + addEventListener: () => { + return; + }, + removeEventListener: () => { + return; + }, + dispatchEvent: () => { + return; + }, + }), }); diff --git a/tsconfig.json b/tsconfig.json index e17ead9..36020fb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,7 +25,8 @@ "@/*": ["src/*"], "@@/*": ["*"] }, - "lib": ["esnext", "dom", "dom.iterable", "scripthost"] + "lib": ["esnext", "dom", "dom.iterable", "scripthost"], + "outDir": "dist" }, "include": [ "src/**/*.ts", @@ -34,5 +35,5 @@ "tests/**/*.ts", "tests/**/*.tsx" ], - "exclude": ["node_modules"] + "exclude": ["node_modules", "dist"] } diff --git a/vue.config.js b/vue.config.js deleted file mode 100644 index b770711..0000000 --- a/vue.config.js +++ /dev/null @@ -1,102 +0,0 @@ -const { defineConfig } = require("@vue/cli-service"); -const path = require("path"); -const NoncePlaceholderPlugin = require("./webpack-config/nonce-placeholder-plugin"); -const { VuetifyPlugin } = require("webpack-plugin-vuetify"); - -const TSCONFIG_PATH = path.resolve(__dirname, "./tsconfig.build.json"); - -const getDir = (subPath) => path.resolve(__dirname, subPath); - -module.exports = defineConfig({ - runtimeCompiler: true, - - transpileDependencies: ["vuetify"], - - configureWebpack: { - plugins: [ - new VuetifyPlugin({ - styles: { configFile: "src/styles/settings.scss" }, - }), - new NoncePlaceholderPlugin(), - ], - resolve: { - alias: { - "@data": getDir("src/modules/data"), - "@feature": getDir("src/modules/feature"), - "@ui": getDir("src/modules/ui"), - "@util": getDir("src/modules/util"), - "@page": getDir("src/modules/page"), - }, - extensions: [".js", ".ts", ".vue", ".json"], - }, - module: { - rules: [ - { - test: /\.ts$/, - type: "javascript/auto", - loader: path.resolve(__dirname, "webpack-config/vue-i18n-loader.js"), - include: [path.resolve(__dirname, "src/locales")], - }, - ], - }, - }, - - // use custom tsconfig for webpack builds - // to e.g. exclude test files - // https://github.com/vuejs/vue-cli/issues/2421 - chainWebpack: (config) => { - config.module - .rule("ts") - .use("ts-loader") - .merge({ - options: { - configFile: TSCONFIG_PATH, - }, - }); - // avoid auto format on vue-loader to fix prettier errors - config.module - .rule("vue") - .use("vue-loader") - .tap((options) => { - options.prettify = false; - return options; - }); - config.plugin("fork-ts-checker").tap((args) => { - args[0].typescript.configFile = TSCONFIG_PATH; - return args; - }); - config.plugin("html").tap((args) => { - args[0].template = "./index.html"; - args[0].title = "Superhero-Dashboard"; - args[0].favicon = `./public/favicon.png`; - return args; - }); - config.plugin("copy").tap((args) => { - args[0].patterns[0].globOptions.ignore.push( - path.resolve(__dirname, "./public/themes/**/*") - ); - return args; - }); - }, - - pluginOptions: { - i18n: { - locale: "de", - fallbackLocale: "de", - localeDir: "locales", - enableInSFC: true, - enableBridge: false, - }, - }, - - devServer: - process.env.NODE_ENV === "development" - ? { - port: 4100, - allowedHosts: "all", - client: { - overlay: false, - }, - } - : {}, -}); From 1fbd05a68a133a8471ea6780f62305a51094e711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Mon, 12 Aug 2024 13:09:07 +0200 Subject: [PATCH 25/26] update build command --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 9dbbfaf..96e1826 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,8 @@ "jest" ], "scripts": { - "serve": "NODE_ENV=development npm run build:dev", - "serve:windows": "set NODE_ENV=development&& npm run build:dev", - "build:dev": "set NODE_ENV=development&& webpack serve --config config/webpack/webpack.dev.js", + "serve": "NODE_ENV=development webpack serve --config config/webpack/webpack.dev.js", + "serve:windows": "set NODE_ENV=development&& webpack serve --config config/webpack/webpack.dev.js", "build": "NODE_ENV=production webpack --config config/webpack/webpack.prod.js", "test": "npm run test:unit", "test:unit": "npx jest", From 41c0d6fc81e70d77fc7ee80004cbfe07586aa143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marvin=20=C3=96hlerking?= Date: Mon, 12 Aug 2024 13:39:22 +0200 Subject: [PATCH 26/26] exclude webpack config from coverage --- sonar-project.properties | 2 +- src/utils/api/api.ts | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index 9161d99..634b7ec 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -8,7 +8,7 @@ sonar.tests=. sonar.exclusions=src/serverApi/**/*,**/locales/**.ts # Exclude scripts from root folder, app setup scripts from src and route config from coverage -sonar.coverage.exclusions=/*,src/*,src/router/*,webpack-config/**/* +sonar.coverage.exclusions=/*,src/*,src/router/*,config/**/* # Include test files and test utils in test scope sonar.test.inclusions=tests/**/*,**/*.unit.ts,**/*.unit.js diff --git a/src/utils/api/api.ts b/src/utils/api/api.ts index 84beccd..3c0abd4 100644 --- a/src/utils/api/api.ts +++ b/src/utils/api/api.ts @@ -31,19 +31,23 @@ export const mapAxiosErrorToResponseError = ( Record >(error) ) { + if (!error.response) { + return apiError; + } + const errorPayload: | ApiValidationError | ApiResponseError | string - | undefined = error.response?.data; + | undefined = error.response.data; if (errorPayload && isObject(errorPayload)) { apiError = errorPayload; } else if (typeof errorPayload === "string") { apiError.message = errorPayload; - apiError.code = error.response?.status ?? apiError.code; + apiError.code = error.response.status ?? apiError.code; apiError.type = error.code ?? apiError.type; - apiError.title = error.response?.statusText ?? apiError.title; + apiError.title = error.response.statusText ?? apiError.title; } } return apiError;

1I4`a-&<*{smFAf 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%0DsrnEl%lwePic@Drfu@m_iwVN=x8S;6Oo* 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 \ No newline at end of file diff --git a/src/assets/fonts/PT_Sans-Web-Regular.ttf b/src/assets/fonts/PT_Sans-Web-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2b0a25a1a5dd606634567ae4923f97b7a248afff GIT binary patch literal 266387 zcmbTf34Bylnm2s!t-UI#swB0fvQ=fNEESRp*(#eP2nhicq8K1x8e9?yE|3V(pzpxj z8Wgk}rWF)yM}FOkjot4{<@U9@QG1}<6?KM8tJq*>pr;kr{_xk0C@$gq|4&s#=&@&h z--kX=oqO(f&biNd_H!c1k|d=8=_Ti!u7!)F1b`W{??&fJddntB zGVNZtC|vym&u#xH>1w9ou9er_e9hV?I__8@>3)s#%GcKouL~$!t(Qr-*Q< zaPvP+`{No(_w1dLBtLM&HMg#ne3AvvUy1Y18*Uouf1tmr9_Ml-UABGI^*7(1^`qZ? zi09ugNq3)F)pyPHXa0BTH{40`VYrAR9 zb=T;RoxMuZL#L=iKya? zrcS74OKMtrqiT=;7|eDYMJ>*#XJEQjTs_7Z|Y5B6L#N;)3Bi=|!M6Ri;sjjc9 zEiRY6)oz!uT&{~0x@+91_PPoSN=((BnrfV`tF5W_Mv4my+^#$&QeRV@D;J2Pn(BzR zruY)Mwy?lx@)qzqPmSB?twV*W1dpl{7f0fcDY@`L9=;Lph`9I)-0#KBtce&4@t|fo z{yy=B|I$kD|J(-NZYmUQz{9Ft&GNq}fNmpR2~$3K^%==C~9ud`STO2LIM^~Il^YWdq|7sxujBFjdzQ3f{Z z*n(7xiB)KVQL)6EQ0%vvQ_SWRS&#ENgTZPx$a1<_*4u3cy(}B-Xr5AmM#>o`gWaw( zDmJ5RQ=a=~wsO<4W7QKA)dGL>#}tDJ?LtRwMq^%{ORt!e6bt%+Upz^tm=!b!PuD93 zn^lordOaFwaHbga*=c&CLsrl;j){V%8FaEvQOs_)%Vu#n95&g2ak1JIYLt7U(l}=9OrO*S&eH{02>@4>HUY@Z_5h-QLx6F>Nx-Lol);&P{D3_I z0)Q$&8=woY60jDq39uco2M`4u0*nJr0vtnQvgJ(F=p0K)IrCk-!vWsm0Ph&H7|(zo zfh*LcVWQ}2F+V(D0)+*|8yBTbPfPP>Wd{P;S$^fY$tR-G$$!cA`?IqGf%E63W%5^Y zF1lSTS=URlQL^H_MeM$IP&y(hy{bc&d(~DT&8ZLQQL)D$_f}2s!I0%hP4fH7_oZyf zFTW#(Ocz!c>TvxwA_-_rv7L!#PpB)hQ8At^4{3qys%&K_>Ks=yo${bs>cokAS(37y z)eTIxt04r?5JOx3Hwwkw@~JVLWOG&$M8u4H#+zhT4FkHc0wj z)g&%b&GBn3<55c(yi|u9ReP$!ABQuWkI8n9Wudiccug8#lZMx%r)BX}x-*(F9?b}= zD>6{&7L}?eD~;#8<56!|^@#&DN3>SW6@5|j#Di78cnv#qW#e zgw=yN^5B@PJ2TS;dXPa6GU!1DJ;)#`SuzZ2lI)Z*f{+wBLc+v*5w+u9JMQ%-?)Bqd zKkoJ8UO(>ji+lY}KkhY;NA1q2Z9EFGJySE8?q)?Xex{p zMrs7qm}(*bQ=x#u64c6>110Sx3+xO1^X&7B+lvPPmpd=>&vkZ|wAT#y2mbivlWljk z{S*G-=gIf)f)Kv!{Ey}T)CHuVR4LWTFOhoGK&q}>l`tG^mTo)>YU&DLa3rE&YJj61 z3`3|!gQD3%=U5Rw7`{xv8AYQ#;b@UFn$5$pVoV$yOdD7Gr^$nO;8++nxUYI#9jKNE z6VoXJGbke|iiKRJD2~5-4T<;;Ac*F%Y04SC7=x}4t84T)Q=K89L273;%A-KhYA423 zJ77L+R)*B$W_c)fhxtD9BW7K%W;JKAa;_QE=#=>^%Fztb1>p1vmPPYpD?MvHn>@N+ z)Qr{Ojai^Al2>e{cdd7m7box%bP&2ip}@fjDg@=@>eJ=&P}OujVnsk6@mksC~ z(Q2ZtK-w1jE<2|26AqRgyBsLror{w}qPz20BD#TSeLhe>(Pp5Sp}<`bEI@w@h3-P! zw|F|{$zm~@>VP8mdMo9UNS^FXtJKxi)<^1U+&D0y(w(ORJA(AhsI62=+%sgI%j2!H z%YTVxka_PAKe!O&C{wH2X@n~G4elE_gB zw5frIKw4EpTLaEJ+E8(D9#GqSpzTB}ffDp(0DT#f^i_j{8lmbz37m(6c|0&Uqxs{} z8fUZ_Qw=j?STy(*sa~2VE!JNr8klaz%s3C~Q8xndlMA7wo@T>W5S>p4Izi-2$44=k z(@C5=3@B%UVXGFRM}V{*!+-$|FXbr@P%LPuGqf9YL$T`(>kM}rbc3ope)k{T@}Tyi z`@n|TlZVI8Q zjVM4ACE6aswOvG6?hxDkP!`H_vv8_`r8<_nQHlmIxx?zV0Q#{%a4>*=v<6V^AJ?An zKkZjAyZmRt;M7O_AXiqs=tqBQ{qi7$!*$?+w*u}0JOI!SszLES?Ze=?Anv*>i1#!H z@y5k00S!h&oL<^{<)4+~WrlK`^AOD~#{~y4>9kkNkC)@#`&sb_Q4i0LproBDKZ{eb zV0m46dpQTVd|mn7<+{PxDsZaLP1cRYf!x{nnNEuAgOp!#qN zp7$hCMN2tH=cNihMP~&Xu$i@sSQ`LsZl=hP&jSL2{MN$BM`D93?ns1`=jQW9PbB$%vJ(ZdM8`W7JV z#;iNC6i{K-xh(XtorLfJ38C6K)*+uEU%yIsM)h}Gg-1mFVTcLwfF=BN<)pdTjiEb2 z_k}=5XbaI%))fQAf-Q9|?Jc??wT?&Ex2$Wqy9JGUoL4On zBcOe_;M@Xq@at0|ElA+lJ3<^sjCtRZWY6&HGJc$LM5 z`fjjxwVx={fx338Si?jEwfOD>bt84?$KqLJQmP3zL~3U!kxID^KQ+~P3ORM2&O1XF z@!EAPnTkv7y264=#Zak3iI!tc^$dkPdDJg3xaLnv*mRD8# zY#w)-X@=30os;4&$j!D_*Ue5Zub){GUNj>p|6^`LO}QhxvM?j7qAB1DhYAn-Tyj9&H9jqLT+MF=>#r0NPZ^iXi zTyITYZ^iXiTyMqos2qd{8FQLN2k;`u7AvNl6_Zg7pozEIg>0jXe^3P!H9fe zV%h97qr8i@#VU@@7NT7oq6{i8cEwaO149M%rS97ys`sZl^J|03D;JK@Eo*P7saiWE z#;8>Oom{WHCgmz02|=FX(UnI%&S>UD)HNP;g=2?YHCl7du=1kP|ABk-k!JF;=4J|f|&5KE0fTBo#B!o5pao8}SLQJOQVj7L*I zQWNT0D=w6*IC+u`WIIamCed_QXqP#jM{L)%B?36jWEO-Ov-~~ zL_Y$Gx@fPdBN;fpF9S{ZF-t8dX+O^RMFy^ambFizRy&+=ECU~Y2|hPJOg0-a0F!nE zum!LS08;G9#tlnp#X6u`{H-ybF`+HYSiuKNBpXG_phVlL;GSjBi`8b9o@41>fV4-H zpM&sXRwYXbDG&np@N|sm2_S0s7}hNDkZ2aX5LxJwcLEIyOJ1oJun@2UfYAwftGo~z z*;!snz-$g}G>eu<)JqFb^>~E^i>{@>g5@Yj9bq+17%y5dtu77H_3<<ayc`-;>QPW|hF@-#y$(5219zKW zHicz}T+%9=3gL?k%is56m^b#|z!x_U-MmhxJtp|Lcpyeg$3 zrK%(+bV*YvCltcLv`R3XQfY%cu9QnQX|G^7*0AazL5D%h+8XOdE573)l%w)^)ao2F z!8U}wW};tJmEg%yqjcw3F)R}*98A#Lf$%9!Vf8T(qq-7kOs_w~`}K72s!__?l{&lw z&J3uiJfvHL4>eDy2dR-eh*l&@gX$VHz93Fp>7<4C6+T!POLc{%(atFTmxrHzx>JJ< zFNMzE2n+ujDMLCUdIO2%C%;2u*-m`zsAPlm_=X z)i0qaXcmXh0aE%ErdNW%(;!IFsL1IiVn=i*bfXgA)RCh=>u7g73)ZtCw zG8omzFrZb_BMJYL;F)qA-B8m5K7WZTP@Lf_Dzung+2xse(?Uh{B|c+`y%|0_j7PKd zm0TgW!vZQ6XMxn#&cW2v6V2t+Rx`fvmKfUofjxX+#gybhQEd;-ANIIUoYJw!gS zndmRz2AZOzEASV{gMWt@Uhhq9Q7a|QX+S@PCn48ypr?vD>-Ov`S~;QS&WYj z?D1)i5IPAPl@tt`LN8ibI>}krMONY@I>f_GoP;ngQsS;nmnErr>F|McNfTn~Yo$TU z*Ez?0GCrEng0;Cy54fk+uJ49BQfoJNLvU;Jtjjq4?|~T8iXHXzYCJ?SQI_7Aj`F=8 zmNOeOacOZ@eU<{Teu0-XB2-$0Pbw8Cv*qj8j@-O{@U~kPr4>brFPq~iY$%&QNB*7` z`{l2+*gyYb=8cz^|KOpvn-+wA2+He#9(e>Kks=GaeHKwM6RP#)be#^W3pvF5iMA2> ziMn{=BuY^kmOQ2n>BBeF3^G|K60_Be z0W>EE(1rsW$=wP+5*QkM28IcB6YZ`&hA8c>097=d*?{>EihLXsPXizZC%p-H7hqtk zz=+DhQkntt0m}jUAynRo!X1G70FST|R+{k~8n0Q5J|jr+2ZSe0jAXFUbb-+E1dY zB63pOaoPelyl5>gpHIoq$APFY8pq>p8A8WGXj>Ct9$*<@HNe0Q+=RlNfcpVI27tXz z7(X$7Z3K_|h4DG`L@g)PT8R#$Guo(e2R{zDs&FHtFqQ!-#tY%7gP?Z6GEIDoTnvA1 z@>>XfoZrHNZ;>({o0ig&a#@OwjTitM9sz6t>;gc6&2^4>K=kmx`od#bx+LAJ=g1Pi z;1nI^mwT8NT@R4YF``5uCq8gyCXruleEPGJKJNw`wUk?}s z>;UL{wZ8oI`S>(4^jwGRhTzVxn_-BXcF=oenuYQ|m$WV@ncjAMa>z4d*37ypDIq;cr+~>JD7GP z?L-M3TEOTi_1Tm(#$aQ`DfKBG7-`Lvg6Pkn+QYEH@f2vZ`%(_19L5>-EL47w zNgoD(Jzx~D1MmdEFsQyjgTQ5>4uz51E4dITc1bS*jso;U>N%?ER%kuyQ!YIFBOKys zPvPV0UrSj9Qy$jMgUs?y8uwIZ=lj|ba`Bmy^HaT1OFucM^{0Jvf2dqSGAblhqV|Kk46$YT#dhe)r2fWZwDp7Sksce1bD0r&cPR+PB zhqXlQM2m@riE8OuZYNp{)Dwa80JMb=wNMK4-6XlVkp)$O9^{V-nnIb2=FZz*IrAmC z@3F#y(%IEH#WR;qujtHnds~}aCG~-h*}4BQ%{njlbgp8Ovuoy5)L+$@XSdCGUw4oA}3Yu07_AXd^pwx4QZ{U8`Q?3Z=qK*Cz}xa z&~b1j4k^Zs6Pm;5Cx2jkFkT+i))+T}>+!s4Tq`ownsEL-+Bn^&KGS;GIOnpKeFRLGZ!Ky3#K~={CZ@>L^zI>44Y)KG^>dXX3axxORf}^pGsEX($(IKFy(>bOCgYuKd9wOQU z6wMSi7mSE1bPCrbgo6nx&XiY4s58l-bYooI$;q5*adS9R!y*tkX2bwmoI+@0&I%cj z7`j-uz0ba$Hn@?!-%R8Migi2s9P1sZ-^>B=5_Qwb(+yJ;7TIE46A`H)g{HK87$cZp z^k*cd+FR|*dKO$IH~hK$x*^Q4>WUedVRcPim(A@o$jj!vtjIU@H7se$vs!0cESN+s z7`9I!m$Re_`Tn?MwqoEQt%roWNo#|t0pg;7Ru_`PJVr$4i|T~6MplH7qZ87Sr5awu3q?!?!$+Ryg!4DkK@}#N8CJuYB*@Iu)bb8y9?3*A z+A`6u?fh2mOkOsYhXIDatn6ETvRmn+KH077qp@McB-fUiR%3o@%gn3k6q-#La6Qph zP^>zea<-eOpJ+D6I!LshsGi6~G@Gt~AW=P0KT!kq&_3UKA0E5IhYAnTW};sa^-&la zi8d28LSU(wpSJ$dKl);4RymHqYE6*mpc>8#4Lr`!B3;apEKtQ+YPeEJiZM`rmBK@KK8$w4oe z1Z-Lu12CaM3^a66NEq7g6`&;u9% zi~zO(b^-PQ4gd}Vjsa4Jw7KRUGid1#F!B?^`J%X<(7Q>HpesFuuxWf|8k%mBh5?%a zI{|wEF~CcJqX6@udJ6mktuDq!f^F!!hPfbR|lwX(cmT&oLTJz+esvq(~4^FD1EL{aeZ4yjH zEh!c}XKWhEWz&k#Gxcy88ViJgW*KfV0x`^04;F-&)(l+OTt9;so@>T6M~Mv0@=)T_ zUli#|>SYW>%>-xhJIAI&Lu;Nno%jEt8BP4K`CK!adzg<|4utVs4S~D?uobWy06N{* ze4rUlm9pl>=DE$#N*|hfb=mZp{2YB{>&r&VFgEX@;o9D^SQ$oj7dx>OC{|onU)E8E z8((DAo9y8mEa{rd*pePb;zAWlAHQ z59(GT^xWy(>x@BN(blJp(v-=hd-eq?)tOYPebli>sdIinBy601^7Pw?J^<3z z<=mZv8`n|EG!j|!QM)yNH_RIK4wO}20V@i27q9|l^=L6Fii_)up;r`_)R*AL67q#G ztiBN57h*hm9!oxidDRf3x_yRObJH2{4?WNpAD4>sa~{f)zoc*8N2)dP*V z@*|dZH1Sl^a1&1LMOi&Yglt9xrx6d-+$}+ddJ$X%J)%Oby#(m9OK_3l64b44MX7(b zkO9J5JWMhF5SzG!ZCb+S>|{%BOTJDW<|}rzFuqqGiHCW<4e!M@fJ!CEh=v^sK{BR? z7*HapXIExl+TknD&!BQ0njOxnZOIB3x^n6lR9DTb$&%-1mQ-h7QtJ$a{l3aV_n$q% zs;r9g)@j+HJjau*y~U3FP;Eg;TV+;esHw1VNyt$&EmBxMrzSV2YGzelMKI4^a8+^U zv_OUO(Z=h2)17fmi3;{Gs@%1WvZDBYatnya4?|+k1V{c>UKI` zR|1ji#LYiMD3~T8)Qa?R_19oCS}?ti<_vVBL3IEGcCm_a5l0tuoEn-P`b8hIs*oum z($G9%Z6$Ja@D&3d)IJ7ru8w=al*TNLuBcP{ET}E^xQ8!ErwV(FIVpBhjg}bRiy+rgd5re<#0FZXK?LiuEee{CNr%n}v zlAx8PHF75HriwD36+P(#^n~rAYO));NUYw~;abellaCXqCv$*?+!mD84M4F0--vIE z52u&;cn47(ln|{u(8s)sVwBYmqK7e$pqebC0CnMe?@)&5LK4+rrud0bN0--vbha` zMe{G2-r-Qv3L?QvX3HN`UD;A__w9rG*3GoES*kC)rZM2luDz^r&YVD2s>@b1t1j3Y-1#avJf6}75=;4*rt^2DSJ{7j*`adIYy*vEPcv>EG!^5#5~=pNgbZP zNoHTVonsFAl`r%vrd{A+T%PnXCx7MNCY;Ta_awc}igYDn0)IfuGLW6}g=m>8%ov~u z55oO{5}JnKHEhuTF$6FbEcpBJg#Z6h0)*JcvZjW{3ya2^9Gd?oXdq$*Q;~xUf(FQV zN4#n*_d?hF1>u7WN44i~LJ6kii2iL%L5?N|7Qq(jDmZEDpw2xeh82owSi)c;i64fB z!Ac)9BWJMU5FVuq#*DZdLpku-J1|GJR%IbY<9?PmD%)6=%p!fX6Ayw@!HlUsrUSpw z>sZvb>UT3;c7&eKrTSGUlOdUKfzibKv|;0Bn8L9g#wUzV!{=BvU2Oyp%cu*&ghSLU zByTAG^YUeXEtaR}zCYt1iv!zRK)a>VJMy@E7)qE)>JeQrg|)D$6&!+*BR{#u8lvq) zZ9t6vLiN_ss>ikaO$W(M9P}?B!nKyX=2K{IV-f;iuvroR0u|@G#eb#p&nA}&INbR? z^z(vo6q$2O(e&d9QF-E`LBy*Rj2{#RhROD$TiQnRHri5*mT9f#g)Aq=Z_c;l2aiX5 z2*qfsJ1}Fbz~wWh&bgHD94oWA3++*9R$1j6^Q# zIXj4qKw7c4-ira-iJZ)yNHLh=4E@EyLeL;=5C?@0oVnbI_D1D! zG~yJ#+6u@M5J;hOEQiJda<0Q;0dRyFvo2>NE=M*StcR}4na!pe(aPv7=h)S#y5_2@ zQI#7M2~X-8nhO2HsMFzO8LK;Hc$~I?hQmmSwIFN4^anEKap@TY|cih zI0!UC)IwBL%tNBG5JsveG!Viotf4IYs7^+WF{&)+fi}*ynE-dFY^ZQqnhWV-Up=h%paJ~&dqPakLtS& z^(8BWwo$?kARQAE1Q*IRI_j{{8R%JN5YLV@HmbDs$ZQfC#kbjQ!u7@cB=+fS% z%ZINBwXA+{NzeT&t5Y3q8L17o{Pf0~qj%1#yKdX^w)IQvil$rKDc*`Aue&r-*mmd2 zW{-20%MqU6TTv3ps%XdsQ^VppWhUI*CMi{kJL8NxD9H{)th6J>6GrHuVU~rvdPseY zk*tFh45v|oV|mPEJ)>fs&!Be7be7HrqY2>)%aoJi6rOyRE(zFgJY$1n-6RzOY5}tW zR{;$_nejOSHZ#q14%pHIVrC83WSqOgP z4cX{dIiMLZAFv#NH(>n`Y-!~j{64CMS6bkqQQ)Cbqz?h-0BEIEh*mX3z4%`1!&bB; zlj%;9$;v6Uicv!Y68KP`s?bHHdQ-)-%u=e92`B|L0Pw7b=r`s$**BF_!wx=i=^FBGTpf|QHZAZ_w~N*UGWrhm$YjyY-Bgo(EEP$EL4cZh*kA;F;v|GhO- zpCXeG*)Xm24TYIu>}P2kIHb1Sy@!4z31zD9Z6HBIn~gNVJb65PtPpx(n=@JlEx|b! z!BpwG6i*nx6i?WG>C`y;!0mlW3E{+nlSA9)6U&*}!s-#QJoT|QP+qvLwGEWNW~$t) zt!P_=D!QXpV;fyH3^L@wiRg2VwJ^&?giB)vom&^w!TU1@Gbm=zyY)dmj+W3Z*iDtH z&$6BY(#7z?XniT`k?E=RWv|c1&*to%_=)x9tj`(Efs}p`5xH1p01oe{jYspN`F%RdOT zRA%SbU7Ekdl$94KPpfifhVnCfq57Qsh+WC?)m9W>A!BB!rL2Bobtcv?Dq}`-YVgu; zK6T_*<(F0GSij<`Lb(&m3BCTZ%>42!n@;!tKznV#(h4_qKzX_#F(;Q*EM&+Bu?R2; z3ePSe25|&oseX*D8ipO9(RYb&cLM8r)P?jqz&Ze3@erRoqB1{t71HJJOd}Cv2pbEGdGw=hBnTsE)q;ir*xS|8nnP>}H zd>?7t==PAtkz0=>L^@3SJnQMb*hwXG2~jir7+PP}dZfgtJ1JC`5Uqz+pc%70pd6U? zeK-nUC`KVHk@fwpj8)uuSJ$@Qa%ENBlA9V@F3WaR^^|qB78kX4S69sP=6ci1mu~sq zwOf{yrrPFu^Jd@D)p=8AQMw&GyZij-%3{oXmsBQwEe@0EEo9bW88(Zy0j2z7tzuZ zmWY;?@}g2-DK0vVw)JGp(8V2d)J))x%LvJK*_4)t+PFH?oe{2??!M}du99Harsd9> z`bz6>QvG>8lOZQB$I!8&G1F7OTzO8XljYjp?=P5hSKlREOsm|1Y4FWB)&k2_R}3^v zzpkqWlb{>%nzs?Ju}Qz-cs~mz!b0X=9`~cIA#Ic5)wLw>1Z~p{UIWuteT)bOF*4mz zf=R{{OT?)ST!5L#EK0NQjBdo4M);Nfc_Ruf`M2FH|>>@%4ugT$yY1tQ5H zQ*PtY>KX{mF(bYZJ}uH{zO_+lsdmf%Yx1a^HhEeOPyU1Q+`RYZonsCWyZU={)gm4G zwyPF)RrF2tQuJ4N5dS}QH8yTIY53Fteu`v&j1|4#YnYW4CK7on+fnyjeVhsxP4$uf z0`~C;C+~S6Eo^9|s84qK+uo)X#{24-{Adw6dV1dE%L&Fd4U8=)9}{y(PSKUe94Y>k za0+<*8YaCgOdw1vc)IA>%E1JwqBgUMi0NqRN}%}qQZPbB1*9CAZG(}FOf`|Q&M$*i zmx+!EUr+MmO{o=;T}TTRcR@n0#2jA>*aX-P*aL_H4gpNPV)CUq$GrH$@IvGZ z?iLMBs3(F#n>vJ*qT_&*fKLI){&#?R29eMZgk2egT^R&B4Z^Mr;#EP(G#D)!j}|fY z)ens|3}^)`1groUl4^{)o}X?rQ9ZfLW}-P0A zjJuOI);cgv&5-2=7uCA6`lguaJ!GbLaVcfDSWih*Pt;FDd!CEaa6eGY;CK6jevs5C ztNMx7L;8XNZ$=r}4S!>=T)=`ObtUr5kDV1Yk*ry3udHlXwzi>VLAJZ9C$#9&P{AdO zYuYLvmwP8)PjT5znmH8^`Yuk>K2|n7KBl7fbW@8{$fwZ2*KtMB%GY$njL?jP&k^gnE^Ie?xp8{!{4BN2? zNFzVM=WjD~;U_Ual8aA-k09A-%x1iN)gnw_zU};foIfi)kGDDF8xK5-23XJleYv(q z+Q?jrZ4%yh0vQ&uFo<{|GnDpA2Vum-!g8y;P{tfTA;UmeBX2}*u(n@5NdE})O`#%i z-3KITZ#)?TV-JOzA&^Z(Yw5Ia1NtsTB?KjX8ptoRhR1AhSwKpremkHYw0U6tK!nw# zak~KsFK!T0U$=JAoKACQrq|@m$q!|tpa0Qy6?VDM&q-}g$RMQ^J+|wc|7LvKC|bfq z5H}z*4)=DVwG=lHG+01?FDOL)0!Z7Hx-S)qz+sj{sZFV*Q=WVb)TCKbeLOjrCwo!{ zSbhb@o>*b7R^f`MeO&z$=l2;P@QENYj_LsIfMhljvJaLr{!_+FEHFy#FiPz(O6^F! z!upur*hc#{`(sSYncy0USAjH(-N$4lquqnlCEWD{u6!EsBH%6FHK;y_hsLh6-)g_h zj;sWW^b=I8fZqXr&r2X!6s9n0?_uc|a=xCx6JEr!AMI5n6rw9%f+j?RBs54ugCsPF ztERLKh%4jsZy>$wLOR0%37Mu2=<^a9BH=O8e_4oTN?651vForx7VGnwT2_b)YXGwV zivZUFFdSm$3mytLEd>{U5~@2|uBa#k0iOaO)NLR#8JtjtP?sUpWe9cddZF564nUHXThZ5^j6%W6BN;V1lUFW$ zJG^L7#m6f@3f0KcfINE=yFE=lW0xBy-^eeWd(@BKI4vBtZL=-=TeO-KfywTugaCNc-kAP;8-Vg=>uqbb%_oJ8AO7 zJtHUJ579Q-w(+a4fWob9x9wqBXyAGm<)ZeX{v6ieX%@Xt5AL*2e*n&_*oc0MeiwZS ztI@64F+DFr(oZUeMvpDN^imn15rECZkT0c|j9`ZB{LeTH9+q@2Jsz*#O-}Fxkk+po zrpkboB!k+obT88%xR>R2T{p|u^TJz+3^o@Vw%M?gt7!Lf_`F0V5Ua7HhEs;K(6BY5 z!GqJFmwJ4<4!~kSKLC966s7Rfya$^pu@wg(^kd92-GXIO>QgwyFOM3|g^+`s_P7w`r>zp9bdLBBxQ!L{mPe?i#Lwa&%Oc{L_2G+sTI36!x zHo+i37)3QCO~Gya+zW{u)>Jm=9mmIxub2UAqYLy174-q42Y`|s<5nsW*Av}Mv=~Uc z-FPnvqlaSTM$;XXJ@=!mu0+hOM~)PlbcMQ-LNB>YhPMWMCaq9eV>J}Ve7`L+*cZ%r zCtvaZ+ssAs(SendFUXgyST$J&p0j&FmwdfYBfHOkrd$U1yhB$hCUmNS`ZP^Da2pb? z=*f2W1Xg6P$R9)y>JUjJK(vMw(@G@q@FdZ8qBbBpgOFhiE+lq}dyh)uSt2Yq8`L_O zK#4pumYX$F#=$ZvHyogZ$7=>v za|&6I)@|;iu&k#j-$_(T8U8S3xJU#Y(nic%D56)hDr9b=Shuh&Qaq9BMUne6^RM}o z&slFYdvJ~RlKCiq#A35SZJqgUTmTyyt7*CFxL4cZcmm6iwf7vKVFl&48QC7vV~i+5 zdMqP?9XX^8J2vzB`0C|Y&{5}TcVKir;|1>$-31g=9lvw@o^*`>G^DYZP$(s&%SGw= zDVR_x$q6;()Z&EFh-vTb&EB7+WsiDBmHYb&pU;-cNKpzudz_J2?8caWwC;JV3?oddoU0e%&;* zm!NZ+*^$Xyz_skv9w3;x;z4)eij2gplf5-1G}PXx*IO4%lNZ(+Z1{P#uWzzmd3my8 z3<Z*h7(nRb8rF!}FJRvFVhVCOM+Mlho;0|U_C^dt6 zqJAPDy}XS;+G@`R`hLq=vgO zEN&uNMhEeR?5&J2WM`M-N40UOkBcsiQ6Q~2uRf3M&l~2CCC`_KN71vP75nSCRZqWv z7(e*z!|cHTpSlG|8tPz=aWDgPIe&^n%44qm!wL-$1_DK@vkVsjeW&s#_8H?O%+qmefM_04 zDDrUq8X(P)=f@DKkD*NKnjRInqLb9qPVumq2y60D0@6B6i^&(4kZd|gHcN;e4v1N_ z13ww@0F21;j7MY&GZ1x2%TubSoXW*Z%PUtbm|l6=wY3JXFVnE-=UG*DgD2BtD412B z@2_c7p0*g%tFD^awltE7MN^Y!l{*#vuImaqF7b8=neNhlDA1p5)qaC$lZ?%ar9mdp-1PuHj)u$Xk2(Dp!wd4qo zOsRt+$9R}CVK?(2cakPYNY-14M(B~-O0*M0tnMxZ8Z9C!#W(3M9WKQ;*@?2cgcZTE zx-wLZf+RF!nTO?Jl+|E}w-D764HK130~#UPO4LkLR)HG_Dn=@B<5rZ_rB$p2(gvzV zs!+R&6>mgiA+jQ87$Z zR|hl-r1jSg*I{-V;$a_bmRc7lDeU4ZGtcPn%uwY}W~H}!MbDMNOpiUw9$K_`S@pE? zZ*Kp)6ZhvPgWKme&eiGhW0imV-%sOdn8xXnUlEJ)RdYJ%3=Vw6QHX>q-+{TTh0U#$ z^7~m!9v+|TVd}7sbWqxUa8q>+54W*|RS3|qP-6annwZttx7P;}R9}Jx%_v7IoEk{Q zBzI0prFUEXRSL>`iFN?Nmvo^!rwA^bTEJ|;RdnYJX{YRG=@c^CGw~B^vd^__1p(stON;1alZ?Ps|5O%H28d*1#A%Gw@# zlvNHpTZE5Y1PNFRm<_lJfY-(~6ZI6e4k2=}RT&kG)kH!y5jz3C=y;3LSfko;o#R%= zT@HFh5N5zD2K4l_!bIGR{>R$l z?&9mpDi^gDFKe&*zt{Zs+C^GwPL|iSpncgqx$IVrV*V!7Heu}~HMIaZRe*9qXANL{v{SmXu#oX3i@{p!0UdzF04xgHN{d+} zh%;3j7W#$f`*F=MU^BotsO{CoXlcKI3*lr>Q141muUI7vw>yH#s#m-dFWZGg=zV|# zfWrXT)dOBoV41hkJJ$=n^f*{zY_)fTcdHll_@Vb4ww#Io^u{b+pSKLvYCrkrgFxJl zGv4hku*k6@Fx&uAEWiEkoz#V}ybya+5^doO-A%NG-&yQXRl=ysW-jDdMgBNK)G7v1 z6?f0$jSul2?D7Ms_us z=z+S1T$K*TV)C`cPBaLM>lsB8>m-ZoU{@q|{gB`9%D-fB?VbOy$Q^18UC{v>zM}Q& z=A5-d@}DMW*UhbP_4Ff5GYM%&_J~0;Fna_B10pR%D}cx`E!HzLeMpqHVAlx? zcAcOC>k=Fq4 z0N`zU-7;bM1pUYKPeDx%U>cwWa2eog0H*&Zmai?47%7$<3#7?cAQA0D%Q=*_eU<|> z!@~4F#2pV7;Wpb#@C-%21SEVE_{?YM_;WGS%?HI# z5A$CSXObSewjRzTJ)B8;IJ)(4bn6jy&?D-gN7O-&@Q0o&Do^Rp(gzt&pwr&df5y$h zu=zMg;d)%M4sbW%LBQhx4e$csO@Mh2od-w6DhWM;6nZ%J^>FO#;n=5lGWNXw4gH@$ zJE~64z`FV~^37+6Zs$~r5Ook4#oj0CvsC}+CX3~oVF9*t&Only+pzu~P{Z6)J%31ps zO@1Dn{LAupR^KF__@)saDOoa~|4diQDQ^}bIMoJ|NTY)pYK8cLqK^4O1TBfBR-i=c zjqpZ-&N*Oi444}O=Ei`zF&>)LorN7^aqcx7zXSLf@DeUV~Ar+g%vCP>cH10wGCQA1q;g zu!PiG3G0I;$%19id{QyQJm&BdEQ`!lYp2ULlD^{eQ+=2Oca{hn_`uZ%q%rvrm%Yf^cGg}+^d^x`FMQa;oLnUkR@%$D zx2c9;-VJe^sX^_S?n6cf#2%(sb4q3t%_p)D;Ua7{$NR-J{hW1}t3&aaK|EZben6`K z!0?3uRF(!#YXGM;fYTblX$|1C25?#fIIRJk)_^dZdYIC3DbYRTdz>|hNQsX-i<5tt zYG;RWG4rLdfCH?fJ*Fx|PNGy1WKw6*cEgq<2%4Z2dpuQ3eIXU|Kgg=5 zS@l-xd#Rrxl7rUoMc5_=cnNS6a0+l1U>st?IKDX_b`#MO9u_mN;3!Inv)AFWc0f0v z53n9E3fKWKfgX724qU3en|g)`3wl-n4Qkh=-pYzA@mNhtbuucHA%;NR!S&F4>Ek<< zah5(l`1=Oc%|s>K+VWl^F6vZMiSmf%6ZH`N3P|h7SeyaYR-94KZ7O5D)lJk#bS*El zr;1%GzhKJ_MWt z7>B_2vQP*CngH_v%K)nZ8vt7Yy8)IVZA1E2MzU_CQEmg$9O-_#KzsR~`9Rw7^p8-1 z*FA+ho&mfHI1cy-@Ff65wwqTUAhOWnZ(!*KXst zOzAeqwuI%|sGdB;ic)N;i3K(R7+ zqkC>*mv<~i6N*MWI3|K+44KvZhf_}5Uiyz|a{BNU&sY91-H`sn%2$@YziwE5W3rqW zng4ICzHxGz&_uFeJY5b=#9wr~^y>38_C+Mm&+y3#9BO_?n7aIamNz=Ku`KcA zN?yB>90SRhFvrPCP7p2RA+j>z(&t&p!7LLMf9GT{9w^&PRre?+_gQAV_@M7ek_S)> zs0VZa76bYL!+_0zoq)Z77yycFT+nM~@H!|J1JH%GaBp5J0U~0?09>yM?V7B&9`{`M zOejlyH`u*_Z9-h87YWEwv1CkbqtR7Ngnb_ewUzQ(?)w-eSt#S$t;$_of*PSEJs0+* z7J_YpAUU@lQ!pnK%n5~=LYNa=KZCd5guKpgxZSP69p^sf47qkRYWNLO;-cYWyV?cNfcb#&+x;7UP=Wokoo6Tw@Q; zY4;m{%%6A$gLcYzmMY5Gq;i3lJprP98t@|EEx>yK=yF#Xug8_KLSv0_79NMu{vA&I z9`K)lzX0F|#vi8QceoZuLxArCe#A2fr&{Q(Qvm* z;cr?8l_U11^3WH-h1R+qKNib1Tiwj=u~Hf-H&-O0-u!06OvL_a3_0r}pI);q`p zxjlk*%6gW%)M6?=9IA^IpZA20qg`dap1D*%wf@rjJaeh8#nsyPtv|w>5c(A3u#_ep z_r=p1ZF9Nf)zB zw!Iua-Pk+!kL_R44Lr@>V!sS`#eQLb&i*?6!8cO`|G@qzE>lxjUT(jUzTrDiPP&ib zi?g3&CFJ#x#tp*I^;_AL2Z&Pbg5fQuiV~q#aX9rDHH=a!E^}C0PXuj5gqY#7p{VPk zfC~U6WSj6LB_)`!S(67zpRW*S$t(_JF^Z*WdhrALdL0(Z1mF|E*8ou7gD@VVNKJ)s zOA%R)Vkrf#eI8zoHvoSE{1u>|%HP0NweU@V-S^148g4LMqsu7d&eDal?yc*8=*!%B z^~9-b{wX`_C%y9Z^3p#yHvV~X|KyIZT3WuMwF?6 zraxC~trTN!LNOBsKj%D(aO#O5W|W8c>uY3i7U^a1$+rP;=OB3leiLD3K{uk6RYvqA z7^1dWx09w?G0I|9C=+kA*`}+IXQ91mdY9=Ib>!Q0_n4sMnxN#GpyZmMFyx zMjp8r>0L38vDjFTLYy=9#*P}vB5`aqdcgm*c4Iepq7}*IU8Hg+(BJizCdqn=lJN)V z;$wIOWP1W|8gO2au;$SFVFoAlF+6v$CqtJ=6Vjy>o__zD$D#i`+VkEb*(2|r{MSob z<*Lc$lOKW@i;;BjwIIeE;Yc)cW1EfC6GTcvn7Y6U9<~y34+k|s+tJ7k)WjrFFi8|l z5(Sfl>s~dTl0oTjfwN43vrK`rOo4exA+Np*pR*QJ>PTrFpw!q-WiR%50{`qG4c@0b z0vgsxu=qrDu4|{1v$#0cht1YTdEIC9T3-beD^zNfS(N%eQB+)x7ha2(3<16m_>p)a zC$?@JTSFvfI8#C5Y#-TglmsI0W>EbY>MI`bb4*SyLV6AG4uEQjxy5{$8E^SN=HEbm z;G&yx;(q~t0C-efgv!@Zm;ihN_?nfyT8cS`!fH7K`Vd2W{%V}r0N4uH&8y%9jf15+;vH^5WDzd<8Lk|M#hr}FGHmFLz*VYA@-7dR6a#j zo~oPrIT(m$!Y0~i*&I}8o$^v9=KFCU$JG$j9EGBjU4UpjC8H9LY)SVZv$C%4xHmr6>@i z2K%9#fQ0C4*CTOkC6!_X5jZ1|nM<1_xfp9qLD&xK!wpL7kwDMfX z*B^Bxc1Y)j8sIMCwQ^WJ&)#B(YlH>RW$dV`&4J@fe868o_2r+EeH}0XK;r!Gp^N;5 zYZ(++Y?!Qvpbc`PbFod}2jqTO^DX{%0)#wE!ssbwiTek}$&4G(2_+C$v(!Yii>ROI zMIiJJJ20?!$$Z?zXNo(wkv)xRrj?hFS@0UCK(%n^v?)draBSN#*k=SA76kd;+@Hoa@1H1ruQ+xweHd9uQ=`3erb-H$>=R%sq_pf0n!(=)WW8U5} z>hJMgYw(!8&=F&RmjFkpFD5za)M6LYgt~_$r$f@FL>*q+V%PKu0CqKETy<;;vD4nm7A3i?#;xNM)9x_lQCuXJijM!d-n;}M_(C}%ne9&+P;^`9Bl1Wk+&LnJ3~D(NTG)6kjXQitPMSOV&(xOIin zya~G*NG0dLkpHjzwNxR^kl$d>RdY6@Q;b)yA;KTvL<$p-b|U*U|6a#IR%|5NhVxo$ z_Cn@xIq)Ys@s~L9Muf64?ARxXf+_K5lHw~w5$M9Bh)xr2BoZoz$h2^R>w90{CYrT9y7gWBo9c~s)h z<}eb^OodX+NF@JN=*}?js1ipAV@I%EOHE}2mn6A}!QcjMYxRZ>hGdYs4oAJwP0Oy6 zNkmOV}A3O*JGP95ZR8@O>Jb-UfdU{ZOzA@=QTIG4VLWU>Ode;>MfeNJYvtb z>!vlOm6QeT>vN_B+y;BD-QQf1T`eE+dU7i2vs;F0f|urW*t6YsSFkpJS~E6Q&dZEU zGgwm1lRtNOb5a+{vMD3qS6Bf8y!`y<^2gwe4k=HH?=LFcIKqPihYhHV2<{qsIL2I{ z31oB!D1aRF)Er^yJUum09*Xs|CsD_}kh4HAM*=t>2u#@|f^jCvBq_86j~6j!dewCC zznl#r=ERr7dRH&Gh1gC(Z6-Td#R$ecqGqCDN=hi0;B=(uc{GKZ=`ftfZ?~MNhe-(o z+%cgicK{y{UuZFIg?y|Lo9)K`{$oa?_h)fiw)gf1aSrT0+B^as5Sxt_jn0aEdaoWcc zd!aL85ueNICcY5y3+`YP|0_b<`8hFB@W(l#Ir!7DxGQI6&RXm;ksN3X{2khjhC4Vj zMA(EogsL|ZF?m&M_jV)s6yvxAzSOBL2ENVQNN(aI|0M6qil(j_@7jT?S=nB1L*R#w z!p2ZhV|u>F8*IO(dE-3}dwZ(mP;q-*z{8CNID}m0?ve`STrr3)EQ(eg3}=db&V?*> z!NZAQW2ZE^HALLjQZNgz z9&`}RCIQ1n!wO{VIFA7z;V{o;Dn=bqH;~qz+YQ1MtC6+tg1!Owt~ZM(Wp?1Sj{xmo_9$`jyd}*ONF&uV_-ccG6aAzuJjY8o0fU9Vg9& zdoOX8w&MH!&&dncs;%nH%s zRH1YFnWUvTq1avOZ&7R|iX`lBUHC-*!JI&K^~2($KoS@M#(;5P0-(%HBu`F7s(Lx+ zBXbcr%y?vi_d%XOlJV0?~opaoK zQsI7u-jEDDrYv%=0%*4h#fA0?Z3H=Io6=31QrV-gpHzz3ENsfw#ma+9b@#-ruQlG) zJ$PGR_|X35^?l8r`I*Z2>LtzVD?Yw*W8p7`+H2}#8^%{1J?`tgX}GC<$@)ZXjo-R+ z%?&rMhE4_1WOup0$+!KLzUdYKuO zn_h-1pOuvM4J!bkcCwt{2?v%Nq zGwC^vcr#r{Pcf=Xs9of*R?To*%h9M0Rb*fFx8LqV92pEvD=m5ZMA<2MpAJJuofGA! zG|EX~V}qPb`@~~!6T81P1{xK*Jr3H_sTPQC-=wW~&@M2G+-u1Y#q_PVS`@CFqhg|A z705*y684w(?^(4u90(08?d*+~VHfXet*U<=hf=h<>Tw6mveQ2UQ~}KmDw=?qGL&`M&Q&1 zHiDWeOf5a~22?V^$T*OY3hU#=H62Zf8%xK=^23|^I@femSq*I~+p1S5=fCX!#x++Y zR+YSE&HUdosOc=%eB&3BPf- zq%HPB*b=6~Or?gr>*{L$+Sph{q^731xuzy!U7as;|8A(MDHLjK|F=dclVQasu9% zyd{0wFd)A9toM0&M|RM*|6b)8Opv_-?wJS=YU^elmZ{gEpawkqI&2$=FQZTScfdaZ zR{^v$NB8+d@0WD}YEB+>?)4thJu}4`(hldadKxnhc_dr9!Rf>4%Tt_Xq;t`|%!r49 zkGuKc-{^(t&mpw24!JfXa_bA;#8$_#}(Sq!1Cs^s11`IAp9-8k!VjIVMW*D(XtY9rCW=7iq>NTmR*+cG7y(0nu~z9B3uxe(h69&f2Q3p z3cZYcmwvG5H;X<-ys#@}&kBS@_jQ>!3zFG9QvIpN= zbcjtz+t3<&ugZ_TEHBKU{DNkgL7o(WB~yff!BbKz3iPaYpDZ~`+qtjggYrR^y355B zM@_^<>3~8o{$4TDwL*8u<&+jzph$!1moo0g%49+W=m-_-=ci2!lTcVciFG0@0OXu3 zJF7|!4`~C-lo8}0x}6ld0?N_~Q=B134i|-~ERe%R=^LJ+Y^8?Wx>hcaA6E)?Gy4BL z>~9XZ1Y7|q*ig<8es{qJS<$d_m3ri_VYN*bXo7>_v{Py8mhUVZ8|(P=&Ql#LK7ZeT z|L=rb-|qdpmz&!Ek&|vmTcBPHWY8EnzfPk_GmmAv6y;%JKa#!?t@&%TPrR>K8!>h7 zv?-d#0YX!n)Jg9M6EoWjM)7*5e`h++y6Pl6!@OQj5Fg^J@JgF;J#Gi~0oSk2=RpMI zOKf-jhsR`#*PFt#iZef36D)76D)tWsP+@lXH9#3in3FsjPgoE~wUb@3O$V)q$ymyKyv2-tI zcj!7Dv@WYPMJv@I{-Om_a2rY-croy*$^;f@Lky$?8d)t;Mgtc{gXsuC|3|y{b*_s; zB5IkkdUN`j;u?Mt_!b?0OY(LeoLjhJSZ=A zKxWfkq0NY&>A|+mZQI*qt+o54YxU`*KK3jUl0q3nP$-it7eH>xNl@0I!s=M#veji{ z1HSyajf2V66`@4*A6o+P`FwImM;5#6#OPv{8PaWY4F7F92T!wEFA!fFA*c zxe;Irpys~wB4v7^?w!8#f;fu?o{u)voriqowVB+-m11Kj`Zgm$~%M}6xuFT;6b6?QYE(uO_6c8-7J^9IOQ{F za z#Z?UAbBaWrRV3=9T4O>keqvmku4K%zc-VqnIAbd|R^upALuNr-nU0OnJEvjZNI%WC zvM>6!ac7a)cv19<5vdWJ35xQHX;*kvZYYKIxSC!hd${gxYGZti#(KP60<(+)PC;Qn zCby?yM9#y7$7$!*?+WTeDtgKuQWtMlCh?Edu|q<|QFd%^qO~8yP+hM}u7_4tb!Ul5 zE^#ejQn;@(Ecg5JLz@%3?`>MOttVrXTUjQX+%4V+i%_j^(eQ_w){QPaUT<} z-wxe!dMek85Ztaoy+P!7kNQ^2j&3ht#r6Nd6fl-wy?Vv&@ee=JyE7>DKel$mO{o7b z{i-o~s#usujBS4-c4+JQqg-eo>}>OT%u80 zc*B_~oYiocl-%pm1IrK3XhNjKZB>hLs{PVVZ#utn%W=6Cf5ZTWM<+^x4Wbsa+TA@y%EuggO zM0F^S%9y@R}Y_RjgdW;R+BdrqH z$5_b6(E`96db@7CK{qCRf2Z{hq93vb8|%7Octr85dOI3gtez{Rig789aFta70@9vkyV zw@kE9Od8XiNy>eDs+s83PRyG2Ga!V55{7sf=mdrU!fReHeoNVdRPWoFE-4NdcPbO} zbG6T@4(eVR?y5!83WQ=HK5$sy$e2w{dFoM-jDC>gsR?SmsfRi1KTp@~vpQOPhkIM! zzqxO7T~%mpY)R&KV9DAggJX3yp)K*QfhQZALxHBAC7ae&mA|jFqA?b32nAdFmqrKL zLqXsA@?bMxvXn2m$^9FykaZ+8ky(jRQec-e89dFJU5HJ1CY{N`)5M_ZLt%{qdt_*J z&UjLq=FD(t9Me2w!qF+Axl}0OoDQ8M+11$^+C_e}9p%-Sw~B*8;4wa(+=pFcn_fr? zAeKlbRU}`P+QfQeyli}lqlg$&z!@L~U>NsG9h*fnx(Hkbu1QPUNmAGW8b^Rh;52X! zm;q*ii@;^z8c?E4v;>V|U@Nc-H~<_0CV|tyIiOfEIa-oDM=>^wM-PD@Wjo;F`+>v2 zQ@}F-kxS<+P=i(woPgd@>vfw+1Wg zMq;a1U@*Tgba-_BCp}%I#jDHx8*Z_%X}C7gS|>o)bEwpHo?TxMbr4O1-%#sz8f_gl2^%g|-UKXfM%yhinz!!hA7Z#ssbs72nIN zJ`5ZOP6B5E0_{r)eyk$+v5MfwD&n!LsNbm_PC->b88|N^Ec#g%jX{7Ro-N6X2p{|hs6K-RI?Gj zh_z4I(-^c!nCH+|4sgDi|F>%2ql>$WO?Ac%66;LbD&cO2>@Vo&FF_1M6&tPvI)Fi7 zGq4?CAlB%xuOb3E_q!g!a70$zUxVY@aUVax6kx?M+(D|C@+oHc^lCZS+ z7i|hS62O;9(SA`3_q!nHV}+lV_;pqro)g+2p5A{~<#O<#%zjpWRu6wMOdCR)S*eCJY{apxGz~ePz z-=lOVpNv~GLZ?-zWvg$OvYS}U<&b?;NbB|3Ta9Fy5j78JgIUifq1L3jfuD!c5sxfd ze4q(!BB@H+%wB!QpgvZ=Wcqz-olpx?Goy=ETG`8_)=*SWn-tq>KSC>0M-U4ur#Q!m z@76kVl%SY%zFhDvg*|<=;1ddpcv^#>dM?nnf}gP+?(`fK?gii#;D-Pa6b~01Cux_@ z$<^-wrMDOCD|k#bKEGY?eeF4=iKGxJ`z;+qMNkS!3I&8dryad&wF=z_O1Bhr7pyDb zegB4?Ogkkh<2KaDCuf<9F(2$Z^pnJS5_pB46?#H@ksc4(C)En7^`cNfKVMO+(Bo6@ z#Wi?-B=ln{y`)u?@F`5)&hv#YYm}M5q5HJELZ~Ry<@ciTIV$8!=d`N*bkXP3#$HVy z75z+>=7OStHa*Oybh=122I>E}bpAJ_FBZxeFsc?u&?CCav7)C{vv8Ys^=j8{cBNa2 zx{KCfET`8$i#$W*5BWYtJH*|nO}f+mk~rRn zX*qvY{tt4?{y*CK--K|M?X*9xlYhPZx5yz$FDYMDeq%ZP{-E}hYLB@d;-jtyVoa4Q z;e>a3Oq+^?ii>0uckVBKLu<6hGN>Al{Ey~nAl zWFv4KvNy_ds@mT6VWB#qeL^P7_48`s6{7D!*?QjgbF@>~o&9sR%8EEI`d{_ajdGaU z#72+>=zq+A!q0;|t4*C*bkP2eS`SL4`vC~0n>5L?!ZGT-SCP`uxEu% z2z3hW6H<1leNsy-1%w>^{HD-^w3b<+q*RwHw6bJ(k*&}q%H{-Q0m=!vyXBI8SSTbU5^ui-a+ILM4flwJ)riJYshk!lmr1ZsGs27_GpIf<`^4uZ zGanXuQ0Oa?k6G55lf$h-lA@fBnkj0wafi#Ees#AOaS!@jLzFa%{1 zH7Eu%r3p4B8R)W*UxJgX*snRsRxuL8QyTj)czxlssdVRWjBp# zyGi-{zUoQbrJWxJIUn)-UIyC7)1cWvl$EeW!bNsS@DD)gV)5;ayrX3DYM^PnAAfN9{Tx&aW{;>PB%bVizWgg<_V;HGN609DS{n*7Hj2G5EAe&Q&$Nvt(`#HzMT;%H$u2W9RH_wK51xM#<+U*5I9G4g@! zR6~AhaPX-s^Z)v(RjWQF(nLba%M#V|JsCAsWn();uuW+s6+}{5SWL7+stubhjFf&R z@WsH_6t|;4Jmq&_ggoV6qwxO#_@BT$fJp2OG!oe3{50@y9EUPi%I5c~i-a=veO;v1 z)xi;iz-C}Oun%|)I02jjo&}x;ANyw0=)5J#dIIP9|KMRr+{aH=K<;*ZI;gRW3sF{ zu?`ca3lpXb8Ow!?u#`syr-YZ`bFcoldZpvr`FYLEDa zr@++HF#<%fsC9sc^6*d|9?HW*d3Y!f59Q&ZJY&;q8W=lT6I z@EY(Y@JoR5J1UmtVUTzjBpwEdhe5Kqu-UWxeja!kcnx?H_$5H$pgVaSXOHJYVlL&? zst%{przQZa%KXd}j)_T*p^gkIDOWuzU*c10Z>id$_9^Y8uJb|Xg{oJy;fM0(nOZaX zYKtZA z+W|;vmAOXt`Eo+ulaeL+^}Y`jJt~cCL-97*haMd))GR9_Ih=ax@YG_|j2Y7KeI%j$b7UcNguevh?oet7xao4QIi6s+6?718SH zF6-m8O06{+)t|&)CxQ`{>*FCt!`JXa%|Gaz_M8)+HcI>$4=7KhyZ9<2s{p}8DPJ*w zqWhQ)RpHvr$japH5@t(wFE8=;Zj$@% zi#~OZA(*&D7XhHSHn4$vRJ2lEHN$ezXtk99@e?gypvOi(5w8l6Jy z%Q?bc;H3PTt|f7kbvFWestC-ejbtqPxoVbnepy75BtK!FmSJH=42#ww^9tmIuqHf4 z1ugxXikR4Fj6}p8^seYzO)2G-R)7$M2CLd64e>WKYx2<3A{>Hz4ldkWl>sOkt|D1Ues=CZJX1! z^J+zfT%Z&~K)#m?!o-1|K?tEaT}iG+Fkgj`lx{;TVWXm`%QDYmLWg)3J1?RNPkQ^) zdV3S(Nb8USO;XwK5zG^dS@<4RI3WU=uh3=nlDVZXqXZcK#?6*s;3sc?kB<7f&YJoa zw=Y>?-TxnbkcbttzHj{zX%RoljzBu~o#~@=DmoF%Nf45ZFvAP^5~*s+mgk#XpCbN{ z@@SG2%-KqNEX89}ipNHwI&AdOhyV#dJM#}oN;OWY>;&SVV!lf)(4naT;LjT>-9ibI z^j)P7mj0${A#TB#!jT@rpo2gh=u=2E$_^9PxuN_nnSNFVZwTHMxb_*+pzcJy zZY7%%zkugvp+T*6(!2O2?&AT#_Q;DV1Y}SDMZ%)ia|@ z=<`+>%%CPcpuxOMs(Fs`L>;bXK2|e)ycs^;3?FYs^l3))X-4#Ern({HMgB!oj5{Z6 z=d9M6N96J)QN+iHO4jY5_uzsHTAGtvgZ-vWnoYH$?#J=YUB66cK1*{lZ7MR^OZ2gl z{UD0`KHK|R7OW^)wz{1pq{2W;@3K7d%ldn}iD6N$jFyS+ zkCBcPs_l4j3Od%^-T%R3 zrFU(2`%2fBc-`~A?GBWGrfGF|YoYZR4hhQJyR0kJBv@+w7xRTm@)6k0qFsh4UxYIA ziq|I7RjW>!I9Gf7zEJmhpK#70?B6pRiiV~ZJg8d7i$m;q*iivY_2o+p?o)$G?w zt#+izT(EUcuJEM`JUg5BsfD(36|5d^IIg_es_tc0Hr0@EU@~-qA$-A&7AdqoE6@*L zHz@}_@wS!~?<@09+_QQ|LpXF(|Ejgs-v9gYqLRwWwl$V({(aG<4c?M_tRvwyo%imk z^lmJzT-)C{(l8oY(bza#-IVX$vMCfx)HL-{pAE5Tm%Ge;8+MVTwcAjZNWzZb>=ci2 zM~pSlBWsf<(>}?Qr&UTOjtwSNaUq3Ivb0>xKJ6(Dmc}8O&hgTdn%h3J**WeziCr!2 z@dbTxD(KtQ*$as<)MVPHaJ;4!{SdF=q7kLG*$rk_y11dXp`(F|o@h9wEX`)K**VdC zs+o&wUFnWy&Y_=?BVv#b+|gZTE#6?lITxHEw+`CooXJn2CsTgIcIPYq-3hwmGIAZ4 zwEMIW=^bphk4vy5;J!3yT!cQeRo^gtK>|;;+3cLCJ_UtK7gyI-cWC*!n(XG9Qwrc{ z$ei1pJ9k=H^NjUn7V!dA5sO^j(6ANqSwV6SBUWL;@*q6>thQk*E^3glLM8yfWUzZi zZw_>>Ub!TA^YWWoqS2O{mfsxcT1@~Zzndc!-sYR09$dO~XlUuuLHBJpwKO&9h+x;s zRb7FblQ%U*B270XZw_{@YUl|DZvOVtRjZaRU9CJtLU-Iv2u8Je#ro`Dho`AJDdAgD zzJ}-)>su$(GbUn6Me#KIYh-A!A49K5f7<$z^>tNr(K<)Y7HbE-KKlXfiCcZvsD(KX zL*YYG15FUq>nh}*(e=`!dAH~7&BMX|{k$LN{fdV3^}O#$Yy4v!j%yT+6XcxCJBx6Z zelG8YyjSwDTm_^kKCWZ_FQKS}AmvY7uvcJ`bw-PCmk(u~%(Es4GNo32o(#24QGShV zB_>4cV~{;(bN+U1Fix1qiTfyYti+KMqa2z-ZoCQpbLz>2m zz^lOPz*|7UA?MYi*JbZ}L6=k@L=nnI5z0pq%105(htAHpy$(6+i*A$m>&tqE!XkBb zy037Qm2DVfCnX7nBp7~Gt+#09R{o@o^7iGFmvG;6s0lJYKft>5NVTJK1*j`1TF)TbHsoode;dl1j|HnWfCsRNw_E{;i8;` z3nPiSFxhFp_kt7kCb0~rU0%O8iXjmSB_o}@faj5&=73AU6@Z8#-htRaWJ2Dm1{%$( znYnURP+mpiz@e!*)7x_3*S?c2UiF>v!-o&w3Rs)0hq5)Ses|TzRVPlY+Q_8ZwxDkm zx^6M_l%_^Ur(cupu~8o-_QBD1!7*2-PAd7$<`S-K-X2#1-`;SzoRTl20U| z^-}_eB|f{+D){fO=Tp}Iw8psWAdx>`g~|83HoNO|SITe0<}nFimlGNmLK47%uIRjr zLaJ$E9~H`X)oE7a1IBElnenmwPitnFNHt?@e2A^m0*$$TA$U((tWiQJUcr5I5l1U_ zbE;XddxQ80k$%l{sb&-sf2wmX)tL~BTu#Igg--_fgWxp6>8nQu^b8vYM);HE)kX!* z4W>4Db(?tgs**O{=tHZHtzy`oTE+8vRt435fwq0$Dnyo5^w(VGg`U(4y_Ekw(SOE> zS&YOPFP}g#zdjyt6=CFgSM5*ADYxF-!T#s; zUh@z1hHcpwo9=?nw;4LmQPVwnx$rQjqi9exz~o+;1oej$YP4IyM4tdTyTcDD$>I+b zjkUg&4YAhVRyOSDroF%Ka3Ad(``Gyzkh8!4aKEm$k_|WLl~0Xo=-8)p`sbpcPwCjF zwEx&T(9;`)IEaPBhOKwW8CnPg5kr!O*G;Z)CU=+uD$DYTLv*)!*?~m5CT}o8FjUK} zTl#LOtEzcl>(Z{aRqI!^HHMeg#cH~Sng%x2SBKWdJC~WwRwCThSJ$v4+|gU-tqYc0 z_e55Py#D1K1EZDY>q;xoC>nynmcgZwAvUk*h$N!^D(~9Tin?gHksSlE+Gwbvq&(Tm zUw?_Gx>ltVR=Mvcz5YB3UC0_X^9x~qp}37kxN{LAf{{mxk?UQR2_Sk=**7?ns-qI- z4xrl|0VaXdz&QYleA#midtzFVBU_0bNl$o=dZy$V^2;;CST4KZOqHEs{a|OLYz(t| z<`2>K7t)E!;mWO*u&c{>R?RIcxkV+nsN@!v+@g|Om^H`K6O~6Rrz%a!Bg{fm@-+Iy zvb~|(_y2MK z4#w;@*ZZuq*>9nx)y=Z@E=l>OLZeC<*kf5_0_Urtc!c3L@&`$N*#&!U8B)XWvaQQ@ zErZjIFXPlPHl_M7I%z1oK&ke*RC^+|%s;)l2$lA?FbUMCf?IB_&`ijglPWl`$|_?r z*@F(E^&9<+W!hVqp6F*?7i@nQcR0|+A?Jn0`I)_Zi$Asef<3!jTS2M5xl~_56^>HN z{nJBSpbK)vpLYNB``(`4`zsIQad$QZw;^vj$AVAmPo|KIb1d|<78CS9Se(su+qF92 ziMms&EL9@fdy3e6XLG}L3AZPhz|Q9A_Nb1Dp3xCH*GpPKA^v2zjODB(Iq$DzjEdMH!jKjwLTsijNh{D zt{W;FYHNJqV7s@ox2HSNWHsOV_>N?9$K$u={%&}1Q#`)u!428JKPva`z4Na7@(W8m zt4oV|HVh40RKG(ZdDMD8x#MwHzxAdWUIA1Sg-=95VxCNWP4;Wjw1jO-Fl*xpK`X%@@7 zNX3Vi0%MYjUvTE)m*O}g0+60K9{)IohB&5%ICC-1T#PdpF5AY%2 z81OVu#PHFasU~J79rO44H?V||eO9qFg+kPL-|1*=W5!%jsK%^dWRehg9D>Dpk9-Vc z`S=&|@h{}R%QME~1aV-mD5=9Js#r{VUci%gZb1FV8PecJ-`j?B38`SYBw=G`GL6YDXXv z^yZgVmj>bu6%Fpsl~?vGkB>%cmQ*dPXzE@P=_HGorLyaSKFS?eR26qx`DKBMYN^L< zuDJCT>rL`ne3^BuQj{1RmUwQ;NhuF)x{LvZVmSiukSa63%SiMX7Q!v2&)XU+UfR5?XXiLUy2K=;~E#!xl!#HrLnO_q+en zFp&Y*`||!c%SMzFXqYrI8|z%Ew+vS~16R@OS5w3R-!i=Q9EPD8U>3LtTn31?zk>VO zaaH@Pap@rS;k~#<=5A(PQ3BUlTa$CoP?;?SoCoHBOF)4sel>6*eP$pvaDD*I)He_r zzymunz!OajFbn(x(E*H5%Pu&sW&UNn=_PoTJtcHhtZT(GiL$8`343-0+fEA|5&AeN z)jgN$PB_u-WH&QuYxgewnd&~%jeI$QxX1KA@9O4px_O*#G?i|cwxJ2#(1dPiLN^qF zjR#XJ{Hfjx_P$hbqL zrF63%j_u*t9**tF-K>Y3^>DKuZpKCu@_M+y7LXI|N%ru}mwK*n1^Y~ox`pkj0e`Ar z0#yPvWEj{A>;et|h+WtE&CB`t6#;Tb@gA$^;OeQh7wju*Aq1|q{KXGON2(^f0wL z;apsOc{K*1)avuA=T>8n>eG#%g&;l;ybQc1;&>>ve9nFlvBKH1e8+O`c$jvo->+}d zurCc-3yJq>SvdYe=p{vLepOK?thoUSa)o%P53#~I9y%%MA}#5nqi#@Q#Y<=a zPDgYQ@xgvm+Q2hHPa-cp!_odN z9bH@cBGLZMolCa#HQwhR3U{vRXsq9|dQ-Azdug?&xglzOYvjIlEiLQr8_E6cxv4u` z+kI27{)W46y1AgBr7PO(_Wt?#)BIaIWD}!xgN%HaSbVai3QF zVF%^jbH&_glm*M;gg2*)D{Ct|q%6IA=mpKVl5nss81HFl=!pk&e}@y1NJ8LV8R?0! zRCrHQQ%|f)f8$+Uaeyz>?y{{p_h(ToeXeKC7b>Bcuo#bF*gmN<(qzPc(OqP;fd}I% z$Vr_k#7y-$)hK4<)lxNzR2ht4HV4yxrq-va*P-=U&~peioi4+@0M8#T-iqat(J*bX z0Wl&aF@nWI=o=xb0ztMURal1kbE86IvBGtfwNt6;Z+mJ}ivO)I%-?DK^ttCYJ^JXE zHeI`hDE(pU*1Wd7LU)oucgYpd3-U~odX13<**3YH1J_v}vfiH;<-q0dI?${qZ4NXu zYNcz=JqHV?J4_%!T2UL!4x*>v-OeQA6WVf~F>a4Z*+vqej4uljTf;bqoTJth_F^N- zAn{Q3S1cv}ip)+foKDQN^SU^23Ah4Cug&)p3?=RNa^5v$4EUapIT!&Fz&q!rsldQo z&&^GOy)=`z=BBEBg_de^`?v%*CVa-!w+a-tJhFXH!aWx_%B!v?H~;?-qEctI>Q(Jx zl@Xqm?q+HQE8SJLEM?D4NMw_Oo>_?0)R-_z`;@jBi!^%|N=_inWz10r%8%ehmMrI; z!vRLj5i+$Gnc556@FG)tk*T#vhV52Jqt9z{f6RKHMjWb{vqLq;{PtAn8Tdi=(=JMs zTU7NXxA?jl0gK`g%~zIVm=Xi3LgA~@z3gC>i9dTP_zbFTE&@fdxO5xKj2%kHEBY!% zk>9tI8K=3pI4=&LRfxRCPb^>Ef1_`#prpS(zxviy$?nR6z!-7cKioRDw%1xef3D-! zwk<8)^}&6|a7_@qUf2^b5i>Ubt%K>nYbfStgv1HT0z_d?8A9Ul4;;9a^4jpxyr1A{A6 zO0c)5t^bc}I%6Y4rNOddPf0`&G!E5zGZ|*SkhRBY0 z&>IuNmLVf<*AnX?>t4ebTU?p27y<-jvDQmV;&)Wmjxjbz%rnGdI%_(rUr^c?)o(Ii zhHFoU(5A8YG!?*#O|%rt{e|6~;wmaj5z~qSEWNSQ`EKDGL{Fs)$^+#w*15BPhLq)e zxBLx7Z~Um@7s?TN4QVJ{QW>u7{C7D|&Vb@sQqwWm)HK*pll!}+D_+$YC@l>%R>iyA zjY~&5t18>qCK7AgEA@9(PibveQ&U%MDG_grw9V7z>lY=QBSn+49UFa9#ZR*Org+4# z2L6PY!h5Tlk}2$2p$T!WMXF|TBISed`lgihAWoEB;piQzrj`k~PTMRrTC5aKs}Of( z!s;)`{$!l@9nYf&S;#yR@pl=P7RD}SMwU&FT2{@%d9nw@;3Jh>$9%imdE{P z{JPiBS8)q_Mn;>{5_#u@W)OK*$cLXoGx+ya@g+y-8t@G?wuvxRGvHpM8Wq*=~55M-baBwm$4ac!SZHjyRxid`84g%qp{*jmbPS{SsN|5^BfN zFH0G!!%Md=-L*6?7gQMIkz()pNDCn`>KH?9mspedg`=#W{O4x)wIxK|FaY4yXez^c zdSSYRfQ>fe1guD;cU2syI0Dg^1q{0yB(gd~B3rp>E1@@LnOtYMdMobo=}zK|q8IGK z>Zmx%38o+BUxfn73XE5=0=2jz$&{P+*L7`_r zC@oJ&NqR=T@F{JLGeoQ))jqv=Hw;5E>GXy;=l8ZreKs>3lpJ5yjZjqDpJ? z_PXN)RJa(`FW$iV2)rE?LA)H+QI zacUP5`~lzyFbSLn&H*z3)tr^C=D0$B%zxKE&ZdPI-p31fm=``*JEIyHyIOhINNYmw ztVAn!JI@CD66pF1Y+ks)3%9vkAJ+wt0N<(MpI=P8jgGT(I@ zew!LsYr##Xze|**d|85gLP%fMne?3&Jtd)x9%ZZJ^F@5zGNKJ=6MPDhBMUVr@(HHJ-kV-7N{v35G+o(UXiPRethKdKEP zjdZ%SCp8lZ$)`qk3cOW#tw(Am;7@j|)ZsC(H!BD=SgJFY9eRqM+IN=@SNFJ%9x zm;$y8ka>gvj}YJy0z889M{G}kcPuMaMgj+TC|DQ-;y@pu14Js6B_rpMmmqIb6qSfh z5{R4|y?3i#pvhDs*TJjhK)484ps#j3V#rn(jniloQ-Lv%<>*?^x`qTVL)gw@25)rROS)=SdTrcg*i{vGU z64Ksc*%FS@g;T&8AO)xc>(zm&s)Rj5Cry`2uU1B~v(bMCS;O`zv4)U2$j*o2Da5oH z38;Ch`Rzr^IxG$<0YM6fkczheJAnNFH33LOu}DO*L<(!fm^*}eu!*F#Zomy4sbJqqOMk)t67GRGESEib}vQ-t592)|7cejCych<;$v zJH*wqMQMVEoX;11Me^b%P1!+^Q&Q?+<(A4F2*S=6E5D{SiGQKOkR{lTY+u~);h?%CBr{Qw z9zP697gy9)bRZ{i<^5dkFz^)cjJfiH8@kYHX=^HM!JUxTov>O8^RA16`^Jj?6$9;U zmUYLb`T5cJv+h*f`sWp@I{_U1;e$#!<(>34u%Ki^nEft|) zWmPETa$ozg%avD-UYYNz&g&Bi|2p?ChH0Qf&cZ_MBSNIGnE=ybY2s(up9bDZ=-?5a z;-G4%bgG~4S3k##`!M0~itjv_zGWG2)O)-&1mLSz64WWsnu5+33%`c`!Aaji2mE{B zC&0e|oK#AP7kmDgUs_-5FM$i%bI9J6*;CK2CBQ1+M(sK1{Bz;IYI(x4!g{S5`{Tl2 z@yDzPU&!|?ANpVlXMcK*V3FM&bPlSoScm71(9iciLAIsY%qpZyNp6%Sv(y6fJPQmRzrzV1b;L zX>6!6n!!_y0LB0rL9ZJF#(@doC@=*;-1GA!IglMCdoj5N`Gg-{(77Z#wD?o;xl}xn zJ`+#H&&R1t*GB)h_@_Jg!w2f-588g8m9uQvD^;AdL-xp(AYSM@n3Db;_zCbYfbk!` z4C8$bcoX;~0DW1h(366$fP7yc>f-#pLLXY9me3tSp9DF3k{?QP&>eFBd{Sula-F(7 zuw19oRyso_f=mHKBmyp2jFjMDocEzZjPvr=H{#0g>vspjH!iJsr!}c_X!n-R-a9@p zug4v0vEg{@@U|68*M%CYE8Wp|n3~4&6L)@e`@JXbXfH3_9BN$u8)KV3u&K4u zi$=8#_3OJv5o^yVV$CjB$mk`JvINmu>EZIN<-4%>B#lxc$35;QyyZ(|=Y%)*q!YWtB`(*o7s(hwwR=L`)GJ10gl#Z4q%SKeg z#iha=W0h?8gB(|lzXpmvQ!}gBa+k!(DUccMHH`KeMp_Lc4Y`vum@1juTRi`prURB_ zI^YGDtJl2GCCuyggo^oG0j1~iWp;<5PvxI6na0|qybpT}l(`tD8Y_O?#lGdvb&ih- zWsbS_zc^<3b;s;}j$~qULywoFpi7=BvK14cb4bBBhzn3vJ4q|8rCP?cM6Dw1_%zwy z?8Vsa9Pl2I;(U!j8{S#f_hx`u;39zF=VOnZkmx?^y{JQJb0f}8k9#M)M-kdHPdLvL zw&&@KWV+;qZ@OH+Z=R4`m!0Xkl1r?dK}T#Y*`<>82TG2}@)*JLnA<0IoLh?LC_HBh zke2Dc4oRS?4Fg+&UDDckTLw|?I9xiiH;?$okV~DT{weCyWPa(}A*fut z_H*|RBA;qp%U!=P4_Fq2Qc}&DvQ`pfDRoWEwPHaum=0uPiy{4__Y{Aq_?T*6?kV|@y6r>y2&aVhNcY{2jm$nJ6c#EK+AeZ)%AkaPim;e? zwNhH!^SUe6fV{Ngqqj&kc`<9jL zutMdL#@fO^_=AG_#`=QMU4u2jzPqd^t)9F*%j((rJ2!89e9vkt&+WEuvX+5=x@!KH z7XKx0**CEKzOinR5UP^hm?zT)(;QpQzDHcHJ?4e${CtgBsp;|)@WDs;$Ya1bFrg2Q zg@Zj#q%I+kJkBBx6@@m@*OzGNL)*1jFzrsE+NfGWJ3!og;M!I9LuNLuFgJgZ^)WK` zAXgJd&4J9Ie#e2LTt8*zH<;%nEiY?;In$bw0cL!`?DEd*@8;$1GAA{6@^WL%Jn={~ zuW+t;hD;kfp$#BjOf3**B=b{WGSR8MYR%Gej&x3Tat?M;hzRKVCsluDUTGiY20m=g&TH$4IZ|;N7a2TGq$`n&-f+gc#=CT^c7ih9 ztVBHfsU@IV4YAEaPk|P?StLQvROo(zMVno&Tg_8l(G8Q_D?Jyz6ulBQv^%J!;If2c52*jCuq-*)69N4h`qk?tc$dX9d? zU2x<`??-4I?f&iGLZUL`2FrC2S*tT|pXn%H9-nVg*6FQT_bQsbbaxOUoOYOKi=+qv zmN3e`3mGGs@jS>L$|1(UbBq_GY=mi}HSM(974+PvRzRpMvny1_))QrHcvPrQKQZeZ zguu~JTD+`NQZp6(5Ayz4y!dgpgd?kc$~t#Ss>4`K>_KUK?I87Fa4r>05E*TMQTC-i zN_I)$3YD0g<0hzPIMk$bp9p_a*1-X3zK=@yYEvsHRA-K`3z*@~=jxtQu#f^RN1S-Ij^ADPkXE5>Z3=M{yHIntSO(KmYP~G?mf@fcTl8kAKO7Sc=> zA^~!oAeXLVtU9J3h1i12qud?4IP)j24`NCe7Ze9%7K9TVw96_@fknK+B>QFBCG>Dw zxpIRny`^YZxCfS}=|;4TaJ$5LdyhKucA=0uGA?vdKOYx5BvjYft|OmPC)TMGA5-g- zLamuyMe3HY(0+B*?+JZa=oz8yLhagHqgE_)<5Tp8^Kk4q-IJXr_OX0+ACn2g6kpt+ zqJp>U)eb|{?T-naltz0(57`U-c0Lq2rgV_FX-AJm)fTPTE3~R-s(V4h|@vrJZ!^h4N7h>*bhz>N{vf#{HovE~?)MBM{JFc|@S=eXFZy7P7Y)mEKqf|( z7i~jsdHX=|BCV<2Zis}7FKDEv#RhjW?vvpWrc*K_hcCJU67~mNuFRqyHR2I7l73lD z?x1~5=%Rj(sUJ%F4l||_@FYy8lH6#38LacITg0u1}%}T@? zLApxM1uq4!1SQk)%gA)~$aM9{boIz|=ud|nt?SAs9hVXFQu7teh|Wy&thnVc9LJo~ z%sI`R)66-|k^{$^p?p)YP-moh%rMq=wcE$qulK05nchZWfF*s)HBBcP(cMY;&m$|^ z6B0d;C<#hqEIKZ~Ut5V(AaYR~#{Cm)phq!ypxL-fFnR@0L!L2TqBuZLx*%~x4QL_U zRCrFz!$haxeT1zEje{_tPPZPDz zf|{kBHqk3A!kOK4XDN5tDAugSWQYnTEjBCcbuy&eGHW|jG`h2@++ly;5lWj7&%Zo$z$M8axRrj3f19)wTfXRuA_a_GTdqU!8p*~x% z1$4X6Ng-@Pd{3b#K+f^DlWm+BYGXq|I~$I*Ki#ekwC#amP>0ZVkW;j-W}SkTY&~*j z6`MXiW~j1F5C2I$_eq}B301Y}xi{*$J$hP7X=fk#6p!q9>c~}s5sD?8&?A3Tk9;im z$d0Ea*usAE(8m{^_mgVX=s`~jJq2=#+G}`P=c)E*^w5KA*#3@(_N)u?&{j5aCZNSl z$rP1eIWvkebl`c;q}h;Bms3~rWe%~9RyDR()VI}?j@^9ouG>1+FRzO)jW;gqS=Lyy zbbVK-r6F7%Dys~Hs{(C}6=pm8-HD2Z>QZmCw{6~Q{mE$Pp4$U$y-o3Dt$AXP5HB}8u<86spGlabD+Apj>anC^m*Nc$5)QkrCcAIwBfKD?^gsdD6pZ3eAR)oYT?6>o|I59bM*I7g+~69HD*vnHO@mvl39= zou1mjNh2FLeNO0%Y2838B9yv;z2mgf z(HoLCjNAZE*maBUa?9eo{2+H1tNU(Orrc2G`3^cqho^>l-y<6Fde+=?yR;#q+nweS zoXZ=oZD7#pCNd1%Fm;1Y(lc;-PSSQd$2=J~w@>pJ&gEOK-I5{pd0Ldi{S$06e!{!9 zxhu?zt|DA9Ek$&=jwe5$sj*AK6Y-4nJIS)PYZa}C(45ei(3Fs;Zk1>|8O)e%=ogS8 z9r2jj6&~%fix7k4LTs5+o^N686H^HuvuBkN1LHmBi0NA(jw5qQ%-uMb+L)j* zeQP0$u;0Oj=RjG3bOpq2MXqK`KR^0&Keq5=OO6cYV%(-(geXQ=sB{Ci3MUaAM)Y!g z(MXgI6#M7bf#?zaIv1Vc&vY?{j1^c@p_b%Nm?y?fISftT3hV+707rm=ozu&RL+LSB zw>`XveM|oq-RYKuJxAA1k8rIm{^@mGYfJXM;1DAe5FP`@feCg-j~N!_mqO3hKV?;<4o7JD=~Ob#%&e9U_*(5V9er3eciP7f}H)mhkM!e^dK8N zLdS)k9#TsvBy?C~<-r?4{yXsA_M5aR$%`g!s$W&xGU1BdLl!HvkzG~Du0jflP@^Kd zVjESsny!nWiMLe|#t)^7|G)K1qJaW$gEz8rY2Au%l{a_wH%0r~L#=D?>i1GN+P!3` zqOBw5t&Q*L-xmqrxkRgJ=eg(qbn~4p>na;rWP9~}HD6u1$@7cVYkZ;l@>?ydu&SxH zWofXosn%ajcs4OMKDV!~tbeIhP+VTLDimDX+T`oHdD!1leaAhuz9A}3EwlEnxuI;m z$~P^)mb5<0@Lz5nFhjpZ3t*7z0WA?41IfPbno}8~BU=Art2#C!v`aq;Lx&SI7{$4U z`dkt%lOTfa_^>K@lmtcqW!>Xls4?;1!gcAMBTxJ!Xn4Lx))sRQHFaoH})5n=a!mg>Nv^Sz|GC8yj{$QEl6^C z#fmmC-tP;<1BwBYIG3u&$P5Ii+~IQ&%j8HLas z7Qxsp_Pu)v<8O4y?btnF+A^=ivialhW&MXE1~aLoIorSW+2xxm-(~vm*|aP$u`ju< zE)*Jwe%#kG*x5Q*+0;_h^bV{4*1Y!hI|q+E;qz`N_nnV#=#2zq@z>IG-!aUMh$u0) z-*CB_%rF>3+vD@Oh{^H;Q6LE@t5OkFi%%@1xW^xJY{vFKhb(aYQDSE1@>T+y_*!%M zSQi9#Hg+*~SxUGOB1d9l2$5-jEE-G3Ft@Ne{de)@!tFpSC82CKK9^>D0NHxSU{rQXBlB%p;fa8X0!~ zW~N8xNGvsve58PrTm}9DT+dpqw1AE&pkoT?m;%Ok0pq&>$7<#}zs3>&$MkIGIuEzF zTs^vubGhi6LJoXI5lS7>#R&ouhJmfXE&%JiQY5u}U#1(c$p&BKRyUe!S&47DTz8vi z@*sz&&#;`(c??u(c?8ClZqMApkfaHAi3w)1@9it*r|b(ypqi#coC=iS&=3(#m7OOm z-*{Qf^IyBlJwtBwaOU~qzn8@}95wFe6Mf*u8n0-Pl{mEX?sCeZa2CdW^+Iw`>r-g3Ur62J;!KLY@cP-=$ zpVj@I(EaYLd_ecxC!J)kZhD8zOtbz;TpwOhv!uDYb@eUFR^Q%N+c0=*|I+o| z(j^Tye&GFU8@ppc3s*-`LrZ&A+hA*j`?g4^xUaA#5L;RoT7Apjky{?Rp`~-vuD+gM z+t^uO8GB#2WBzaN{k8DGooh;JYePleps$F8YDgtZ^IAV}OAxeq zY8Eq?kpekMoTxDj*?zT5tZ7n?gGr$osgEupzbqlfc5)q=eZ$b2_v;R>b@#Yj^|}L{ z?`MQYfg~^jTu;Ck&LK|aVb|wft}J1H!_XRYEh|B6s$-ru8s}-xU?g(JqZ4v2M5HIO z0S6i=?T<#I$tZ+dt_CsAChQ||4!HtCTs*@-Q0o49U=FwhP%~saJ`tD1&Owep9;Kbu zpJW`mkcyv=^Pv^vV4sN-3>o*QVx;ZF_#GGWfRfAYKgWY>r-fe7q14janPXCKn4ZtP zOYa7kD{9__TxJwEp`=12@Bq`nFpA^?b9=+kzD$4aA91-J(0R^y<3uA5=xX#gMjIi4 z3umW~v`)63Ze`P?Y^Ae8GaAWP)FN^hqSram$&30s*|4jVU6X3z?|}rXl>~8r`~~f< zyGg6tNXthg!i??=t;!TH;fgp2l*lk8z25}cZ*_CJiFu!)<&3z;6qBRGH=B|s&;*ij zl(Pdf6!Jk_72<&zBuIRE32`NgfyvZ4g0&lKeEtt}l{52T`v04Ca`UjtHIf7IFXls%&1BXaMM-nC$;f}_6ik|a>eC7C_A`6)7~OGW0}8RhR5%S%?%1^y=lHhCYYayB>T^0x~Vcx zLyXdN5NjhMW(0mx8&uIid!u+*sZeb#FY}06KO=kF4rlg%0TI;5q4texl?sK0ekAmO zP;7 zHxu8J<8Q`IlKZhJ-gUuYUXbVIeVp41_DZNKW@)ej*Au`efzJalRMvxFh1P=g9FX!T zf734V8eZ);f1K_9eROBGR~=Qz;DKLLzrLh?CFF}9tun{TF%^dwVr*?d1Fog81vh`7 z_EC-9O$*(5Lak2;y$*7!YFo5F+z?mSzpl>vnOqpn=5+g*D6;9eE?Ums=7(jV9@W-Q z2wfHJZZXH^^jFq{V}%KQuN|U54+{OTiJz|uy`~d(i}h^-!B$_@-LA^|@QTp4At+`# z8J?#?m()ST1G&tK;mydyn-PrR;HW}j)uPIqmxot0gli7&zj;MnPg5vp-B(ij7ygdA zC+Dve7r)?Zt9_CcmZL4P&gNemI`TwIEWWJyuKwuCn)#oUS6F}6I1sWb%X}7$!7P+$ zn9Q9SCc__-rD5;V3(SC=1Cb+mbeyA+DgGo4EnR$?_{>=(<3>YGXPRay(Bo`v+SNpm ztgk83lxWIH_?h!0^P1aP3D{`H2xa)tMe!aGYJyttWH}dcH#?W&S907V!#JG6SO^uv zu#W4WPEu~>rS`8S?kw|cjkAp$Iw{UzxWzdUav#WWaL4kUH+&EnT)-RtXDyC&Mj_$OwIIXxG=q(AQyTR3iCIiZEo^POt34IW4uyfHd)({Yw~;icc@}10MOc&E4pyu7 zPr4_#K6sm4M4_<6)a;zd6lL6*){@sJm1nqJUv)o-39w!|bPuv2{*G?hSEzK8skw%` zBVKsjO4h8${J!fKvc9(_w~n>@8^3C3x^5k7>jS^^dNb=-Gqy9`uVJ9>C*-uj<@%uM z`~$%wa&etOJay#VqCHEHzU`C$YHR&21>|4OZXhpK0<6R{dsfH?JxvccZ*ATMb#?Sd zN3$n=qTdw zUY}NbB*L(9u}8IVy>m`9kYqs=dqQCerU2HAT4SWS@UlsSh!J267zZW*6_-=^0%^h3 z1b;|?e1{p|TFy5)VxDhwjOV*D$`waO>3tV1Co-BCHEc`^Mnr)mFaqHA^p8eId5beT zV_fLUn6a-Y1S$$7ff0a1BV&m%Ued(@j(;pVrqgKK;~*Z3xnFc`wR^k!FNl_oy1!>0 z$D?SHgmir(1Q{S6&h>dB9y;JO8#GPBC0Enw@QdMB!+8qDKFir@;6>n7;C0|FfJoc7 z#Be;SY@t;m!gNg-9Xm`-oG@t`VZ5UpMsg8HIFos&^LSXYP7XRsIMEGhXNu+T%Hy#c zg&M-**>rpjH7weJ0bmnwCqTz{%7*xW&@Y5u5^{zAKib{|Jg)M}^R8Q~q|#DaOS?+e zW-WG=Em`u41lYn0AO&NC4UUuq8*DO>>|i$-y5%f}*ra21gXysJSWh}(nxrR^ZZ4G$ zNsl}vkU)~LIvq$uoY?6Ex=Hdq_Dp~dNszwZ|GibR1f*x4d7ihd(2{LVkNW@x)Hh!x)b7Ae-=-&zg4o=&j^$n?iVvC%}VnJ(7!9_E$vpF0%_uk>Sh5jp`JM`PZ#TR#;GN<(aI_*uc;_2#M^Coaa&hwV`%0djhhQD zE#H27Riw45s5-MHJ3HQ7*OhN&;ow4BX_{SUeaHF(dYgXhDbt5Cme7Z~aR#a{! zGZwobc1mnOY)HS>h!G!t*Tj;vZhTY?bwJ`i-YQ%rHX`PcHcwvY6B&`oE|P#Onx3fU z|M+A9qCI%iuE<31G&h>OmdQAN9cNF&-b<#&A~ji&t|H?%oi^^w3D~U2jPi=k){P9& z2Ms_&&AmQywH<=y%-w0wkv_SAB| zrEak?$RJ58t|QBmZp=BvbyRpqEJT~;^x#Q*f7kW#GJO`b4GUTP05a5 z;u>S3wqvziBf*;b6a3X4gt?b3d=#i5T8A43d7P!69k1hT7|Ud~=08a?xt<_tf;yEdUliCj>(K7_aA=S3_dhR6zDvlUtcZGn)4YSy+O}k@?u_@JiOJsaHXf! za%CjH5Y;B*#E_r2>4V8DhTaeN%0p%{h5%v}?}-hgLIrq*wb!o1Gq+(rH(1Po**=$c(6% zL6bh;>lCtw6-)$*K?$e_qL4Fl?)_*^g6E4Bxg>(xymzjh8E)UY_^P_4e|GPYqZyg~YuCU1 zXDd42$_?LiOLK2~B?E-(bEDvZ z3?b!>^7?aK0VAMpZGIwbc6<}e9!Rx$-ahxh9Ozy&Na|FMj8>ihClYOiVgSH1IfO|fyN=JbEg{5px&i5#%PBLs0ZqYX#41RQ$5rD z#P_8>G333~xD^=;OwyAb$&TUg<0w`%jd!R(<6A*Z0ZQ4af-?o@aI&>eaB%*YeJk~4 zA#1tkF&f-Dl~*!S7pqIu5v1Bvr%kS#V6;o`(G6rR9HKKiXPVC`iHkH|+!mAhHe`qM zbj51V1>NfF^ruXA@Q9U*sy(dvUXwoay%e>1k~kAycOSj0SK<370&!<7FcCnl#lD;0 z%(&|fOPk^mtEx5@oGR1GiJm*g;$Jut0(rjIYCXz06HUto#<@;C(27iY0SpH$<2^^P z(jl~(lR==wxG-k&CyM3~X@KRR9P6smuy^Of+4lgeaE_Ngf(w=N;mUiMs&`12oBH=2 zf?4f0>rd0ZjP>O;mnPAcMgWDbM`NU=Dm^dOb>^FKZ5^!-BP$V$pEbj8gAfR&`CL#N z8d8hvOSLlWgWBR42FBD6)RlJob#j7Zf*=|Z$c}3rF(i<}31a2hXT;dzc4Fh&O=!z! z&r<;T9C@E}q#f&*_d*jn)cAI@mExC{gEh z$8-k>oyCY@z!8?XLRo@6{EwDdY0QlIG(Vr_=hOUrnx9Ye^J&h91NYDdo#T;5j9^xD z4+6NexBM!$qK8woDedr zuJ0^Auum|U;LKD(<2n#A`JY*HRp_^?7iZ=M^Owa?09l!>*~o3ZKC@mJCU_dNzZy~X$%}6WC<{0wc zg12>A02^V{5iS9FMc{<=4DmaR--(w(XHGeqA_4z>@sA8E%8 zV+^l2+p~_g0g!TC8j!tmHVlsVJE<240UiD&pJx=B_5gFKJ&sA&xzIM-mcC-ytiJ6+ z>WO*Yr>&FL?@yEW+l)7-%d)0WJ{Mw*dr!OF)0I`cz(B(e4{!L({zCC1jj1e79)&r z;2_Rt>lZO_BWRig9yy_1x#GG`xkvN^ryLNpJBQ1d=m2#S!~vdV62ujrRpyu?$&$!$ z_OJ{sXT%~{M4Yj*39K#im%eF)!~(AygY|xwfEo2g@);bX80KV8ACeW_?~`Yc+{XD9 z2GZS0; ztp7DL;oY*I|9akj!@7KC${Rj%5YALdhH7nxt=@l(iYTtoaXZ~*UFDkgboTI@Cv-6$0!R%bJ> zWHYa1Gp}SbuViZ?^ZN|6K3y7)i3U*S_REBva_<%9dC zoDCqH$Ptvd)!#oh<}csW*>YKPVSi?6b8Y3Hp z)+J`X;$6#1=?%($nNL!&>!kc0vN#_#{W%z-7Unxl?{dxsFQAH$j`VxK4T^5xd6I6`&NF9&&i@?7XbXjX}>co_-O zXL!yz=mIngQRw5mtC9ReRD9@NZ->H=%%~|rcG2uQ&yN`xO57Jxc+gCC5M=wkR9!z- z54Uq5^tkfQw9`}CFM;rU=|%p?t3JKXU0^y|An~L<;Xo`ckY-X%DJ6W6%`g8wgvz?x zw&s>s&zB|f%z1mgw0hF7gpF2@7cb;nzK3?9gmKT9@booW^ztM0TF&&X^GjnJ=s8!&UU*Dyp)I zs;qj~HN>Dsra(3kI}Mw^GDwdL<*W?K)8pv>QO!u7%&2oh8u1HSOnX51q^rwKbd{<# z`+m)4f28W>r$v2#e?eJQsv1j{tY~Qr_}VXy!!NhI$B#BjaFAP ztPhuT9U&j}=1<=-5KrXbwoV*UhS84zVytqFR+^c7iMqJ=mT#mT z!wYdFa1w<*^1x9*Tsy8{WTy+KbzqbOre#&oFe+#m6?}_Ak2n`9W~H}}WAJyzE2dK0 z+yYZ5Uqz`{h)ZFKf|hxt6(>~1pcz$6NW+NCdo`NM2`F?R*^}R&KS(U8s@5FOa&;k@lNDIO`juTAkhd%7d<@}yKozVUAOle)W%XiRf3&>zbOr+hWftZ z0pufRym*Q~?z>(y8@66B*Ia9g=jprA`j~h1=!*HLYVrRYQ<5klD9LZGNV)M5YRN<3 zhzJye5>OA+4-G=YP{yw0Xx3QP1lUyfx!chvUSV$5=iaQ^<7v@zlM_X!i>7g_wLP@n zWUMGr)Ki3l;z-e`><@z+bnn2|TE8)GuGi7mev;Q{a^IaP!k(4rLnH~lJ9|I~+A}&J zsVMylVFrH{m-`A&uS)437#!Z24fO(p)hvW^W< zzYl8L4YOUNcN){Qdl8mu!fDCLL{U|lTt4rGzVA($y6qa|RY!naN??F(TIM?=;rY|I zGzOtdI!y+%Or*>CarZVEJ)ZfYh#!hP&Cn`n6QtPq7BYhQ3=$C<8UO3_&`iec^mq-R z4bfU`R3rB=OsW#H#*C`B%H(Jdi4CVauhfFX1?Z#qY7+qqPRwcpdzg?Gk?XTTC0;5U zgIG!rjcKKc9mp~$UbH2%0os2`Ps5X?xTIW8(Fn$&Dd-Huv`gGbO~|9{jX@L8X$W(- zMFMIhD8Kusgh(-**T6Wn0@?s=)0lO@`GNmm6sMgC%+k(aTFF6g6ADUaYL~dveFGCZ znMt_Hje)1DLjQt5GT|z7>}+#7!;>P3cNK@EtH}@L^=`fWc5BPb2YW5ndwXVne0~3Q zvzx8VPAVab_CNz=Wng-wbXgh5aa4lVGWNKb{9YXe>LJu1IuIZwvS!)iV$yRtiHsgp z$x?SA(ZYjgozqI%h<`yad_R4!GH(0>s2U>+~^e(j3Xe zc)&SDk+ZETP?TQ^)+1vi0UXSq^%U&9!i$>1Gf@H7Q+Sf5!_pr|gItrE$C22)Q8g=+GAYXq_<#D>LUb7K!{dvL>Ag1=8! zf(d$(D_s|h0ZjA>GY@DyzS{fkx%)p&6sxq|gNQlExf(kXF!y|o#Xt3W(syM&k`ZKuv9&N>7?j_QZ++oD}UPcPzp7)$f?QrRBYu@f+7bkUfW!?8sPEv92SZBRdIEhXos15To@M{2ASSh$?g zy0N;Ha=MP`rH<*Pj_IWiLC=|}JI#6SOUX#}uST4A!NL32dOV*uuN14*Tp#O+am!f= zO=n<66pwMk7&jEsBgT9cW4?+>2+UF0GpWVQzxgK_@i7LtD*^RD{m>vZ3yeH36Gn2%6SRAy}Pvq&-s3v(9zKYo>(RA&uRx6uQqDs2u|9XV<9gyTzvTsPkgu zD8=kJN+Cy<0zrg zX0=nzu)`mg{P_3Vi>j4{mAl(Rw8qIgej!MBqc^Rl zwUsi~Y4ES`^W`R>2Ga$rawar4w8kE7nFy!XYw*28gYVIdlLAoe(SZ&oIr|PV#h0>= zij|0U$OY%9ScgXRJH$G0(%az%!bm%r73X5EN-1eeqG?rsZL#&U%FT^8?~N|MwzFzo zOIh!dO}AgQ=)q(0b+JntfA79<=AS>X`nJBfKc_Dc>KHhB-T2o-0XL4J(A%&3n!O(M zshyt7tRI;QtXG6C1}JPqB?BcxCCH^U8m@*V^e|@aS12wIpomem#y+)^1kCBF@0VUR zrlX;HmybeT39f6U*ZEz%rh+ zI5M$%dZIouxpq#6Z={^`BC3XJu1W8t5zMB}JNTtT4FFY{!VBR1lg(6<+hM@khs_gf zI`s5|!UwK4+Y_r%;jbQEEfxOi>D4I}eut~V??}CwF%B%FUoT@ASjI50jA39I!@x3z zfn`iklhX8)#Jy`y({J~BdB!agiMEODkVN=lu^p=YePXvro4rl!phU%k!dLFYRN{QH z_CW!1L$y);`Q)MprT1@AZ|!P~Yk;cBF^qWO8Gcn9P`sgdLmL znC3gix{7}jTfQ;v82ib*SVzNsxv)=JofS8%UAeWheE+`g8_LUftd;WL>znz9g2v0* z>aNU}7wly_Kf8Kk=(lTs*Vs!ing8C@i`91Kp(Tli4IfxDa$m>dmgTYl(4d)}(fTp9Ei?WN(!iWpeS!mwL0qUgd9#_5 zxdpnMLs!qu$moOJb2KBjd1Z8TZ~nCBE8N_j>QH?%L^0Ia-P*$FnZ7a8@@8v>i_DF^ zPnUT-Cfu%Bfw^8mJ*>qT<%!A2j1i?(L}?XKT18ZTH16b`dW8kw$5b6lzd&5`(vXlK zQ(~iYa1fvze3_LZ&FLaHWYMr^#Uh>Q@^$a7 zH#K*+;sxpTXH6T6xif9&+Ahda(9ItA_gH*I!uka>N4M7vt5YGRU`(yPKgIR~iZTNY z_ofL7b5lNk%O=XibLHHEB&GN5oIx)xO{H8W>z8TnPzTm5$f7xrNE46`#NOJ zwO=(I9EKdx$?B;W+79i34ng-q1YLgIm-Nx1zr~5H6BGhBhryEWKbgw}#L6L`sVSOe zMyOkvJ{fiP(x&c$jzJGYPe5OTo`Xn?*etEU7o$%hEjlkpf2lvOMc;~IgwKqYMVrZD z#v5(o+#S$fX#Ty>KpxU`eNrG8Nc7P-WS4MZPtXjg8PnudKrZF)4_x=q7Y7@c=DY?&a^1w7ZVlZlR=j{Xis z@pZlT7dC8^o~B{DA{;_D-I(cNVLO-F({0~<{2hRXpb-eva9%racMg|*y2Ch!rl2#> zIf!L6!9CLYWYZ7Q6Rr`z(n8i;KZs_TFleo6PA^OPTdg*Q^e55l9Zj8ySxudZxxK-7 z)tc7k`q!G)hM@%`KHRi9xywpyTXShJAtZVg`!Xc1U8f@VQ!UJg;=HF}qlecCIP@-?hR{tGRwf z_lo-KHg#^QD2!g-(B|&$7Wn#(cC4BjL27G%Yo*wDnId&&l0HqAr5-Yl4 z2{U9D5cRsuKx}@emMzfOfQP#E0-wQ`kv=aCNyxP@qNhoy7^^)dT^Ch|l@FeMcCvy2 zxB!p_hPHTeyh=-3p@*vas1{H+c7*vbCE+hnM;Ntly1mV*%z?cErkMx=+|V;@Ms$r< znI!ee9LgLalB?_+C1({zqDr~VOs_nM%;jv)+LOgZxh=dqd@#%_+?V@Tgx#f4+@W8$ zW$o6l+rxXphxF^GazD$j=$J7-ViQXTuUil#`qwXeLoa8)JGYqkz~;?wf972o#uzTb z3>O={9|5-f3sb1A1oTj`kHOIDxS$y&YtLY8K$8=ghf=a*l&})6qRBaj)acaY#bpzh zE{(xH4JtSM&|7g@T!JT_{eIMl6!8mW%3F$#@A6FNvm<5pN;!Uz<`5&1Ef z2npYGRu5R5wvyT#Q0F+iiw;Vy+$sHzjQ`Hj;*-J<>}Y0tb@OJS%Z{^cKMzYj+We*F zuQ!tv(Bs@vbcf(L8;Z82uXjFK{Gcw~sMA-8=_d9QFz0ylBf67rVt*ZmJ-f@;vgedn zeS)c%TpPyQ;~i5|e@1Vw zRnMq^K;|toQe&6oKkv7Y=Z=}KkRR5HJi#>C_JJw zBAhRVjGI5IbQ~BrxFiK!KdQ6zgFL(Iej$&u0%rKgB$Zx3j-Oy$$$41x;@&E{+zx?s+! z((zK1Ono|_FpFthSyn|k#+zho#hQvOgp$%4!VUN+V>Or>O6NOh?_FbcDd8)efzlyD zm%9&F{PJ^p_z6AZLg}o2$2S*Y%9ob)lyQ7i9;HP0$6ix*S}xeLI&eZ03R~E^ zwbidJkQO*b32tHX*`Ph+C&pb~&UL#K7W76Vy6?Zt<9W(dowQqaKW0E@iWrd;&p5_G zH$W8HsMv+rY>bepCVUi?qh-c0EFBfV#0U_mI)eJ@oq8%Ix@IB5Ffz`sQ_vac9CQJi zg;03OS@fLrT#_3Wo<%hAv=+>X)g}aXzoheWi(61Ax41uuJ@BCUqN*moXqc(l(X_x9 znV3d-0t61}Xrij8O64lSa11q+o!7({pKH1xy;Kj|_OOn|V2Nc;aY=)`19wY*v0DPk z?TBDbS!J_aZf-{yxKzB->6+rTmSGOsU|yynPTjk(enDz6B*Bux*q&2_9N>_sJrp5_ zgYh%*b9hK7j1A2J=GLA2rQ1?p8uH%e`2veIH{MQ+o* z9M=PLrWT)BtRENa$HlXA@ipCMpM@DbsR>R^aB6~66P!B#d!(&Y&4qAydzkNW7t%v&%rUvd z4(SDADDdVtU}+}ZH|-?u>eYJFUQEuRAEYG<$HS0_@ zooNEfXa49J%%k9cy*)Y`&x=2Y#M!( zGNCZQ9uPJZZDU#@c~O((4<&=XF7}Gp!$`Ew?ZLa{rgMM6qf*|R>`yOK($25SelMAp zm;?J$;86Qz75=ZpwyCpkqfqT$nDgV>UrE#Z!+H+9BDPcP#Rhr+xn2!46vSq9fk)S( z#uXT>Qh-qFU;DiqFRzYS<)y`hZcId%bj2z&@A#Vy?}{k@j=8#7BjFjO2_if|3^ zGmMK(_454T1J=)H*00#Kq-e(;>SzNP?f;3@KW?2eb(BN@vPacnOa!PYL<_h7jO*Ar z?T(2FY&j8kEANazp$7VSLR;fvLt+Ao+7WrYoo5R?+hjHpQ~k94CZC!N)|b>b*5mEH zqJBgDHa76Fny8IW7E{X=$|gVz6Gp-kjDU?$C)5jVhtSps)cNz!NZP~8cuEgjsoGxv zMQBFp*qjzn=VTzwPG+g3cF~L$oaIh9DEp(cI=q>LaS~j!jc{B_%U~vvxWbD!G`lAe z_*%LyBe**9RWwKxWwY7`&CfygMfRV9o`+tBG7mV%3Lgg6;M`t#xA{|aw}hAbYaXr9 z!MeKzj4f+zR^0iQkT{*pwlW1nBlofNftPvH*^hIrC{Ya3?L*LEoVZ+7V*bg@lE$iv zmfEt6{y?yxy4LF}D=RDt=PfI4Tj6VO&kvNmZ`I;;aVHF zPSg~a3n$##(!92CLsN&KWY$t9y$s})CX?d=TMjewGn+h~e=x0POnAl!*8Jpj_WA6K z*^C|@!5*hM#52=*C)`37VJ8!8x4KN{wMGgvT;$3k+tRLCjB zUXMvplHTXO5*>h3fvHrO<};}+&3ErgwsXK4FP+l-KdiIHB(u1%EIWdf!XU**HS#Hc zFhUr9P)2q4SB##n`EUY*oqLwx!Jjdzx?TK=Li3>1e(tq`+_=}?N<@zIwL^UR{A;D? z$-tFC41qyIrHGc*F|P*POl7wu9%0t zcHda)KliDLX!^}++&821m+(FVm^O<&-&Qq#9f>ppJc7T~@f1c1HRGZ7aRv*AX{VCf zWzkkWnmVFt3L;dMdPc_Cq$eYi5zAm@$9cF-Vq{8-feV~x7c5Zb`eVQ>MKj!tN$(8v zHkrx71am*e0!Hi|%$f=ZTL+tVLQR1`#; z3reeU{ryPjmAkfOgs;pB=2SG7zkR_P2PgDXmeOIgpN*E$seYZwIF-N6*iZTyvM_t7 z4A6NqQrP`kr^pUHQ52bo5G8{D<92?L0oQVfl^RPPE~y}Zso7}2q?R_6rG;Z7DW_A~ znjM2f(ZGa}g%G3@LBJWhb#gp&D)S7B=gBN{)C6Z{oXVFuMl&R{nR%2mRxyDzJz42G zJ5pz7b8hk9!EogS{U!RdDR&1;Xs4{CSz_60iDf3yZI)y+H~p>ih3J#$E-jy2 zL`@tqC0QyYBypDsGm*-^MEb5`Yi(b!q@lB+>ax<}Xme>}Q_lKrgW>G%jkVon(L`He zX(a3q-D!P!CehFxugJ~1A}j04KI`$`D>q-28@{|K9Bry>?xknF6ZZd2@|UN z2@C>bc!4GRTNE}btyp(4@@Z7QAOT;S>z5;_f6*1b<7D!ba5A#QG;L0og6P=JX8?F=V&nX%<*6RzX~ zX2^`7%Suk=o*}Ieqg*_69DL1=p|;71<5)`L8!*)lT?S6R@*P2Z<2s}CDApu+GpHmzV9 zTd}LZr#B-vqq4RDYv9}ebJxw5wLZVTtAXlY%<~?_HWc(O;!z~72fx?rJSm6P~Ku}@xo#kv>Q(`ghM%5aHBkwRdkU!x++>aC^WhY zswy4?fZxY>N)rywsiS_Vmi-Hr$u0W+H`sE%U_EKkoJdbeiW~j(1sa+CjM(q^V&}(! zUrFQrJLxHZob@a8lm_ze{4nnqdD_lnLM)WPCTA}b8@Xw3!P-TOy7F6mWlbH`mCKu} zL*D87=EV&KrE#qFwM(j~w6)$FJpUEEcGz>T3JMLc93hSffqyYbae0Cf0Aw`je#DYN zXc#&IjY0wtYErtOP+EOrr^LoHdHp=G6EIcfkZ;7t#}Sjny_Jt!`P5Lkm5*B)_r3_f zQmgag(ydKHljnfQ08rL?n?1AMpYq00?@g(9wqrt~ouLmVJqE`kM2@?`x{uP;NNwFF*YWk)6g_@ z9=Zr|1Ib6R0-x3;)InV3J(MnVxA^-~#jg&e0a)uzn7%EKGOvN+P&d>E@olOD=d^E{ z)1^H}%RH1vp-$wTCgr>DfRLQUXOnWiI#-Od#Go;^n`O%7#bAFeV$xVRyICOm{&)uB zELyw&N#e0^O@M#mEV?k%2f$PYFntHe6&xT}aDZIF0dfTgJY4fk;00o|m}^2@6XKeM zILzJbAB2uVCn2tRF8mTHqRhL6dABg{7Utc;pbf*I4a2Ob!mOvlpbf*I4a2(Ti{YnC zTB&&rvCHUgP0Whm+7)drD_6F(baj^J7nW7z=a+jw(Xy;9-qap%C6RRrVX^r3wfI52 zL5UQ2?l5h%KtM{#vUz8dN~|8wL(uZE6rG#c=A>1v9*skhgfw|2(caQ3gVh=;wpce= z3^rT5H!&?GLy>5tNg4cBOW(RB|0agF9bNAZ!SQn4;!ExuU5Tv7vRK*$xOsKHUKtr| ztM_?O&aSj!f;!T%OzzhGPF}c%m8(52HE=hKW=ERUQAr8I0@qv=LvqkkX}*&Fv{BSM zvD^gmh8@xQgRqIhvu0o2(7J36y;Y{l;xI`mX@~`L@FyPa&s#3y`!~d zIeFQotyRU@c{#cAu3qb1V_k)+%Fk>3MQY5Nw3sQG7W{Hw8RMr3=rlA9orf+$;08SY zhycl{%;LHtzl<5 z(o9k4nVLx3i$ir?VguJ+)$-)_153Q$i0uDZ1RXsN<7;LQc&7z?o%tNXlJTlzmYB47 zs(E|f%siF$omj@V=CX`mik6T-p56!at+r3Xgb9&~#SqP�mo@k0DGUGw^QqDNT6; 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

wJitgMMi3kq0^}I#)>X(Nv#aoB9jTgKnF`;KrcH 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

0%WG6n;IB!^ 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 I&{LKAKUe9P4*&oF literal 0 HcmV?d00001 diff --git a/src/assets/fonts/PT_Sans-Narrow-Web-Bold.woff b/src/assets/fonts/PT_Sans-Narrow-Web-Bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..bd6340eaa6b510224655b577730ae5552cbe95f5 GIT binary patch literal 63028 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 Pbea^-55zf2ftvpVC=9k+ literal 0 HcmV?d00001 diff --git a/src/assets/fonts/PT_Sans-Narrow-Web-Bold.woff2 b/src/assets/fonts/PT_Sans-Narrow-Web-Bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..faf8aa8c51199147d803e037d8c3dcee8235c174 GIT binary patch literal 51128 zcmV(|K+(THUcCAhcE;n1%qSLNNE;#h|NlQbnZ%)&&|E%w zfEN9(o52JP6b2f+6o&;IbkH4yMZ)2t4ul)RXrq(q+#w}RqHYIW!;c+lB*1w z&2pi-KesxFP05bY-7&uu3hOotcJO|3GF#*Ur%S>|qgW}})lc?x4eE%uQ7lCDCOt|h z9;yw(`k6xPF-3WlSgAEsqMRp+sA9Aaey;D9?f3Z9T0Qg6+alMQG&5u-{G#w3MY##e z6SsEYFqa;KV;A>S3W{jpc2Eg5#i&1J6WiDRvE$idC$7)x5i{DBT;yxzW@cDCYf=0H zHPha2)n>{WzbLI|@1BursGbj(xK+C5_HZu&#<385ND9dw)m88D$@9;TgF5&95s<*9 zggCQEFyp!@Z)5~3*raH^0diZ1fMYS&v6dhx3Xa%fi^KlZTZ z+%JO7kTsfv1~K%sY<+)^E3?<#YDwMG9{r()8IQl#9$sgq1rIEgeqiuG3K$PsM~09T zS~`#d=BtuIh9xOv2uVkVBXz`AN#zKVBa99>uaX0xuPuOo|EtaKAI+Fx79d3QLr1W0F!sb)XR+Dc zKGnsDlOeiF01|cGufmw78L)S0$0Q`i=l z(Rz0v{+X$L=Q`asmSiWd2i^;iMRW+50T>JV=XHLr-rFEmxF~s14$2DohYTULp=pXa zMP1+j%dP)X;*lb$kbt-GjMvple;@Om`)4F2ndw>ps0|;xq`qd5u*+kRwZEFc&28rYbN#|G-~+ z*KHcI|KD`=rT3OpP$dCfC7K>+3+;|H&g28%t~c3c8yWZN)+?#rD+#Fzrz)IK(=!NW z{ug2lbgz-%8=&W(!^~O}8RKAjT=%SLdX06FchN?BHngz|T^u_fZM;F0ZxDXypPk-e zbb`a&Dys+d0S7n$oHe&9_ZMVq)^stCA%>d+y9gSRr7h0?f3vjz+`UhMU|#Tvi2GI5 zmjzm+^@U-vXSAn0C+ftF6gwg-Q8%j~ZV?m#@HI2p{U4Yl<~7mXGbMW70AL$ze%1X( z3QJ1j>3)BdUj8_)Qm!|KZ4J-=d((@<0K)+AXK&3$Vdn(2F!Yj|Buc8!}hvelv5NG zl&Fg`f5OLWYj2Xn^v`M5qFYf^^x%K7pWlCNJoArds;bs_XFod#@=>BhP*6Y`X!xrn z^ZtBiHtF^6fO4>aO}g=7;;e1SD0(Ql{{MdZ|KDzD?|o(Dw3c*D+07JDP{6fdO^5_D zaC)G2EE2!8?^^KmW0v_$TA9>}?;IN-Hq_nCeX9gu8abnob8l|02VyTfyQL8zg8}Xp zn$Iqz(R=Cn&5e9J0`Q3lLe?0f^HJ?{&%)nrb<=&Vr)E3S(q8+d!%BJ1wjaip<_Wo4 z@jrpDq%b@5JO zO!9xJcd|d^ZekMHB8~$;LEw}3mC`%qn<`1w0pchnpx)G~c*ghslWa*1$_`_GVQV-Z zf&~FV9HO|~Af?GEo;Vty#dCsdBfa1YMPQ@enV*W)G5~ z)LYq~n8(;a1o3{qP)sPjR(Y=ahnOSvgq)Pbm0K-HAgq@b3f@~`sO=G9eu|&Kdy_ec znf#_sCL*U&;FuwQl_LxSmyunrb4q*faKofiqXzE0=lTYc8-)KWol{?8@EcMG!twp(ekCGp-0!zn}}+)!oh)BagzEQ?{; z&aX4$(UD@07dwtVsa)T2cgb(XQ@cFA2{0LG+?@ehtpE*c(G4+M%qut-{eM9;t#Q?7 zj(?o3tw-d&toM$bi3?3Xg5y$`ZlWu8ypl@?sYLYjqfX1}yThYsL24}%pS+?nM5JGC zhIn)robjGmXob`~z`2WK7;hq#usfkhHO;5V|BS!k3Jy695lZdV9Q$wF`cne>T<<>=1&5 z|E_mQjg{p0lNM4j-$y)5NS{nb5qqq*$d7zMBht({dU;5sHYK(0!f!u?8&Dult9u)4 zw?d@TbBA>j@yx|GG9EyOt&>&p1c)HZR+yY=AyXdljb=*whTMUPp0B9ipo$C z;^IraBi*&I;_0le&ar@c+ei3eZYHEHrB<&~0vqd0LO6Hm0_P*xNU@e|tmnB>JpHK{ zhtd%OYc0d7ptnPu!Yb4o<;CwKGnTgOVOH|=m6wk-<>wk-z7@l^u?LMM$te(hJQk zmUp8YaB16Q>CO74MII=)NKs-SAfb?P@bJaG><~&768j=Wmrs+<#LU9V{xakbzf+N7 zZY4^2l&P>*uQR%IGcmKiP+1t{<2M#8T3@t?N&Q#hnw#G8ws*{X=w0u5--kk^f`Y<< zgCmL*i6}}GvKTQa5D@T?kO)vv@W{xhcz7WA_@Ls%i6A2rLO}saNeL!F0;oiZ;F2T> zrKT1}LnB;@6cJLTij*czlyvFHOiU2W%%WLX#IUl8WoL&`MIgi^XkrpbF$t8I1X@f2 zBT>2u&lRFrWs+5hvsQu;bL<-P?BS5-ka@<%I4;^tfB9ZEs=&06LRWq)bk(iqM7So( z&BUl0LjMpoJtTDxQPU*(@QD{f4=My)oJet^4G|+0LO7%_DB(DU;u%I{7=>XHZkV23 zI1xk=MRdi`VhCf1XtC=yQ|9ZCi^z0i{?fD}v< zBS9}S(69s}fz$>9`sSP9LG>a<@e=PAXMM4qDRYb0Le;-*S>}xY*jWh96w-|=VTM>> z;J||eUvQs8Llg*aQr=_&cRLkpb6ExiwE5@483oAOoBh_+`T)>*(?SrC-^oz7gEAu= z#My6JG>2_Kv4~hC5~TVF3>pUJ*uJ2AX)z6jo~R4tr0~n((ecDl>0(UcbdpD~l?8$W z^-KKnj!@x{h`JF?P!=4YfbelKu<)@>v!I_%U{?SHe&C@0{f_|F5bPQNc*K1;zt${8;JghC z0SnxN^i7yaZ;S6cI$Wn9%;eYXrfQ)U*9?MWkPfmy9;gA0;OVvNSZEe5Siu^{TkUzL z20$W69i;xVlm7Z%ZupM>KW!z;Km7Oo7caEhN{bbG((S&Tyz)&ydmF@p(6;F(a1Fl( zEmmt5uu-ReD6>0RbPfv7)uQsN*qRAZFDd*&TmrCvxCGMSI#(!cD=!uDUIbs-!XyB1 zne-AU0n;CK#>s*n_(&4@BBpn7>bb5bOXKD|7rPi7UDI>4iWiB%)xN4pX8hVp?omCu zQwEZ^j=I~U-!_<&2a72`7gQG)Yoxyr95IG9GBXDH3&;G{AeJl2RFY-Bfn&nq%5_cJ zub@mGG!|2s)AYw=$Kjgn7%9w4@wLdPwBFO3>xlFs_nBzO3k+`l^iV>X^ll$ns<4@K zm)=+RtXJHBXumvMd0hi48My>oxioHijM%){wJF0DCTzZr3x#ewUS1uc!V>@P@Hd~R?sk!Iq$oF$i z_;WH^hP>NWK!H6sMUwJEI$_ybxGUI$@G|BVE1Y$_)qwz$GdKAmX+9H;6XkNi# zP2{>PF>1$<*s}-Aqj1a)5A2Xc|J6S^Rq&mV7!iZ%Sz?GFcUH< znHloc!c>H8j4^3i_DTpw(hw_RjUjYMY?4|bh9+a`a8Q^+$lPDwPo~6}Oo}ujZeXU| zNMm$Ky*cKDgkX&^LXc?GYjGrUqDx7Qq4k{Hl(L`E1<$xU*4!0)-$^Bd*$&h;!om&U zO$2=zprYo{7_xOiwuJ+ggu<~bu0aOg+S;C`OitP+)a-jWP=C)8tf_caLTlxL^&o(B z@KDN2;V1(v2PB7LnBdEunpvN&{y zXJ$MI4RYgD9fFqA1*{L$CIH?~qzJciz2qg^dQs{wuRTd8kU5dT0Wf1%C`PFZ@vtG?+Y0vucupJ*6& zpP13L<80kJDFC-jNsV+qVg<4R zVW&isRU}5)jg?x!bnkpgI0Njrq~nT0SaXRP%R#S`Q$}*DM2*ciw_&~C_dZ(1c5Rw* zZ{rS%%T^H7TaIj`Y#p6F9)E0ht7zR7Pq4io+4AUWw}nd|-BEqE(BxLIi!~~hh}_mz zVhj1Hlm-*J4?VsPSN56AAtq;Wj}Dt{uT^b29JfGm1@kN*dR<_mH;4C1-%GYlQ$=`O zTx~PO$%(WIjLM2EFqWZ3ltb>QRalPwxlMjKQTbxZ&#ai240*Q6brp=$)m@xlm1NSY z+O_JktjdMQv1jsaYw3*fT%6FUyjJN0?E6%%qSgQKVKHWxauc&|ry$!n=AWj@M7HJh zt`Z2gn?pqemaDhiXpL*Q%l(d;C_)FX$y$84e57&X9SxpeV8!pkba`>+pzxflYE*9-6%i=h@v-?T7QrI>b&inO$-ejLf$vd}hZ^(fEwp^5v?X)kRDq+$1 zL6&pr?c@QiN7}|^?$nO6%j!#8q|{u(7ln&`7k+5k>+^@wHGJ_+LH zdw0E0FDVyD_S-1o}U(z zD35kU0RU24s8sZQni#jwgd?Jw%9qd-ZjXq2gt&=OTcH4PB6 zXQK7?GHZLnW*a_{@nmUT-bB#Ma@94}r;}~#W#<8yd*^bwR_3ad&vp)x>raNyTl8Br zgc;i8i=&&OTOmC@5h+PR05>pPkhJDfDO=boaUb_xir<2c!Wg9Gc?SWi_vWhq6Gghk ztFWWNpFlZ5+np~ABs=Y8vF5;;@}d3UCvdCyS?+sZ@fA6I=(sBV#C6EoMD|q2F)LA6 zGr0xj?((-m4I$ytpzr4TkhClujkN2>BKQxq^<_O&c08UGBr3ja0ZcggC_e1e=vHqg zvsWY_kT=pO?=I!-Wpu4Spg*U$q%y!T4Si9^kGMIv0{F;*1<8cl2L5vP?!mrgh(hC~ z{%c6i=EbVen0fNq-~&LHfs|K(03$Dtj7zm>7L;+B+!?rU+z427Z?vdG0FqLiP&i9L z(NCkIwAk;C*^#8=x;%i}!h}hAW$@%C+ik6!MccLRL`b3dnr(!E9UO+8OMG3;9c3Aq z5li;Hc~_6+pu%KbJk-&o;pkYYaXNKya_I&eN~hDe!sE{i;$~ft7zT9v=;h0vpRg~f zY7y=|;lW<1pl;_(`6O4>%W1%j`ymSQj$VfF*A6A!XzvrhV<+gbj=S;?Gs4DYlt;ps zb?#ZZzC=V;toZ{6lJD>L#a~}{?m1JCgt=;Wue%M(xig3DGEbl8xica@mm0^%h)QmC zEh)ivbc!T+mXR2vBL{lC3BfJ1sOWK${1(T*E|i!6wzd?TpPh5pW|2M^`-k#Cg7 zk_cDUhWDKy87X{?|6E$>jt_f$k)C4^1_o085B$B1e*7B4MDRGcO;gCz?zNpjEkJ!^ z+<5A>9XAl)`o}FlbI7bzD(C#sYDs$nd^2&s^hcV*$pEL3vt%ZJhjcQANA&tQP1mv* z-#r9(^Dc$%&Fzz_Kz`g_*;0rBpxtj<>Gsa7OY3FlkNbJ|XT%>CUi@A9xWISxKQ!DB z_N`oeFVjCFC_N`apR~+0yfK(?9?#I5sW&pFn9+5ve_he^t#8TwZX%Q*=#f!Eu$_cK zs+A%i;&&Gz6nTh~@B1CecM@9jI3bj|hij@OeQB>_9FujnW=hhxcsNFwu0QIEO|vu= zKlv{4);VjR@rY1DaI(fyX-VUZ#Nn^1AEFmRULgah6k=A3m@xSKVC>B}zvP?w?G11C zeLrJ9&_Z=18uQ8GO$a!O=^MT?Z=#Ik!a!o3)$|A=`ujAJqgc`3jtQp;V;@evvlhSE zpA^-s-!hiNFXYW^v=Sz=2osU<+-i{R!<&C(?mPyTk6xW zWg1*VDk^H~_6mRre3cYjSyIB)7*}=p&te7U9}~90v<$Ufi~hraP6hox>e!3NFy%z8 z)Sl&DF7>*YWgEfT?>6<`8t3$kiwmW@tOP-{d9^RST5{)rJ36Efd3E?T5o`V&ZX`8wYY&~>@ZN?yCy$*tzP~ZS ztXTDC(bR@#`;JY$>iab@L&dneZH31j?%CD2tHzY!G6)!x~g^&2P z8S7^=;ihxywfKzq6woEzis%(#O z3SMI~zQ@uX&FSh$9<61992UjcS41H4#)DUz>seH@>QRd0@@OW@N`GTG#SzSw9H=)Z ze43VXWyH$1(%u+Jvj<&G@1!A&)9Qb0RCYLzyhj&T{B1rX)!{D8k>Rw++NfH7%Ql(# z-+^G7^ea6N8RZsYYrjBet4zEKQ@WR?);1~}C2?K$gZsxv$iHl%7XF@vl;;e~sw*@H z>gx2*tzEY>#bN80l)IApU3y-V&f$_Ogd-SewKhp6PRTMFz}6&}RVkvb2PpYi8o_Y^ zVdk-`iTJr+R&He+eNJ$6^ZmKX2Xp-h6Cy_IOiGRNur@Yf#fs#dC@44S2AiviVjuAqy2T_=^ zw-6&%m2yl@{#cD)GG@v1Fy-+UL>;kFC}Nwef$k)vo1^O!u+gc(eUcgU^)Dw;`Hc#F zDW%6@CHEVu)~C2)&iy%c?qVJi==l=-9Oy!&2SHP`TM-xOq-zJCNM_1fK0p1S<-zpV zEfot(KOru>-SRfQ^8;Yt$0~gVJwC-N)VnytW zEwBokwYa?*5j5)fR|TE3o#0jQWqy$~qwQp=D_JiI({5Z~5!Y&#Pkw;GDp^r=s@1IPIb6L4RPjV`m(p5QcXR zOLV`T%VA&NE|PA5Bih}8YreZ)QF|z&%`@zG8OEb}raCTf)_D{uWz@m^sZEzR>Pzu= z#wde*d5KYOitag3qi*e0M!CuQ3(WPwGm_~fXSg`dg*3&B-BvxPHf;D?x>v|m{R8Sk4u|a_D`y`U5tF#yW(fQ29^%#g+tt|BqiNk zYQ>6_MVL8WW0W4l=Z`a}?jgNsm}^T+q-Xc$kmA!z3EKosDJFuTYUSX=jOQ(#mgigU z2Wx#Zf!o849Tn^SZ5ux7yp|`{D&vJldyw)c7!!aY+N%!^yf;_=!Q9?uSjd~2h|RFb zE>EY+-5vS;6E&@~`^a3euP3@59@XIM_8guYTZVT}Rvs!k;JAa%LS+@)86J1M;NR`} z5Sxw3_Ix3)o@W|}4(4pB2@XlqZ0K5K&mk(fDcDMX^WPi*StX zE3b%V0^dVZ3>o&;zHMv!eTgp2#sUU_EL_$lhQRI}7BtHb_cD^ctHRO5BFC7Mi^2pSgJ*t}BSs9+)Z z3oWUrUUPw7e-2lLpF+@{shoc2Xkb(oymh{zvZgrQgccF2Tr#$@CYb_#?<;POy{%`g zzOP#4L>|7>NBJS}->K)&TtS9wf6&a1Q*CDw*VVZKvw^2j^>#7i;lBv8$`W+F{xF3p+l^59Zq{9rdH&7CI;{60l{a8W&;va-jnH}6g z{CA+X$5Z9&>l>`?F1xiMG>e%l;Bm}_*~}avn`aKjiI$2lK`XmOHe2)Hpm$pdk?{S4 zKwHwm5v)LH_hvARTm?D!^SL{LpI{%{=Vj(@?jBq>Tqi9=jkdY6*nD25^PrLPV|y?i zzquVtY4Fol3K04w36#)O4RMy7n^Z9)XVkjQb`ax`&`xvNB*4aaog40Kr#3>#c)wRhU zC>6r(U2d!a%F;^ZjNeHpOR_0===!fwc35Oi8npX`e;kwlj4i_wy-TKGR30oMKW?Rd z!#`!2_^!}UT?W?I^-oXYf8j1zbaCpx%kYW*pl)f4qE(ioZ0!mB)&(6(?ZKJx=G30< z<IpyO&j!c^ZpUO{l2S=zn~8zt18cyi@!f0lpzpXVR= zvsOGlpArX_gG9-Pi2|KsO^uL{0zQyXt0F5gqWcU9Nl>$3qIwc z)XR)GImHxXzzLOknBTcI5#>DI89Cdy&{~yGLPyb12H5pb9pYlcSVKs6>+VM+T2XcI zSALn<1kj=>*W6~1rzlfI<= z^YYI`Doci4UW_iGRajpq(+3flr;vWwe=^3F!tAy4!n9niHQA0Er+YQ!Ec!_t=1E8^ z>>nv(tmee6C>MbR9FH=Rn6Q;cDWf2pM#X@1G?m7>Oan1A+9SK}j?PyIEwbi($2yT- zw=p*@Yql(3gU+&E8xCF-=ximOb0417qtc zw(s^tkxuX|8rqhXPb3qb9JEp&s%Am7bRt>ldH~(AjUA_wFdvX~;qj#Js9+jlTOssq z3Nj>y5N}=aU4(7=$RIKH7v@=e4N~^Iz29UhvW8bz<_u;kf+GHbrq7yMfd&A-TjG}* zo?D+*#84=0O_#=XYxeBDpNva;m{wPjh4~&9&q?D_ zq&qhzc@h(gx712)bCJNysWkF241F0&N!f`kL9)bbZgyr8Lu+?B>~^PiRkpJ@n>kA) zyvby}MIg=we<@$;+1|Ll$KO-dSk|+x$=`GthpT=kK=*7k6dzk+q>_2;=A+I)t`L^j zR(ut9l_I2*-h&~l1_HCe`uG`Ny6@Nv)L-E!t3-mc4jf|}(tW{v%vBAhnM2U2{wGtO zTf2KAmTH2^%Q}*Xv^Z~j1(R7Gz-#4lyf#pteJ9|wbuzh`5FL6_M^@$&2!`PEpGIu@ z$RIKen)TK`y@bQN8_BJs?d$EI4d)&|`z@9k0Kd)}!8hiS&5@zG4!u3~!vPw4$AP2F zG?|F<%D;Ec^^1bkq5+)#{*HAsIJgxg3czxfVb;r(TpgPAxE;SvMEM_NOOu^oUuod^ zdvGORm8^9aYf9Tfb{NGW=oi9Zyk@V@ssG^eIi*OTCwMSVksU}JUrTM=_*a)@Y3^?B zeKCL4wVP}it^Mn}SKcVf`;9W-46rV?Xi;{-v(G4fm)FC&x^>wuB9V>>*8jsuQj6D& z@~*#PT0-(NY*A&)Y?Vu9I;|iU;wid5vN$H9alCU9%1HS2`mZz_9-;WG=qn|`iu4hc zUlpaIWYG**p(q1w{+P#pY}W^Oz2L!N7G0pFOdnGtuJc3*qleo zc|3WN%&A}XTVUm)TIY=)`yiK0pWpL2V?Rp@a-wx34Upo`|CL|TO%+ZnXZ`7|OSy8h z0P|ISv^gOZ4#&Z-%@HJ$?9lKh5C4-H%!iXxzglM-9z7#)5}T}r)Q-e#8(Z$H7~GUb z@x*J5Od*Z=C(88T$cnk4Hd)!!$sKO;H#K!j%;ufhYb`j_vKjS*wLN9=xiq`{3}4$a zSkqHRT~Nn46uSy>G#=OF!XW8X3xv$&XB09;%P^d)$kSyL%>;gdhDPyhS#AAVLQPzT zi5o{Gd~`o>#Y>JE{r$iQPQbT&&Gd}mD?1aG0#5=xYg7MwL{n?pyAq?_RNV(GLcrbe zw3ehTQEJL41NrAVu5{4DVV;)HPTz02KmAopaANnr7M7FGV_OTdz&s(Fm+>}nm6oHZ z^bU3R)(n&-|4S17paQS|Ovy?nXl;Ko;`B;Z#;3fzK^ILfHF4So1#CTQH1VBfs5EgY z5K)ruHBoQ-PrjJEUw!;jr~ABzp_`lI=!y@ebkhsj?7a-eZZ^9hDP>R!k;kRWMJ$;N zr5B-qn3jbBVk1OP%J!RN9Qx<^MMPA`V(F{jVbMQ5UPQzkdemi#AeC!(mp}FFu%GVt z%v45Lf1j-^0{`aQ6)VD1y9iYBI$EYqD@;l?=IY{NZxiFbK?qen|MX(G5q=iilO{qnNOASj2 z$LeS-GHB=Vi=M)#{|rBgg-pId?W3{DpiRJcevO-c7&eXv-fp$WB&%2g!Z%d4#hz*1 zJ{@&(hFwNVwd{P#UKsS(Q}ld|3+esF5@*?B?8{&HxMZJFGsvQ&LN zeo|V9g#~+{nQEUyITA*mjQm$hZ!Le1ls#dpW zY@Y9}zvPC~%O!X0< zbbpsW?aI0a-{Ul?;^`K`17wnK{xTsfF6Mb3I7Z^1k^FzusccHv+0yfkhtqq$-w9_S zmRuvh3gi)fO@S{1?f?x7f)PUjN-5}JW&=`yC0x8p34Wji&r^b9j&B(fE5goHIyg7r z0n;)abR>@yDW!2TEJ8&*$K<9&VMFND*sw8-QytBSu1q2^G6P8Kvuj$VSlkWER40V! zIwXQlt?;-mbyr0f%#oKW7YCgi1yDV&ot;FtAxC7ov{KBh5_q*M44-u2kFK_u3gL07 zfA}_7rThPZPBI_V`Qr+zZkBWR`SecUrX$o1KW(@ zld7)Z!Ietct?QUr;I1d|*)(MA7B8P}Ix-@jvh!T()LA)6tl zpM2J#Jc@+u5G(D2b)wDPUFH#RAQ~@XfYCCBV?c-k3nf%g#Wot3=Ugc}y6r|Cd(E}5 zei?!alPmL)vw^9ByXL`7%cF-{SevzgyYSu5%~UIWWLx{Rna+<6YXY8~)2|p{uD{2; zemk|KJy4j62L-Mvg*(8@%l9cY&JSmg#@Q=Xx1(+yfi0@D2yVqcI>$6@VV67T`9=w_ zLkMc>-P&rO2ycj8LgXt@X@76;#m|e5IExGVTAdXyiw>Fb{0UC(9qh>$ZTIAseWFwL z*_TSS+u9GY-S&vzq6>_Jl^U<8+5Gekv-QpP>kkNj^_ga!2S+XZlPFS*gtX-NCCr&K zXU?2?1F@g_${k|PwEwk8U^?U*7AvyOI_s=6_kBD&qey+8dic1{%@O%L2Xl&3oZ=Mc znjexE=bUriY>Y^mFlGKdm1YuY9EP_>ntR%V_Uo^kif$1O9i-W^D033MWe6^YVHk#C z7z^(IScjaH&l}0Kd2)zEr0u2cY+gjMZgcE;Rk3W!TMUU-oJeq#rp-D=Q}j1&hJP4a zpO1B7Gxq-H1@}Ul=OofzKY0x3pr4!oOnv{y)|i^VoW#`p?5n@w`q&0pAIL} z9{l@{hODmX*V*6L#OpJ0`@j+2;yYr0<2%IXx?+Ex|8rmE)jfFS_lM;zK>1!4u%zR3 zKULgBr4Pa2c!Dt1!Jvc+s@O&YEp*Vs03)QBU|JOvBs2Yj{iWw?Xjm*_hZjK3B7;U8 zR!o!Rao*143ng1Am_8|DUq4K?X*YFSqJ3c*>3oXZpotAq$p#n~$W3QyQ}34s>;(QD zXyB7qj_d-D-kd1Ht%D_bacnRWq?)L7x$a$(J-@S8FUKqs*|_AaNenDOD>Ce%lDb@M zA$v8G={o$2;nPo6C%`rsToDSa|0xZlt)#o9+W;c5@+?theE4=ITAVO zHOv)xu-;$J{3O?Eb^b>gLVU_cDVyZLDyt~v$@`ZqPFm)t>?L{oVozR@Hziinte+RH z%etI;t=4HzJF?M^jT?-l-`Z$bRvCxe{>6gh*^m3w{8Vu5->=C`C-dTJa-Lqa?c%&x zEz3XrT)y$yf8z1I??2xB-LI{OefMN5yjCpu!_TGV{qH_8J@C8v!`NRY!STPg^#4ox z*OA`)?|y4q5C6ZU{sD%8ttUF8myEREZ~uEkdH7(j%JD)L7WR?3|8L$_@f$o@oNR~F ze;g-^p~ZVdJ@gJyk2eud-ZsD%-Wb@z)xdUgKI(`ktDz6JKk(Ig%|5Si^1lD|E)8G$ zz>bK^k9_hAi!X>D<-72i#^P)I%Kv;m^tt2iochp{W8t|V5<)rl29RNgB5`aQ>PyaK5JAm8{*m??c6bJws)M?WG&sAo? zPl!{52<2x4K5i+uF}<%p!kIm$uQ@mHV}d?Fm@AtxFBN-eHcDq4=$#C+C+R~gfgu)s zhqX*N7-I@Iqh7`@3TmXsNta=%sDbU)r`UpHPxNv1w}LcwM<`^3mPEuADhO;!si}_j zy2e?*#W%G=Lp@hBsQ=HNsV-_@a0;k2y3yi8vA}-3E12*QM}Dlt+7y+~c2}jOn1zjL zK+_8J=|Z~~FxFB$TNtkuBsMX=l#Xndp*ZW|w?T>hPjp{*Z5IM=p)E)Rk9dU=EuSF75|PY)HurN|2egn3d2e4jmjKX}AI z>gpNdJ3~4|0rD`|P=@fvDvnYu^M07DWtcIm%S6kUt0DuvOZ828 zXKpxP$;|e^jDq9)uRBa6%qPmNkE)N8Up@+9@>-{uTk(2V&1f^0$*KCnf~_Ttq4%*Dfc~7wN{lUuM%m&<#*LAUF|z8W z2=ZR=QAx`Z(Fwd;J3w}8wxFgpHkFRhxNpnA77>0Ehr#Owt5&bxo&pHT&IQa3EwwSn zr{XcHg494w!IrkPm91=JD|?G?orJFp3-A+pue`g66zvc1Sg+hRg>hzDMe@qeiTM77 zGz9Sj)J}i>*8Z?QY5jd2fCpKS13)skQo*gH6@bqfH0gS{ABJQo0+}R@&iQ1$OW2Jd zv#`O@Z~-#^zSNbRedVCz3Y3kA{+suW{En>2mVq4285F53c0NNNpp52ry!EWI-cM^+ zJ-NTediUzOMp08mJN9im*unG``=FXmrYEeaX`4?a*Hhv_{X+C|#Qfky_3G!vpG!cl z4X-Eg++$uRA2_Q21o2Y#GjDk5_kBC^+N*&H3oLSh++SQcEa!9tApUYMnrWP(c=nsu z16oLN%_x>>+vcil%8yrHj^*upQRKGb6xU-IcbrA@sm0D7>(k?B&Zl`b@0n1J=lMLI zS9Z1KWTM51rg(TX9aTroL3K1fauZyCoBsNEy}aJ=q`58>Y+v!%TdzpQk398Y`v^Ht zV;FiV(n)xe1=yAVMit|RKY&_mSj${sw;{t}LO#Vyw8ILd9YF}}9|H52EI$jq@rQZ3 z?VbEDENCxgG=1iO63nC@5Xr4619Cr*KeS9)Yd0EUHqgk%Fg9gvNPbU5SOV5ejI{ty zXs?2FyfHIScSJbvapOSW;M9ghd&Q+ymh%Q17JB8t^}$Vj7;o8A4gFmo{Ty zJF755LB_LXk6stwzsAw{arDb;R;k>9AQpAqlrfu^$g{y&zCXX_Tt{jGXT3z0W9bk* zDQ%_gA)wu}_L{2aiA#TQda#yzWLk&2&yL~Bm3qoT=WD9*`s=Hns<0hu;dt_Vg_gdw zk8u6G*A6Lyiw6^GqP3 z2-&>>vwxLrp4L-@E}uEeiBpT#V0$Koi6Y`2!0&t%eY%EP^A9z!l;z4VYx5C3ktlJI26jXl?E=of^2tfw$@gukRK3w0M6bc0#;*@%=>OXvg<2d7pl}~1KVNn(gik|)O=MtAKd>0UVpJ7fKetA>f5DoB z-vuqg3HBwgF*MD%{opoYF^=ue;Edm-Mf4 zLcJAHu%pK~H595zI0v$TAd1rY;l+tWQ9|hEFo95+k63a{AiQZ5nP&$ZjT#-AwC7Bf zA+tq5aA}e$6o>cD#^TKK%V~mcvCx12-e67K_&s;t>eRUEbQMCr>vw*5|2CVq`ZN|I zUB*I_O;qlz@KmQDAf*=$8V?hW%GS_uD~0-`w`O= zY^S<%KR50zR(RLEGNVwa-n*e%N$w_RO{O$G0W5x|vPvYv%bo&lUWMnM;T!n5hv@Qo zx%;3!igoADU>Qza4)@{kIA{Ag#{?$6ld^ho-)msbZzUt#&+I4Puius@KmQ)`e(2u%?@z%*M+)LC!l_d5;=@oWn@N+pOCf|AX`g)yF#@O( zjLFTe(TLNiYb>2J7*8sruIs6B7px!q=1F`Gz+*hs;KWci8w>m;jKF!ML*hHlt38I# z1~B93%@KQ~&jtC>fU^hHG&ujN8TBIPWzc^gqMsT>R1^Q&-4#smLO?akNh8%fr{n4V zl)>MDouxKkZp>0?78#0DbU=#=j4t&(QADxG`1en2xXYY|7g+DMZ8bnE9e^m!0;9qU z=G(*>Pa?jx4rDQOiwir;pX(8eP{6Z!?`JE)qO3x2*k-$Af5R`H4TcJ9VChV)6+?6u z+;{D;kn5L2fq#r;U$wc)X|AH5KNgzEzxIt`JqA*j58c107}3rnPWRKN*B6yTJ&^k( zuFf{c16%Ev!__KIr`A@ZPA;56t30qmbG?@s2%()K1!^hd+ z8=Vt@h$3YpF7@spRy$v`kR?O=uk#~5%|`U_OqZ-}t^mj*EYMo=G!}t9HvJ%NvDgOC z-{9ekhV$Tk4_@YV-g&xAoX=Vy`Gq5}oA;!6fXC)cmSfkNBbJCCph5yVq@N@UkK~MT=f2Z??)G_nB zL+i>{pWvjuZ1`HQsPea=-J2Y@-#y)5klhwgJMli#2x5tVm6H?^^j+YY2VU)!CeWE& z5zodP*DBB}_q=3JdBn=?|DBT2)-s5|O5|*q)KMUch6rlsj43;SZ@5S+rHRka2DyM; z;2w?Kw*Xc^slU%`4=Xn%hx$w_K{*L9qzWXXnTHgXiARo}H zs8Ip%b2$7g7cGVzK?KO5N_?o~@QV6-3!rrIrrVf0_lL;dn&{0A{wgz7O#^fA82wAO zoOBZg>lx#V9$p=J=kimkJ## zeplS^7<|tjtA1BKtJvpuW4H?H%(+Oj)C5TH;4#7`QWHT1rP-5>NfR>!0ro}pE;@=a zhtrfA!GDn$-6~)efG6`+n!<$H?4-245+EZ0Lx+H}2C88kZJ;q&%=(tkc8f(+tzLKB zqZY}-I1gjop6Qu}m_k$^%8Zgjlu^usJ+Ave6{rB%`~aZ-8$RM6BU*EpKj?rInRivD z?QNv4(i$^C1|Nx9IT8&qRExeIDAWaGYkWA%rwx@Sphl5zAtxIL)GbXTZw1FdzVBt- zXodywT+M*5Q=nWLRAGG_xoFk>bYzM)SZ2iityS^gjInQ1--yrY3rFA^;ByE5%-=>d zcDu1_*jK=1G|r>9@&W8Mz`altG_HWr5aUq8nkf zg5fZuS+qB(uX{x4RmN19O|ZnM9Dqc?c{v&E#da*?8~C{EAPhekN>r$_O@r1)yff(7 z+n}A6mKOGr`hpVw7O5AFDiiTe>0WmP^#Kxlh45rw4eLFyIKG2#?0<63@#dIXd>qaI za?CIG+|+FKgYn>BbmttyKbY*aytu+j0P!`j&z%PR0XF48rdap-%2{m@h%)wt_&Bgf zP2HOEl~i<4*0lWvem0ow3F3mBc!T<>;9iN?q+n+6fV;Q&d)l|bgHf~ghyC`4gN@KI zvt1s(vQ|AMBY2G2DoCu2)ShUb$(NXZk`P%nHvdu3PoD}-ip#=3NLoS?jI}Uf3x2BU z({|1%iF?+L-*1^BHgehabpmQCu};3b4!8|>;odg$3>NnKETwrNqYqX-BTyPJZ_s)C>SSLGS3#WYDu_Eqjy7F)k1(vIUz#D6Y zdKOmf@x`)`8fnv7!^!)E{&P|--nS-P^A#+ZqrGFhy&soA5~@v;GO37D%jwOB`KBwC zwM|!+qdjgkXLv#N65C!D0*4DprRpj8w`|SIK$4a;%f`U;9{BB+vNou32Hy4qk`N(| z{B&~J8<=`HbTgyyx_byN83ra4qpk8W2IffsMPYabK$2@oWMv}I{X_7{(XAxLn8=Uu zdA?6m#;1OC8|Z*;iS&#<7^fYu-3!U; zU9jEg}l>p=4T#kF?gY%AX4wvMtg3+;;3 zM|B(Pd6Ckpbg))CQM{Ds%P+vtF-Rg8h>k=kEGh-00)>ztMM7mH4F+%{G=pGb$WdL0 zG43k+%^Tu*$g}9|NGyjGns{ZW2RgAr4ekU-CZwd8t4Tn^8bt|Q#WRwAYsKz?&!WBn ze;a*Oc7sokELf`WNcT9l4~EK}YJps@pW9N{$8Rjz+VS3%-Hiaz(>IeMv=nG z2&N)$CFA9ZI%O+osa5jM?w)B@!j4Q8G4PR)J{tI6eh}bz2e#nODhS5&BwVtmKDG6xX763cm!*MZ6rYjs*{4Q19db$Jh5cV znd++mzjAGLe-kG<%`6GM0)wlnq&w6_O<1u>uqlYIC z>HAlWMtVu4^T&YmjMG6er3RXG3tIAnu@fIg=ew`I_X~N7+;pc9QHBSTrnqwQO24XK ze*XG%>D>Q&75bT%;3?T>UX4+*!bWUE2#+?44YOmMCLsBR+6fPpr`pH}+P}yahI@f_ z${jzK{eG>OWnrgAVN)22Z2UpSf)h zV@WeXTrvYS8yd~3Y#IJ2ts=B^9}~64drxg0+j%)V73Ni5v%v$HMM1U&EdiSmMzlvg z0cKmhd{lR+;%tswUu4(h{?u_t%qf4mlv)~Tz2TI0o8&+`LJVF^faTiej8Z*P;B1=U zQNlKMv!BDb?lee#bJNdu^4=wFdTDDGFwuvas@V?ev4yOfd}M4zf%TX<0aWtw?kb6Z zy`-oL2=9p=TJc(zI>{`vX>oj-s99%SSIpT9cMWl-q{5TaQSxq0dg?FipMlV$L7gUTy7Wg5 z-IPb+(1qC68nh$@f+n=sbaV=UkhN&7Q?T`lTz2KAO_1u~Wb>3UD1x77?M&O~l8kL- zx5{+W!n)J>n|v4ZLhQ%AtI1?Cw*Xu}Gxu~2AiXYSHJpyK+4{vnOC*1Z7+wlG+AFuD_9P1dY z5zdY5c(~q$y~}WA#gm@QGheYTG~8~lj~XAd#uahZ@OQ&24`sJ>4R$%~S%yn1JI?FL zjY(l&XfaSNJIz_;!>Fagnruc^Nv2Lm))qYE&2A!X-IH!pA!ts#4eNP5 zuJX;6`u2SWXmVZIFZ|!)3jwx{-M* z=i2e4kZs>W%1ay~9pdP-cYfs$du5%5gD|Ynypu9@7_Y;`aMAG2>4y))ALp+QR%!Vh zmbC8Bi&HzL_%TEHLbd9o7IjWy`B0l=vvr1U?AQbUw&D-?;{>Bw09ob~IbZMSnsYc~G@;|R z_S?G^cl{ULlc`9Q`W>>YCfnBdRW5mYgN*b7q4@kGlLO~t!*15j6jhp5ttprYn+do9 z1Do%e(vzZC;y`!$VF)h=?vXhF_%V|7;8?c(7Ku-3LQT?>)XI-yl9cQMebSv1`*Zqd zPa!ZGYzw+s8ndxB(kk2NqOAe^L~UrM?!a&G5g}kITxp%5SasX-yZzu)5dqzdBz)He5ec=3fe7nNf?)HBE?)!})L1 zY|2y@0_hT#MMX1mtX!Mwwq9ypKFzFpNRN2bA1R51OlmiWvNM+D)=p?+>WD#LnGv3K z)!CG20r;^KHhBzix6kQu8@b1HG>;|ym@M!SLiIVF_uiO%_VX&Qu&T3z3wxu zM7xDZ6u^-7Q7XR_n$vO2kvF2xf6=UVGEFwZn4ArjbhFTT!AfK#pr=&A1Wh zk=-nZ1=c}U!~c%T!&a z>{-vj6hFu^CHOlSRf}|!8kQ9(TxPsnaFuPBDFuSgXA4K`0=4Tf(in?bi>=tl){LqG z=bM>iA`NfqjIzFdD>}=5UuxD0tKJvJ+apvGTigjxg$`c{$u_mD`q^)_Pv2g(y>`^o z#uOXW#qN`_v-W0x|0>`8s&h>_nZw=wTw$I%^luU3r4&%wVHLG5iiwC<{w4>UVnEG^ zPJE)oYGIXa+JI^av(MEM@4flX5 zT&6oXlKf_(B0FV2yIQVOVCrA%T!bS#dKG_NJtGE4djBzzkN=WVksMX^?ywqrxd-iy$YxAe7Ru`gQZ6bx*RWTD`}m zl8@^YrE&szM~RGKN62vheps2kg10>5*~2?aY{{rc9t?%z&}_;<9%gmFcaG!e7cR^= z-JQ$B`JqfE0Pb!Z>Px&d+=yISLZv)}16WE|n-H5jk%5T%Su{S7F3hX8FRE0F6F>*U zf0#053)xAY_C48I0Ls@!YFH4w-oZ?xoOBtaf#-Nh>islZ=B8;7TgT>3W(%xywe8|; z%+VXU33yJYIch~fb|mVIoNaGeF%SsMOGz4A1Gwd@Y&kHxxd3#&53leB?mF%BVw+qt z+Escd?6aq11enDq0YvX?rTF!>H#tgOxX#<0V`8z+2#Aqp!0p=^;1uVXw9GeFx%kSp zj)DD=Z}S75VizxQ2oOHl+R5lMNyCNW5OWe6$@W`g^wWhf_@?0^m$2yv7bbmX>sUuv zH!SK(T8-kSy&h;}Gh5lto`nng|F;CSLjTSv4YJ}YtXkgUwOm4K2wB)e9E~x6iYOFt z*C&4wL*>^ZgnYMa>blybK$GH@4j5Ei{;gM5ZSE5D06yl^W3)~9u*c$ePrBhpzWI=t zkKw2MjH3-c=oN8TVm!#h{D^1mN_JZdXmLnZ-7&#*6kf_HhfaabeS#QQKAn;)X9S6a zrC^z5mRWv4Dq4W_zv%~xzi;+~{=-l4VmB6xodzl|Te-!$O3dZ#}tdWRp- z=ZB?ElQ!Kwe?2NK7}36fp|wa--j=7W`QZYL(wfg9tZ!`RG47~xGIFS)ffhRGZOm90 zuJh(5)Vf4f0eEVNw`Y zjH}@sVD?!IA~7*Bw1g{yFzaD&iq!0^fljMRNnwd{$jS7LNmwCe znguLL-)CO-WP?_Sl#GlFds~ZavxA(@>S^X*xoo=5*B1(h4&STUWb4VgC8RYi^)egj zhKJjx8Jkwv&K|nxZ}5fV024HPQA`=t)YD8mJq(T*vF-pND3k)k?(s%Wj3&}R3mx=s zK?S89$m~*Xs(ut*$I#*<5fhNhvdXG0>b;raXNEyoQm1{A7~Rf_qU=@|Hoj@t>MiIl ze)Kcg+HECLj7|LfQKh$IPi@krrKRmV6|!Kk2! zGuF42s4<-8e?;*W>WG1Xfj)is4HS5cmsj)+dP#pLLbNCe;C6E9^4;+w@{3M zN;8L40r)g3rwCgb2wfS_RnbkPLmP7{Eam}{ph7@zVf>#VdWVGH`VNP*MToMDuwVyg zgxVOSC+wV0d1k{f6fMFwNqVAgl^>Amwt5|c=+2-B1akqSLSR)9PC*Upqtu#37*2DM zOLL&z8f@BxbQMoPZk*adGx%7#zpfg=dzzvhuwE9I?EnLPM$~Wb@?XGjBj%}RmX9l* z*=uxa#3T44|7VWQTIr`Zm_Z-A=wXl%#+l;AE^Ls#vi=XQ%8C|Ll@MC3Vj8syhArU( zJ_%r_r3G&)K~oQ#sALW*Jt7T}o?iV@gTtPzD`0%~x}78Ei_zG$+t?FwOpqE~9I zy`!m5N|$f9B^J#KKw~}a5u`pn3n2suIZGJ z_A+1aQK_W94aTAz9LTe-ylz7ulE>2u7A!Zp+f5t$c;SudELkWPL`XT{Mr9Tt9Xk0& zMF?>eLZ=5qPC-GjCm<3~6=@7flwquN@O#k@iFXnwKf3Zn*~z@HW|xgKDQuE*Ai91j z$^j;i(PZx>jh~B%*WNFUdBIccdOFwk)4v&Z)BGeWg;SqBqfbY`O}H%N!LTW2!EYeK zX0Jr-4g46$Tnl87$;jSE_>0+!>D^k>QY8!BHKWOm=`TBX@>^mtm!=neAMA5~*VVNV zEQ_b7;jg>1U}N7>>brs3o!|q3OihY~57mX7ZWSk8Wf2i)~{;as#qJl-6XoK|FRDrFk7P z-P_Mou@yQeAWz@0$wcv|5Gd0w_dtHw9+}OI6yzu7W%jAGC!xevchk2TYgxuNLmSl) zI-_b-=483r{yu783EVpUl4!(zSi{l(jl%stHjW=cx+4)6}0lb3Q z1z%tt-{Si``5g!+BFerMy!v0Xo9<24V9Ux((B7BdqgjPpp``KnENWEPJpAEb?DMyE zEn4z(TEB&Bv~$;uRQFKX5nIMO4HgBzs!y09$3j}d5XyYjK%JWwQwysWm{rCp`HQht zFNx4L4>VaQ2GqS4rIW}NNZ;8Uv(UDF8&!48)Ws5Z8SJnSukSV3r#SVA1MD3nYe!w- z>I*o(VVT?Cl}9D`!{L&JP_M z7_l&_bYqO4${lSRsbG|?>=A)yug=PW@J?!*t5OUZ-2xK^h?N156QEkiEsTN)3Pk0a z1cvj&ELQV!T>5VY7=;^!2wuyW*YFHp^z~JEG*!+7pu6yt3w2l;3Be)uWRgU?6>fxslH;gi!NZ6@4I)3c8JAU4bz9LlUAXahO5jbLky9BduUW0sw2 z06`Az#HhBytbY$;fTn4}yt)@=TQL3kx^3Qobg}n-y8J9gF^8<^;Z5CD9W9xY815o! zDUb%RMv>0PHl*0=Cpv;<_DQ@WkX)9CA$Vx9$@B{iG-^!4$+}s#q>?2-P)kuGmkbS8 zsfJu`A)bgx63#lyS|YKv6#?3Td}7Eg2%p{1(Xrq$X2oLcPoI;nX>jZLG@|CXnoA8e3UV=vCMzcbKv;V=!>ja`BVcY+d{h znzG+^mJi6l9N;X@leJS&ggoC6r|;0*=OvJ}u`)25v0#XZYTBkLWYtu>X|LE}TVZvg zhsn2q7P)4yysR`tT7XyUy0*ZkN`b6OGmXQJ*{aR1wufAFjBM44aG`--sGoVWj_y34 z=_|cVwoPSI@`y@7OpT3ME8B{S4OIpCHxY@@FQLPfNEdPwPDbU~Jv~qQo$TD|^?Zm-L~0SD<6x;6|5CR*9Sp& zcd`v&ewZxJ@55|c)ELXY7thdqJs+bvB>#lRiRUx(;?)gw6+%%Ltc~kqpt+;~P(^`? zo5YY@S;*M(0jxSQH9qrE&63a+s1{Y5?3L#Ue?N9fKGfMR;7cxQ`Id@ov?sUpwNzt5 zV>X>=_C_+K9qa$5bg;3m~1TDk-dE)|5vo z0?zg3D3 zCQl|4x!I;PV^uZli>NBm0AEzbNO?`){L=eqFm^`Y@W}qA6F^SPxE(9F@O|F6pfIjf zR0;ODmI+z~`#{ihcR;dC%?`J|svxq?D}koljj3g{$!r;A)X{;%AA#*-j)fhi#;s