commit c24262f7656adf93aa5bd111cbd5c9c18db6114d Author: Philipp Kunz Date: Sat Apr 20 12:21:41 2024 +0200 fix(core): update diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c2658d7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +node_modules/ diff --git a/.gitea/workflows/docker_nottags.yaml b/.gitea/workflows/docker_nottags.yaml new file mode 100644 index 0000000..c8b6565 --- /dev/null +++ b/.gitea/workflows/docker_nottags.yaml @@ -0,0 +1,71 @@ +name: Docker (tags) + +on: + push: + tags-ignore: + - '**' + +env: + IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci + NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git + NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}} + NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}} + NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}} + NPMCI_LOGIN_DOCKER_GITEA: ${{ github.server_url }}|${{ gitea.repository_owner }}|${{ secrets.GITEA_TOKEN }} + NPMCI_LOGIN_DOCKER_DOCKERREGISTRY: ${{ secrets.NPMCI_LOGIN_DOCKER_DOCKERREGISTRY }} + +jobs: + security: + runs-on: ubuntu-latest + container: + image: ${{ env.IMAGE }} + continue-on-error: true + + steps: + - uses: actions/checkout@v3 + + - name: Install pnpm and npmci + run: | + pnpm install -g pnpm + pnpm install -g @shipzone/npmci + npmci npm prepare + + - name: Audit production dependencies + run: | + npmci command npm config set registry https://registry.npmjs.org + npmci command pnpm audit --audit-level=high --prod + continue-on-error: true + + - name: Audit development dependencies + run: | + npmci command npm config set registry https://registry.npmjs.org + npmci command pnpm audit --audit-level=high --dev + continue-on-error: true + + test: + needs: security + runs-on: ubuntu-latest + container: + image: ${{ env.IMAGE }} + + steps: + - uses: actions/checkout@v3 + + - name: Prepare + run: | + pnpm install -g pnpm + pnpm install -g @shipzone/npmci + npmci npm prepare + + - name: Test stable + run: | + npmci node install stable + npmci npm install + npmci npm test + + - name: Test build + run: | + npmci npm prepare + npmci node install stable + npmci npm install + npmci command npm run build diff --git a/.gitea/workflows/docker_tags.yaml b/.gitea/workflows/docker_tags.yaml new file mode 100644 index 0000000..5af83c9 --- /dev/null +++ b/.gitea/workflows/docker_tags.yaml @@ -0,0 +1,106 @@ +name: Docker (tags) + +on: + push: + tags: + - '*' + +env: + IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci + NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git + NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}} + NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}} + NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}} + NPMCI_LOGIN_DOCKER_GITEA: ${{ github.server_url }}|${{ gitea.repository_owner }}|${{ secrets.GITEA_TOKEN }} + NPMCI_LOGIN_DOCKER_DOCKERREGISTRY: ${{ secrets.NPMCI_LOGIN_DOCKER_DOCKERREGISTRY }} + +jobs: + security: + runs-on: ubuntu-latest + container: + image: ${{ env.IMAGE }} + continue-on-error: true + + steps: + - uses: actions/checkout@v3 + + - name: Prepare + run: | + pnpm install -g pnpm + pnpm install -g @shipzone/npmci + npmci npm prepare + + - name: Audit production dependencies + run: | + npmci command npm config set registry https://registry.npmjs.org + npmci command pnpm audit --audit-level=high --prod + continue-on-error: true + + - name: Audit development dependencies + run: | + npmci command npm config set registry https://registry.npmjs.org + npmci command pnpm audit --audit-level=high --dev + continue-on-error: true + + test: + needs: security + runs-on: ubuntu-latest + container: + image: ${{ env.IMAGE }} + + steps: + - uses: actions/checkout@v3 + + - name: Prepare + run: | + pnpm install -g pnpm + pnpm install -g @shipzone/npmci + npmci npm prepare + + - name: Test stable + run: | + npmci node install stable + npmci npm install + npmci npm test + + - name: Test build + run: | + npmci node install stable + npmci npm install + npmci command npm run build + + release: + needs: test + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + container: + image: registry.gitlab.com/hosttoday/ht-docker-dbase:npmci + + steps: + - uses: actions/checkout@v3 + + - name: Prepare + run: | + pnpm install -g pnpm + pnpm install -g @shipzone/npmci + + - name: Release + run: | + npmci docker login + npmci docker build + npmci docker test + # npmci docker push gitea.lossless.digital + npmci docker push dockerregistry.lossless.digital + + metadata: + needs: test + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + container: + image: ${{ env.IMAGE }} + + steps: + - uses: actions/checkout@v3 + + - name: Trigger + run: npmci trigger diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef13c79 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +.nogit/ + +# artifacts +coverage/ +public/ +pages/ + +# installs +node_modules/ + +# caches +.yarn/ +.cache/ +.rpt2_cache + +# builds +dist/ +dist_*/ + +# custom \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..26e9f92 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "npm test", + "name": "Run npm test", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3648eaa --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,26 @@ +{ + "json.schemas": [ + { + "fileMatch": ["/npmextra.json"], + "schema": { + "type": "object", + "properties": { + "npmci": { + "type": "object", + "description": "settings for npmci" + }, + "gitzone": { + "type": "object", + "description": "settings for gitzone", + "properties": { + "projectType": { + "type": "string", + "enum": ["website", "element", "service", "npm", "wcc"] + } + } + } + } + } + } + ] +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e85966b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,46 @@ +# gitzone dockerfile_service +## STAGE 1 // BUILD +FROM registry.gitlab.com/hosttoday/ht-docker-node:npmci as node1 +COPY ./ /app +WORKDIR /app +ARG NPMCI_TOKEN_NPM2 +ENV NPMCI_TOKEN_NPM2 $NPMCI_TOKEN_NPM2 +RUN npmci npm prepare +RUN pnpm config set store-dir .pnpm-store +RUN rm -rf node_modules && pnpm install +RUN pnpm run build + +# gitzone dockerfile_service +## STAGE 2 // install production +FROM registry.gitlab.com/hosttoday/ht-docker-node:npmci as node2 +WORKDIR /app +COPY --from=node1 /app /app +RUN rm -rf .pnpm-store +ARG NPMCI_TOKEN_NPM2 +ENV NPMCI_TOKEN_NPM2 $NPMCI_TOKEN_NPM2 +RUN npmci npm prepare +RUN pnpm config set store-dir .pnpm-store +RUN rm -rf node_modules/ && pnpm install --prod + + +## STAGE 3 // rebuild dependencies for alpine +FROM registry.gitlab.com/hosttoday/ht-docker-node:alpinenpmci as node3 +WORKDIR /app +COPY --from=node2 /app /app +ARG NPMCI_TOKEN_NPM2 +ENV NPMCI_TOKEN_NPM2 $NPMCI_TOKEN_NPM2 +RUN npmci npm prepare +RUN pnpm config set store-dir .pnpm-store +RUN pnpm rebuild -r + +## STAGE 4 // the final production image with all dependencies in place +FROM registry.gitlab.com/hosttoday/ht-docker-node:alpine as node4 +WORKDIR /app +COPY --from=node3 /app /app + +### Healthchecks +RUN pnpm install -g @servezone/healthy +HEALTHCHECK --interval=30s --timeout=30s --start-period=30s --retries=3 CMD [ "healthy" ] + +EXPOSE 80 +CMD ["npm", "start"] diff --git a/Dockerfile_cloudron_##version## b/Dockerfile_cloudron_##version## new file mode 100644 index 0000000..e69de29 diff --git a/cli.child.ts b/cli.child.ts new file mode 100644 index 0000000..20d8b5f --- /dev/null +++ b/cli.child.ts @@ -0,0 +1,4 @@ +#!/usr/bin/env node +process.env.CLI_CALL = 'true'; +import * as cliTool from './ts/index.js'; +cliTool.runCli(); diff --git a/cli.js b/cli.js new file mode 100644 index 0000000..b854fb3 --- /dev/null +++ b/cli.js @@ -0,0 +1,4 @@ +#!/usr/bin/env node +process.env.CLI_CALL = 'true'; +const cliTool = await import('./dist_ts/index.js'); +cliTool.runCli(); diff --git a/cli.ts.js b/cli.ts.js new file mode 100644 index 0000000..505c88d --- /dev/null +++ b/cli.ts.js @@ -0,0 +1,5 @@ +#!/usr/bin/env node +process.env.CLI_CALL = 'true'; + +import * as tsrun from '@git.zone/tsrun'; +tsrun.runPath('./cli.child.js', import.meta.url); diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..0649f86 --- /dev/null +++ b/html/index.html @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/npmextra.json b/npmextra.json new file mode 100644 index 0000000..bb28789 --- /dev/null +++ b/npmextra.json @@ -0,0 +1,40 @@ +{ + "npmci": { + "npmGlobalTools": [], + "npmAccessLevel": "public", + "npmRegistryUrl": "verdaccio.lossless.one", + "dockerRegistryRepoMap": { + "registry.gitlab.com": "losslessone/services/servezone/cloudly" + }, + "dockerBuildargEnvMap": { + "NPMCI_TOKEN_NPM2": "NPMCI_TOKEN_NPM2" + } + }, + "gitzone": { + "projectType": "service", + "module": { + "githost": "gitlab.com", + "gitscope": "servezone/private", + "gitrepo": "cloudly", + "description": "A cloud manager utilizing Docker Swarmkit, designed for operations on Cloudron, and supports various cloud platforms like DigitalOcean, Hetzner Cloud, and Cloudflare.", + "npmPackagename": "@serve.zone/cloudly", + "license": "UNLICENSED", + "keywords": [ + "cloud", + "Docker Swarmkit", + "DigitalOcean", + "Hetzner Cloud", + "Cloudflare", + "container management", + "configuration management", + "LetsEncrypt SSL", + "cloud infrastructure automation", + "node.js", + "TypeScript" + ] + } + }, + "tsdoc": { + "legal": "\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. \n\n**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n" + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..59878fb --- /dev/null +++ b/package.json @@ -0,0 +1,102 @@ +{ + "name": "@serve.zone/cloudly", + "version": "1.0.213", + "private": false, + "description": "A cloud manager utilizing Docker Swarmkit, designed for operations on Cloudron, and supports various cloud platforms like DigitalOcean, Hetzner Cloud, and Cloudflare.", + "main": "dist_ts/index.js", + "typings": "dist_ts/index.d.ts", + "type": "module", + "author": "Task Venture Capital GmbH", + "license": "UNLICENSED", + "scripts": { + "test": "(tstest test/)", + "build": "tsbuild --web --allowimplicitany && tsbundle website --production", + "start": "node cli.js", + "startTs": "node cli.ts.js", + "watch": "tswatch website", + "localPublish": "gitzone commit" + }, + "devDependencies": { + "@git.zone/tsbuild": "^2.1.65", + "@git.zone/tsbundle": "^2.0.15", + "@git.zone/tstest": "^1.0.73", + "@git.zone/tswatch": "^2.0.23", + "@push.rocks/tapbundle": "^5.0.4", + "@types/node": "^20.11.25" + }, + "dependencies": { + "@api.global/typedrequest": "3.0.19", + "@api.global/typedserver": "^3.0.27", + "@api.global/typedsocket": "^3.0.0", + "@apiclient.xyz/cloudflare": "^6.0.1", + "@apiclient.xyz/digitalocean": "^1.0.5", + "@apiclient.xyz/hetznercloud": "^1.0.18", + "@apiclient.xyz/slack": "^3.0.9", + "@design.estate/dees-catalog": "^1.0.289", + "@design.estate/dees-domtools": "^2.0.57", + "@design.estate/dees-element": "^2.0.34", + "@git.zone/tsrun": "^1.2.37", + "@push.rocks/early": "^4.0.3", + "@push.rocks/npmextra": "^5.0.10", + "@push.rocks/projectinfo": "^5.0.1", + "@push.rocks/qenv": "^6.0.5", + "@push.rocks/smartacme": "^4.0.8", + "@push.rocks/smartbucket": "^2.0.4", + "@push.rocks/smartcli": "^4.0.6", + "@push.rocks/smartdata": "^5.0.8", + "@push.rocks/smartdelay": "^3.0.5", + "@push.rocks/smartexit": "^1.0.20", + "@push.rocks/smartfile": "^11.0.4", + "@push.rocks/smartguard": "^2.0.1", + "@push.rocks/smartjson": "^5.0.14", + "@push.rocks/smartjwt": "^2.0.4", + "@push.rocks/smartlog": "^3.0.1", + "@push.rocks/smartlog-destination-clickhouse": "^1.0.11", + "@push.rocks/smartpath": "^5.0.5", + "@push.rocks/smartpromise": "^4.0.3", + "@push.rocks/smartrequest": "^2.0.11", + "@push.rocks/smartssh": "^2.0.1", + "@push.rocks/smartstring": "^4.0.15", + "@push.rocks/smartunique": "^3.0.8", + "@push.rocks/taskbuffer": "^3.0.2", + "@push.rocks/webjwt": "^1.0.9", + "@serve.zone/interfaces": "^1.0.47", + "@tsclass/tsclass": "^4.0.52" + }, + "files": [ + "ts/**/*", + "ts_web/**/*", + "dist/**/*", + "dist_*/**/*", + "dist_ts/**/*", + "dist_ts_web/**/*", + "assets/**/*", + "cli.js", + "npmextra.json", + "readme.md" + ], + "browserslist": [ + "last 1 chrome versions" + ], + "repository": { + "type": "git", + "url": "git+https://gitlab.com/servezone/private/cloudly.git" + }, + "bugs": { + "url": "https://gitlab.com/servezone/private/cloudly/issues" + }, + "homepage": "https://gitlab.com/servezone/private/cloudly#readme", + "keywords": [ + "cloud", + "Docker Swarmkit", + "DigitalOcean", + "Hetzner Cloud", + "Cloudflare", + "container management", + "configuration management", + "LetsEncrypt SSL", + "cloud infrastructure automation", + "node.js", + "TypeScript" + ] +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..7c25369 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,9227 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +dependencies: + '@api.global/typedrequest': + specifier: 3.0.19 + version: 3.0.19 + '@api.global/typedserver': + specifier: ^3.0.27 + version: 3.0.27 + '@api.global/typedsocket': + specifier: ^3.0.0 + version: 3.0.0 + '@apiclient.xyz/cloudflare': + specifier: ^6.0.1 + version: 6.0.3 + '@apiclient.xyz/digitalocean': + specifier: ^1.0.5 + version: 1.0.5(@types/node@20.11.25) + '@apiclient.xyz/hetznercloud': + specifier: ^1.0.18 + version: 1.0.18 + '@apiclient.xyz/slack': + specifier: ^3.0.9 + version: 3.0.9 + '@design.estate/dees-catalog': + specifier: ^1.0.289 + version: 1.0.289 + '@design.estate/dees-domtools': + specifier: ^2.0.57 + version: 2.0.57 + '@design.estate/dees-element': + specifier: ^2.0.34 + version: 2.0.34 + '@git.zone/tsrun': + specifier: ^1.2.37 + version: 1.2.46(@types/node@20.11.25) + '@push.rocks/early': + specifier: ^4.0.3 + version: 4.0.4 + '@push.rocks/npmextra': + specifier: ^5.0.10 + version: 5.0.10 + '@push.rocks/projectinfo': + specifier: ^5.0.1 + version: 5.0.2 + '@push.rocks/qenv': + specifier: ^6.0.5 + version: 6.0.5 + '@push.rocks/smartacme': + specifier: ^4.0.8 + version: 4.0.8 + '@push.rocks/smartbucket': + specifier: ^2.0.4 + version: 2.0.4 + '@push.rocks/smartcli': + specifier: ^4.0.6 + version: 4.0.8 + '@push.rocks/smartdata': + specifier: ^5.0.8 + version: 5.0.33 + '@push.rocks/smartdelay': + specifier: ^3.0.5 + version: 3.0.5 + '@push.rocks/smartexit': + specifier: ^1.0.20 + version: 1.0.21 + '@push.rocks/smartfile': + specifier: ^11.0.4 + version: 11.0.4 + '@push.rocks/smartguard': + specifier: ^2.0.1 + version: 2.0.1 + '@push.rocks/smartjson': + specifier: ^5.0.14 + version: 5.0.14 + '@push.rocks/smartjwt': + specifier: ^2.0.4 + version: 2.0.4 + '@push.rocks/smartlog': + specifier: ^3.0.1 + version: 3.0.3 + '@push.rocks/smartlog-destination-clickhouse': + specifier: ^1.0.11 + version: 1.0.11 + '@push.rocks/smartpath': + specifier: ^5.0.5 + version: 5.0.11 + '@push.rocks/smartpromise': + specifier: ^4.0.3 + version: 4.0.3 + '@push.rocks/smartrequest': + specifier: ^2.0.11 + version: 2.0.21 + '@push.rocks/smartssh': + specifier: ^2.0.1 + version: 2.0.1 + '@push.rocks/smartstring': + specifier: ^4.0.15 + version: 4.0.15 + '@push.rocks/smartunique': + specifier: ^3.0.8 + version: 3.0.8 + '@push.rocks/taskbuffer': + specifier: ^3.0.2 + version: 3.1.7 + '@push.rocks/webjwt': + specifier: ^1.0.9 + version: 1.0.9 + '@serve.zone/interfaces': + specifier: ^1.0.47 + version: 1.0.47 + '@tsclass/tsclass': + specifier: ^4.0.52 + version: 4.0.52 + +devDependencies: + '@git.zone/tsbuild': + specifier: ^2.1.65 + version: 2.1.72 + '@git.zone/tsbundle': + specifier: ^2.0.15 + version: 2.0.15 + '@git.zone/tstest': + specifier: ^1.0.73 + version: 1.0.86(@types/node@20.11.25)(sinon@17.0.1) + '@git.zone/tswatch': + specifier: ^2.0.23 + version: 2.0.23(@types/node@20.11.25) + '@push.rocks/tapbundle': + specifier: ^5.0.4 + version: 5.0.15(sinon@17.0.1) + '@types/node': + specifier: ^20.11.25 + version: 20.11.25 + +packages: + + /@adobe/fetch@4.1.1: + resolution: {integrity: sha512-EechqpvFBFs1Fq8/E3hNxxyv2HU9xDKFV5tyUTESNQwaMn9kKHidqu2pv0WAJuuBvxRVdVc3gRhUEePFLwXfmw==} + engines: {node: '>=14.16'} + dependencies: + debug: 4.3.4 + http-cache-semantics: 4.1.1 + lru-cache: 7.18.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@api.global/typedrequest-interfaces@3.0.18: + resolution: {integrity: sha512-O/AdHnk9NDcBfb/Qcpi3Bq/7I6uAJHXfIT5peeKODvLUYysmuxG/c3t9NWQvfSOXQUKnVKb0WrCGjraOL7Pyww==} + + /@api.global/typedrequest@3.0.19: + resolution: {integrity: sha512-td0+w5qn7eVtUdDkTBp+4z+fXiEb9mLu5CTq+y4BNQrZYlB/joJB0jhEOg25ttekiPsJ/+5LfM1+nfls3D6kkw==} + dependencies: + '@api.global/typedrequest-interfaces': 3.0.18 + '@push.rocks/isounique': 1.0.5 + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartbuffer': 1.0.7 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/webrequest': 3.0.35 + '@push.rocks/webstream': 1.0.8 + + /@api.global/typedserver@3.0.27: + resolution: {integrity: sha512-iDQcoVy3CL5NkJa6xHb+EXNxxGtOscl7U163ARHasMHcrab4Nx5Px576G1ZlG6faeRpA1UKlxaT/QepfomLIbw==} + dependencies: + '@api.global/typedrequest': 3.0.19 + '@api.global/typedrequest-interfaces': 3.0.18 + '@api.global/typedsocket': 3.0.0 + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartchok': 1.0.33 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartfeed': 1.0.11 + '@push.rocks/smartfile': 11.0.4 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartlog-destination-devtools': 1.0.10 + '@push.rocks/smartmanifest': 2.0.2 + '@push.rocks/smartmime': 1.0.6 + '@push.rocks/smartopen': 2.0.0 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrequest': 2.0.21 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartsitemap': 2.0.3 + '@push.rocks/smartstream': 3.0.33 + '@push.rocks/smarttime': 4.0.6 + '@push.rocks/webstore': 2.0.13 + '@tsclass/tsclass': 4.0.52 + '@types/express': 4.17.21 + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.18.3 + express-force-ssl: 0.3.2 + lit: 3.1.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /@api.global/typedsocket@3.0.0: + resolution: {integrity: sha512-ui+6MLd99iTN/lC+iC/FKPRjzVyiZ4PrmlU6ptbCtbBj3cSOXHx+RRGF54+be2xHodf4FOgwFv/GZdW8LtO3vg==} + dependencies: + '@api.global/typedrequest': 3.0.19 + '@api.global/typedrequest-interfaces': 3.0.18 + '@push.rocks/isohash': 2.0.1 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartsocket': 2.0.24 + '@push.rocks/smartstring': 4.0.15 + '@push.rocks/smarturl': 3.0.7 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /@apiclient.xyz/cloudflare@6.0.3: + resolution: {integrity: sha512-NOPHFrKVxfkrRn9lVBLCdo0Ibm08PuaJe3A1K6TmXWxgbeJSqGkgVMGRwLilnol/062v6/1w2ZFO6f3fAxk5Gw==} + dependencies: + '@pushrocks/smartdelay': 3.0.1 + '@pushrocks/smartlog': 3.0.2 + '@pushrocks/smartpromise': 4.0.2 + '@pushrocks/smartrequest': 2.0.15 + '@pushrocks/smartstring': 4.0.7 + '@tsclass/tsclass': 4.0.52 + dev: false + + /@apiclient.xyz/digitalocean@1.0.5(@types/node@20.11.25): + resolution: {integrity: sha512-zP9X8OnYL0zXlWwd1z9DQHat9xvVeFfxbMuO2yQu6GhZdkHZWQQYynUZDT5zkSCcuwPOe4cZF1Pvo7HP7fgj1Q==} + dependencies: + '@git.zone/tsrun': 1.2.46(@types/node@20.11.25) + '@push.rocks/smartrequest': 2.0.21 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + dev: false + + /@apiclient.xyz/hetznercloud@1.0.18: + resolution: {integrity: sha512-otKDqcidnBpSdu3WD/OnBKHLZWxRmauJr09neaFzexSgpUEfe0hlKH5ql9/ov3ZLrSd0QXEkO8raDMgPmKLdxQ==} + dependencies: + '@push.rocks/smartrequest': 2.0.21 + '@tempfix/hetzner-openapi': 1.0.4 + '@tsclass/tsclass': 4.0.52 + dev: false + + /@apiclient.xyz/slack@3.0.9: + resolution: {integrity: sha512-2rUbLNvXwQLxxA0tm26BFk1+jyrukZmw/Fbc3dbQ1lpsaVp+8XoASeEyqrkAWCLxrHJEsJsyMJogRZZzVHqdjw==} + dependencies: + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrequest': 2.0.21 + dev: false + + /@apiglobal/typedrequest-interfaces@1.0.20: + resolution: {integrity: sha512-ybsDtavYbzGJYSLodSbkxDvSLYtfMzBTuNZDJpiANt1rZA2MO/GCq8zk5MVLlrUUQIr/7oxPGWqxi1QDwR+RHQ==} + + /@apiglobal/typedrequest-interfaces@2.0.1: + resolution: {integrity: sha512-Oi7pNU4vKo5UvcCJmqkH43Us237Ws/Pp/WDYnwnonRnTmIMd+6QjNfN/gXcPnP6tbamk8r8Xzcz9mgnSDM2ysw==} + + /@apiglobal/typedrequest@2.0.12: + resolution: {integrity: sha512-oCxcdKEzihzPDf0jrqG4obFFSgDszvO5LO+0Fk/hH/0bZm0AQ1LssYVwaY8OHjT0ujmkTcC5JFCjaS7LgjKSgQ==} + dependencies: + '@apiglobal/typedrequest-interfaces': 1.0.20 + '@pushrocks/isounique': 1.0.5 + '@pushrocks/lik': 6.0.2 + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/webrequest': 3.0.28 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@apiglobal/typedserver@2.0.65: + resolution: {integrity: sha512-enI+UGgzyQRG43ZQBzRMcc9dSII7vOx+v/7+mkVqTqgCQtad9RimqMDBdhOrnIWPyzctY86CK1LfQmlpZJAFbA==} + dependencies: + '@apiglobal/typedrequest': 2.0.12 + '@apiglobal/typedrequest-interfaces': 2.0.1 + '@apiglobal/typedsocket': 2.0.24 + '@pushrocks/lik': 6.0.2 + '@pushrocks/smartchok': 1.0.23 + '@pushrocks/smartdelay': 3.0.1 + '@pushrocks/smartenv': 5.0.5 + '@pushrocks/smartfeed': 1.0.11 + '@pushrocks/smartfile': 10.0.26 + '@pushrocks/smartlog': 3.0.2 + '@pushrocks/smartlog-destination-devtools': 1.0.10 + '@pushrocks/smartmanifest': 2.0.2 + '@pushrocks/smartmime': 1.0.5 + '@pushrocks/smartopen': 2.0.0 + '@pushrocks/smartpath': 5.0.5 + '@pushrocks/smartpromise': 4.0.2 + '@pushrocks/smartrequest': 2.0.15 + '@pushrocks/smartrx': 3.0.2 + '@pushrocks/smartsitemap': 2.0.1 + '@pushrocks/smarttime': 4.0.1 + '@pushrocks/webstore': 2.0.8 + '@tsclass/tsclass': 4.0.52 + '@types/express': 4.17.21 + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.18.3 + express-force-ssl: 0.3.2 + lit: 2.8.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@apiglobal/typedsocket@2.0.24: + resolution: {integrity: sha512-8Ol5E3AvqdUTjEhiNkEKnbGpst9iXBtD5zDudeQDcajzjSdstUGe+GExQRc+D7hiOkktfuF8FArQ3HQ4RyZwow==} + dependencies: + '@apiglobal/typedrequest': 2.0.12 + '@apiglobal/typedrequest-interfaces': 2.0.1 + '@pushrocks/isohash': 2.0.1 + '@pushrocks/smartjson': 5.0.6 + '@pushrocks/smartsocket': 2.0.19 + '@pushrocks/smartstring': 4.0.7 + '@pushrocks/smarturl': 3.0.6 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@aws-crypto/crc32@3.0.0: + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + requiresBuild: true + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.523.0 + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/ie11-detection@3.0.0: + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + requiresBuild: true + dependencies: + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/sha256-browser@3.0.0: + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + requiresBuild: true + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.523.0 + '@aws-sdk/util-locate-window': 3.495.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/sha256-js@3.0.0: + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + requiresBuild: true + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.523.0 + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/supports-web-crypto@3.0.0: + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + requiresBuild: true + dependencies: + tslib: 1.14.1 + dev: false + optional: true + + /@aws-crypto/util@3.0.0: + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + dev: false + optional: true + + /@aws-sdk/client-cognito-identity@3.525.0: + resolution: {integrity: sha512-LxI9rfn6Vy/EX6I7as14PAKqAhUwVQviaMV/xCLQIubgdVj1xfexVURdiSk7GQshpcwtrs+GQWV21yP+3AX/7A==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/core': 3.525.0 + '@aws-sdk/credential-provider-node': 3.525.0 + '@aws-sdk/middleware-host-header': 3.523.0 + '@aws-sdk/middleware-logger': 3.523.0 + '@aws-sdk/middleware-recursion-detection': 3.523.0 + '@aws-sdk/middleware-user-agent': 3.525.0 + '@aws-sdk/region-config-resolver': 3.525.0 + '@aws-sdk/types': 3.523.0 + '@aws-sdk/util-endpoints': 3.525.0 + '@aws-sdk/util-user-agent-browser': 3.523.0 + '@aws-sdk/util-user-agent-node': 3.525.0 + '@smithy/config-resolver': 2.1.4 + '@smithy/core': 1.3.5 + '@smithy/fetch-http-handler': 2.4.3 + '@smithy/hash-node': 2.1.3 + '@smithy/invalid-dependency': 2.1.3 + '@smithy/middleware-content-length': 2.1.3 + '@smithy/middleware-endpoint': 2.4.4 + '@smithy/middleware-retry': 2.1.4 + '@smithy/middleware-serde': 2.1.3 + '@smithy/middleware-stack': 2.1.3 + '@smithy/node-config-provider': 2.2.4 + '@smithy/node-http-handler': 2.4.1 + '@smithy/protocol-http': 3.2.1 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + '@smithy/url-parser': 2.1.3 + '@smithy/util-base64': 2.1.1 + '@smithy/util-body-length-browser': 2.1.1 + '@smithy/util-body-length-node': 2.2.1 + '@smithy/util-defaults-mode-browser': 2.1.4 + '@smithy/util-defaults-mode-node': 2.2.3 + '@smithy/util-endpoints': 1.1.4 + '@smithy/util-middleware': 2.1.3 + '@smithy/util-retry': 2.1.3 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/client-sso-oidc@3.525.0(@aws-sdk/credential-provider-node@3.525.0): + resolution: {integrity: sha512-zz13k/6RkjPSLmReSeGxd8wzGiiZa4Odr2Tv3wTcxClM4wOjD+zOgGv4Fe32b9AMqaueiCdjbvdu7AKcYxFA4A==} + engines: {node: '>=14.0.0'} + requiresBuild: true + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.525.0 + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/core': 3.525.0 + '@aws-sdk/credential-provider-node': 3.525.0 + '@aws-sdk/middleware-host-header': 3.523.0 + '@aws-sdk/middleware-logger': 3.523.0 + '@aws-sdk/middleware-recursion-detection': 3.523.0 + '@aws-sdk/middleware-user-agent': 3.525.0 + '@aws-sdk/region-config-resolver': 3.525.0 + '@aws-sdk/types': 3.523.0 + '@aws-sdk/util-endpoints': 3.525.0 + '@aws-sdk/util-user-agent-browser': 3.523.0 + '@aws-sdk/util-user-agent-node': 3.525.0 + '@smithy/config-resolver': 2.1.4 + '@smithy/core': 1.3.5 + '@smithy/fetch-http-handler': 2.4.3 + '@smithy/hash-node': 2.1.3 + '@smithy/invalid-dependency': 2.1.3 + '@smithy/middleware-content-length': 2.1.3 + '@smithy/middleware-endpoint': 2.4.4 + '@smithy/middleware-retry': 2.1.4 + '@smithy/middleware-serde': 2.1.3 + '@smithy/middleware-stack': 2.1.3 + '@smithy/node-config-provider': 2.2.4 + '@smithy/node-http-handler': 2.4.1 + '@smithy/protocol-http': 3.2.1 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + '@smithy/url-parser': 2.1.3 + '@smithy/util-base64': 2.1.1 + '@smithy/util-body-length-browser': 2.1.1 + '@smithy/util-body-length-node': 2.2.1 + '@smithy/util-defaults-mode-browser': 2.1.4 + '@smithy/util-defaults-mode-node': 2.2.3 + '@smithy/util-endpoints': 1.1.4 + '@smithy/util-middleware': 2.1.3 + '@smithy/util-retry': 2.1.3 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/client-sso@3.525.0: + resolution: {integrity: sha512-6KwGQWFoNLH1UupdWPFdKPfTgjSz1kN8/r8aCzuvvXBe4Pz+iDUZ6FEJzGWNc9AapjvZDNO1hs23slomM9rTaA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.525.0 + '@aws-sdk/middleware-host-header': 3.523.0 + '@aws-sdk/middleware-logger': 3.523.0 + '@aws-sdk/middleware-recursion-detection': 3.523.0 + '@aws-sdk/middleware-user-agent': 3.525.0 + '@aws-sdk/region-config-resolver': 3.525.0 + '@aws-sdk/types': 3.523.0 + '@aws-sdk/util-endpoints': 3.525.0 + '@aws-sdk/util-user-agent-browser': 3.523.0 + '@aws-sdk/util-user-agent-node': 3.525.0 + '@smithy/config-resolver': 2.1.4 + '@smithy/core': 1.3.5 + '@smithy/fetch-http-handler': 2.4.3 + '@smithy/hash-node': 2.1.3 + '@smithy/invalid-dependency': 2.1.3 + '@smithy/middleware-content-length': 2.1.3 + '@smithy/middleware-endpoint': 2.4.4 + '@smithy/middleware-retry': 2.1.4 + '@smithy/middleware-serde': 2.1.3 + '@smithy/middleware-stack': 2.1.3 + '@smithy/node-config-provider': 2.2.4 + '@smithy/node-http-handler': 2.4.1 + '@smithy/protocol-http': 3.2.1 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + '@smithy/url-parser': 2.1.3 + '@smithy/util-base64': 2.1.1 + '@smithy/util-body-length-browser': 2.1.1 + '@smithy/util-body-length-node': 2.2.1 + '@smithy/util-defaults-mode-browser': 2.1.4 + '@smithy/util-defaults-mode-node': 2.2.3 + '@smithy/util-endpoints': 1.1.4 + '@smithy/util-middleware': 2.1.3 + '@smithy/util-retry': 2.1.3 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/client-sts@3.525.0(@aws-sdk/credential-provider-node@3.525.0): + resolution: {integrity: sha512-a8NUGRvO6rkfTZCbMaCsjDjLbERCwIUU9dIywFYcRgbFhkupJ7fSaZz3Het98U51M9ZbTEpaTa3fz0HaJv8VJw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + peerDependencies: + '@aws-sdk/credential-provider-node': ^3.525.0 + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.525.0 + '@aws-sdk/credential-provider-node': 3.525.0 + '@aws-sdk/middleware-host-header': 3.523.0 + '@aws-sdk/middleware-logger': 3.523.0 + '@aws-sdk/middleware-recursion-detection': 3.523.0 + '@aws-sdk/middleware-user-agent': 3.525.0 + '@aws-sdk/region-config-resolver': 3.525.0 + '@aws-sdk/types': 3.523.0 + '@aws-sdk/util-endpoints': 3.525.0 + '@aws-sdk/util-user-agent-browser': 3.523.0 + '@aws-sdk/util-user-agent-node': 3.525.0 + '@smithy/config-resolver': 2.1.4 + '@smithy/core': 1.3.5 + '@smithy/fetch-http-handler': 2.4.3 + '@smithy/hash-node': 2.1.3 + '@smithy/invalid-dependency': 2.1.3 + '@smithy/middleware-content-length': 2.1.3 + '@smithy/middleware-endpoint': 2.4.4 + '@smithy/middleware-retry': 2.1.4 + '@smithy/middleware-serde': 2.1.3 + '@smithy/middleware-stack': 2.1.3 + '@smithy/node-config-provider': 2.2.4 + '@smithy/node-http-handler': 2.4.1 + '@smithy/protocol-http': 3.2.1 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + '@smithy/url-parser': 2.1.3 + '@smithy/util-base64': 2.1.1 + '@smithy/util-body-length-browser': 2.1.1 + '@smithy/util-body-length-node': 2.2.1 + '@smithy/util-defaults-mode-browser': 2.1.4 + '@smithy/util-defaults-mode-node': 2.2.3 + '@smithy/util-endpoints': 1.1.4 + '@smithy/util-middleware': 2.1.3 + '@smithy/util-retry': 2.1.3 + '@smithy/util-utf8': 2.1.1 + fast-xml-parser: 4.2.5 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/core@3.525.0: + resolution: {integrity: sha512-E3LtEtMWCriQOFZpVKpLYzbdw/v2PAOEAMhn2VRRZ1g0/g1TXzQrfhEU2yd8l/vQEJaCJ82ooGGg7YECviBUxA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/core': 1.3.5 + '@smithy/protocol-http': 3.2.1 + '@smithy/signature-v4': 2.1.3 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/credential-provider-cognito-identity@3.525.0: + resolution: {integrity: sha512-0djjCN/zN6QFQt1xU64VBOSRP4wJckU6U7FjLPrGpL6w03hF0dUmVUXjhQZe5WKNPCicVc2S3BYPohl/PzCx1w==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/client-cognito-identity': 3.525.0 + '@aws-sdk/types': 3.523.0 + '@smithy/property-provider': 2.1.3 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-env@3.523.0: + resolution: {integrity: sha512-Y6DWdH6/OuMDoNKVzZlNeBc6f1Yjk1lYMjANKpIhMbkRCvLJw/PYZKOZa8WpXbTYdgg9XLjKybnLIb3ww3uuzA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/property-provider': 2.1.3 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/credential-provider-http@3.525.0: + resolution: {integrity: sha512-RNWQGuSBQZhl3iqklOslUEfQ4br1V3DCPboMpeqFtddUWJV3m2u2extFur9/4Uy+1EHVF120IwZUKtd8dF+ibw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/fetch-http-handler': 2.4.3 + '@smithy/node-http-handler': 2.4.1 + '@smithy/property-provider': 2.1.3 + '@smithy/protocol-http': 3.2.1 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + '@smithy/util-stream': 2.1.3 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/credential-provider-ini@3.525.0(@aws-sdk/credential-provider-node@3.525.0): + resolution: {integrity: sha512-JDnccfK5JRb9jcgpc9lirL9PyCwGIqY0nKdw3LlX5WL5vTpTG4E1q7rLAlpNh7/tFD1n66Itarfv2tsyHMIqCw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/credential-provider-env': 3.523.0 + '@aws-sdk/credential-provider-process': 3.523.0 + '@aws-sdk/credential-provider-sso': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/credential-provider-web-identity': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/types': 3.523.0 + '@smithy/credential-provider-imds': 2.2.4 + '@smithy/property-provider': 2.1.3 + '@smithy/shared-ini-file-loader': 2.3.4 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-node@3.525.0: + resolution: {integrity: sha512-RJXlO8goGXpnoHQAyrCcJ0QtWEOFa34LSbfdqBIjQX/fwnjUuEmiGdXTV3AZmwYQ7juk49tfBneHbtOP3AGqsQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/credential-provider-env': 3.523.0 + '@aws-sdk/credential-provider-http': 3.525.0 + '@aws-sdk/credential-provider-ini': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/credential-provider-process': 3.523.0 + '@aws-sdk/credential-provider-sso': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/credential-provider-web-identity': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/types': 3.523.0 + '@smithy/credential-provider-imds': 2.2.4 + '@smithy/property-provider': 2.1.3 + '@smithy/shared-ini-file-loader': 2.3.4 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-process@3.523.0: + resolution: {integrity: sha512-f0LP9KlFmMvPWdKeUKYlZ6FkQAECUeZMmISsv6NKtvPCI9e4O4cLTeR09telwDK8P0HrgcRuZfXM7E30m8re0Q==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/property-provider': 2.1.3 + '@smithy/shared-ini-file-loader': 2.3.4 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/credential-provider-sso@3.525.0(@aws-sdk/credential-provider-node@3.525.0): + resolution: {integrity: sha512-7V7ybtufxdD3plxeIeB6aqHZeFIUlAyPphXIUgXrGY10iNcosL970rQPBeggsohe4gCM6UvY2TfMeEcr+ZE8FA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/client-sso': 3.525.0 + '@aws-sdk/token-providers': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/types': 3.523.0 + '@smithy/property-provider': 2.1.3 + '@smithy/shared-ini-file-loader': 2.3.4 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-provider-web-identity@3.525.0(@aws-sdk/credential-provider-node@3.525.0): + resolution: {integrity: sha512-sAukOjR1oKb2JXG4nPpuBFpSwGUhrrY17PG/xbTy8NAoLLhrqRwnErcLfdTfmj6tH+3094k6ws/Sh8a35ae7fA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/types': 3.523.0 + '@smithy/property-provider': 2.1.3 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - aws-crt + dev: false + optional: true + + /@aws-sdk/credential-providers@3.525.0: + resolution: {integrity: sha512-zj439Ok1s44nahIJKpBM4jhAxnSw20flXQpMD2aeGdvUuKm2xmzZP0lX5z9a+XQWFtNh251ZcSt2p+RwtLKtiw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/client-cognito-identity': 3.525.0 + '@aws-sdk/client-sso': 3.525.0 + '@aws-sdk/client-sts': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/credential-provider-cognito-identity': 3.525.0 + '@aws-sdk/credential-provider-env': 3.523.0 + '@aws-sdk/credential-provider-http': 3.525.0 + '@aws-sdk/credential-provider-ini': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/credential-provider-node': 3.525.0 + '@aws-sdk/credential-provider-process': 3.523.0 + '@aws-sdk/credential-provider-sso': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/credential-provider-web-identity': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/types': 3.523.0 + '@smithy/credential-provider-imds': 2.2.4 + '@smithy/property-provider': 2.1.3 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + dev: false + optional: true + + /@aws-sdk/middleware-host-header@3.523.0: + resolution: {integrity: sha512-4g3q7Ta9sdD9TMUuohBAkbx/e3I/juTqfKi7TPgP+8jxcYX72MOsgemAMHuP6CX27eyj4dpvjH+w4SIVDiDSmg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/protocol-http': 3.2.1 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/middleware-logger@3.523.0: + resolution: {integrity: sha512-PeDNJNhfiaZx54LBaLTXzUaJ9LXFwDFFIksipjqjvxMafnoVcQwKbkoPUWLe5ytT4nnL1LogD3s55mERFUsnwg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/middleware-recursion-detection@3.523.0: + resolution: {integrity: sha512-nZ3Vt7ehfSDYnrcg/aAfjjvpdE+61B3Zk68i6/hSUIegT3IH9H1vSW67NDKVp+50hcEfzWwM2HMPXxlzuyFyrw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/protocol-http': 3.2.1 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/middleware-user-agent@3.525.0: + resolution: {integrity: sha512-4al/6uO+t/QIYXK2OgqzDKQzzLAYJza1vWFS+S0lJ3jLNGyLB5BMU5KqWjDzevYZ4eCnz2Nn7z0FveUTNz8YdQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@aws-sdk/util-endpoints': 3.525.0 + '@smithy/protocol-http': 3.2.1 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/region-config-resolver@3.525.0: + resolution: {integrity: sha512-8kFqXk6UyKgTMi7N7QlhA6qM4pGPWbiUXqEY2RgUWngtxqNFGeM9JTexZeuavQI+qLLe09VPShPNX71fEDcM6w==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/node-config-provider': 2.2.4 + '@smithy/types': 2.10.1 + '@smithy/util-config-provider': 2.2.1 + '@smithy/util-middleware': 2.1.3 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/token-providers@3.525.0(@aws-sdk/credential-provider-node@3.525.0): + resolution: {integrity: sha512-puVjbxuK0Dq7PTQ2HdddHy2eQjOH8GZbump74yWJa6JVpRW84LlOcNmP+79x4Kscvz2ldWB8XDFw/pcCiSDe5A==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/client-sso-oidc': 3.525.0(@aws-sdk/credential-provider-node@3.525.0) + '@aws-sdk/types': 3.523.0 + '@smithy/property-provider': 2.1.3 + '@smithy/shared-ini-file-loader': 2.3.4 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + transitivePeerDependencies: + - '@aws-sdk/credential-provider-node' + - aws-crt + dev: false + optional: true + + /@aws-sdk/types@3.523.0: + resolution: {integrity: sha512-AqGIu4u+SxPiUuNBp2acCVcq80KDUFjxe6e3cMTvKWTzCbrVk1AXv0dAaJnCmdkWIha6zJDWxpIk/aL4EGhZ9A==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-endpoints@3.525.0: + resolution: {integrity: sha512-DIW7WWU5tIGkeeKX6NJUyrEIdWMiqjLQG3XBzaUj+ufIENwNjdAHhlD8l2vX7Yr3JZRT6yN/84wBCj7Tw1xd1g==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/types': 2.10.1 + '@smithy/util-endpoints': 1.1.4 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-locate-window@3.495.0: + resolution: {integrity: sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-user-agent-browser@3.523.0: + resolution: {integrity: sha512-6ZRNdGHX6+HQFqTbIA5+i8RWzxFyxsZv8D3soRfpdyWIKkzhSz8IyRKXRciwKBJDaC7OX2jzGE90wxRQft27nA==} + requiresBuild: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/types': 2.10.1 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-user-agent-node@3.525.0: + resolution: {integrity: sha512-88Wjt4efyUSBGcyIuh1dvoMqY1k15jpJc5A/3yi67clBQEFsu9QCodQCQPqmRjV3VRcMtBOk+jeCTiUzTY5dRQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + dependencies: + '@aws-sdk/types': 3.523.0 + '@smithy/node-config-provider': 2.2.4 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@aws-sdk/util-utf8-browser@3.259.0: + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/runtime@7.24.0: + resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: false + + /@configvault.io/interfaces@1.0.17: + resolution: {integrity: sha512-bEcCUR2VBDJsTin8HQh8Uw/mlYl2v8A3jMIaQ+MTB9Hrqd6CZL2dL7iJdWyFl/3EIX+LDxWFR+Oq7liIq7w+1Q==} + dependencies: + '@api.global/typedrequest-interfaces': 3.0.18 + dev: false + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + /@design.estate/dees-catalog@1.0.289: + resolution: {integrity: sha512-XBKGbbpjLqTCAHnMx6Qpm5/bPkmbdpczKy0wNIPn6zEGNUqBe8uX5/wtsufcrSafwDinjAT53WFnLQXae5Cp1g==} + dependencies: + '@design.estate/dees-domtools': 2.0.57 + '@design.estate/dees-element': 2.0.34 + '@design.estate/dees-wcctools': 1.0.87 + '@fortawesome/fontawesome-svg-core': 6.5.1 + '@fortawesome/free-brands-svg-icons': 6.5.1 + '@fortawesome/free-regular-svg-icons': 6.5.1 + '@fortawesome/free-solid-svg-icons': 6.5.1 + '@push.rocks/smarti18n': 1.0.4 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartstring': 4.0.15 + '@tsclass/tsclass': 4.0.52 + '@webcontainer/api': 1.1.9 + apexcharts: 3.46.0 + highlight.js: 11.9.0 + ibantools: 4.5.0 + monaco-editor: 0.46.0 + pdfjs-dist: 4.0.379 + xterm: 5.3.0 + xterm-addon-fit: 0.8.0(xterm@5.3.0) + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@design.estate/dees-comms@1.0.24: + resolution: {integrity: sha512-IQrTzQrga8gY17fblRdUmxvWJ64f+xpI9ebj1zYAIsypWYlCS7krREUwH/8iow5fze2FJ1t+gUdMCV1CGqdklg==} + dependencies: + '@api.global/typedrequest': 3.0.19 + '@api.global/typedrequest-interfaces': 3.0.18 + '@push.rocks/smartdelay': 3.0.5 + broadcast-channel: 3.7.0 + dev: false + + /@design.estate/dees-domtools@2.0.57: + resolution: {integrity: sha512-sA27nOl+vdY3hR0Y/QPs4wtUJU15W34CeMshjWModUtm7WgogJgAhbHHY+I38yf3gwvBFfFkBZHo/GL9l/lR2A==} + dependencies: + '@api.global/typedrequest': 3.0.19 + '@design.estate/dees-comms': 1.0.24 + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartmarkdown': 3.0.3 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrouter': 1.0.16 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartstate': 2.0.17 + '@push.rocks/smartstring': 4.0.15 + '@push.rocks/smarturl': 3.0.7 + '@push.rocks/webrequest': 3.0.35 + '@push.rocks/websetup': 3.0.19 + '@push.rocks/webstore': 2.0.13 + lit: 3.1.2 + sweet-scroll: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@design.estate/dees-element@2.0.34: + resolution: {integrity: sha512-4S5liIPTezEyFen6N6LBpSoYqHe05wvKJw/597SMyjgnvtW+e30MFdN+QTYY428xnKcIVId+tMVlJRZzSf0orw==} + dependencies: + '@design.estate/dees-domtools': 2.0.57 + '@push.rocks/isounique': 1.0.5 + '@push.rocks/smartrx': 3.0.7 + lit: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@design.estate/dees-wcctools@1.0.87: + resolution: {integrity: sha512-bZh7brZDRriN4RbLjMriSh588TryIVZbB5gKDuf+YdZDPjm0AAlCp/nOiyvho3ITA8SERbgIIiqWVf0LbgFyoQ==} + dependencies: + '@design.estate/dees-domtools': 2.0.57 + '@design.estate/dees-element': 2.0.34 + '@push.rocks/smartdelay': 3.0.5 + lit: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@fortawesome/fontawesome-common-types@6.5.1: + resolution: {integrity: sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==} + engines: {node: '>=6'} + requiresBuild: true + dev: false + + /@fortawesome/fontawesome-svg-core@6.5.1: + resolution: {integrity: sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + '@fortawesome/fontawesome-common-types': 6.5.1 + dev: false + + /@fortawesome/free-brands-svg-icons@6.5.1: + resolution: {integrity: sha512-093l7DAkx0aEtBq66Sf19MgoZewv1zeY9/4C7vSKPO4qMwEsW/2VYTUTpBtLwfb9T2R73tXaRDPmE4UqLCYHfg==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + '@fortawesome/fontawesome-common-types': 6.5.1 + dev: false + + /@fortawesome/free-regular-svg-icons@6.5.1: + resolution: {integrity: sha512-m6ShXn+wvqEU69wSP84coxLbNl7sGVZb+Ca+XZq6k30SzuP3X4TfPqtycgUh9ASwlNh5OfQCd8pDIWxl+O+LlQ==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + '@fortawesome/fontawesome-common-types': 6.5.1 + dev: false + + /@fortawesome/free-solid-svg-icons@6.5.1: + resolution: {integrity: sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + '@fortawesome/fontawesome-common-types': 6.5.1 + dev: false + + /@git.zone/tsbuild@2.1.72: + resolution: {integrity: sha512-rVWM98chNjkt8pXdF5knGErZjM3GPnRXZYHVGECptxNvvhTol2DliM1OP8k3p3X5UOwEPV2sQVe//XzXs3BcUw==} + hasBin: true + dependencies: + '@push.rocks/early': 4.0.4 + '@push.rocks/smartcli': 4.0.8 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile': 11.0.4 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + typescript: 5.3.3 + dev: true + + /@git.zone/tsbundle@2.0.15: + resolution: {integrity: sha512-ZrPkScaBQ7hHx6BUchRFfPB9tvb7RlNXwjk9qjkp6AcBcF38JgLcu/UDKDqRsuaFJpkK9oclyhA5bDA7SjXWZg==} + hasBin: true + dependencies: + '@push.rocks/early': 4.0.4 + '@push.rocks/smartcli': 4.0.8 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile': 11.0.4 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartlog-destination-local': 9.0.1 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartspawn': 3.0.2 + '@types/html-minifier': 4.0.5 + esbuild: 0.19.12 + html-minifier: 4.0.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@git.zone/tsrun@1.2.46(@types/node@20.11.25): + resolution: {integrity: sha512-8miFVBle9Mnjx+uPGI/P+EuWcIOXWjBAkdjN5IYbdp5Ytt4xQODCLh4JSnC9h56UeU1nUxCAxZeJs2e9TXrivA==} + hasBin: true + dependencies: + '@push.rocks/smartfile': 10.0.41 + '@push.rocks/smartshell': 3.0.3 + ts-node: 10.9.2(@types/node@20.11.25)(typescript@5.1.6) + typescript: 5.1.6 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + + /@git.zone/tstest@1.0.86(@types/node@20.11.25)(sinon@17.0.1): + resolution: {integrity: sha512-ec95MNeA21L+ob+lvLVCmwPTTC1BY+v/JHLYZ9DOZ9+9buLgx+cJ7VkwGBJCnlWJtqEtJosUrFKTih36iNuT3g==} + hasBin: true + dependencies: + '@api.global/typedserver': 3.0.27 + '@git.zone/tsbundle': 2.0.15 + '@git.zone/tsrun': 1.2.46(@types/node@20.11.25) + '@push.rocks/consolecolor': 2.0.1 + '@push.rocks/smartbrowser': 2.0.6 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile': 11.0.4 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartshell': 3.0.3 + '@push.rocks/tapbundle': 5.0.15(sinon@17.0.1) + '@types/ws': 8.5.10 + figures: 6.0.1 + ws: 8.16.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - bufferutil + - encoding + - sinon + - supports-color + - utf-8-validate + dev: true + + /@git.zone/tswatch@2.0.23(@types/node@20.11.25): + resolution: {integrity: sha512-ADloBDzuyyOjzDLwOVx+5lBEKJdx+r58Qat+oCDOOlRMwDOJcjI4qQOU8PVzFYCh7otraia6aNeXWXfKgKA92g==} + hasBin: true + dependencies: + '@api.global/typedserver': 3.0.27 + '@git.zone/tsbundle': 2.0.15 + '@git.zone/tsrun': 1.2.46(@types/node@20.11.25) + '@push.rocks/early': 4.0.4 + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartchok': 1.0.33 + '@push.rocks/smartcli': 4.0.8 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartlog-destination-local': 9.0.1 + '@push.rocks/smartshell': 3.0.3 + '@push.rocks/taskbuffer': 3.1.7 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - supports-color + dev: true + + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + /@leichtgewicht/ip-codec@2.0.4: + resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + dev: true + + /@lit-labs/ssr-dom-shim@1.2.0: + resolution: {integrity: sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==} + + /@lit/reactive-element@1.6.3: + resolution: {integrity: sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + dev: false + + /@lit/reactive-element@2.0.4: + resolution: {integrity: sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + + /@mapbox/node-pre-gyp@1.0.11: + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + requiresBuild: true + dependencies: + detect-libc: 2.0.2 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.6.0 + tar: 6.2.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /@mongodb-js/saslprep@1.1.5: + resolution: {integrity: sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==} + requiresBuild: true + dependencies: + sparse-bitfield: 3.0.3 + dev: false + optional: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true + + /@open-wc/chai-dom-equals@0.12.36: + resolution: {integrity: sha512-Gt1fa37h4rtWPQGETSU4n1L678NmMi9KwHM1sH+JCGcz45rs8DBPx7MUVeGZ+HxRlbEI5t9LU2RGGv6xT2OlyA==} + dependencies: + '@open-wc/semantic-dom-diff': 0.13.21 + '@types/chai': 4.3.12 + dev: true + + /@open-wc/dedupe-mixin@1.4.0: + resolution: {integrity: sha512-Sj7gKl1TLcDbF7B6KUhtvr+1UCxdhMbNY5KxdU5IfMFWqL8oy1ZeAcCANjoB1TL0AJTcPmcCFsCbHf8X2jGDUA==} + dev: true + + /@open-wc/scoped-elements@1.3.7: + resolution: {integrity: sha512-q/wKf4sXl7cr1kNfl8z6TLO2TrpXsFMCrfCD51sCEljltwYIXOmI6SnRXmWlnzG37A8AwHRpDXYmjPj2F4gPxA==} + dependencies: + '@open-wc/dedupe-mixin': 1.4.0 + lit-html: 1.4.1 + dev: true + + /@open-wc/semantic-dom-diff@0.13.21: + resolution: {integrity: sha512-BONpjHcGX2zFa9mfnwBCLEmlDsOHzT+j6Qt1yfK3MzFXFtAykfzFjAgaxPetu0YbBlCfXuMlfxI4vlRGCGMvFg==} + dev: true + + /@open-wc/semantic-dom-diff@0.19.9: + resolution: {integrity: sha512-iUL0OPA6PeLQVEEJ/gsgkEiwOGgK4E1KS//zTB+u+OAh0NifNTfxDxIHQa7rEGvplaq2b2zztT2yyzOzj+MlAA==} + dependencies: + '@types/chai': 4.3.12 + '@web/test-runner-commands': 0.6.6 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@open-wc/testing-helpers@1.8.12: + resolution: {integrity: sha512-+4exEHYvnFqI1RGDDIKFHPZ7Ws5NK1epvEku3zLaOYN3zc+huX19SndNc5+X++v8A+quN/iXbHlh80ROyNaYDA==} + dependencies: + '@open-wc/scoped-elements': 1.3.7 + lit-element: 2.5.1 + lit-html: 1.4.1 + dev: true + + /@open-wc/testing@2.5.33(sinon@17.0.1): + resolution: {integrity: sha512-+EJNs0i+VV4nE+BrG70l2DNGXOZTSrluruaaU06HUSk57ZlKa+kIxWmkLxCOLlbgnQgrPrQWxbs3lgB1tIx/YA==} + dependencies: + '@open-wc/chai-dom-equals': 0.12.36 + '@open-wc/semantic-dom-diff': 0.19.9 + '@open-wc/testing-helpers': 1.8.12 + '@types/chai': 4.3.12 + '@types/chai-dom': 0.0.9 + '@types/mocha': 5.2.7 + '@types/sinon-chai': 3.2.12 + chai: 4.4.1 + chai-a11y-axe: 1.5.0 + chai-dom: 1.12.0(chai@4.4.1) + mocha: 6.2.3 + sinon-chai: 3.7.0(chai@4.4.1)(sinon@17.0.1) + transitivePeerDependencies: + - bufferutil + - sinon + - supports-color + - utf-8-validate + dev: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + optional: true + + /@push.rocks/consolecolor@2.0.1: + resolution: {integrity: sha512-iQx+sjxmvhRXjnv8aMiaZu125ZWfyZKSylCvKUNjVrdhkmP2uPy2VWsvyRBS4UiieYHTY/i+HpQiFv4QZV2/Fg==} + dependencies: + ansi-256-colors: 1.1.0 + + /@push.rocks/early@4.0.4: + resolution: {integrity: sha512-ak6/vqZ1PlFV08fSFQ6UwiBrr+K6IsfieZWWzT7eex1Ls6GvWEi8wZ3REFDPJq/qckNLWSgEy0EsqzRtltkaCA==} + dependencies: + '@push.rocks/consolecolor': 2.0.1 + '@push.rocks/smartpromise': 4.0.3 + + /@push.rocks/isohash@2.0.1: + resolution: {integrity: sha512-UulhEui8O9Ei9fSqTldsB73TUmAFNqEBk82tHsJSLLpNK9gJZQE82iaSNsQUakoUQ2c9KueueMfwC3IoDaYRrQ==} + dependencies: + '@pushrocks/smartenv': 5.0.5 + '@pushrocks/smarthash': 3.0.2 + + /@push.rocks/isounique@1.0.5: + resolution: {integrity: sha512-Z0BVqZZOCif1THTbIKWMgg0wxCzt9CyBtBBqQJiZ+jJ0KlQFrQHNHrPt81/LXe/L4x0cxWsn0bpL6W5DNSvNLw==} + + /@push.rocks/lik@6.0.14: + resolution: {integrity: sha512-d15PoV3T2MvO/XNYwigGp3I6z4eTd6lvdELlfc/addCuYwfvV5dZr30SsKYlyvXLaHBis8PxwcdIMFlSmHB2Qw==} + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartmatch': 2.0.0 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smarttime': 4.0.6 + '@types/minimatch': 5.1.2 + '@types/symbol-tree': 3.2.5 + symbol-tree: 3.2.4 + + /@push.rocks/mongodump@1.0.8: + resolution: {integrity: sha512-oDufyjNBg8I50OaJvbHhc0RnRpJQ544dr9her0G6sA8JmI3hD2/amTdcPLVIX1kzYf5GsTUKeWuRaZgdNqz3ew==} + dependencies: + '@pushrocks/lik': 6.0.2 + '@pushrocks/smartfile': 9.0.6 + '@pushrocks/smartjson': 4.0.6 + '@pushrocks/smartpath': 5.0.5 + '@pushrocks/smartpromise': 3.1.10 + '@tsclass/tsclass': 4.0.52 + mongodb: 4.17.2 + transitivePeerDependencies: + - aws-crt + dev: false + + /@push.rocks/npmextra@5.0.10: + resolution: {integrity: sha512-qkyIwlKW9jEqBTCkoo4IuaF5et7QTRZhAPjotQF8E71MRwYBH+QUvj5JwQMBy4ZhpWf+3/3X47aib3JAhzJFbQ==} + dependencies: + '@push.rocks/qenv': 6.0.5 + '@push.rocks/smartfile': 11.0.4 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/taskbuffer': 3.1.7 + dev: false + + /@push.rocks/projectinfo@5.0.2: + resolution: {integrity: sha512-zzieCal6jwR++o+fDl8gMpWkNV2cGEsbT96vCNZu/H9kr0iqRmapOiA4DFadkhOnhlDqvRr6TPaXESu2YUbI8Q==} + dependencies: + '@push.rocks/smartfile': 10.0.41 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartstring': 4.0.15 + dev: false + + /@push.rocks/qenv@6.0.5: + resolution: {integrity: sha512-Id/eSKKqSDUGe+0Cp5HEJ58J1iVv1jQseLUMs9kFTPYwG+NJSETUCRsJV50w5cPv8bRFcSkSU+xVbUbOc1p29A==} + dependencies: + '@api.global/typedrequest': 3.0.19 + '@configvault.io/interfaces': 1.0.17 + '@push.rocks/smartfile': 11.0.4 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartpath': 5.0.11 + dev: false + + /@push.rocks/smartacme@4.0.8: + resolution: {integrity: sha512-qgtOxz1KL59PqWex6Jfa146MccUQ7VXX5y+d2QkAGIBjfytFuJkOXlhJNLF/u9xY+8qkWXaDoQEA8SeF5uM6Kw==} + dependencies: + '@api.global/typedserver': 3.0.27 + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdata': 5.0.33 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartdns': 5.0.4 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrequest': 2.0.21 + '@push.rocks/smartstring': 4.0.15 + '@push.rocks/smarttime': 4.0.6 + '@push.rocks/smartunique': 3.0.8 + '@tsclass/tsclass': 4.0.52 + acme-client: 4.2.5 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - aws-crt + - kerberos + - mongodb-client-encryption + - snappy + - supports-color + dev: false + + /@push.rocks/smartbrowser@2.0.6: + resolution: {integrity: sha512-Ne+KCVhV/DROc1rHRRw59K6h0+LpQAK9fdOUtgDZ7laLPmB/tmnbUh3IuRDNcIY1iVA9pydoobwjnTjVgio9eQ==} + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartpdf': 3.0.16 + '@push.rocks/smartpuppeteer': 2.0.2 + '@push.rocks/smartunique': 3.0.8 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@push.rocks/smartbucket@2.0.4: + resolution: {integrity: sha512-nRJq0JZaj4q55alDpJxcDpYtfydIEGab9Qcx+L+O1pwimH7TcQBZnDsJdMejYw20kKztDiVT70NgWi4BdHobzQ==} + dependencies: + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartstream': 2.0.8 + '@tsclass/tsclass': 4.0.52 + '@types/minio': 7.1.1 + minio: 7.1.3 + dev: false + + /@push.rocks/smartbuffer@1.0.7: + resolution: {integrity: sha512-ESs16KRJuHo0wXxAZjwu0uiBgwUC6EodHtERFHAo2XfT+fw40DPnAvIi37RJPA8FZ7kIkpzRcuTCuFW81UH7VA==} + + /@push.rocks/smartcache@1.0.16: + resolution: {integrity: sha512-UAXf74eDuH4/RebJhydIbHlYVR3ACYJjniEY/9ZePblu7bIPgwFZqLBE9g1lcKVogbH9yY62dk3rSpgBzenyfQ==} + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smarterror': 2.0.1 + '@pushrocks/smarthash': 3.0.2 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smarttime': 4.0.1 + + /@push.rocks/smartchok@1.0.33: + resolution: {integrity: sha512-6mDqTkNOR5Z0H14Ujmq3ACUZHzeUBNE8EdoLDrmkPzRVE9HP3WcCnDu009Fy0LVKHYHAUirZ0LzCi8zHN84RtA==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@tempfix/watcher': 2.3.0 + + /@push.rocks/smartcli@4.0.8: + resolution: {integrity: sha512-B4F3nqq7ko8tev1wxGdFnh/zSDDP8Q9LpEOb3wTf0jayyhYetFQ7n6zi4J9fhXYBKPkJSyQEBoOfRmgJyeLHkA==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartparam': 1.1.10 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + yargs-parser: 21.1.1 + + /@push.rocks/smartcrypto@2.0.4: + resolution: {integrity: sha512-1+/5bsjyataf5uUkUNnnVXGRAt+gHVk1KDzozjTqgqJxHvQk1d9fVDohL6CxUhUucTPtu5VR5xNBiV8YCDuGyw==} + dependencies: + '@push.rocks/smartpromise': 4.0.3 + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + dev: false + + /@push.rocks/smartdata@5.0.33: + resolution: {integrity: sha512-q7vh8MS40XqSeZMJiIQRYHnN7sO7ydqz97aqGGlpPNfs5sWObhEWO/8d3gaaOzTqQwT1iCT++QYD2PVsifpgwQ==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartmongo': 2.0.10 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smartstring': 4.0.15 + '@push.rocks/smarttime': 4.0.6 + '@push.rocks/smartunique': 3.0.8 + '@push.rocks/taskbuffer': 3.1.7 + '@tsclass/tsclass': 4.0.52 + mongodb: 5.9.2 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - aws-crt + - kerberos + - mongodb-client-encryption + - snappy + - supports-color + dev: false + + /@push.rocks/smartdelay@3.0.5: + resolution: {integrity: sha512-mUuI7kj2f7ztjpic96FvRIlf2RsKBa5arw81AHNsndbxO6asRcxuWL8dTVxouEIK8YsBUlj0AsrCkHhMbLQdHw==} + dependencies: + '@push.rocks/smartpromise': 4.0.3 + + /@push.rocks/smartdns@5.0.4: + resolution: {integrity: sha512-DCeekCzAJEPn8gZOPZLnFGFZdgLKtCqb3YfwJpfkdSfPxwlSXzjs5rYmzmsg0BlQP+7pSR43fuLMERB4DGCn9w==} + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartenv': 5.0.5 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrequest': 2.0.15 + '@tsclass/tsclass': 4.0.52 + dns2: 2.1.0 + dev: false + + /@push.rocks/smartenv@5.0.12: + resolution: {integrity: sha512-tDEFwywzq0FNzRYc9qY2dRl2pgQuZG0G2/yml2RLWZWSW+Fn1EHshnKOGHz8o77W7zvu4hTgQQX42r/JY5XHTg==} + dependencies: + '@push.rocks/smartpromise': 4.0.3 + + /@push.rocks/smartexit@1.0.21: + resolution: {integrity: sha512-F8J+EN6ffIK57YelPZ6W2yJQFO5RKGFT3mujg97lTS2nkeshXu2UMNQ5CVVn5QWyUQJFd02s+0Sv3kgzM4mhWA==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdelay': 3.0.5 + dev: false + + /@push.rocks/smartexpect@1.0.21: + resolution: {integrity: sha512-SelJxXMYeF5VEZk0oPgcjTCM2D7vqOTUgVX/vnnGxZAl9d068LD12/BWLwKCEp0dsV3NT8rBuXJTFPZYjdsApg==} + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartpromise': 4.0.3 + fast-deep-equal: 3.1.3 + dev: true + + /@push.rocks/smartfeed@1.0.11: + resolution: {integrity: sha512-02uhXxQamgfBo3T12FsAdfyElnpoWuDUb08B2AE60DbIaukVx/7Mi17xwobApY1flNSr5StZDt8N8vxPhBhIXw==} + dependencies: + '@tsclass/tsclass': 3.0.48 + feed: 4.2.2 + rss-parser: 3.13.0 + + /@push.rocks/smartfile-interfaces@1.0.7: + resolution: {integrity: sha512-MeOl/200UOvSO4Pgq/DVFiBVZpL9gjOBQM+4XYNjSxda8c6VBvchHAntaFLQUlO8U1ckNaP9i+nMO4O4/0ymyw==} + + /@push.rocks/smartfile@10.0.41: + resolution: {integrity: sha512-xOOy0duI34M2qrJZggpk51EHGXmg9+mBL1Q55tNiQKXzfx89P3coY1EAZG8tvmep3qB712QEKe7T+u04t42Kjg==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile-interfaces': 1.0.7 + '@push.rocks/smarthash': 3.0.4 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartmime': 1.0.6 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrequest': 2.0.21 + '@push.rocks/smartstream': 2.0.8 + '@types/fs-extra': 11.0.4 + '@types/glob': 8.1.0 + '@types/js-yaml': 4.0.9 + fs-extra: 11.2.0 + glob: 10.3.10 + js-yaml: 4.1.0 + + /@push.rocks/smartfile@11.0.4: + resolution: {integrity: sha512-NXAyqYE5zNUJ9Mu/t2oWUKu21CRUI4Dvlm56rKBSczCq5xeC7EwmamTzL3Nyn6Tmu1jBpYktYL4zIx17JJOB7w==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile-interfaces': 1.0.7 + '@push.rocks/smarthash': 3.0.4 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartmime': 1.0.6 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrequest': 2.0.21 + '@push.rocks/smartstream': 3.0.33 + '@types/fs-extra': 11.0.4 + '@types/glob': 8.1.0 + '@types/js-yaml': 4.0.9 + fs-extra: 11.2.0 + glob: 10.3.10 + js-yaml: 4.1.0 + + /@push.rocks/smartguard@2.0.1: + resolution: {integrity: sha512-0D80clD8KZVf8pcrSCJLVfCA621KOp1LkVGkTPkW8D+NighryhaXhYZ/BrAg5hGpxtBwVKzbBwwHvr5bbhWPTw==} + dependencies: + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrequest': 1.1.56 + dev: false + + /@push.rocks/smarthash@3.0.4: + resolution: {integrity: sha512-HJ/fSx41jm0CvSaqMLa6b2nuNK5rHAqAeAq3dAB7Sq9BCPm2M0J5ZVDTzEAH8pS91XYniUiwuE0jwPERNn9hmw==} + dependencies: + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartpromise': 4.0.3 + '@types/through2': 2.0.41 + through2: 4.0.2 + + /@push.rocks/smarti18n@1.0.4: + resolution: {integrity: sha512-bHIi9Iuzp2cbux9q79ZK5jOQYPsYJ9zDDS4p/xEPQH31gr0mcFRosLSQb1kvDQDVmUhI0ADlQMqr2ui9zEXQHA==} + dev: false + + /@push.rocks/smartjson@5.0.14: + resolution: {integrity: sha512-xS74shCYvTDvn25DWHU5VbXUtsTtbLvQmgHroN0xG4RcQfgsdoR2EYrnXmt6aY0IPubONtJ0OxABE3LDI5Yviw==} + dependencies: + '@push.rocks/smartbuffer': 1.0.7 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartstring': 4.0.15 + fast-json-stable-stringify: 2.1.0 + lodash.clonedeep: 4.5.0 + + /@push.rocks/smartjwt@2.0.4: + resolution: {integrity: sha512-+d7mMhLyUWijy5qQ1ECax7osrBWIzjgigzcZBYftaLjNlnSGq7LUkTcfF+O+Eu+ug0mKl74oTdXDDuvhmwRPAw==} + dependencies: + '@push.rocks/smartcrypto': 2.0.4 + '@tsclass/tsclass': 4.0.52 + '@types/jsonwebtoken': 9.0.6 + jsonwebtoken: 9.0.2 + dev: false + + /@push.rocks/smartlog-destination-clickhouse@1.0.11: + resolution: {integrity: sha512-+VKZEzPBRc+QiCNhEkBlgThWjNe2svzCIRFvB14rtWWHPoabNMALhMgaPHcIvJrXVb3iEOgL/ibXiXkPryoUGQ==} + dependencies: + '@pushrocks/smartclickhouse': 2.0.14 + '@pushrocks/smartlog-interfaces': 2.0.23 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@push.rocks/smartlog-destination-devtools@1.0.10: + resolution: {integrity: sha512-E6xRx5vhR7gh9peXjUyBwNj0H0MeaBjh+PY++PbOhUF4NDMaEuswRLRs+UN9bfbLXZQl2i4hYD1MNCesHGTVgA==} + dependencies: + '@pushrocks/smartlog-interfaces': 2.0.23 + + /@push.rocks/smartlog-destination-local@9.0.1: + resolution: {integrity: sha512-JCX73z4ORTI7XEMmWFYp2GkWwpPgXDZzIQBTrBOlo6U+EAERWZhZDpLfVK+qKuZBQ86E0gqTlcUaOl3k1vp1GA==} + dependencies: + '@pushrocks/consolecolor': 2.0.1 + '@pushrocks/smartlog-interfaces': 3.0.0 + '@pushrocks/smartpromise': 4.0.2 + dev: true + + /@push.rocks/smartlog-interfaces@3.0.0: + resolution: {integrity: sha512-dfRqiSolGQwaF9gWmkixWOoXZxcWBjK3u6A1CpcfhCbVr2VSUMIrZ5t74/DgdfedsTrhDqoD0NGezsMXF2pFHQ==} + dependencies: + '@apiglobal/typedrequest-interfaces': 2.0.1 + + /@push.rocks/smartlog@3.0.3: + resolution: {integrity: sha512-E4UUSdbrf0TdSqI7LrUa3jgYQGKT6+ybSHuRcopFDt0W2/tBpY+/vPyAApJIa8iGFKJoi3oSTgYJbK90SwQwKg==} + dependencies: + '@push.rocks/isounique': 1.0.5 + '@push.rocks/smartlog-interfaces': 3.0.0 + + /@push.rocks/smartmanifest@2.0.2: + resolution: {integrity: sha512-QGc5C9vunjfUbYsPGz5bynV/mVmPHkrQDkWp8ZO8VJtK1GZe+njgbrNyxn2SUHR0IhSAbSXl1j4JvBqYf5eTVg==} + + /@push.rocks/smartmarkdown@3.0.3: + resolution: {integrity: sha512-9KhKZxDQKPk4P/2CYdVqJa5dpGfTA8w1cxqoVZL3e8RPA7EGxbdYEqMp0n2d9mth0btk/m0KHHV+G09LfCVeBw==} + dependencies: + '@push.rocks/smartyaml': 2.0.5 + '@types/turndown': 5.0.4 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.0 + remark-html: 16.0.1 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + turndown: 7.1.2 + turndown-plugin-gfm: 1.0.2 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@push.rocks/smartmatch@2.0.0: + resolution: {integrity: sha512-MBzP++1yNIBeox71X6VxpIgZ8m4bXnJpZJ4nWVH6IWpmO38MXTu4X0QF8tQnyT4LFcwvc9iiWaD15cstHa7Mmw==} + dependencies: + matcher: 5.0.0 + + /@push.rocks/smartmime@1.0.6: + resolution: {integrity: sha512-PHd+I4UcsnOATNg8wjDsSAmmJ4CwQFrQCNzd0HSJMs4ZpiK3Ya91almd6GLpDPU370U4HFh4FaPF4eEAI6vkJQ==} + dependencies: + '@types/mime-types': 2.1.4 + mime-types: 2.1.35 + + /@push.rocks/smartmongo@2.0.10: + resolution: {integrity: sha512-K6jereWHHuEoTIlDDC3zum8DZYHzB74LCXx85+RSeKa8aeP9XYvGEbuIAr/e1MuX4WGZeHt6w2458dgyDW4w1w==} + dependencies: + '@push.rocks/mongodump': 1.0.8 + '@push.rocks/smartdata': 5.0.33 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + mongodb-memory-server: 8.16.0 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - aws-crt + - kerberos + - mongodb-client-encryption + - snappy + - supports-color + dev: false + + /@push.rocks/smartnetwork@3.0.2: + resolution: {integrity: sha512-s6CNGzQ1n/d/6cOKXbxeW6/tO//dr1woLqI01g7XhqTriw0nsm2G2kWaZh2J0VOguGNWBgQVCIpR0LjdRNWb3g==} + dependencies: + '@pushrocks/smartping': 1.0.8 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartstring': 4.0.7 + '@types/default-gateway': 3.0.1 + isopen: 1.3.0 + public-ip: 6.0.1 + systeminformation: 5.22.0 + dev: true + + /@push.rocks/smartopen@2.0.0: + resolution: {integrity: sha512-eVT0GhtQ2drb95j/kktYst/Toh1zCwCqjTJFYtaYFUnnBnBUajPtBZDFnPQo01DN8JxoeCTo8jggq+PCvzcfww==} + dependencies: + open: 8.4.2 + + /@push.rocks/smartparam@1.1.10: + resolution: {integrity: sha512-2WDAUtc7GH+E0QszsiuXRdLPnJ/edlS2zPtFgfNpA0LJ8tJ5J9lyx6zhM39k4rKzKtK7bnjWHDb2tHE9zaOBYw==} + deprecated: deprecated in favour of @push.rocks/smartobject + dependencies: + '@push.rocks/smartpromise': 4.0.3 + minimatch: 9.0.3 + + /@push.rocks/smartpath@5.0.11: + resolution: {integrity: sha512-dqdd7KTby0AdaWYC9gVoHDTUIixFhEvo+mmdaTdNshZsfHNkm/EDV25dA+9gJ8/yoyuCYmrwmByNYy9a+xFUeQ==} + + /@push.rocks/smartpdf@3.0.16: + resolution: {integrity: sha512-W5tR1rlgrs7MoXEEGgnuJOAGLFxXTHDCgHpdhrtlt5M3t/ELZvaJoyMNRwrt3BbWEAb86dr4QwWSt380Q3MhfQ==} + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartfile': 10.0.41 + '@push.rocks/smartnetwork': 3.0.2 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartpuppeteer': 2.0.2 + '@push.rocks/smartunique': 3.0.8 + '@tsclass/tsclass': 4.0.52 + '@types/express': 4.17.21 + express: 4.18.3 + pdf-merger-js: 3.4.0 + pdf2json: 2.1.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@push.rocks/smartpromise@4.0.3: + resolution: {integrity: sha512-z3lIso4/6KK3c6NFTVGZ7AOBsGURf8ha3qQtX/OxjZFk5dqS//8PLd0XqghVdIaUlRGmJ7Sfds/efZERWn1tAg==} + + /@push.rocks/smartpuppeteer@2.0.2: + resolution: {integrity: sha512-EcYCT0PX++WjfHp7W5UYX3t8x5gSNpJMMUvhA7SHz8b2t76ItslNWxprRcF0CUQyN1fozbf5StZf7dwdGc/dIA==} + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartshell': 2.0.30 + puppeteer: 15.5.0 + tree-kill: 1.2.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@push.rocks/smartrequest@2.0.21: + resolution: {integrity: sha512-btk9GbiMNxNcEgJEqTq9qMFJ/6ua6oG4q49v+8ujKAXU50vFn1WQ/H0VAyeu9LMa5GCcRwUhNNDdwpLVGVbrBg==} + dependencies: + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smarturl': 3.0.7 + agentkeepalive: 4.5.0 + form-data: 4.0.0 + + /@push.rocks/smartrouter@1.0.16: + resolution: {integrity: sha512-GsEv6paOuIbC3vkIS5LxNroK68mNygB+oSDJRaUOE8/OCJLk0aPfI579nEiuXP/DkGjC1SjQ2bUWc3BTaUM3GQ==} + dependencies: + path-to-regexp: 6.2.1 + dev: false + + /@push.rocks/smartrx@3.0.7: + resolution: {integrity: sha512-qCWy0s3RLAgGSnaw/Gu0BNaJ59CsI6RK5OJDCCqxc7P2X/S755vuLtnAR5/0dEjdhCHXHX9ytPZx+o9g/CNiyA==} + dependencies: + '@push.rocks/smartpromise': 4.0.3 + rxjs: 7.8.1 + + /@push.rocks/smartshell@3.0.3: + resolution: {integrity: sha512-S4RXI76ltPetdJ8Gv4HlnlhR/hXDV8QmSU7TdhLEe171ZzfouAyt9XZ4MFDCtjk3VQ4Mw+zz4mSDaACXP/QdlQ==} + dependencies: + '@pushrocks/smartdelay': 3.0.1 + '@pushrocks/smartexit': 1.0.20 + '@pushrocks/smartpromise': 4.0.2 + '@types/which': 3.0.3 + tree-kill: 1.2.2 + which: 3.0.1 + + /@push.rocks/smartsitemap@2.0.3: + resolution: {integrity: sha512-jIcms8V1b2mt3dS4PKNlLR1DRC8pCDWMRVbnyM/2+snZOJZonQRlQzAyX8No0EfLbfdrfnxv2IjPX13X29Re6g==} + dependencies: + '@push.rocks/smartcache': 1.0.16 + '@push.rocks/smartfeed': 1.0.11 + '@push.rocks/smartxml': 1.0.8 + '@push.rocks/smartyaml': 2.0.5 + '@push.rocks/webrequest': 3.0.35 + '@tsclass/tsclass': 4.0.52 + + /@push.rocks/smartsocket@2.0.24: + resolution: {integrity: sha512-Glqv1Zi5TXgD+04P8OvTpiytyfrQxTPv67qAwZizAVVQ2zWJJgKqnIuoHT1zKP8QiKRNer+D58LCxX0ZE2XfzQ==} + dependencies: + '@api.global/typedrequest-interfaces': 3.0.18 + '@api.global/typedserver': 3.0.27 + '@push.rocks/isohash': 2.0.1 + '@push.rocks/isounique': 1.0.5 + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smarttime': 4.0.6 + engine.io: 6.5.2 + socket.io: 4.7.2 + socket.io-client: 4.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /@push.rocks/smartspawn@3.0.2: + resolution: {integrity: sha512-KdQd64FKIwjHyuuwR/CMP4MXzC08rAE7cjkyQqfJzwZhzJK2Pd/HPwazx0cfZFFWIiz09byYhBwK0rKXRiYEWA==} + dependencies: + '@pushrocks/smartpromise': 3.1.10 + spawn-wrap: 2.0.0 + threads: 1.7.0 + tiny-worker: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@push.rocks/smartssh@2.0.1: + resolution: {integrity: sha512-S+NFu1PYjsuExTUTQybXsT4r+mjqKydpAOfFvosF5ATO0EBD+nJc1TVx49dzAPO4/gs71Bxe3eLZWwZFwdKfsg==} + dependencies: + '@push.rocks/smartfile': 10.0.41 + '@push.rocks/smartpath': 5.0.11 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartshell': 3.0.3 + '@push.rocks/smartstring': 4.0.15 + '@types/fs-extra': 11.0.4 + fs-extra: 11.2.0 + minimatch: 9.0.3 + dev: false + + /@push.rocks/smartstate@2.0.17: + resolution: {integrity: sha512-ucx0zq8gWL3MuN4ogibUiGJlEH0of9WyDfxu+4pQySEdaZBJw0/UFkBM8wButkj0dF8w4wsVMN4YwZAdVqsAXg==} + dependencies: + '@push.rocks/isohash': 2.0.1 + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/webstore': 2.0.13 + dev: false + + /@push.rocks/smartstream@2.0.8: + resolution: {integrity: sha512-GlF/9cCkvBHwKa3DK4DO5wjfSgqkj6gAS4TrY9uD5NMHu9RQv4WiNrElTYj7iCEpnZgUnLO3tzw1JA3NRIMnnA==} + dependencies: + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@types/from2': 2.3.5 + '@types/through2': 2.0.41 + from2: 2.3.0 + through2: 4.0.2 + + /@push.rocks/smartstream@3.0.33: + resolution: {integrity: sha512-mtFjKmjKr5IMDP1NGYfedy8dL3Sjq677y/M2RTQ056FQXMkLWC/pYQnOogYFARX6R1PXh91datmgcW0NF/Jlfw==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + + /@push.rocks/smartstring@4.0.15: + resolution: {integrity: sha512-NTNeOjWyg+aHtBTiQEyXamr7oTvYZ3wS1fudHo9ua7CLrykpK+i+RxFyJaLg1zB5x9xQF3NLEQecB14HPFX8Cg==} + dependencies: + '@push.rocks/isounique': 1.0.5 + '@push.rocks/smartenv': 5.0.12 + '@types/randomatic': 3.1.5 + crypto-random-string: 5.0.0 + js-base64: 3.7.7 + randomatic: 3.1.1 + strip-indent: 4.0.0 + url: 0.11.3 + + /@push.rocks/smarttime@4.0.6: + resolution: {integrity: sha512-1whOow0YJw/TbN758TedRRxApoZbsvyxCVpoGjXh7DE/fEEgs7RCr4vVF5jYpyXNQuNMLpKJcTsSfyQ6RvH4Aw==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartpromise': 4.0.3 + croner: 7.0.7 + dayjs: 1.11.10 + is-nan: 1.3.2 + pretty-ms: 8.0.0 + + /@push.rocks/smartunique@3.0.8: + resolution: {integrity: sha512-5IpG0d3iTwX0q3NoxtVibUla12/QG++xWebDaw31Wg65UTCdkPOJnhrMNeSrx52Ny/zZ23aR5H6iCTqRGR5A7A==} + dependencies: + '@types/uuid': 9.0.8 + nanoid: 4.0.2 + uuid: 9.0.1 + + /@push.rocks/smarturl@3.0.7: + resolution: {integrity: sha512-nx4EWjQD9JeO7QVbOsxd1PFeDQYoSQOOOYCZ+r7QWXHLJG52iYzgvJDCQyX6p705HDkYMJWozW2ZzhR22qLKbw==} + + /@push.rocks/smartxml@1.0.8: + resolution: {integrity: sha512-idrPsBj9t6oxkLZJZgWtyZK6PnQ5BVDbBErk0UfGanXgSWJc+ZEKNYjVqr850+Na3+y0CT6AQdug7pnaokygwg==} + dependencies: + fast-xml-parser: 4.3.5 + + /@push.rocks/smartyaml@2.0.5: + resolution: {integrity: sha512-tBcf+HaOIfeEsTMwgUZDtZERCxXQyRsWO8Ar5DjBdiSRchbhVGZQEBzXswMS0W5ZoRenjgPK+4tPW3JQGRTfbg==} + dependencies: + '@types/js-yaml': 3.12.10 + js-yaml: 3.14.1 + + /@push.rocks/tapbundle@5.0.15(sinon@17.0.1): + resolution: {integrity: sha512-vVTVmQCovYq9xhif96z7wN8pFiB3UB9MZSkqMDgfNTWhlU19ZZR1azCZn+zXsYxgJmD8wKNYhvZYgdRz73KbBg==} + dependencies: + '@open-wc/testing': 2.5.33(sinon@17.0.1) + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartexpect': 1.0.21 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smarttime': 4.0.6 + transitivePeerDependencies: + - bufferutil + - sinon + - supports-color + - utf-8-validate + dev: true + + /@push.rocks/taskbuffer@3.1.7: + resolution: {integrity: sha512-QktGVJPucqQmW/QNGnscf4FAigT1H7JWKFGFdRuDEaOHKFh9qN+PXG3QY7DtZ4jfXdGLxPN4yAufDuPSAJYFnw==} + dependencies: + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartlog': 3.0.3 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + '@push.rocks/smarttime': 4.0.6 + '@push.rocks/smartunique': 3.0.8 + + /@push.rocks/webjwt@1.0.9: + resolution: {integrity: sha512-IhWAv0hxfXbLbmQHHOGr96Oe3H1kB0OTtDofM8N+9qhJeKxTHfF2pUrdpck6btAQQbaBY2D7xtHvumrIXU5HIg==} + dependencies: + '@push.rocks/smartstring': 4.0.15 + dev: false + + /@push.rocks/webrequest@3.0.35: + resolution: {integrity: sha512-8RZJ1lznDGo/94kQDvNCKAcOPfMLFzYkcU/5gnIwpKeN7uBs2gAiKxRr71HWL2VoR5XUP1XtODIB0rnb7f/pdQ==} + dependencies: + '@push.rocks/smartdelay': 3.0.5 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/webstore': 2.0.13 + + /@push.rocks/websetup@3.0.19: + resolution: {integrity: sha512-iKJDwXdMmQdu5siOIgziPRxM51lN1AU9HOr+yMteu1YMDkZT7HKCyisDAr4gC9WZ9a7FzsG8zgthm4dMeA8NTw==} + dependencies: + '@pushrocks/smartdelay': 3.0.1 + '@pushrocks/smartpromise': 4.0.2 + '@tsclass/tsclass': 4.0.52 + dev: false + + /@push.rocks/webstore@2.0.13: + resolution: {integrity: sha512-w5Q3g1TT5SDIXukAAoYVuWud+Y5ysS8qiBqPU00/re895VVZhUOSNJMNU6jyneZigmbWtwSLsxDkZHlsHWpfuA==} + dependencies: + '@apiglobal/typedrequest-interfaces': 2.0.1 + '@push.rocks/lik': 6.0.14 + '@push.rocks/smartenv': 5.0.12 + '@push.rocks/smartjson': 5.0.14 + '@push.rocks/smartpromise': 4.0.3 + '@push.rocks/smartrx': 3.0.7 + fake-indexeddb: 4.0.2 + idb: 7.1.1 + + /@push.rocks/webstream@1.0.8: + resolution: {integrity: sha512-Z1dSQ4JNVpBw3naoVWT/mXpxDYIt+bsjb6J9GKMHsTrPRytfxo2/caoJT//uAoaA0h9pIqb1WrxpYWyW1ehWPA==} + dependencies: + '@push.rocks/smartenv': 5.0.12 + + /@pushrocks/consolecolor@2.0.1: + resolution: {integrity: sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/consolecolor + dependencies: + ansi-256-colors: 1.1.0 + dev: true + + /@pushrocks/isohash@2.0.1: + resolution: {integrity: sha512-qCvC/NNcDDFQAH1uUKkJM779jY5qWijbOGGVf/9enfSItlkKe/rheUsYHgXg+cP7lwWFIxDbKYplq8QaOP6bkw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/isohash + dependencies: + '@pushrocks/smartenv': 5.0.5 + '@pushrocks/smarthash': 3.0.2 + dev: false + + /@pushrocks/isounique@1.0.5: + resolution: {integrity: sha512-XYeoKGkmIdsWX64NlPA1fuA41n/1bQ7LdYXytlU/QqYeW7ojgA0ARRhBSh/2phL6o0Jpw6K/7gJ8jc7ab/Tc+w==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/isounique + + /@pushrocks/lik@3.0.19: + resolution: {integrity: sha512-N9uTtQmTJ/iZ/V7LMCKbVx/ZAmP+b8uId0pxV9Au9T0Ulu9wcg3vNpyTQARgdWfG+tI9Qc0NHgOEa9H5mbDcDA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/lik + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrx': 2.0.27 + '@pushrocks/smarttime': 3.0.50 + '@pushrocks/smartunique': 3.0.3 + '@types/minimatch': 3.0.5 + minimatch: 3.1.2 + symbol-tree: 3.2.4 + dev: false + + /@pushrocks/lik@4.0.22: + resolution: {integrity: sha512-dg6Du7nr/SLU80yJw7a0zk2xX9Vc8SCLZaQMmSRBlsnL1/Z7qpWDOtpRC9VlL9vTLenbvwGTvPWMpOKyyNbiiA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/lik + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartmatch': 1.0.7 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrx': 2.0.27 + '@pushrocks/smarttime': 3.0.50 + '@types/minimatch': 3.0.5 + symbol-tree: 3.2.4 + + /@pushrocks/lik@5.0.7: + resolution: {integrity: sha512-fIxcrafl127+yErfedIurafCbiY2VwuuMlbNLjKrMKnFswol4y/anjXVRZ4euWUBck0KOfnBB0VuutcmlfYUqA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/lik + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartmatch': 1.0.7 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrx': 2.0.27 + '@pushrocks/smarttime': 3.0.50 + '@types/minimatch': 3.0.5 + symbol-tree: 3.2.4 + + /@pushrocks/lik@6.0.2: + resolution: {integrity: sha512-jO85PCb4gULfZbLoVpXb9HIR9Wgoigq6Zjcp1JqHOgM4KB38IZrU+HPWPWWMErAOOQmmYvVCdl4gkrkO/Rzn4w==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/lik + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartmatch': 2.0.0 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrx': 3.0.2 + '@pushrocks/smarttime': 4.0.1 + '@types/minimatch': 5.1.2 + '@types/symbol-tree': 3.2.5 + symbol-tree: 3.2.4 + + /@pushrocks/smartcache@1.0.16: + resolution: {integrity: sha512-bKtueWrRHs4Rlink81MpNUDpnXqoPy+7sdw/WQWKzlWfDWLzF/cO24efriNP+3O2W84MvfSzxliRcbxxPvefLA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartcache + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smarterror': 2.0.1 + '@pushrocks/smarthash': 3.0.2 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smarttime': 4.0.1 + dev: false + + /@pushrocks/smartchok@1.0.23: + resolution: {integrity: sha512-l1owj/ZYfP3chD5Gm3dkxucdpVRYiqyn/bLgCmtBZY0Q4EAvsu+bUJQ8qixiPiKYpjyIg0ZUKlCeDzZJc+G3Xg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartchok + dependencies: + '@pushrocks/lik': 3.0.19 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrx': 2.0.27 + '@types/chokidar': 2.1.3 + chokidar: 3.6.0 + dev: false + + /@pushrocks/smartclickhouse@2.0.14: + resolution: {integrity: sha512-qG2Wlm4bIpFf4BRnLDTjOMkOm6WgJaK/55yeEWoBJqw4TCuvE6fL1hNe5YCeSJYRP00oA/kNfknIrS+xZSx1pg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartclickhouse + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartobject': 1.0.10 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smarturl': 3.0.6 + '@pushrocks/webrequest': 3.0.28 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@pushrocks/smartdelay@2.0.13: + resolution: {integrity: sha512-s6Wh0BHWMfZ5VYONQwpxOYX1JeC9RKA0O9TxEzfZ6FCw2oNQb2QUPCixT9rsceKwva4+atKRw/RfU+Z7aJDmsA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartdelay + dependencies: + '@pushrocks/smartpromise': 3.1.10 + + /@pushrocks/smartdelay@3.0.1: + resolution: {integrity: sha512-I+i/QhC6kLsXsWyW19UgD1vH2r1YWVxK19VMxt2CEuvxMyC6tuCd0vqud9vv5JxaxsJwxWlOsrURkgL4tXeILQ==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartdelay + dependencies: + '@pushrocks/smartpromise': 4.0.2 + + /@pushrocks/smartenv@5.0.5: + resolution: {integrity: sha512-VWON1OJ4qV2/9hzJbgRquRekaO9am3b8W82tgCwgO6LBg23ea2tanfd+gESVMbRFduxHVoFLvlhSBcDGM5zsLA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartenv + dependencies: + '@pushrocks/smartpromise': 3.1.10 + + /@pushrocks/smarterror@2.0.1: + resolution: {integrity: sha512-3OrF5me+/sy5VgwR/tfCqs7qhb0Ywzgn8tTThRUZnCGas0aindISzMiW7cIro3RlFykmtPmdTztC9Ostu2ioeA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smarterror + dependencies: + clean-stack: 1.3.0 + make-error-cause: 2.3.0 + + /@pushrocks/smartexit@1.0.20: + resolution: {integrity: sha512-u/KgA7s2zAtZ7gZvL13HZbO3mZATvjfCLU8Ez6h8VweG8UsIBVaPfYziMDCmJOWIPYLGzEW8eG/u4mCHuyLBow==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartexit + dependencies: + '@pushrocks/lik': 4.0.22 + '@pushrocks/smartdelay': 2.0.13 + + /@pushrocks/smartexpress@4.0.35: + resolution: {integrity: sha512-/xuUshI4VtfM2Q8RJxsTjD/7sI2HZ4p4+CmKOZYK66nxgeyO+IkKM/qcxHdZLbuB2q/ekYNAfvce8VL0RxtTVQ==} + deprecated: This package has been replaced by @apiglobal/typedserver + dependencies: + '@apiglobal/typedrequest': 2.0.12 + '@apiglobal/typedsocket': 2.0.24 + '@pushrocks/lik': 6.0.2 + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartenv': 5.0.5 + '@pushrocks/smartfeed': 1.0.11 + '@pushrocks/smartfile': 10.0.26 + '@pushrocks/smartmanifest': 1.0.8 + '@pushrocks/smartmime': 1.0.5 + '@pushrocks/smartpath': 5.0.5 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrequest': 2.0.15 + '@pushrocks/smartsitemap': 2.0.1 + '@pushrocks/smarttime': 4.0.1 + '@tsclass/tsclass': 4.0.52 + '@types/compression': 1.7.5 + '@types/cors': 2.8.17 + '@types/express': 4.17.21 + '@types/finalhandler': 1.2.3 + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.18.3 + express-force-ssl: 0.3.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@pushrocks/smartfeed@1.0.11: + resolution: {integrity: sha512-PcsiQ4tkwTpGxOdLiEpAR5vfFpn8Utnlind4mmX+FLIZVuuONaApefWMvaYv5ysmfnWQuCE2qkFq1J5ulDcBbQ==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartfeed + dependencies: + '@tsclass/tsclass': 3.0.48 + feed: 4.2.2 + rss-parser: 3.13.0 + dev: false + + /@pushrocks/smartfile-interfaces@1.0.7: + resolution: {integrity: sha512-C/v9Scbx1J+ByMk3YBZrlLRYXdObty/Uz/h6kSZqsO8ghYuT9l7OVpEcyduiSVPakaMi6YnzfME3Nfs3oLj//Q==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartfile-interfaces + dev: false + + /@pushrocks/smartfile@10.0.26: + resolution: {integrity: sha512-JAbsVHXCkBoqI+GHN/gnbXji8hztCVlPrri63HQAdx4lS9OyDCdXN2CSbEIBXQIsXFx9ITzx5LZiPq0owbcDpQ==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartfile + dependencies: + '@pushrocks/lik': 6.0.2 + '@pushrocks/smartdelay': 3.0.1 + '@pushrocks/smartfile-interfaces': 1.0.7 + '@pushrocks/smarthash': 3.0.2 + '@pushrocks/smartjson': 5.0.6 + '@pushrocks/smartmime': 1.0.5 + '@pushrocks/smartpath': 5.0.5 + '@pushrocks/smartpromise': 4.0.2 + '@pushrocks/smartrequest': 2.0.15 + '@pushrocks/smartstream': 2.0.3 + '@pushrocks/streamfunction': 4.0.4 + '@types/fs-extra': 11.0.4 + '@types/glob': 8.1.0 + '@types/js-yaml': 4.0.9 + fs-extra: 11.2.0 + glob: 10.3.10 + js-yaml: 4.1.0 + dev: false + + /@pushrocks/smartfile@9.0.6: + resolution: {integrity: sha512-mXFrnHpM3Eq0MLokGP6DDRTk+v/HDlQwnNq4HFuCqs8YW6uTU/FoRJDnrCAf+spSzkDm0m1ajz/4rke8Dk9l6A==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartfile + dependencies: + '@pushrocks/lik': 5.0.7 + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartfile-interfaces': 1.0.7 + '@pushrocks/smarthash': 2.1.10 + '@pushrocks/smartjson': 4.0.6 + '@pushrocks/smartmime': 1.0.5 + '@pushrocks/smartpath': 4.0.3 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrequest': 1.1.56 + '@types/fs-extra': 9.0.13 + '@types/glob': 7.2.0 + '@types/js-yaml': 4.0.9 + fs-extra: 10.1.0 + glob: 7.2.3 + js-yaml: 4.1.0 + dev: false + + /@pushrocks/smarthash@2.1.10: + resolution: {integrity: sha512-f6lnQPa2lmkSQOMvWwZ6R6wcNvbDWuXH5OhQNvwmog8af3hBEmOEXxjauj6XU+l7ICJ6qxr3wsvpt4y7Ogyc9A==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smarthash + dependencies: + '@pushrocks/smartjson': 4.0.6 + '@pushrocks/smartpromise': 3.1.10 + '@types/through2': 2.0.41 + through2: 4.0.2 + dev: false + + /@pushrocks/smarthash@3.0.2: + resolution: {integrity: sha512-jXW4f8k6iqOQRvkCmXMID1C+qXyNvUMKm7apPETxnO+L172VlzxP1dml0Ey1+vjfpU2luKCteJWX7W95sOdLDg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smarthash + dependencies: + '@pushrocks/smartjson': 5.0.6 + '@pushrocks/smartpromise': 3.1.10 + '@types/through2': 2.0.41 + through2: 4.0.2 + + /@pushrocks/smartjson@4.0.6: + resolution: {integrity: sha512-lykr068RSDHs0+EXCvIDVxjKnDtRQ2M7EXOo5jVrUU6/OEdfRl9ErM1K/oPafiEi47/PtTrwLlp1KdSgqkRjmg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartjson + dependencies: + '@types/buffer-json': 2.0.3 + '@types/fast-json-stable-stringify': 2.1.0 + buffer-json: 2.0.0 + fast-json-stable-stringify: 2.1.0 + lodash.clonedeep: 4.5.0 + dev: false + + /@pushrocks/smartjson@5.0.6: + resolution: {integrity: sha512-9OJbnRgLTaCRQz+pqu5tB3ZCqRs5Zh0hnBe7t7URE+TgwIZ8aiELUIbWRkgn4mSGVzHyL6pqTyIowP6AjUCG3w==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartjson + dependencies: + '@pushrocks/smartstring': 4.0.7 + '@types/buffer-json': 2.0.3 + buffer-json: 2.0.0 + fast-json-stable-stringify: 2.1.0 + lodash.clonedeep: 4.5.0 + + /@pushrocks/smartlog-destination-devtools@1.0.10: + resolution: {integrity: sha512-Kkss3lAogY+n/Xx3N9eOjWz0L4XUWlCYZLOqWnDOIMzX5mJtwesYXHIT8SHvADv13qT4d7T9k+VUQNsDEoT71g==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartlog-destination-devtools + dependencies: + '@pushrocks/smartlog-interfaces': 2.0.23 + dev: false + + /@pushrocks/smartlog-interfaces@2.0.23: + resolution: {integrity: sha512-tXqwfrekGxGZJB72BFQppywk7413hXVDgcJNeU+kY6xvmzVjf2HxOMbFYhewh1+p4uai1u9n0xcMb0qbbPy4/Q==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartlog-interfaces + dependencies: + '@apiglobal/typedrequest-interfaces': 1.0.20 + + /@pushrocks/smartlog-interfaces@3.0.0: + resolution: {integrity: sha512-yjppiLLJHBcrXTJJusDbFTvHq0RTMl3LnhvWAhyyy8U0O4VkJxIls1t5mS6jsEwxogP88+0flQIWknNJeB913A==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartlog-interfaces + dependencies: + '@apiglobal/typedrequest-interfaces': 2.0.1 + + /@pushrocks/smartlog@3.0.2: + resolution: {integrity: sha512-1WPA0LX9HfE54ESKtk32uvsXiYIMu2QX7NUlQ3uHSMmFULnJYo2m/LeKEf6qHH7DJtxZbkWzkrMOkZVPL1MeNg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartlog + dependencies: + '@pushrocks/isounique': 1.0.5 + '@pushrocks/smartlog-interfaces': 3.0.0 + dev: false + + /@pushrocks/smartmanifest@1.0.8: + resolution: {integrity: sha512-inHmTp58Z8xl+c6mdOrfxc9IjUKuqho1i+WUI74G7rn6HwEn3cMd/06R1v80Xlx+95EYWzBwnYtuo7j7DafrdQ==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartmanifest + dev: false + + /@pushrocks/smartmanifest@2.0.2: + resolution: {integrity: sha512-q5QMWTUO9vv59IksUc24isVbOLyde4CU5TwGT01WrzflCStH9MLgPOo5JoPz04UjokxpsFbFqGcPnWUr37toyw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartmanifest + dev: false + + /@pushrocks/smartmatch@1.0.7: + resolution: {integrity: sha512-D+lK5HIKO4Kj1Jm/ycKvy1VzDJ3V6ucHqmf5DMBFdm18BrMj2Zb6M7wN8HUKtkfHvOI7ig85JMuANSEyO7kAPg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartmatch + dependencies: + matcher: 3.0.0 + + /@pushrocks/smartmatch@2.0.0: + resolution: {integrity: sha512-PLvBNVeuY9BERNLq3PFDkhnHHc0RpilEGHd4aUI5XRFlZF++LETdLxPbxw+DHbvHlkUf/nep09f7rrL9Tqub1Q==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartmatch + dependencies: + matcher: 5.0.0 + + /@pushrocks/smartmime@1.0.5: + resolution: {integrity: sha512-FCRg5p5NFTyZnPsvy2sbheVGz67Zeno7VoZARrcP0O+hFtVPnQKnJ73ze11G+MKZ3dVCmYCh1Li+73R6Lx8XJA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartmime + dependencies: + '@types/mime-types': 2.1.4 + mime-types: 2.1.35 + dev: false + + /@pushrocks/smartobject@1.0.10: + resolution: {integrity: sha512-Tfhvy/XoYQ0e4Sl/ztvqJh+lxR9+zixHlnMPstYW05ZbRTZzC6lf1EZLcsmjiALkz6IDFNEwrMrwODlJIpjj+A==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartobject + dependencies: + fast-deep-equal: 3.1.3 + minimatch: 5.1.6 + dev: false + + /@pushrocks/smartopen@2.0.0: + resolution: {integrity: sha512-pqglAbp/OiJ8nUlCLKq8A2n1tKi7WH9lJgV93fs5s4gZCTVijGRg1SMZNAa/OI2O5hRfBeXacu/Na6bQSJ3hyw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartopen + dependencies: + open: 8.4.2 + dev: false + + /@pushrocks/smartpath@4.0.3: + resolution: {integrity: sha512-KWz4DWOrB0sPfk6L4i+CPOo+UK5HXNaLI7ZAaqJe1nEWoDrpyeds1dNDaqVAmSgX4riLGxVpslKH5MnABCPsPg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartpath + dev: false + + /@pushrocks/smartpath@5.0.5: + resolution: {integrity: sha512-t2lXXGMpKnPlwubIcYGD6cGi2CUJxJ3t2yftVt8tHfjX68jELA5sJhFMtyD3AeFZVxePFZOCiHwWEbWkSDNnmw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartpath + dev: false + + /@pushrocks/smartping@1.0.8: + resolution: {integrity: sha512-VM2gfS1sTuycj/jHyDa0lDntkPe7/JT0b2kGsy265RkichAJZkoEp3fboRJH/WAdzM8T4Du64JYgZkc8v2HHQg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartping + dependencies: + '@types/ping': 0.4.4 + ping: 0.4.4 + dev: true + + /@pushrocks/smartpromise@3.1.10: + resolution: {integrity: sha512-VeTurbZ1+ZMxBDJk1Y1LV8SN9xLI+oDXKVeCFw41FAGEKOUEqordqFpi6t+7Vhe/TXUZzCVpZ5bXxAxrGf8yTQ==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartpromise + + /@pushrocks/smartpromise@4.0.2: + resolution: {integrity: sha512-bqorOaGXPOuiOSV81luTKrTghg4O4NBRD0zyv7TIqmrMGf4a0uoozaUMp1X8vQdZW+y0gTzUJP9wkzAE6Cci0g==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartpromise + + /@pushrocks/smartrequest@1.1.56: + resolution: {integrity: sha512-iF6bApmTgd3ZvRK8OHa77UFg8nVZxS1Y6iL8VfHpWOXdSlQZcXo/WbvwxYtu0+wkERAfFtCTGrrLAPGsFm9lhw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartrequest + dependencies: + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smarturl': 2.0.1 + agentkeepalive: 4.5.0 + form-data: 4.0.0 + dev: false + + /@pushrocks/smartrequest@2.0.15: + resolution: {integrity: sha512-QDXXKhOwAIp+TNFrDglApBpbCTClHrf8pUM3w81q5+VtrMbqUrLINHhInXt3ZUSgTS7RD9HtJSIVSqAukcJo5A==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartrequest + dependencies: + '@pushrocks/smartpromise': 4.0.2 + '@pushrocks/smarturl': 3.0.6 + agentkeepalive: 4.5.0 + form-data: 4.0.0 + dev: false + + /@pushrocks/smartrx@2.0.27: + resolution: {integrity: sha512-aFRpGxDZgHH1mpmkRBTFwuIVqFiDxk22n2vX2gW4hntV0nJGlt9M9dixMFFXGUjabwX9hHW7y60QPJm2rKaypA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartrx + dependencies: + '@pushrocks/smartpromise': 3.1.10 + rxjs: 7.8.1 + + /@pushrocks/smartrx@3.0.2: + resolution: {integrity: sha512-uh2ByyE86Q4f1/rpktR29vAMzHgAvAhFZqbvP6Sme9FK57OZG0mqZxDvJMVNP5O+QOn0Chrbl3BZCuRsFF3NUA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartrx + dependencies: + '@pushrocks/smartpromise': 4.0.2 + rxjs: 7.8.1 + + /@pushrocks/smartshell@2.0.30: + resolution: {integrity: sha512-HPgdTFzfzhk2TQau/jVdYNSANlxyBZdqq2vyZ+bZahegVHfH/27Zur5Fk+2vE16VJjJMqP7zcvDITUe2+ipgJg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartshell + dependencies: + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartexit': 1.0.20 + '@pushrocks/smartpromise': 3.1.10 + '@types/which': 2.0.2 + tree-kill: 1.2.2 + which: 2.0.2 + dev: true + + /@pushrocks/smartsitemap@2.0.1: + resolution: {integrity: sha512-eB4ybrhUtJaoqDY3P76NIp6gbIOGzLJPwqkMGo2d8dcJftqlySZxalsZTLOIHqLzQXYwSxuKo2JYGrjokx83Vw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartsitemap + dependencies: + '@pushrocks/smartcache': 1.0.16 + '@pushrocks/smartfeed': 1.0.11 + '@pushrocks/smartxml': 1.0.6 + '@pushrocks/smartyaml': 2.0.5 + '@pushrocks/webrequest': 3.0.28 + '@tsclass/tsclass': 3.0.48 + transitivePeerDependencies: + - supports-color + dev: false + + /@pushrocks/smartsocket@2.0.19: + resolution: {integrity: sha512-ZCmnUKnXMxD99mZkpXHkCN5uJTy/x3ScfRQ6qS1PKPjKxSdt6SPmeJqP5NKBhLlKd4QcE12zoJvlSZf/4eDd1w==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartsocket + dependencies: + '@apiglobal/typedrequest-interfaces': 2.0.1 + '@pushrocks/isohash': 2.0.1 + '@pushrocks/isounique': 1.0.5 + '@pushrocks/lik': 6.0.2 + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartenv': 5.0.5 + '@pushrocks/smartexpress': 4.0.35 + '@pushrocks/smartjson': 5.0.6 + '@pushrocks/smartlog': 3.0.2 + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrx': 3.0.2 + '@pushrocks/smarttime': 4.0.1 + engine.io: 6.3.1 + socket.io: 4.5.4 + socket.io-client: 4.5.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@pushrocks/smartstream@2.0.3: + resolution: {integrity: sha512-Zz1amk2FgqWyZFQE8WonKhNMreETm50pqDanp2g9uJBCNwFHIppJD4Qbpy/FFEFfp4Rs326hoBCWbZwU/FEymw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartstream + dependencies: + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrx': 2.0.27 + '@types/from2': 2.3.5 + '@types/through2': 2.0.41 + from2: 2.3.0 + through2: 4.0.2 + dev: false + + /@pushrocks/smartstring@4.0.7: + resolution: {integrity: sha512-TxHSar7Cj29E+GOcIj4DeZKWCNVzHKdqnrBRqcBqLqmeYZvzFosLXpFKoaCJDq7MSxuPoCvu5woSdp9YmPXyog==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartstring + dependencies: + '@pushrocks/isounique': 1.0.5 + '@pushrocks/smartenv': 5.0.5 + '@types/randomatic': 3.1.5 + buffer: 6.0.3 + crypto-random-string: 5.0.0 + js-base64: 3.7.7 + normalize-newline: 4.1.0 + randomatic: 3.1.1 + strip-indent: 4.0.0 + url: 0.11.3 + + /@pushrocks/smarttime@3.0.50: + resolution: {integrity: sha512-44NgDuNukCQIlPJFNORcDugp36Yj6HT6eZEWtn4M4HKlTFCQ8De+ztwGg+gRceucJ202zqLRKrXoh8dVdS3BaQ==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smarttime + dependencies: + '@pushrocks/lik': 5.0.7 + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartpromise': 3.1.10 + croner: 4.4.1 + dayjs: 1.11.10 + is-nan: 1.3.2 + pretty-ms: 7.0.1 + + /@pushrocks/smarttime@4.0.1: + resolution: {integrity: sha512-5SpUqD3X/2IZCTezCpk48Ss7cDc9QOuQAkeAYnJrRjDL4UCLakA3lBeHXRD/rsIB7S1smtXlayQ/vizfYzdbfw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smarttime + dependencies: + '@pushrocks/lik': 6.0.2 + '@pushrocks/smartdelay': 2.0.13 + '@pushrocks/smartpromise': 3.1.10 + croner: 5.7.0 + dayjs: 1.11.10 + is-nan: 1.3.2 + pretty-ms: 8.0.0 + + /@pushrocks/smartunique@3.0.3: + resolution: {integrity: sha512-f+c3s2WzzjASoRHyYTLU0kHDVWREg4sZVdi5L42bTA3CTUWNrcGUC62h4wP4U4BiPl3bopTr3LPhClZHJ738oA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartunique + dependencies: + '@types/shortid': 0.0.29 + '@types/uuid': 7.0.8 + shortid: 2.2.16 + uuid: 7.0.3 + dev: false + + /@pushrocks/smarturl@2.0.1: + resolution: {integrity: sha512-6KGnf2vHR7hW4mQpAD7gkDVL3QVML3jb/No/Uw+qCqvs0TaQr60Yjm+CXoLxJNCKwmrL+I1yx8mhAHBHfYJiJA==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smarturl + dev: false + + /@pushrocks/smarturl@3.0.6: + resolution: {integrity: sha512-YHWnYE1mm8WIJk1usSXg+kNM7s7ByM+PKApO9cgl0T/oGybjzAJiO3clGNDro4ysP0TD+WuvJuiVue02bErEBQ==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smarturl + dev: false + + /@pushrocks/smartxml@1.0.6: + resolution: {integrity: sha512-Cy//pxzdpplqE64h9/sAwvAkUBv9t3Nw9v6k2c+erXH779iOtuyGiiyWqgbRTX1wo2CRhMJqWGJx6xd2Ljq5kw==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartxml + dependencies: + fast-xml-parser: 3.21.1 + dev: false + + /@pushrocks/smartyaml@2.0.5: + resolution: {integrity: sha512-nJGqvJ56vAst5evLqaPYQ4mO5uJVnXVlriyL3D6s89YMUoWGS3qj/jK+V8hDgznFCnd46pNjnc0GfQBCDpZ6eg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/smartyaml + dependencies: + '@types/js-yaml': 3.12.10 + js-yaml: 3.14.1 + dev: false + + /@pushrocks/streamfunction@4.0.4: + resolution: {integrity: sha512-qnGs9cNkUq7nnluQCuX4te+NeB3RoikNNs+kbSCZCSnwYQWvoHXMeobkK8GXAC1bE3kWKAd68ja8cuLvaDebBg==} + dependencies: + '@pushrocks/smartpromise': 3.1.10 + '@pushrocks/smartrx': 2.0.27 + '@types/from2': 2.3.5 + '@types/through2': 2.0.41 + from2: 2.3.0 + through2: 4.0.2 + dev: false + + /@pushrocks/webrequest@3.0.28: + resolution: {integrity: sha512-V7mRb0RC36GkbCvZv0d2p1Uiu/4+xA74IHTP5Hjw0dWYHnIsagcgf9E8Nie3Fo7w3gfQ3BtkHo+LtazwnAh0OQ==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/webrequest + dependencies: + '@adobe/fetch': 4.1.1 + '@apiglobal/typedserver': 2.0.65 + '@pushrocks/smartdelay': 3.0.1 + '@pushrocks/smartenv': 5.0.5 + '@pushrocks/smartjson': 5.0.6 + '@pushrocks/smartpromise': 4.0.2 + '@pushrocks/webstore': 2.0.8 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@pushrocks/webstore@2.0.8: + resolution: {integrity: sha512-gvZ5QnZu14bPIWaFDOCyH6pfPgN/nQ0hF3EFhE74Ypfm5dCzq6OZEC9jeUTXDypfsvbSs3xAgj4XG83sVSUDAg==} + deprecated: This package has been deprecated in favour of the new package at @push.rocks/webstore + dependencies: + '@apiglobal/typedrequest-interfaces': 2.0.1 + '@pushrocks/lik': 6.0.2 + '@pushrocks/smartenv': 5.0.5 + '@pushrocks/smartjson': 5.0.6 + '@pushrocks/smartpromise': 4.0.2 + '@pushrocks/smartrx': 3.0.2 + fake-indexeddb: 4.0.2 + idb: 7.1.1 + dev: false + + /@rkusa/linebreak@1.0.0: + resolution: {integrity: sha512-yCSm87XA1aYMgfcABSxcIkk3JtCw3AihNceHY+DnZGLvVP/g2z3UWZbi0xIoYpZWAJEVPr5Zt3QE37Q80wF1pA==} + dependencies: + unicode-trie: 0.3.1 + dev: true + + /@serve.zone/interfaces@1.0.47: + resolution: {integrity: sha512-/ZZahqwlJmT+V/35DCn0WTdDPrYz7EE5dAjKway7OXxq0ydTM4i/bphZsm8ogiViq0ftTVGMml271LnD3CbWCw==} + dependencies: + '@api.global/typedrequest-interfaces': 3.0.18 + '@push.rocks/smartlog-interfaces': 3.0.0 + '@tsclass/tsclass': 4.0.52 + dev: false + + /@sindresorhus/is@5.6.0: + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + dev: true + + /@sinonjs/commons@2.0.0: + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + dependencies: + type-detect: 4.0.8 + dev: true + + /@sinonjs/fake-timers@11.2.2: + resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} + dependencies: + '@sinonjs/commons': 3.0.1 + dev: true + + /@sinonjs/samsam@8.0.0: + resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==} + dependencies: + '@sinonjs/commons': 2.0.0 + lodash.get: 4.4.2 + type-detect: 4.0.8 + dev: true + + /@sinonjs/text-encoding@0.7.2: + resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + dev: true + + /@smithy/abort-controller@2.1.3: + resolution: {integrity: sha512-c2aYH2Wu1RVE3rLlVgg2kQOBJGM0WbjReQi5DnPTm2Zb7F0gk7J2aeQeaX2u/lQZoHl6gv8Oac7mt9alU3+f4A==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/config-resolver@2.1.4: + resolution: {integrity: sha512-AW2WUZmBAzgO3V3ovKtsUbI3aBNMeQKFDumoqkNxaVDWF/xfnxAWqBKDr/NuG7c06N2Rm4xeZLPiJH/d+na0HA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/node-config-provider': 2.2.4 + '@smithy/types': 2.10.1 + '@smithy/util-config-provider': 2.2.1 + '@smithy/util-middleware': 2.1.3 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/core@1.3.5: + resolution: {integrity: sha512-Rrc+e2Jj6Gu7Xbn0jvrzZlSiP2CZocIOfZ9aNUA82+1sa6GBnxqL9+iZ9EKHeD9aqD1nU8EK4+oN2EiFpSv7Yw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/middleware-endpoint': 2.4.4 + '@smithy/middleware-retry': 2.1.4 + '@smithy/middleware-serde': 2.1.3 + '@smithy/protocol-http': 3.2.1 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + '@smithy/util-middleware': 2.1.3 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/credential-provider-imds@2.2.4: + resolution: {integrity: sha512-DdatjmBZQnhGe1FhI8gO98f7NmvQFSDiZTwC3WMvLTCKQUY+Y1SVkhJqIuLu50Eb7pTheoXQmK+hKYUgpUWsNA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/node-config-provider': 2.2.4 + '@smithy/property-provider': 2.1.3 + '@smithy/types': 2.10.1 + '@smithy/url-parser': 2.1.3 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/eventstream-codec@2.1.3: + resolution: {integrity: sha512-rGlCVuwSDv6qfKH4/lRxFjcZQnIE0LZ3D4lkMHg7ZSltK9rA74r0VuGSvWVQ4N/d70VZPaniFhp4Z14QYZsa+A==} + requiresBuild: true + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 2.10.1 + '@smithy/util-hex-encoding': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/fetch-http-handler@2.4.3: + resolution: {integrity: sha512-Fn/KYJFo6L5I4YPG8WQb2hOmExgRmNpVH5IK2zU3JKrY5FKW7y9ar5e0BexiIC9DhSKqKX+HeWq/Y18fq7Dkpw==} + requiresBuild: true + dependencies: + '@smithy/protocol-http': 3.2.1 + '@smithy/querystring-builder': 2.1.3 + '@smithy/types': 2.10.1 + '@smithy/util-base64': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/hash-node@2.1.3: + resolution: {integrity: sha512-FsAPCUj7VNJIdHbSxMd5uiZiF20G2zdSDgrgrDrHqIs/VMxK85Vqk5kMVNNDMCZmMezp6UKnac0B4nAyx7HJ9g==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + '@smithy/util-buffer-from': 2.1.1 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/invalid-dependency@2.1.3: + resolution: {integrity: sha512-wkra7d/G4CbngV4xsjYyAYOvdAhahQje/WymuQdVEnXFExJopEu7fbL5AEAlBPgWHXwu94VnCSG00gVzRfExyg==} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/is-array-buffer@2.1.1: + resolution: {integrity: sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/middleware-content-length@2.1.3: + resolution: {integrity: sha512-aJduhkC+dcXxdnv5ZpM3uMmtGmVFKx412R1gbeykS5HXDmRU6oSsyy2SoHENCkfOGKAQOjVE2WVqDJibC0d21g==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/protocol-http': 3.2.1 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/middleware-endpoint@2.4.4: + resolution: {integrity: sha512-4yjHyHK2Jul4JUDBo2sTsWY9UshYUnXeb/TAK/MTaPEb8XQvDmpwSFnfIRDU45RY1a6iC9LCnmJNg/yHyfxqkw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/middleware-serde': 2.1.3 + '@smithy/node-config-provider': 2.2.4 + '@smithy/shared-ini-file-loader': 2.3.4 + '@smithy/types': 2.10.1 + '@smithy/url-parser': 2.1.3 + '@smithy/util-middleware': 2.1.3 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/middleware-retry@2.1.4: + resolution: {integrity: sha512-Cyolv9YckZTPli1EkkaS39UklonxMd08VskiuMhURDjC0HHa/AD6aK/YoD21CHv9s0QLg0WMLvk9YeLTKkXaFQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/node-config-provider': 2.2.4 + '@smithy/protocol-http': 3.2.1 + '@smithy/service-error-classification': 2.1.3 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + '@smithy/util-middleware': 2.1.3 + '@smithy/util-retry': 2.1.3 + tslib: 2.6.2 + uuid: 8.3.2 + dev: false + optional: true + + /@smithy/middleware-serde@2.1.3: + resolution: {integrity: sha512-s76LId+TwASrHhUa9QS4k/zeXDUAuNuddKklQzRgumbzge5BftVXHXIqL4wQxKGLocPwfgAOXWx+HdWhQk9hTg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/middleware-stack@2.1.3: + resolution: {integrity: sha512-opMFufVQgvBSld/b7mD7OOEBxF6STyraVr1xel1j0abVILM8ALJvRoFbqSWHGmaDlRGIiV9Q5cGbWi0sdiEaLQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/node-config-provider@2.2.4: + resolution: {integrity: sha512-nqazHCp8r4KHSFhRQ+T0VEkeqvA0U+RhehBSr1gunUuNW3X7j0uDrWBxB2gE9eutzy6kE3Y7L+Dov/UXT871vg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/property-provider': 2.1.3 + '@smithy/shared-ini-file-loader': 2.3.4 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/node-http-handler@2.4.1: + resolution: {integrity: sha512-HCkb94soYhJMxPCa61wGKgmeKpJ3Gftx1XD6bcWEB2wMV1L9/SkQu/6/ysKBnbOzWRE01FGzwrTxucHypZ8rdg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/abort-controller': 2.1.3 + '@smithy/protocol-http': 3.2.1 + '@smithy/querystring-builder': 2.1.3 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/property-provider@2.1.3: + resolution: {integrity: sha512-bMz3se+ySKWNrgm7eIiQMa2HO/0fl2D0HvLAdg9pTMcpgp4SqOAh6bz7Ik6y7uQqSrk4rLjIKgbQ6yzYgGehCQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/protocol-http@3.2.1: + resolution: {integrity: sha512-KLrQkEw4yJCeAmAH7hctE8g9KwA7+H2nSJwxgwIxchbp/L0B5exTdOQi9D5HinPLlothoervGmhpYKelZ6AxIA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/querystring-builder@2.1.3: + resolution: {integrity: sha512-kFD3PnNqKELe6m9GRHQw/ftFFSZpnSeQD4qvgDB6BQN6hREHELSosVFUMPN4M3MDKN2jAwk35vXHLoDrNfKu0A==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + '@smithy/util-uri-escape': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/querystring-parser@2.1.3: + resolution: {integrity: sha512-3+CWJoAqcBMR+yvz6D+Fc5VdoGFtfenW6wqSWATWajrRMGVwJGPT3Vy2eb2bnMktJc4HU4bpjeovFa566P3knQ==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/service-error-classification@2.1.3: + resolution: {integrity: sha512-iUrpSsem97bbXHHT/v3s7vaq8IIeMo6P6cXdeYHrx0wOJpMeBGQF7CB0mbJSiTm3//iq3L55JiEm8rA7CTVI8A==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + dev: false + optional: true + + /@smithy/shared-ini-file-loader@2.3.4: + resolution: {integrity: sha512-CiZmPg9GeDKbKmJGEFvJBsJcFnh0AQRzOtQAzj1XEa8N/0/uSN/v1LYzgO7ry8hhO8+9KB7+DhSW0weqBra4Aw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/signature-v4@2.1.3: + resolution: {integrity: sha512-Jq4iPPdCmJojZTsPePn4r1ULShh6ONkokLuxp1Lnk4Sq7r7rJp4HlA1LbPBq4bD64TIzQezIpr1X+eh5NYkNxw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/eventstream-codec': 2.1.3 + '@smithy/is-array-buffer': 2.1.1 + '@smithy/types': 2.10.1 + '@smithy/util-hex-encoding': 2.1.1 + '@smithy/util-middleware': 2.1.3 + '@smithy/util-uri-escape': 2.1.1 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/smithy-client@2.4.2: + resolution: {integrity: sha512-ntAFYN51zu3N3mCd95YFcFi/8rmvm//uX+HnK24CRbI6k5Rjackn0JhgKz5zOx/tbNvOpgQIwhSX+1EvEsBLbA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/middleware-endpoint': 2.4.4 + '@smithy/middleware-stack': 2.1.3 + '@smithy/protocol-http': 3.2.1 + '@smithy/types': 2.10.1 + '@smithy/util-stream': 2.1.3 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/types@2.10.1: + resolution: {integrity: sha512-hjQO+4ru4cQ58FluQvKKiyMsFg0A6iRpGm2kqdH8fniyNd2WyanoOsYJfMX/IFLuLxEoW6gnRkNZy1y6fUUhtA==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/url-parser@2.1.3: + resolution: {integrity: sha512-X1NRA4WzK/ihgyzTpeGvI9Wn45y8HmqF4AZ/FazwAv8V203Ex+4lXqcYI70naX9ETqbqKVzFk88W6WJJzCggTQ==} + requiresBuild: true + dependencies: + '@smithy/querystring-parser': 2.1.3 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-base64@2.1.1: + resolution: {integrity: sha512-UfHVpY7qfF/MrgndI5PexSKVTxSZIdz9InghTFa49QOvuu9I52zLPLUHXvHpNuMb1iD2vmc6R+zbv/bdMipR/g==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/util-buffer-from': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-body-length-browser@2.1.1: + resolution: {integrity: sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-body-length-node@2.2.1: + resolution: {integrity: sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-buffer-from@2.1.1: + resolution: {integrity: sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/is-array-buffer': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-config-provider@2.2.1: + resolution: {integrity: sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-defaults-mode-browser@2.1.4: + resolution: {integrity: sha512-J6XAVY+/g7jf03QMnvqPyU+8jqGrrtXoKWFVOS+n1sz0Lg8HjHJ1ANqaDN+KTTKZRZlvG8nU5ZrJOUL6VdwgcQ==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + '@smithy/property-provider': 2.1.3 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + bowser: 2.11.0 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-defaults-mode-node@2.2.3: + resolution: {integrity: sha512-ttUISrv1uVOjTlDa3nznX33f0pthoUlP+4grhTvOzcLhzArx8qHB94/untGACOG3nlf8vU20nI2iWImfzoLkYA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + '@smithy/config-resolver': 2.1.4 + '@smithy/credential-provider-imds': 2.2.4 + '@smithy/node-config-provider': 2.2.4 + '@smithy/property-provider': 2.1.3 + '@smithy/smithy-client': 2.4.2 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-endpoints@1.1.4: + resolution: {integrity: sha512-/qAeHmK5l4yQ4/bCIJ9p49wDe9rwWtOzhPHblu386fwPNT3pxmodgcs9jDCV52yK9b4rB8o9Sj31P/7Vzka1cg==} + engines: {node: '>= 14.0.0'} + requiresBuild: true + dependencies: + '@smithy/node-config-provider': 2.2.4 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-hex-encoding@2.1.1: + resolution: {integrity: sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-middleware@2.1.3: + resolution: {integrity: sha512-/+2fm7AZ2ozl5h8wM++ZP0ovE9/tiUUAHIbCfGfb3Zd3+Dyk17WODPKXBeJ/TnK5U+x743QmA0xHzlSm8I/qhw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-retry@2.1.3: + resolution: {integrity: sha512-Kbvd+GEMuozbNUU3B89mb99tbufwREcyx2BOX0X2+qHjq6Gvsah8xSDDgxISDwcOHoDqUWO425F0Uc/QIRhYkg==} + engines: {node: '>= 14.0.0'} + requiresBuild: true + dependencies: + '@smithy/service-error-classification': 2.1.3 + '@smithy/types': 2.10.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-stream@2.1.3: + resolution: {integrity: sha512-HvpEQbP8raTy9n86ZfXiAkf3ezp1c3qeeO//zGqwZdrfaoOpGKQgF2Sv1IqZp7wjhna7pvczWaGUHjcOPuQwKw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/fetch-http-handler': 2.4.3 + '@smithy/node-http-handler': 2.4.1 + '@smithy/types': 2.10.1 + '@smithy/util-base64': 2.1.1 + '@smithy/util-buffer-from': 2.1.1 + '@smithy/util-hex-encoding': 2.1.1 + '@smithy/util-utf8': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-uri-escape@2.1.1: + resolution: {integrity: sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + tslib: 2.6.2 + dev: false + optional: true + + /@smithy/util-utf8@2.1.1: + resolution: {integrity: sha512-BqTpzYEcUMDwAKr7/mVRUtHDhs6ZoXDi9NypMvMfOr/+u1NW7JgqodPDECiiLboEm6bobcPcECxzjtQh865e9A==} + engines: {node: '>=14.0.0'} + requiresBuild: true + dependencies: + '@smithy/util-buffer-from': 2.1.1 + tslib: 2.6.2 + dev: false + optional: true + + /@socket.io/component-emitter@3.1.0: + resolution: {integrity: sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==} + + /@szmarczak/http-timer@5.0.1: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + dependencies: + defer-to-connect: 2.0.1 + dev: true + + /@tempfix/hetzner-openapi@1.0.4: + resolution: {integrity: sha512-PzURoAHokF8VaIVlzWOLUw7ixtAbhQRVnzGeOcUG2/aoTB8pHILChZiZ2yB9+BVb7hmngc0WNwM9hXc8tuXB6g==} + dev: false + + /@tempfix/watcher@2.3.0: + resolution: {integrity: sha512-a2qVQffcrnetehvwsN+LdipxQ6jejwZLgAvS9/91+C0gP4CKyikY01c0tSs0I4tSL7qHdCw1Fx0quLw+A9uyLA==} + dependencies: + stubborn-fs: 1.2.5 + + /@tsclass/tsclass@3.0.48: + resolution: {integrity: sha512-hC65UvDlp9qvsl6OcIZXz0JNiWZ0gyzsTzbXpg215sGxopgbkOLCr6E0s4qCTnweYm95gt2AdY95uP7M7kExaQ==} + dependencies: + type-fest: 2.19.0 + + /@tsclass/tsclass@4.0.52: + resolution: {integrity: sha512-yjASmfnDvgWA1OKYXbz4diLIrPBSk5BpPStKuVkAhrhN8Xw4lc6/oSiJpsosEd8GDwr/FPsY2lgN8/5674vM0w==} + dependencies: + type-fest: 4.10.3 + + /@tsconfig/node10@1.0.9: + resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + /@types/accepts@1.3.7: + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + dependencies: + '@types/node': 20.11.25 + dev: true + + /@types/babel__code-frame@7.0.6: + resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} + dev: true + + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.11.25 + + /@types/buffer-json@2.0.3: + resolution: {integrity: sha512-ItD4UfF3Q5jA+PEV6ZUWEHvlWaXJbd0rpuBKOIrEebM053FHaJddKsgUf0vy7nLSTs44nqFj3Mh8J3TiT0xv4g==} + + /@types/chai-dom@0.0.9: + resolution: {integrity: sha512-jj4F2NJog2/GBYsyJ8+NvhnWUBbPY4MUAKLdPJE6+568rw12GGXvj0ycUuP5nndVrnJgozmJAoMTvxvjJATXWw==} + dependencies: + '@types/chai': 4.3.12 + dev: true + + /@types/chai@4.3.12: + resolution: {integrity: sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==} + dev: true + + /@types/chokidar@2.1.3: + resolution: {integrity: sha512-6qK3xoLLAhQVTucQGHTySwOVA1crHRXnJeLwqK6KIFkkKa2aoMFXh+WEi8PotxDtvN6MQJLyYN9ag9P6NLV81w==} + deprecated: This is a stub types definition. chokidar provides its own type definitions, so you do not need this installed. + dependencies: + chokidar: 3.6.0 + dev: false + + /@types/clean-css@4.2.11: + resolution: {integrity: sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==} + dependencies: + '@types/node': 20.11.25 + source-map: 0.6.1 + dev: true + + /@types/co-body@6.1.3: + resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==} + dependencies: + '@types/node': 20.11.25 + '@types/qs': 6.9.12 + dev: true + + /@types/compression@1.7.5: + resolution: {integrity: sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg==} + dependencies: + '@types/express': 4.17.21 + dev: false + + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 20.11.25 + + /@types/content-disposition@0.5.8: + resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + dev: true + + /@types/convert-source-map@2.0.3: + resolution: {integrity: sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==} + dev: true + + /@types/cookie@0.4.1: + resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} + + /@types/cookies@0.9.0: + resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + dependencies: + '@types/connect': 3.4.38 + '@types/express': 4.17.21 + '@types/keygrip': 1.0.6 + '@types/node': 20.11.25 + dev: true + + /@types/cors@2.8.17: + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + dependencies: + '@types/node': 20.11.25 + + /@types/debounce@1.2.4: + resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} + dev: true + + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: false + + /@types/default-gateway@3.0.1: + resolution: {integrity: sha512-tpu0hp+AOIzwdAHyZPzLE5pCf9uT0pb+xZ76T4S7MrY2YTVq918Q7Q2VQ3KCVQqYxM7nxuCK/SL3X97jBEIeKQ==} + dev: true + + /@types/express-serve-static-core@4.17.43: + resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + dependencies: + '@types/node': 20.11.25 + '@types/qs': 6.9.12 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.17.43 + '@types/qs': 6.9.12 + '@types/serve-static': 1.15.5 + + /@types/fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-IyNhGHu71jH1jCXTHmafuoAAdsbBON3kDh7u/UUhLmjYgN5TYB54e1R8ckTCiIevl2UuZaCsi9XRxineY5yUjw==} + deprecated: This is a stub types definition. fast-json-stable-stringify provides its own type definitions, so you do not need this installed. + dependencies: + fast-json-stable-stringify: 2.1.0 + dev: false + + /@types/finalhandler@1.2.3: + resolution: {integrity: sha512-I+Ba0JZEiuSr8LLjVmBhvLBEN8KG9GSITNXWwPCLeAvZj/k5pXEdOBEvnEEIgA038eeaauJ3BPxbuxeFBsqqUw==} + dependencies: + '@types/node': 20.11.25 + dev: false + + /@types/from2@2.3.5: + resolution: {integrity: sha512-giavnjf3kNlJnE+HpZA1CQ3UKHxgehzsTuIMGda8pGMbOiLYGVNADEskey44OZcADHm/HOoBany8IV+0x28XFw==} + dependencies: + '@types/node': 20.11.25 + + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 20.11.25 + + /@types/fs-extra@9.0.13: + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + dependencies: + '@types/node': 20.11.25 + dev: false + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.11.25 + dev: false + + /@types/glob@8.1.0: + resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.11.25 + + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /@types/html-minifier@4.0.5: + resolution: {integrity: sha512-LfE7f7MFd+YUfZnlBz8W43P4NgSObWiqyKapANsWCj63Aqeqli8/9gVsGP4CwC8jPpTTYlTopKCk9rJSuht/ew==} + dependencies: + '@types/clean-css': 4.2.11 + '@types/relateurl': 0.2.33 + '@types/uglify-js': 3.17.5 + dev: true + + /@types/http-assert@1.5.5: + resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} + dev: true + + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: true + + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true + + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: true + + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: true + + /@types/js-yaml@3.12.10: + resolution: {integrity: sha512-/Mtaq/wf+HxXpvhzFYzrzCqNRcA958sW++7JOFC8nPrZcvfi/TrzOaaGbvt27ltJB2NQbHVAg5a1wUCsyMH7NA==} + + /@types/js-yaml@4.0.9: + resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + dependencies: + '@types/node': 20.11.25 + + /@types/jsonwebtoken@9.0.6: + resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} + dependencies: + '@types/node': 20.11.25 + dev: false + + /@types/keygrip@1.0.6: + resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} + dev: true + + /@types/koa-compose@3.2.8: + resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + dependencies: + '@types/koa': 2.15.0 + dev: true + + /@types/koa@2.15.0: + resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + dependencies: + '@types/accepts': 1.3.7 + '@types/content-disposition': 0.5.8 + '@types/cookies': 0.9.0 + '@types/http-assert': 1.5.5 + '@types/http-errors': 2.0.4 + '@types/keygrip': 1.0.6 + '@types/koa-compose': 3.2.8 + '@types/node': 20.11.25 + dev: true + + /@types/mdast@4.0.3: + resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /@types/mime-types@2.1.4: + resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} + + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + /@types/mime@3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + + /@types/minimatch@3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + /@types/minio@7.1.1: + resolution: {integrity: sha512-B7OWB7JwIxVBxypiS3gA96gaK4yo2UknGdqmuQsTccZZ/ABiQ2F3fTe9lZIXL6ZuN23l+mWIC3J4CefKNyWjxA==} + deprecated: This is a stub types definition. minio provides its own type definitions, so you do not need this installed. + dependencies: + minio: 7.1.3 + dev: false + + /@types/mocha@5.2.7: + resolution: {integrity: sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==} + dev: true + + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + + /@types/node-forge@1.3.11: + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + dependencies: + '@types/node': 20.11.25 + dev: false + + /@types/node@20.11.25: + resolution: {integrity: sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==} + dependencies: + undici-types: 5.26.5 + + /@types/parse5@6.0.3: + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + dev: true + + /@types/ping@0.4.4: + resolution: {integrity: sha512-ifvo6w2f5eJYlXm+HiVx67iJe8WZp87sfa683nlqED5Vnt9Z93onkokNoWqOG21EaE8fMxyKPobE+mkPEyxsdw==} + dev: true + + /@types/qs@6.9.12: + resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==} + + /@types/randomatic@3.1.5: + resolution: {integrity: sha512-VCwCTw6qh1pRRw+5rNTAwqPmf6A+hdrkdM7dBpZVmhl7g+em3ONXlYK/bWPVKqVGMWgP0d1bog8Vc/X6zRwRRQ==} + + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + /@types/relateurl@0.2.33: + resolution: {integrity: sha512-bTQCKsVbIdzLqZhLkF5fcJQreE4y1ro4DIyVrlDNSCJRRwHhB8Z+4zXXa8jN6eDvc2HbRsEYgbvrnGvi54EpSw==} + dev: true + + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.11.25 + + /@types/serve-static@1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 + '@types/node': 20.11.25 + + /@types/shortid@0.0.29: + resolution: {integrity: sha1-gJPuBBam4r8qpjOBCRFLP7/6Dps=} + dev: false + + /@types/sinon-chai@3.2.12: + resolution: {integrity: sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==} + dependencies: + '@types/chai': 4.3.12 + '@types/sinon': 17.0.3 + dev: true + + /@types/sinon@17.0.3: + resolution: {integrity: sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==} + dependencies: + '@types/sinonjs__fake-timers': 8.1.5 + dev: true + + /@types/sinonjs__fake-timers@8.1.5: + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} + dev: true + + /@types/symbol-tree@3.2.5: + resolution: {integrity: sha512-zXnnyENt1TYQcS21MkPaJCVjfcPq7p7yc5mo5JACuumXp6sly5jnlS0IokHd+xmmuCbx6V7JqkMBpswR+nZAcw==} + + /@types/through2@2.0.41: + resolution: {integrity: sha512-ryQ0tidWkb1O1JuYvWKyMLYEtOWDqF5mHerJzKz/gQpoAaJq2l/dsMPBF0B5BNVT34rbARYJ5/tsZwLfUi2kwQ==} + dependencies: + '@types/node': 20.11.25 + + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + /@types/turndown@5.0.4: + resolution: {integrity: sha512-28GI33lCCkU4SGH1GvjDhFgOVr+Tym4PXGBIU1buJUa6xQolniPArtUT+kv42RR2N9MsMLInkr904Aq+ESHBJg==} + dev: false + + /@types/uglify-js@3.17.5: + resolution: {integrity: sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==} + dependencies: + source-map: 0.6.1 + dev: true + + /@types/unist@3.0.2: + resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + dev: false + + /@types/uuid@7.0.8: + resolution: {integrity: sha512-95N4tyM4B5u1sj2m8Tht09qWHju2ht413GBFz8CHtxp8aIiJUF6t51MsR7jC9OF4rRVf93AxE++WJe7+Puc1UA==} + dev: false + + /@types/uuid@9.0.8: + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + + /@types/webidl-conversions@7.0.3: + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + dev: false + + /@types/whatwg-url@8.2.2: + resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==} + dependencies: + '@types/node': 20.11.25 + '@types/webidl-conversions': 7.0.3 + dev: false + + /@types/which@2.0.2: + resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} + dev: true + + /@types/which@3.0.3: + resolution: {integrity: sha512-2C1+XoY0huExTbs8MQv1DuS5FS86+SEjdM9F/+GS61gg5Hqbtj8ZiDSx8MfWcyei907fIPbfPGCOrNUTnVHY1g==} + + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 20.11.25 + dev: true + + /@types/ws@8.5.10: + resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + dependencies: + '@types/node': 20.11.25 + dev: true + + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + requiresBuild: true + dependencies: + '@types/node': 20.11.25 + dev: true + optional: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: false + + /@web/browser-logs@0.2.6: + resolution: {integrity: sha512-CNjNVhd4FplRY8PPWIAt02vAowJAVcOoTNrR/NNb/o9pka7yI9qdjpWrWhEbPr2pOXonWb52AeAgdK66B8ZH7w==} + engines: {node: '>=10.0.0'} + dependencies: + errorstacks: 2.4.1 + dev: true + + /@web/dev-server-core@0.4.1: + resolution: {integrity: sha512-KdYwejXZwIZvb6tYMCqU7yBiEOPfKLQ3V9ezqqEz8DA9V9R3oQWaowckvCpFB9IxxPfS/P8/59OkdzGKQjcIUw==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/koa': 2.15.0 + '@types/ws': 7.4.7 + '@web/parse5-utils': 1.3.1 + chokidar: 3.6.0 + clone: 2.1.2 + es-module-lexer: 1.4.1 + get-stream: 6.0.1 + is-stream: 2.0.1 + isbinaryfile: 5.0.2 + koa: 2.15.0 + koa-etag: 4.0.0 + koa-send: 5.0.1 + koa-static: 5.0.0 + lru-cache: 6.0.0 + mime-types: 2.1.35 + parse5: 6.0.1 + picomatch: 2.3.1 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@web/parse5-utils@1.3.1: + resolution: {integrity: sha512-haCgDchZrAOB9EhBJ5XqiIjBMsS/exsM5Ru7sCSyNkXVEJWskyyKuKMFk66BonnIGMPpDtqDrTUfYEis5Zi3XA==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/parse5': 6.0.3 + parse5: 6.0.1 + dev: true + + /@web/test-runner-commands@0.6.6: + resolution: {integrity: sha512-2DcK/+7f8QTicQpGFq/TmvKHDK/6Zald6rn1zqRlmj3pcH8fX6KHNVMU60Za9QgAKdorMBPfd8dJwWba5otzdw==} + engines: {node: '>=12.0.0'} + dependencies: + '@web/test-runner-core': 0.10.29 + mkdirp: 1.0.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@web/test-runner-core@0.10.29: + resolution: {integrity: sha512-0/ZALYaycEWswHhpyvl5yqo0uIfCmZe8q14nGPi1dMmNiqLcHjyFGnuIiLexI224AW74ljHcHllmDlXK9FUKGA==} + engines: {node: '>=12.0.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@types/babel__code-frame': 7.0.6 + '@types/co-body': 6.1.3 + '@types/convert-source-map': 2.0.3 + '@types/debounce': 1.2.4 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@web/browser-logs': 0.2.6 + '@web/dev-server-core': 0.4.1 + chokidar: 3.6.0 + cli-cursor: 3.1.0 + co-body: 6.1.0 + convert-source-map: 2.0.0 + debounce: 1.2.1 + dependency-graph: 0.11.0 + globby: 11.1.0 + ip: 1.1.9 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.1.7 + log-update: 4.0.0 + nanocolors: 0.2.13 + nanoid: 3.3.7 + open: 8.4.2 + picomatch: 2.3.1 + source-map: 0.7.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@webcontainer/api@1.1.9: + resolution: {integrity: sha512-Sp6PV0K9D/3f8fSbCubqhfmBFH8XbngZCBOCF+aExyGqnz2etmw+KYvbQ/JxYvYX5KPaSxM+asFQwoP2RHl5cg==} + dev: false + + /@xmldom/xmldom@0.8.10: + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + dev: true + + /@yr/monotone-cubic-spline@1.0.3: + resolution: {integrity: sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==} + dev: false + + /@zxing/text-encoding@0.9.0: + resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + requiresBuild: true + dev: false + optional: true + + /abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + requiresBuild: true + dev: false + optional: true + + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + /acme-client@4.2.5: + resolution: {integrity: sha512-dtnck4sdZ2owFLTC73Ewjx0kmvsRjTRgaOc8UztCNODT+lr1DXj0tiuUXjeY4LAzZryXCtCib/E+KD8NYeP1aw==} + engines: {node: '>= 10'} + dependencies: + axios: 0.26.1(debug@4.3.4) + backo2: 1.0.2 + bluebird: 3.7.2 + debug: 4.3.4 + node-forge: 1.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + + /aggregate-error@4.0.1: + resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} + engines: {node: '>=12'} + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + dev: true + + /ansi-256-colors@1.1.0: + resolution: {integrity: sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=} + engines: {node: '>=0.10.0'} + + /ansi-colors@3.2.3: + resolution: {integrity: sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==} + engines: {node: '>=6'} + dev: true + + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + dev: true + + /ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + /apexcharts@3.46.0: + resolution: {integrity: sha512-ELAY6vj8JQD7QLktKasTzwm9Wt0qxqfQSo+3QWS7G7I774iK8HCkG1toGsqJH0mkK6PtYBtnSIe66uUcwoCw1w==} + dependencies: + '@yr/monotone-cubic-spline': 1.0.3 + svg.draggable.js: 2.2.2 + svg.easing.js: 2.0.0 + svg.filter.js: 2.0.2 + svg.pathmorphing.js: 0.1.3 + svg.resize.js: 1.4.3 + svg.select.js: 3.0.1 + dev: false + + /aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + requiresBuild: true + dev: false + optional: true + + /are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + dev: false + optional: true + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + + /array-flatten@1.1.1: + resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array.prototype.reduce@1.0.6: + resolution: {integrity: sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: true + + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async-mutex@0.3.2: + resolution: {integrity: sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==} + dependencies: + tslib: 2.6.2 + dev: false + + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: false + + /asynckit@0.4.0: + resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} + + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + + /axe-core@4.8.4: + resolution: {integrity: sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==} + engines: {node: '>=4'} + dev: true + + /axios@0.26.1(debug@4.3.4): + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + dependencies: + follow-redirects: 1.15.5(debug@4.3.4) + transitivePeerDependencies: + - debug + dev: false + + /backo2@1.0.2: + resolution: {integrity: sha1-MasayLEpNjRj41s+u2n038+6eUc=} + dev: false + + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base64-arraybuffer-es6@0.7.0: + resolution: {integrity: sha512-ESyU/U1CFZDJUdr+neHRhNozeCv72Y7Vm0m1DCbjX3KBjT6eYocvAJlSk6+8+HkVwXlT1FNxhGW6q3UKAlCvvw==} + engines: {node: '>=6.0.0'} + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + /base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: false + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + /block-stream2@2.1.0: + resolution: {integrity: sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==} + dependencies: + readable-stream: 3.6.2 + dev: false + + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: false + + /body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + 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 + transitivePeerDependencies: + - supports-color + + /bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + requiresBuild: true + dev: false + optional: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + + /broadcast-channel@3.7.0: + resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==} + dependencies: + '@babel/runtime': 7.24.0 + detect-node: 2.1.0 + js-sha3: 0.8.0 + microseconds: 0.2.0 + nano-time: 1.0.0 + oblivious-set: 1.0.0 + rimraf: 3.0.2 + unload: 2.2.0 + dev: false + + /browser-or-node@2.1.1: + resolution: {integrity: sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==} + dev: false + + /browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: true + + /bson@4.7.2: + resolution: {integrity: sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==} + engines: {node: '>=6.9.0'} + dependencies: + buffer: 5.7.1 + dev: false + + /bson@5.5.1: + resolution: {integrity: sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==} + engines: {node: '>=14.20.1'} + dev: false + + /buffer-crc32@0.2.13: + resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} + + /buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} + dev: false + + /buffer-json@2.0.0: + resolution: {integrity: sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==} + + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + /cache-content-type@1.0.1: + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} + engines: {node: '>= 6.0.0'} + dependencies: + mime-types: 2.1.35 + ylru: 1.3.2 + dev: true + + /cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: true + + /cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.0 + responselike: 3.0.0 + dev: true + + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + 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 + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case@3.0.0: + resolution: {integrity: sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=} + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + dev: true + + /camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + dev: true + + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + + /canvas@2.11.2: + resolution: {integrity: sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==} + engines: {node: '>=6'} + requiresBuild: true + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + nan: 2.18.0 + simple-get: 3.1.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + optional: true + + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + dev: false + + /chai-a11y-axe@1.5.0: + resolution: {integrity: sha512-V/Vg/zJDr9aIkaHJ2KQu7lGTQQm5ZOH4u1k5iTMvIXuSVlSuUo0jcSpSqf9wUn9zl6oQXa4e4E0cqH18KOgKlQ==} + dependencies: + axe-core: 4.8.4 + dev: true + + /chai-dom@1.12.0(chai@4.4.1): + resolution: {integrity: sha512-pLP8h6IBR8z1AdeQ+EMcJ7dXPdsax/1Q7gdGZjsnAmSBl3/gItQUYSCo32br1qOy4SlcBjvqId7ilAf3uJ2K1w==} + engines: {node: '>= 0.12.0'} + peerDependencies: + chai: '>= 3' + dependencies: + chai: 4.4.1 + dev: true + + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + dev: false + + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + dev: false + + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + dev: false + + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + /chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + requiresBuild: true + dev: false + optional: true + + /clean-css@4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} + engines: {node: '>= 4.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /clean-stack@1.3.0: + resolution: {integrity: sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=} + engines: {node: '>=4'} + + /clean-stack@4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + dependencies: + escape-string-regexp: 5.0.0 + dev: true + + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cliui@5.0.0: + resolution: {integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==} + dependencies: + string-width: 3.1.0 + strip-ansi: 5.2.0 + wrap-ansi: 5.1.0 + dev: true + + /clone@2.1.2: + resolution: {integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=} + engines: {node: '>=0.8'} + dev: true + + /co-body@6.1.0: + resolution: {integrity: sha512-m7pOT6CdLN7FuXUcpuz/8lfQ/L77x8SchHCF4G0RBTJO20Wzmhn5Sp4/5WsKy8OSpifBSUrmg83qEqaDHdyFuQ==} + dependencies: + inflation: 2.1.0 + qs: 6.11.2 + raw-body: 2.5.2 + type-is: 1.6.18 + dev: true + + /co@4.6.0: + resolution: {integrity: sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + dev: true + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + requiresBuild: true + dev: false + optional: true + + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: false + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commondir@1.0.1: + resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} + dev: false + + /concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + /console-control-strings@1.1.0: + resolution: {integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=} + requiresBuild: true + dev: false + optional: true + + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + + /cookie-signature@1.0.6: + resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + /cookie@0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + + /cookies@0.9.1: + resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + keygrip: 1.1.0 + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + /cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + /croner@4.4.1: + resolution: {integrity: sha512-aqVeeIPCf5/NZFlz4mN4MLEOs9xf4ODCmHQDs+577JFj8mK3RkKJz77h7+Rn94AijUqKdFNOUHM+v88d8p02UQ==} + + /croner@5.7.0: + resolution: {integrity: sha512-9pSLe+tDJnmNak2JeMkz6ZmTCXP5p6vCxSd4kvDqrTJkqAP62j2uAEIZjf8cPDZIakStujqVzh5Y5MIWH3yYAw==} + engines: {node: '>=6.0'} + + /croner@7.0.7: + resolution: {integrity: sha512-05wALDHKjt9zG1JbpziNnWPCwwv9fUKbNf6q0dWaDMJ/eDxW0394Q2R1VAzKvDgoEZBT9FhWSHHFIcgwLgXjcQ==} + engines: {node: '>=6.0'} + + /cross-fetch@3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + dependencies: + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + /crypto-random-string@5.0.0: + resolution: {integrity: sha512-KWjTXWwxFd6a94m5CdRGW/t82Tr8DoBc9dNnPCAbFI1EBweN6v1tv8y4Y1m7ndkp/nkIBRxUxAzpaBnR2k3bcQ==} + engines: {node: '>=14.16'} + dependencies: + type-fest: 2.19.0 + + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + + /debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: true + + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + + /debug@3.2.6(supports-color@6.0.0): + resolution: {integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==} + deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797) + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.1 + supports-color: 6.0.0 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decamelize@1.2.0: + resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} + engines: {node: '>=0.10.0'} + dev: true + + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: false + + /decompress-response@4.2.1: + resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} + engines: {node: '>=8'} + requiresBuild: true + dependencies: + mimic-response: 2.1.0 + dev: false + optional: true + + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: true + + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-equal@1.0.1: + resolution: {integrity: sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=} + dev: true + + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: true + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + /delayed-stream@1.0.0: + resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} + engines: {node: '>=0.4.0'} + + /delegates@1.0.0: + resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=} + + /depd@1.1.2: + resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} + engines: {node: '>= 0.6'} + dev: true + + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + /dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + dev: true + + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + dev: false + + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + /detect-libc@2.0.2: + resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} + engines: {node: '>=8'} + requiresBuild: true + dev: false + optional: true + + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false + + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: false + + /devtools-protocol@0.0.1019158: + resolution: {integrity: sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==} + dev: true + + /diff@3.5.0: + resolution: {integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==} + engines: {node: '>=0.3.1'} + dev: true + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + dependencies: + '@leichtgewicht/ip-codec': 2.0.4 + dev: true + + /dns-socket@4.2.2: + resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==} + engines: {node: '>=6'} + dependencies: + dns-packet: 5.6.1 + dev: true + + /dns2@2.1.0: + resolution: {integrity: sha512-m27K11aQalRbmUs7RLaz6aPyceLjAoqjPRNTdE7qUouQpl+PC8Bi67O+i9SuJUPbQC8dxFrczAxfmTPuTKHNkw==} + dev: false + + /domexception@1.0.1: + resolution: {integrity: sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==} + dependencies: + webidl-conversions: 4.0.2 + + /domino@2.1.6: + resolution: {integrity: sha512-3VdM/SXBZX2omc9JF9nOPCtDaYQ67BGp5CoLpIQlO2KCAPETs8TcDHacF26jXadGbvUteZzRTeos2fhID5+ucQ==} + dev: false + + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + /ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /ee-first@1.1.1: + resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + + /emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + /encodeurl@1.0.2: + resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} + engines: {node: '>= 0.8'} + + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + + /engine.io-client@6.2.3: + resolution: {integrity: sha512-aXPtgF1JS3RuuKcpSrBtimSjYvrbhKW9froICH4s0F3XQWLxsKNxqzG39nnvQZQnva4CMvUK63T7shevxRyYHw==} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-parser: 5.0.7 + ws: 8.2.3 + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /engine.io-client@6.5.3: + resolution: {integrity: sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-parser: 5.2.2 + ws: 8.11.0 + xmlhttprequest-ssl: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /engine.io-parser@5.0.7: + resolution: {integrity: sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==} + engines: {node: '>=10.0.0'} + dev: false + + /engine.io-parser@5.2.2: + resolution: {integrity: sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==} + engines: {node: '>=10.0.0'} + + /engine.io@6.2.1: + resolution: {integrity: sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/cookie': 0.4.1 + '@types/cors': 2.8.17 + '@types/node': 20.11.25 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.4.2 + cors: 2.8.5 + debug: 4.3.4 + engine.io-parser: 5.0.7 + ws: 8.2.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /engine.io@6.3.1: + resolution: {integrity: sha512-VhEArSKyCC8dv223fltbMOqaJInFZqIqLABLnD3VLhclriF9sxnAJu6ZvnIMI+p7+ByZBxXd4otTrLAeeMTImg==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/cookie': 0.4.1 + '@types/cors': 2.8.17 + '@types/node': 20.11.25 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.4.2 + cors: 2.8.5 + debug: 4.3.4 + engine.io-parser: 5.0.7 + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /engine.io@6.5.2: + resolution: {integrity: sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==} + engines: {node: '>=10.2.0'} + dependencies: + '@types/cookie': 0.4.1 + '@types/cors': 2.8.17 + '@types/node': 20.11.25 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.4.2 + cors: 2.8.5 + debug: 4.3.4 + engine.io-parser: 5.2.2 + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false + + /errorstacks@2.4.1: + resolution: {integrity: sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==} + dev: true + + /es-abstract@1.22.5: + resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.1 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.5 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.14 + dev: true + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + /es-module-lexer@1.4.1: + resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.1 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: true + + /escape-html@1.0.3: + resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + /esm@3.2.25: + resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} + engines: {node: '>=6'} + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + /etag@1.8.1: + resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} + engines: {node: '>= 0.6'} + + /express-force-ssl@0.3.2: + resolution: {integrity: sha1-AbK0mK5v0uQRUrIrV6Phc3c69n4=} + engines: {node: '>=0.2.2'} + dependencies: + lodash.assign: 3.2.0 + + /express@4.18.3: + resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.2 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.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 + transitivePeerDependencies: + - supports-color + + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: false + + /extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + dev: true + + /fake-indexeddb@4.0.2: + resolution: {integrity: sha512-SdTwEhnakbgazc7W3WUXOJfGmhH0YfG4d+dRPOFoYDRTL6U5t8tvrmkf2W/C3W1jk2ylV7Wrnj44RASqpX/lEw==} + dependencies: + realistic-structured-clone: 3.0.0 + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + /fast-xml-parser@3.21.1: + resolution: {integrity: sha512-FTFVjYoBOZTJekiUsawGsSYV9QL0A+zDYCRj7y34IO6Jg+2IMYEtQa+bbictpdpV8dHxXywqU7C0gRDEOFtBFg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + + /fast-xml-parser@4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + requiresBuild: true + dependencies: + strnum: 1.0.5 + dev: false + optional: true + + /fast-xml-parser@4.3.5: + resolution: {integrity: sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==} + hasBin: true + dependencies: + strnum: 1.0.5 + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: false + + /fd-slicer@1.1.0: + resolution: {integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=} + dependencies: + pend: 1.2.0 + + /feed@4.2.2: + resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} + engines: {node: '>=0.4.0'} + dependencies: + xml-js: 1.6.11 + + /figures@6.0.1: + resolution: {integrity: sha512-0oY/olScYD4IhQ8u//gCPA4F3mlTn2dacYmiDm/mbDQvpmLjV4uH+zhsQ5IyXRyvqkvtUkXkNdGvg5OFJTCsuQ==} + engines: {node: '>=18'} + dependencies: + is-unicode-supported: 2.0.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /filter-obj@1.1.0: + resolution: {integrity: sha1-mzERErxsYSehbgFsbF1/GeCAXFs=} + engines: {node: '>=0.10.0'} + dev: false + + /finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + 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 + transitivePeerDependencies: + - supports-color + + /find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: false + + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: true + + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + /flat@4.1.1: + resolution: {integrity: sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==} + hasBin: true + dependencies: + is-buffer: 2.0.5 + dev: true + + /follow-redirects@1.15.5(debug@4.3.4): + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.4 + dev: false + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + + /foreground-child@2.0.0: + resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} + engines: {node: '>=8.0.0'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 3.0.7 + dev: true + + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + /form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + dev: true + + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + /format@0.2.2: + resolution: {integrity: sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=} + engines: {node: '>=0.4.x'} + dev: false + + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + /fresh@0.5.2: + resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} + engines: {node: '>= 0.6'} + + /from2@2.3.0: + resolution: {integrity: sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + requiresBuild: true + dependencies: + minipass: 3.3.6 + dev: false + optional: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + dev: false + optional: true + + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.1 + + /get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + dev: false + + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + + /glob@7.1.3: + resolution: {integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + + /got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /growl@1.10.5: + resolution: {integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==} + engines: {node: '>=4.x'} + dev: true + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + + /has-unicode@2.0.1: + resolution: {integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=} + requiresBuild: true + dev: false + optional: true + + /hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.4.1 + vfile: 6.0.1 + vfile-location: 5.0.2 + web-namespaces: 2.0.1 + dev: false + + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + dependencies: + '@types/hast': 3.0.4 + dev: false + + /hast-util-raw@9.0.2: + resolution: {integrity: sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.1.0 + parse5: 7.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: false + + /hast-util-sanitize@5.0.1: + resolution: {integrity: sha512-IGrgWLuip4O2nq5CugXy4GI2V8kx4sFVy5Hd4vF7AR2gxS0N9s7nEAVUyeMtZKZvzrxVsHt73XdTsno1tClIkQ==} + dependencies: + '@types/hast': 3.0.4 + '@ungap/structured-clone': 1.2.0 + unist-util-position: 5.0.0 + dev: false + + /hast-util-to-html@9.0.0: + resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==} + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.2 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 9.0.2 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.1.0 + property-information: 6.4.1 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.3 + zwitch: 2.0.4 + dev: false + + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.4.1 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: false + + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.4 + dev: false + + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + dependencies: + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.4.1 + space-separated-tokens: 2.0.2 + dev: false + + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /highlight.js@11.9.0: + resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} + engines: {node: '>=12.0.0'} + dev: false + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /html-minifier@4.0.0: + resolution: {integrity: sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==} + engines: {node: '>=6'} + hasBin: true + dependencies: + camel-case: 3.0.0 + clean-css: 4.2.4 + commander: 2.20.3 + he: 1.2.0 + param-case: 2.1.1 + relateurl: 0.2.7 + uglify-js: 3.17.4 + dev: true + + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: false + + /http-assert@1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + dependencies: + deep-equal: 1.0.1 + http-errors: 1.8.1 + dev: true + + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + /http-errors@1.6.3: + resolution: {integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: true + + /http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: true + + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + /http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: true + + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /humanize-ms@1.2.1: + resolution: {integrity: sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=} + dependencies: + ms: 2.1.3 + + /ibantools@4.5.0: + resolution: {integrity: sha512-Ab5DeSYzGiCmKm7Qx1FW+B6WCXQ18mfBposz4Kgx0cz6VZ9xTATdYIfjwtismovXu8vPo6aOB2fexYl6jFWwKQ==} + dev: false + + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + + /idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + dev: true + + /inflation@2.1.0: + resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} + engines: {node: '>= 0.8.0'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.3: + resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.1 + side-channel: 1.0.6 + dev: true + + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: false + + /ip-regex@5.0.0: + resolution: {integrity: sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /ip@1.1.9: + resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==} + dev: true + + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + /ipaddr.js@2.1.0: + resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==} + engines: {node: '>= 10'} + dev: false + + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: false + + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + /is-extglob@2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} + engines: {node: '>=4'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-ip@4.0.0: + resolution: {integrity: sha512-4B4XA2HEIm/PY+OSpeMBXr8pGWBYbXuHgjMAqrwbLO3CPTCAd9ArEJzBUKGZtk9viY6+aSfadGnWyjY3ydYZkw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + ip-regex: 5.0.0 + dev: true + + /is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-number@4.0.0: + resolution: {integrity: sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==} + engines: {node: '>=0.10.0'} + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /is-observable@2.1.0: + resolution: {integrity: sha512-DailKdLb0WU+xX8K5w7VsJhapwHLZ9jjmazqCJq4X12CTgqq73TKnbRcnSLuXYPOoLQgV5IrD7ePiX/h1vnkBw==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: false + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.14 + + /is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + + /isarray@1.0.0: + resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isbinaryfile@5.0.2: + resolution: {integrity: sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==} + engines: {node: '>= 18.0.0'} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + + /isopen@1.3.0: + resolution: {integrity: sha512-AN6Q9J0UlqHFl1fN/2xJCHCBLCBCFDjZhpGBO1gh3wzgRPsFSFBUL36I2Lbfd9qkuoj58axmE7j83iejTQsk8Q==} + dev: true + + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + /js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: false + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@3.13.1: + resolution: {integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /jsbn@1.1.0: + resolution: {integrity: sha1-sBMHyym2GKHtJux56RH4A8TaAEA=} + dev: false + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-stream@1.0.0: + resolution: {integrity: sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg=} + dev: false + + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + /jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.6.0 + dev: false + + /just-extend@6.2.0: + resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} + dev: true + + /jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + dev: false + + /jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + dev: false + + /keygrip@1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + dependencies: + tsscmp: 1.0.6 + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + /koa-compose@4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + dev: true + + /koa-convert@2.0.0: + resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} + engines: {node: '>= 10'} + dependencies: + co: 4.6.0 + koa-compose: 4.1.0 + dev: true + + /koa-etag@4.0.0: + resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} + dependencies: + etag: 1.8.1 + dev: true + + /koa-send@5.0.1: + resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} + engines: {node: '>= 8'} + dependencies: + debug: 4.3.4 + http-errors: 1.8.1 + resolve-path: 1.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /koa-static@5.0.0: + resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} + engines: {node: '>= 7.6.0'} + dependencies: + debug: 3.2.7 + koa-send: 5.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /koa@2.15.0: + resolution: {integrity: sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==} + engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + dependencies: + accepts: 1.3.8 + cache-content-type: 1.0.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookies: 0.9.1 + debug: 4.3.4 + delegates: 1.0.0 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + fresh: 0.5.2 + http-assert: 1.5.0 + http-errors: 1.8.1 + is-generator-function: 1.0.10 + koa-compose: 4.1.0 + koa-convert: 2.0.0 + on-finished: 2.4.1 + only: 0.0.2 + parseurl: 1.3.3 + statuses: 1.5.0 + type-is: 1.6.18 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /lit-element@2.5.1: + resolution: {integrity: sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==} + dependencies: + lit-html: 1.4.1 + dev: true + + /lit-element@3.3.3: + resolution: {integrity: sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit/reactive-element': 1.6.3 + lit-html: 2.8.0 + dev: false + + /lit-element@4.0.4: + resolution: {integrity: sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==} + dependencies: + '@lit-labs/ssr-dom-shim': 1.2.0 + '@lit/reactive-element': 2.0.4 + lit-html: 3.1.2 + + /lit-html@1.4.1: + resolution: {integrity: sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==} + dev: true + + /lit-html@2.8.0: + resolution: {integrity: sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q==} + dependencies: + '@types/trusted-types': 2.0.7 + dev: false + + /lit-html@3.1.2: + resolution: {integrity: sha512-3OBZSUrPnAHoKJ9AMjRL/m01YJxQMf+TMHanNtTHG68ubjnZxK0RFl102DPzsw4mWnHibfZIBJm3LWCZ/LmMvg==} + dependencies: + '@types/trusted-types': 2.0.7 + + /lit@2.8.0: + resolution: {integrity: sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA==} + dependencies: + '@lit/reactive-element': 1.6.3 + lit-element: 3.3.3 + lit-html: 2.8.0 + dev: false + + /lit@3.1.2: + resolution: {integrity: sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==} + dependencies: + '@lit/reactive-element': 2.0.4 + lit-element: 4.0.4 + lit-html: 3.1.2 + + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + + /lodash._baseassign@3.2.0: + resolution: {integrity: sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=} + dependencies: + lodash._basecopy: 3.0.1 + lodash.keys: 3.1.2 + + /lodash._basecopy@3.0.1: + resolution: {integrity: sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=} + + /lodash._bindcallback@3.0.1: + resolution: {integrity: sha1-5THCdkTPi1epnhftlbNcdIeJOS4=} + + /lodash._createassigner@3.1.1: + resolution: {integrity: sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=} + dependencies: + lodash._bindcallback: 3.0.1 + lodash._isiterateecall: 3.0.9 + lodash.restparam: 3.6.1 + + /lodash._getnative@3.9.1: + resolution: {integrity: sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=} + + /lodash._isiterateecall@3.0.9: + resolution: {integrity: sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=} + + /lodash.assign@3.2.0: + resolution: {integrity: sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=} + dependencies: + lodash._baseassign: 3.2.0 + lodash._createassigner: 3.1.1 + lodash.keys: 3.1.2 + + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} + + /lodash.get@4.4.2: + resolution: {integrity: sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=} + dev: true + + /lodash.includes@4.3.0: + resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=} + dev: false + + /lodash.isarguments@3.1.0: + resolution: {integrity: sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=} + + /lodash.isarray@3.0.4: + resolution: {integrity: sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=} + + /lodash.isboolean@3.0.3: + resolution: {integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=} + dev: false + + /lodash.isinteger@4.0.4: + resolution: {integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=} + dev: false + + /lodash.isnumber@3.0.3: + resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=} + dev: false + + /lodash.isplainobject@4.0.6: + resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} + dev: false + + /lodash.isstring@4.0.1: + resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=} + dev: false + + /lodash.keys@3.1.2: + resolution: {integrity: sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=} + dependencies: + lodash._getnative: 3.9.1 + lodash.isarguments: 3.1.0 + lodash.isarray: 3.0.4 + + /lodash.once@4.1.1: + resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} + dev: false + + /lodash.restparam@3.6.1: + resolution: {integrity: sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=} + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-symbols@2.2.0: + resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==} + engines: {node: '>=4'} + dependencies: + chalk: 2.4.2 + dev: true + + /log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + dev: false + + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /lower-case@1.1.4: + resolution: {integrity: sha1-miyr0bno4K6ZOkv31YdcOcQujqw=} + dev: true + + /lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} + engines: {node: 14 || >=16.14} + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: false + + /make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.1 + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.6.0 + dev: true + + /make-error-cause@2.3.0: + resolution: {integrity: sha512-etgt+n4LlOkGSJbBTV9VROHA5R7ekIPS4vfh+bCAoJgRrJWdqJCBbpS3osRJ/HrT7R68MzMiY3L3sDJ/Fd8aBg==} + dependencies: + make-error: 1.3.6 + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: false + + /matcher@3.0.0: + resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} + engines: {node: '>=10'} + dependencies: + escape-string-regexp: 4.0.0 + + /matcher@5.0.0: + resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + escape-string-regexp: 5.0.0 + + /math-random@1.0.4: + resolution: {integrity: sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==} + + /md5-file@5.0.0: + resolution: {integrity: sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: false + + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} + dependencies: + '@types/mdast': 4.0.3 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false + + /mdast-util-from-markdown@2.0.0: + resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + dependencies: + '@types/mdast': 4.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.1.0 + dev: false + + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + markdown-table: 3.0.3 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + dependencies: + '@types/mdast': 4.0.3 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + dependencies: + mdast-util-from-markdown: 2.0.0 + mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-gfm-footnote: 2.0.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + dependencies: + '@types/mdast': 4.0.3 + unist-util-is: 6.0.0 + dev: false + + /mdast-util-to-hast@13.1.0: + resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.3 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + dev: false + + /mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + dependencies: + '@types/mdast': 4.0.3 + '@types/unist': 3.0.2 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + dev: false + + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + dependencies: + '@types/mdast': 4.0.3 + dev: false + + /media-typer@0.3.0: + resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} + engines: {node: '>= 0.6'} + + /memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + requiresBuild: true + dev: false + optional: true + + /merge-descriptors@1.0.1: + resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /methods@1.1.2: + resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} + engines: {node: '>= 0.6'} + + /micromark-core-commonmark@2.0.0: + resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-autolink-literal@2.0.0: + resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-footnote@2.0.0: + resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-table@2.0.0: + resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-task-list-item@2.0.1: + resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + dependencies: + micromark-extension-gfm-autolink-literal: 2.0.0 + micromark-extension-gfm-footnote: 2.0.0 + micromark-extension-gfm-strikethrough: 2.0.0 + micromark-extension-gfm-table: 2.0.0 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.0.1 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: false + + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + dev: false + + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-subtokenize@2.0.0: + resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: false + + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: false + + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /microseconds@0.2.0: + resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} + dev: false + + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mimic-response@2.1.0: + resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} + engines: {node: '>=8'} + requiresBuild: true + dev: false + optional: true + + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: true + + /mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + /minimatch@3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /minio@7.1.3: + resolution: {integrity: sha512-xPrLjWkTT5E7H7VnzOjF//xBp9I40jYB4aWhb2xTFopXXfw+Wo82DDWngdUju7Doy3Wk7R8C4LAgwhLHHnf0wA==} + engines: {node: ^16 || ^18 || >=20} + dependencies: + async: 3.2.5 + block-stream2: 2.1.0 + browser-or-node: 2.1.1 + buffer-crc32: 0.2.13 + fast-xml-parser: 4.3.5 + ipaddr.js: 2.1.0 + json-stream: 1.0.0 + lodash: 4.17.21 + mime-types: 2.1.35 + query-string: 7.1.3 + through2: 4.0.2 + web-encoding: 1.1.5 + xml: 1.0.1 + xml2js: 0.5.0 + dev: false + + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + requiresBuild: true + dependencies: + yallist: 4.0.0 + dev: false + optional: true + + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + requiresBuild: true + dev: false + optional: true + + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + requiresBuild: true + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + dev: false + optional: true + + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true + + /mkdirp@0.5.4: + resolution: {integrity: sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==} + deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + /mocha@6.2.3: + resolution: {integrity: sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==} + engines: {node: '>= 6.0.0'} + hasBin: true + dependencies: + ansi-colors: 3.2.3 + browser-stdout: 1.3.1 + debug: 3.2.6(supports-color@6.0.0) + diff: 3.5.0 + escape-string-regexp: 1.0.5 + find-up: 3.0.0 + glob: 7.1.3 + growl: 1.10.5 + he: 1.2.0 + js-yaml: 3.13.1 + log-symbols: 2.2.0 + minimatch: 3.0.4 + mkdirp: 0.5.4 + ms: 2.1.1 + node-environment-flags: 1.0.5 + object.assign: 4.1.0 + strip-json-comments: 2.0.1 + supports-color: 6.0.0 + which: 1.3.1 + wide-align: 1.1.3 + yargs: 13.3.2 + yargs-parser: 13.1.2 + yargs-unparser: 1.6.0 + dev: true + + /monaco-editor@0.46.0: + resolution: {integrity: sha512-ADwtLIIww+9FKybWscd7OCfm9odsFYHImBRI1v9AviGce55QY8raT+9ihH8jX/E/e6QVSGM+pKj4jSUSRmALNQ==} + dev: false + + /mongodb-connection-string-url@2.6.0: + resolution: {integrity: sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==} + dependencies: + '@types/whatwg-url': 8.2.2 + whatwg-url: 11.0.0 + dev: false + + /mongodb-memory-server-core@8.16.0: + resolution: {integrity: sha512-wyNo8yj6se7KH49hQmRtiwide7DnGINUGa1m84RyX1NU9DkCrTwbOV2VbPgd3+55DZfRup/DebU1M1zEv+3Rng==} + engines: {node: '>=12.22.0'} + dependencies: + async-mutex: 0.3.2 + camelcase: 6.3.0 + debug: 4.3.4 + find-cache-dir: 3.3.2 + follow-redirects: 1.15.5(debug@4.3.4) + get-port: 5.1.1 + https-proxy-agent: 5.0.1 + md5-file: 5.0.0 + mongodb: 4.17.2 + new-find-package-json: 2.0.0 + semver: 7.6.0 + tar-stream: 2.2.0 + tslib: 2.6.2 + uuid: 9.0.1 + yauzl: 2.10.0 + transitivePeerDependencies: + - aws-crt + - supports-color + dev: false + + /mongodb-memory-server@8.16.0: + resolution: {integrity: sha512-oaeu2GZWycIysTj18b1gZ6d+CqWeQQZe5f8ml8Z1buaGAn3GcrGdbG5+0fseEO5ANQzcjA92qHhbsImgXeEmIQ==} + engines: {node: '>=12.22.0'} + requiresBuild: true + dependencies: + mongodb-memory-server-core: 8.16.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + - supports-color + dev: false + + /mongodb@4.17.2: + resolution: {integrity: sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==} + engines: {node: '>=12.9.0'} + dependencies: + bson: 4.7.2 + mongodb-connection-string-url: 2.6.0 + socks: 2.8.1 + optionalDependencies: + '@aws-sdk/credential-providers': 3.525.0 + '@mongodb-js/saslprep': 1.1.5 + transitivePeerDependencies: + - aws-crt + dev: false + + /mongodb@5.9.2: + resolution: {integrity: sha512-H60HecKO4Bc+7dhOv4sJlgvenK4fQNqqUIlXxZYQNbfEWSALGAwGoyJd/0Qwk4TttFXUOHJ2ZJQe/52ScaUwtQ==} + engines: {node: '>=14.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.0.0 + kerberos: ^1.0.0 || ^2.0.0 + mongodb-client-encryption: '>=2.3.0 <3' + snappy: ^7.2.2 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + dependencies: + bson: 5.5.1 + mongodb-connection-string-url: 2.6.0 + socks: 2.8.1 + optionalDependencies: + '@mongodb-js/saslprep': 1.1.5 + dev: false + + /ms@2.0.0: + resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} + + /ms@2.1.1: + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + /nan@2.18.0: + resolution: {integrity: sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==} + requiresBuild: true + dev: false + optional: true + + /nano-time@1.0.0: + resolution: {integrity: sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=} + dependencies: + big-integer: 1.6.52 + dev: false + + /nanocolors@0.2.13: + resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} + dev: true + + /nanoid@2.1.11: + resolution: {integrity: sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==} + dev: false + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /nanoid@4.0.2: + resolution: {integrity: sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==} + engines: {node: ^14 || ^16 || >=18} + hasBin: true + + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + /new-find-package-json@2.0.0: + resolution: {integrity: sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==} + engines: {node: '>=12.22.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: false + + /nise@5.1.9: + resolution: {integrity: sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==} + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 11.2.2 + '@sinonjs/text-encoding': 0.7.2 + just-extend: 6.2.0 + path-to-regexp: 6.2.1 + dev: true + + /no-case@2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + dependencies: + lower-case: 1.1.4 + dev: true + + /node-environment-flags@1.0.5: + resolution: {integrity: sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==} + dependencies: + object.getownpropertydescriptors: 2.1.7 + semver: 5.7.2 + dev: true + + /node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + requiresBuild: true + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + optional: true + + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + requiresBuild: true + dependencies: + abbrev: 1.1.1 + dev: false + optional: true + + /normalize-newline@4.1.0: + resolution: {integrity: sha512-ff4jKqMI8Xl50/4Mms/9jPobzAV/UK+kXG2XJ/7AqOmxIx8mqfqTIHYxuAnEgJ2AQeBbLnlbmZ5+38Y9A0w/YA==} + engines: {node: '>=12'} + dependencies: + replace-buffer: 1.2.1 + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + /normalize-url@8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + dev: true + + /npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + requiresBuild: true + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + dev: false + optional: true + + /object-assign@4.1.1: + resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} + engines: {node: '>=0.10.0'} + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + /object.assign@4.1.0: + resolution: {integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + function-bind: 1.1.2 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.getownpropertydescriptors@2.1.7: + resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} + engines: {node: '>= 0.8'} + dependencies: + array.prototype.reduce: 1.0.6 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + safe-array-concat: 1.1.0 + dev: true + + /oblivious-set@1.0.0: + resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} + dev: false + + /observable-fns@0.6.1: + resolution: {integrity: sha512-9gRK4+sRWzeN6AOewNBTLXir7Zl/i3GB6Yl26gK4flxz8BXVpD3kt8amREmWNb0mxYOGDotvE5a4N+PtGGKdkg==} + dev: true + + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + + /once@1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + dependencies: + wrappy: 1.0.2 + + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /only@0.0.2: + resolution: {integrity: sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=} + dev: true + + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + /opentype.js@1.3.4: + resolution: {integrity: sha512-d2JE9RP/6uagpQAVtJoF0pJJA/fgai89Cc50Yp0EJHk+eLp6QQ7gBoblsnubRULNY132I0J1QKMJ+JTbMqz4sw==} + engines: {node: '>= 8.0.0'} + hasBin: true + dependencies: + string.prototype.codepointat: 0.2.1 + tiny-inflate: 1.0.3 + dev: true + + /p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + dev: true + + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + /pako@0.2.9: + resolution: {integrity: sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=} + dev: true + + /pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + dev: true + + /param-case@2.1.1: + resolution: {integrity: sha1-35T9jPZTHs915r75oIWPvHK+Ikc=} + dependencies: + no-case: 2.3.2 + dev: true + + /parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + + /parse-ms@3.0.0: + resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==} + engines: {node: '>=12'} + + /parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + dev: true + + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: false + + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + /path-exists@3.0.0: + resolution: {integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=} + engines: {node: '>=4'} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.2.0 + minipass: 7.0.4 + + /path-to-regexp@0.1.7: + resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} + + /path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /path2d-polyfill@2.0.1: + resolution: {integrity: sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==} + engines: {node: '>=8'} + requiresBuild: true + dev: false + optional: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /pdf-merger-js@3.4.0: + resolution: {integrity: sha512-2LkaPYf49cp/QAhjE+n9LEZXVVOzCjZPGlB6fE3a0neW+fers6vz+0A9drQCYNesMbzZ6JttCUF8jJvgwNPHAA==} + dependencies: + pdfjs: 2.5.3 + dev: true + + /pdf2json@2.1.0: + resolution: {integrity: sha512-mXF9AIgnvq1DP/ZM2R28tAfxP2wKZHYa2DjV0R1KCwcqSzm5Iqh1XQq9rdfAt6dp2DuPP0VHZIaCALc2v1cL5A==} + engines: {node: '>=14.18.0', npm: '>=6.14.15'} + hasBin: true + dependencies: + '@xmldom/xmldom': 0.8.10 + dev: true + bundledDependencies: + - '@xmldom/xmldom' + + /pdfjs-dist@4.0.379: + resolution: {integrity: sha512-6H0Gv1nna+wmrr3CakaKlZ4rbrL8hvGIFAgg4YcoFuGC0HC4B2DVjXEGTFjJEjLlf8nYi3C3/MYRcM5bNx0elA==} + engines: {node: '>=18'} + optionalDependencies: + canvas: 2.11.2 + path2d-polyfill: 2.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /pdfjs@2.5.3: + resolution: {integrity: sha512-XSFh7/znM7gJAVABFvrtIkxi6TcHyHUCYpwaRUv1h0ln2ZQel0s8nKgsvmo+D7IKkkXKEQNtMU/hdmF/MUeaHg==} + engines: {node: '>=7'} + dependencies: + '@rkusa/linebreak': 1.0.0 + opentype.js: 1.3.4 + pako: 2.1.0 + readable-stream: 3.6.2 + unorm: 1.6.0 + uuid: 8.3.2 + dev: true + + /pend@1.2.0: + resolution: {integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=} + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /ping@0.4.4: + resolution: {integrity: sha512-56ZMC0j7SCsMMLdOoUg12VZCfj/+ZO+yfOSjaNCRrmZZr6GLbN2X/Ui56T15dI8NhiHckaw5X2pvyfAomanwqQ==} + engines: {node: '>=4.0.0'} + dev: true + + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + /pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + dependencies: + parse-ms: 2.1.0 + + /pretty-ms@8.0.0: + resolution: {integrity: sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==} + engines: {node: '>=14.16'} + dependencies: + parse-ms: 3.0.0 + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /property-information@6.4.1: + resolution: {integrity: sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==} + dev: false + + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + + /public-ip@6.0.1: + resolution: {integrity: sha512-1/Mxa1MKrAQ4jF5IalECSBtB0W1FAtnG+9c5X16jjvV/Gx9fiRy7xXIrHlBGYjnTlai0zdZkM3LrpmASavmAEg==} + engines: {node: '>=14.16'} + dependencies: + aggregate-error: 4.0.1 + dns-socket: 4.2.2 + got: 12.6.1 + is-ip: 4.0.0 + dev: true + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + + /punycode@1.4.1: + resolution: {integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=} + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + /puppeteer@15.5.0: + resolution: {integrity: sha512-+vZPU8iBSdCx1Kn5hHas80fyo0TiVyMeqLGv/1dygX2HKhAZjO9YThadbRTCoTYq0yWw+w/CysldPsEekDtjDQ==} + engines: {node: '>=14.1.0'} + requiresBuild: true + dependencies: + cross-fetch: 3.1.5 + debug: 4.3.4 + devtools-protocol: 0.0.1019158 + extract-zip: 2.0.1 + https-proxy-agent: 5.0.1 + pkg-dir: 4.2.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + rimraf: 3.0.2 + tar-fs: 2.1.1 + unbzip2-stream: 1.4.3 + ws: 8.8.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + + /qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + + /query-string@7.1.3: + resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} + engines: {node: '>=6'} + dependencies: + decode-uri-component: 0.2.2 + filter-obj: 1.1.0 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: false + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /randomatic@3.1.1: + resolution: {integrity: sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==} + engines: {node: '>= 0.10.0'} + dependencies: + is-number: 4.0.0 + kind-of: 6.0.3 + math-random: 1.0.4 + + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + + /realistic-structured-clone@3.0.0: + resolution: {integrity: sha512-rOjh4nuWkAqf9PWu6JVpOWD4ndI+JHfgiZeMmujYcPi+fvILUu7g6l26TC1K5aBIp34nV+jE1cDO75EKOfHC5Q==} + dependencies: + domexception: 1.0.1 + typeson: 6.1.0 + typeson-registry: 1.0.0-alpha.39 + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: false + + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + + /relateurl@0.2.7: + resolution: {integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=} + engines: {node: '>= 0.10'} + dev: true + + /remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-frontmatter: 2.0.1 + micromark-extension-frontmatter: 2.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-gfm: 3.0.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-html@16.0.1: + resolution: {integrity: sha512-B9JqA5i0qZe0Nsf49q3OXyGvyXuZFDzAP2iOFLEumymuYJITVpiH1IgsTEwTpdptDmZlMDMWeDmSawdaJIGCXQ==} + dependencies: + '@types/mdast': 4.0.3 + hast-util-sanitize: 5.0.1 + hast-util-to-html: 9.0.0 + mdast-util-to-hast: 13.1.0 + unified: 11.0.4 + dev: false + + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-from-markdown: 2.0.0 + micromark-util-types: 2.0.0 + unified: 11.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + dependencies: + '@types/mdast': 4.0.3 + mdast-util-to-markdown: 2.1.0 + unified: 11.0.4 + dev: false + + /replace-buffer@1.2.1: + resolution: {integrity: sha512-ly3OKwKu+3T55DjP5PjIMzxgz9lFx6dQnBmAIxryZyRKl8f22juy12ShOyuq8WrQE5UlFOseZgQZDua0iF9DHw==} + engines: {node: '>=4'} + + /require-directory@2.1.1: + resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + engines: {node: '>=0.10.0'} + dev: true + + /require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: true + + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: true + + /resolve-path@1.4.0: + resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} + engines: {node: '>= 0.8'} + dependencies: + http-errors: 1.6.3 + path-is-absolute: 1.0.1 + dev: true + + /responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + dependencies: + lowercase-keys: 3.0.0 + dev: true + + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /rss-parser@3.13.0: + resolution: {integrity: sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==} + dependencies: + entities: 2.2.0 + xml2js: 0.5.0 + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.2 + + /safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + /sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + + /send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + 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 + transitivePeerDependencies: + - supports-color + + /serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + + /set-blocking@2.0.0: + resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} + + /set-function-length@1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + engines: {node: '>= 0.4'} + 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 + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + + /setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: true + + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /shortid@2.2.16: + resolution: {integrity: sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==} + dependencies: + nanoid: 2.1.11 + dev: false + + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + /simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + requiresBuild: true + dev: false + optional: true + + /simple-get@3.1.1: + resolution: {integrity: sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==} + requiresBuild: true + dependencies: + decompress-response: 4.2.1 + once: 1.4.0 + simple-concat: 1.0.1 + dev: false + optional: true + + /sinon-chai@3.7.0(chai@4.4.1)(sinon@17.0.1): + resolution: {integrity: sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==} + peerDependencies: + chai: ^4.0.0 + sinon: '>=4.0.0' + dependencies: + chai: 4.4.1 + sinon: 17.0.1 + dev: true + + /sinon@17.0.1: + resolution: {integrity: sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==} + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 11.2.2 + '@sinonjs/samsam': 8.0.0 + diff: 5.2.0 + nise: 5.1.9 + supports-color: 7.2.0 + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: false + + /socket.io-adapter@2.4.0: + resolution: {integrity: sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==} + dev: false + + /socket.io-adapter@2.5.4: + resolution: {integrity: sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==} + dependencies: + debug: 4.3.4 + ws: 8.11.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /socket.io-client@4.5.4: + resolution: {integrity: sha512-ZpKteoA06RzkD32IbqILZ+Cnst4xewU7ZYK12aS1mzHftFFjpoMz69IuhP/nL25pJfao/amoPI527KnuhFm01g==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-client: 6.2.3 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /socket.io-client@4.7.2: + resolution: {integrity: sha512-vtA0uD4ibrYD793SOIAwlo8cj6haOeMHrGvwPxJsxH7CeIksqJ+3Zc06RvWTIFgiSqx4A3sOnTXpfAEE2Zyz6w==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + engine.io-client: 6.5.3 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + dependencies: + '@socket.io/component-emitter': 3.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + /socket.io@4.5.4: + resolution: {integrity: sha512-m3GC94iK9MfIEeIBfbhJs5BqFibMtkRk8ZpKwG2QwxV0m/eEhPIV4ara6XCF1LWNAus7z58RodiZlAH71U3EhQ==} + engines: {node: '>=10.0.0'} + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + debug: 4.3.4 + engine.io: 6.2.1 + socket.io-adapter: 2.4.0 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /socket.io@4.7.2: + resolution: {integrity: sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==} + engines: {node: '>=10.2.0'} + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.4 + engine.io: 6.5.2 + socket.io-adapter: 2.5.4 + socket.io-parser: 4.2.4 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + /socks@2.8.1: + resolution: {integrity: sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + dev: false + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + dev: true + + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: false + + /sparse-bitfield@3.0.3: + resolution: {integrity: sha1-/0rm5oZWBWuks+eSqzM004JzyhE=} + requiresBuild: true + dependencies: + memory-pager: 1.5.0 + dev: false + optional: true + + /spawn-wrap@2.0.0: + resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} + engines: {node: '>=8'} + dependencies: + foreground-child: 2.0.0 + is-windows: 1.0.2 + make-dir: 3.1.0 + rimraf: 3.0.2 + signal-exit: 3.0.7 + which: 2.0.2 + dev: true + + /split-on-first@1.1.0: + resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} + engines: {node: '>=6'} + dev: false + + /sprintf-js@1.0.3: + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: false + + /statuses@1.5.0: + resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} + engines: {node: '>= 0.6'} + dev: true + + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + /strict-uri-encode@2.0.0: + resolution: {integrity: sha1-ucczDHBChi9rFC3CdLvMWGbONUY=} + engines: {node: '>=4'} + dev: false + + /string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + + /string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + /string.prototype.codepointat@0.2.1: + resolution: {integrity: sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==} + dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /string.prototype.trimend@1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + + /stringify-entities@4.0.3: + resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + dev: false + + /strip-ansi@4.0.0: + resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.1 + dev: true + + /strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + dependencies: + ansi-regex: 4.1.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + + /strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + dependencies: + min-indent: 1.0.1 + + /strip-json-comments@2.0.1: + resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} + engines: {node: '>=0.10.0'} + dev: true + + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + /stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@6.0.0: + resolution: {integrity: sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==} + engines: {node: '>=6'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /svg.draggable.js@2.2.2: + resolution: {integrity: sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.easing.js@2.0.0: + resolution: {integrity: sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.filter.js@2.0.2: + resolution: {integrity: sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.js@2.7.1: + resolution: {integrity: sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==} + dev: false + + /svg.pathmorphing.js@0.1.3: + resolution: {integrity: sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.resize.js@1.4.3: + resolution: {integrity: sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + svg.select.js: 2.1.2 + dev: false + + /svg.select.js@2.1.2: + resolution: {integrity: sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /svg.select.js@3.0.1: + resolution: {integrity: sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==} + engines: {node: '>= 0.8.0'} + dependencies: + svg.js: 2.7.1 + dev: false + + /sweet-scroll@4.0.0: + resolution: {integrity: sha512-mR6fRsAQANtm3zpzhUE73KAOt2aT4ZsWzNSggiEsSqdO6Zh4gM7ioJG81EngrZEl0XAc3ZvzEfhxggOoEBc8jA==} + dev: false + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + /systeminformation@5.22.0: + resolution: {integrity: sha512-oAP80ymt8ssrAzjX8k3frbL7ys6AotqC35oikG6/SG15wBw+tG9nCk4oPaXIhEaAOAZ8XngxUv3ORq2IuR3r4Q==} + engines: {node: '>=8.0.0'} + os: [darwin, linux, win32, freebsd, openbsd, netbsd, sunos, android] + hasBin: true + dev: true + + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + dev: true + + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + requiresBuild: true + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: false + optional: true + + /threads@1.7.0: + resolution: {integrity: sha512-Mx5NBSHX3sQYR6iI9VYbgHKBLisyB+xROCBGjjWm1O9wb9vfLxdaGtmT/KCjUqMsSNW6nERzCW3T6H43LqjDZQ==} + dependencies: + callsites: 3.1.0 + debug: 4.3.4 + is-observable: 2.1.0 + observable-fns: 0.6.1 + optionalDependencies: + tiny-worker: 2.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + dependencies: + readable-stream: 3.6.2 + + /through@2.3.8: + resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=} + dev: true + + /tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + dev: true + + /tiny-worker@2.3.0: + resolution: {integrity: sha512-pJ70wq5EAqTAEl9IkGzA+fN0836rycEuz2Cn6yeZ6FRzlVS5IDOkFHpIoEsksPRQV34GDqXm65+OlnZqUSyK2g==} + dependencies: + esm: 3.2.25 + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + /tr46@0.0.3: + resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} + requiresBuild: true + + /tr46@2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + engines: {node: '>=8'} + dependencies: + punycode: 2.3.1 + + /tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + dependencies: + punycode: 2.3.1 + dev: false + + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false + + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + dev: false + + /ts-node@10.9.2(@types/node@20.11.25)(typescript@5.1.6): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + 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 + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.11.25 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.1.6 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + requiresBuild: true + dev: false + optional: true + + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + /tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + dev: true + + /turndown-plugin-gfm@1.0.2: + resolution: {integrity: sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==} + dev: false + + /turndown@7.1.2: + resolution: {integrity: sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg==} + dependencies: + domino: 2.1.6 + dev: false + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + /type-fest@4.10.3: + resolution: {integrity: sha512-JLXyjizi072smKGGcZiAJDCNweT8J+AuRxmPZ1aG7TERg4ijx9REl8CNhbr36RV4qXqL1gO1FF9HL8OkVmmrsA==} + engines: {node: '>=16'} + + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length@1.0.5: + resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + + /typescript@5.1.6: + resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + engines: {node: '>=14.17'} + hasBin: true + + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /typeson-registry@1.0.0-alpha.39: + resolution: {integrity: sha512-NeGDEquhw+yfwNhguLPcZ9Oj0fzbADiX4R0WxvoY8nGhy98IbzQy1sezjoEFWOywOboj/DWehI+/aUlRVrJnnw==} + engines: {node: '>=10.0.0'} + dependencies: + base64-arraybuffer-es6: 0.7.0 + typeson: 6.1.0 + whatwg-url: 8.7.0 + + /typeson@6.1.0: + resolution: {integrity: sha512-6FTtyGr8ldU0pfbvW/eOZrEtEkczHRUtduBnA90Jh9kMPCiFNnXIon3vF41N0S4tV1HHQt4Hk1j4srpESziCaA==} + engines: {node: '>=0.1.14'} + + /uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + dev: true + + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + dependencies: + buffer: 5.7.1 + through: 2.3.8 + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /unicode-trie@0.3.1: + resolution: {integrity: sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=} + dependencies: + pako: 0.2.9 + tiny-inflate: 1.0.3 + dev: true + + /unified@11.0.4: + resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + dependencies: + '@types/unist': 3.0.2 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.1 + dev: false + + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.2 + dev: false + + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + dev: false + + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + dependencies: + '@types/unist': 3.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + /unload@2.2.0: + resolution: {integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==} + dependencies: + '@babel/runtime': 7.24.0 + detect-node: 2.1.0 + dev: false + + /unorm@1.6.0: + resolution: {integrity: sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==} + engines: {node: '>= 0.4.0'} + dev: true + + /unpipe@1.0.0: + resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} + engines: {node: '>= 0.8'} + + /upper-case@1.1.3: + resolution: {integrity: sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=} + dev: true + + /url@0.11.3: + resolution: {integrity: sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==} + dependencies: + punycode: 1.4.1 + qs: 6.11.2 + + /util-deprecate@1.0.2: + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.14 + dev: false + + /utils-merge@1.0.1: + resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} + engines: {node: '>= 0.4.0'} + + /uuid@7.0.3: + resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==} + hasBin: true + dev: false + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + /vary@1.1.2: + resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} + engines: {node: '>= 0.8'} + + /vfile-location@5.0.2: + resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + dependencies: + '@types/unist': 3.0.2 + vfile: 6.0.1 + dev: false + + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + dev: false + + /vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + dependencies: + '@types/unist': 3.0.2 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + dev: false + + /web-encoding@1.1.5: + resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} + dependencies: + util: 0.12.5 + optionalDependencies: + '@zxing/text-encoding': 0.9.0 + dev: false + + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: false + + /webidl-conversions@3.0.1: + resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} + requiresBuild: true + + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + /webidl-conversions@6.1.0: + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + engines: {node: '>=10.4'} + + /webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: false + + /whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + dev: false + + /whatwg-url@5.0.0: + resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + /whatwg-url@8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + engines: {node: '>=10'} + dependencies: + lodash: 4.17.21 + tr46: 2.1.0 + webidl-conversions: 6.1.0 + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + dev: true + + /which-typed-array@1.1.14: + resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 2.0.0 + + /wide-align@1.1.3: + resolution: {integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==} + dependencies: + string-width: 2.1.1 + dev: true + + /wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + requiresBuild: true + dependencies: + string-width: 4.2.3 + dev: false + optional: true + + /wrap-ansi@5.1.0: + resolution: {integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + string-width: 3.1.0 + strip-ansi: 5.2.0 + dev: true + + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + /wrappy@1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + 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 + dev: true + + /ws@8.11.0: + resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + 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 + + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + 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 + dev: true + + /ws@8.2.3: + resolution: {integrity: sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==} + 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 + dev: false + + /ws@8.8.0: + resolution: {integrity: sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==} + 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 + dev: true + + /xml-js@1.6.11: + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} + hasBin: true + dependencies: + sax: 1.3.0 + + /xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + dependencies: + sax: 1.3.0 + xmlbuilder: 11.0.1 + + /xml@1.0.1: + resolution: {integrity: sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=} + dev: false + + /xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + /xmlhttprequest-ssl@2.0.0: + resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} + engines: {node: '>=0.4.0'} + + /xterm-addon-fit@0.8.0(xterm@5.3.0): + resolution: {integrity: sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==} + peerDependencies: + xterm: ^5.0.0 + dependencies: + xterm: 5.3.0 + dev: false + + /xterm@5.3.0: + resolution: {integrity: sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==} + dev: false + + /y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + /yargs-parser@13.1.2: + resolution: {integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==} + dependencies: + camelcase: 5.3.1 + decamelize: 1.2.0 + dev: true + + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + /yargs-unparser@1.6.0: + resolution: {integrity: sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==} + engines: {node: '>=6'} + dependencies: + flat: 4.1.1 + lodash: 4.17.21 + yargs: 13.3.2 + dev: true + + /yargs@13.3.2: + resolution: {integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==} + dependencies: + cliui: 5.0.0 + find-up: 3.0.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + require-main-filename: 2.0.0 + set-blocking: 2.0.0 + string-width: 3.1.0 + which-module: 2.0.1 + y18n: 4.0.3 + yargs-parser: 13.1.2 + dev: true + + /yauzl@2.10.0: + resolution: {integrity: sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + /ylru@1.3.2: + resolution: {integrity: sha512-RXRJzMiK6U2ye0BlGGZnmpwJDPgakn6aNQ0A7gHRbD4I0uvK4TW6UqkK1V0pp9jskjJBAXd3dRrbzWkqJ+6cxA==} + engines: {node: '>= 4.0.0'} + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false diff --git a/qenv.yml b/qenv.yml new file mode 100644 index 0000000..1dea270 --- /dev/null +++ b/qenv.yml @@ -0,0 +1,12 @@ +required: + - CF_TOKEN + - DIGITALOCEAN_TOKEN + - GITLAB_USER + - GITLAB_TOKEN + - LETSENCRYPT_EMAIL + - MONGODB_URL + - MONGODB_DATABASE + - MONGODB_PASSWORD + - SERVEZONE_URL + - SERVEZONE_PORT + - SERVEZONE_ENVIRONMENT diff --git a/readme.hints.md b/readme.hints.md new file mode 100644 index 0000000..e69de29 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..ec88928 --- /dev/null +++ b/readme.md @@ -0,0 +1,104 @@ +# @serve.zone/cloudly +configure the cloud + +## Install +To install `@serve.zone/cloudly`, run the following command in your terminal: +```bash +npm install @serve.zone/cloudly --save +``` +This will install the package and add it to your project's `package.json` dependencies. + +## Usage +`@serve.zone/cloudly` is designed to help you manage and configure cloud environments. This package provides a comprehensive TypeScript and ESM-based interface for interacting with various cloud services, including Docker Swarmkit cluster management, and integration with cloud providers such as DigitalOcean, Hetzner Cloud, and Cloudflare. + +### Getting Started +Before diving into the specifics, ensure your environment is properly set up. This includes having Node.js installed (preferably the latest LTS version), and if you are working in a TypeScript project, ensure TypeScript is configured. + +#### Initializing Cloudly +First, import `Cloudly` class from the package and initialize it as shown below: + +```typescript +import { Cloudly } from '@serve.zone/cloudly'; + +const myCloudlyInstance = new Cloudly(); +``` + +The `Cloudly` class is the entry point to using the library features. It prepares the environment for configuring the cloud services. + +#### Configuration +Configuration plays a pivotal role in how `@serve.zone/cloudly` operates. The library expects certain configurations to be provided, which can include credentials for cloud services, database connections, etc. + +For example, to configure a connection to MongoDB, specify your MongoDB details as shown: + +```typescript +const myCloudlyConfig = { + mongoDescriptor: { + mongoDbUrl: 'mongodb+srv://:@.mongodb.net/myFirstDatabase', + mongoDbName: 'myDatabase', + mongoDbUser: 'myUser', + mongoDbPass: 'myPassword', + }, + // Additional configuration values... +}; + +const myCloudlyInstance = new Cloudly(myCloudlyConfig); +``` + +#### Managing Docker Swarmkit Cluster +Cloudly allows managing Docker Swarmkit clusters through an abstracted interface, simplifying operations such as deployment and scaling. + +```typescript +// Assuming myCloudlyInstance is already configured and initialized + +// Start the cloud instance +await myCloudlyInstance.start(); + +// Now you can perform various operations on your Docker Swarmkit cluster +``` + +### Integration with Cloud Providers +`@serve.zone/cloudly` integrates seamlessly with cloud providers like DigitalOcean, Hetzner Cloud, etc., by leveraging the power of APIs provided by these platforms. + +#### Managing DigitalOcean Resources +To manage DigitalOcean resources, you'll need to configure your DigitalOcean token and then use the provided interfaces to interact with the resources, such as creating droplets, managing volumes, etc. + +```typescript +// Set your DigitalOcean API token +const digitalOceanToken = "your_digital_ocean_api_token"; + +// Now you can use myCloudlyInstance to manage DigitalOcean resources +``` + +#### Using the Cloudflare Integration +Similarly, for managing DNS records and SSL certificates with Cloudflare, set up your Cloudflare API token: + +```typescript +const cloudflareToken = "your_cloudflare_api_token"; + +// Use myCloudlyInstance to interact with Cloudflare, such as setting DNS records +``` + +### Advanced Usage +`@serve.zone/cloudly` offers more than just cloud resource management. It integrates various modules for error logging, security, working with JSON data, and much more. Explore the comprehensive documentation and typings to leverage the full potential of the package. + +### Conclusion +With `@serve.zone/cloudly`, configuring the cloud becomes a less tedious task. By abstracting away the complexities and providing a unified interface to manage cloud resources, development efficiency is significantly improved. The examples provided above merely scratch the surface of what's possible. Dive into the detailed documentation to explore all features and capabilities. + +## License and Legal Information + +This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. + +**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file. + +### Trademarks + +This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH. + +### Company Information + +Task Venture Capital GmbH +Registered at District court Bremen HRB 35230 HB, Germany + +For any legal inquiries or if you require further information, please contact us via email at hello@task.vc. + +By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works. diff --git a/scripts/deployclusterconfigs.ts b/scripts/deployclusterconfigs.ts new file mode 100644 index 0000000..c5ef697 --- /dev/null +++ b/scripts/deployclusterconfigs.ts @@ -0,0 +1,39 @@ +import { expect, tap } from '@push.rocks/tapbundle'; +import { Qenv } from '@push.rocks/qenv'; +const testQenv = new Qenv('./', './.nogit/'); + +delete process.env.CLI_CALL; + +import * as cloudly from '../ts/index.js'; + +process.env.TESTING_CLOUDLY = 'true'; + +let testCloudly: cloudly.Cloudly; + +tap.test('first test', async () => { + const cloudlyConfig: cloudly.ICloudlyConfig = { + cfToken: await testQenv.getEnvVarOnDemand('CF_TOKEN'), + environment: 'integration', + letsEncryptEmail: await testQenv.getEnvVarOnDemand('LETSENCRYPT_EMAIL'), + publicUrl: await testQenv.getEnvVarOnDemand('SERVEZONE_URL'), + publicPort: await testQenv.getEnvVarOnDemand('SERVEZONE_PORT'), + mongoDescriptor: { + mongoDbName: await testQenv.getEnvVarOnDemand('MONGODB_DATABASE'), + mongoDbPass: await testQenv.getEnvVarOnDemand('MONGODB_PASSWORD'), + mongoDbUrl: await testQenv.getEnvVarOnDemand('MONGODB_URL') + }, + digitalOceanToken: await testQenv.getEnvVarOnDemand('DIGITALOCEAN_TOKEN') + }; + testCloudly = new cloudly.Cloudly(cloudlyConfig); + expect(testCloudly).toBeInstanceOf(cloudly.Cloudly); +}); + +tap.test('should init servezone', async () => { + await testCloudly.start(); +}); + +tap.test('should end the service', async () => { + await testCloudly.stop(); +}); + +tap.start(); diff --git a/scripts/informofnewcontainer.ts b/scripts/informofnewcontainer.ts new file mode 100644 index 0000000..903d650 --- /dev/null +++ b/scripts/informofnewcontainer.ts @@ -0,0 +1,39 @@ +import { expect, tap } from '@push.rocks/tapbundle'; +import { Qenv } from '@push.rocks/qenv'; +const testQenv = new Qenv('./', './.nogit/'); + +delete process.env.CLI_CALL; + +import * as cloudly from '../ts/index'; + +process.env.TESTING_CLOUDLY = 'true'; + +let testCloudly: cloudly.Cloudly; + +tap.test('first test', async () => { + const cloudlyConfig: cloudly.ICloudlyConfig = { + cfToken: testQenv.getEnvVarOnDemand('CF_TOKEN'), + environment: 'integration', + letsEncryptEmail: testQenv.getEnvVarOnDemand('LETSENCRYPT_EMAIL'), + publicUrl: testQenv.getEnvVarOnDemand('SERVEZONE_URL'), + publicPort: testQenv.getEnvVarOnDemand('SERVEZONE_PORT'), + mongoDescriptor: { + mongoDbName: testQenv.getEnvVarOnDemand('MONGODB_DATABASE'), + mongoDbPass: testQenv.getEnvVarOnDemand('MONGODB_PASSWORD'), + mongoDbUrl: testQenv.getEnvVarOnDemand('MONGODB_URL') + }, + digitalOceanToken: testQenv.getEnvVarOnDemand('DIGITALOCEAN_TOKEN') + }; + testCloudly = new cloudly.Cloudly(cloudlyConfig); + expect(testCloudly).to.be.instanceof(cloudly.Cloudly); +}); + +tap.test('should init servezone', async () => { + await testCloudly.start(); +}); + +tap.test('should end the service', async () => { + await testCloudly.stop(); +}); + +tap.start(); diff --git a/test/test.ts b/test/test.ts new file mode 100644 index 0000000..42cfba5 --- /dev/null +++ b/test/test.ts @@ -0,0 +1,39 @@ +import { expect, tap } from '@push.rocks/tapbundle'; +import { Qenv } from '@push.rocks/qenv'; +const testQenv = new Qenv('./', './.nogit/'); +process.env.TESTING_CLOUDLY = 'true'; + +delete process.env.CLI_CALL; + +import * as cloudly from '../ts/index.js'; + +let testCloudly: cloudly.Cloudly; +tap.test('first test', async () => { + const cloudlyConfig: cloudly.ICloudlyConfig = { + cfToken: testQenv.getEnvVarOnDemand('CF_TOKEN'), + environment: 'integration', + letsEncryptEmail: testQenv.getEnvVarOnDemand('LETSENCRYPT_EMAIL'), + publicUrl: testQenv.getEnvVarOnDemand('SERVEZONE_URL'), + publicPort: testQenv.getEnvVarOnDemand('SERVEZONE_PORT'), + mongoDescriptor: { + mongoDbName: testQenv.getEnvVarOnDemand('MONGODB_DATABASE'), + mongoDbUser: testQenv.getEnvVarOnDemand('MONGODB_USER'), + mongoDbPass: testQenv.getEnvVarOnDemand('MONGODB_PASSWORD'), + mongoDbUrl: testQenv.getEnvVarOnDemand('MONGODB_URL'), + }, + digitalOceanToken: testQenv.getEnvVarOnDemand('DIGITALOCEAN_TOKEN'), + }; + testCloudly = new cloudly.Cloudly(cloudlyConfig); + expect(testCloudly).toBeInstanceOf(cloudly.Cloudly); +}); + +tap.test('should init cloudly', async () => { + await testCloudly.start(); +}); + +tap.test('should end the service', async (tools) => { + await testCloudly.stop(); + tools.delayFor(1000).then(() => process.exit()) +}); + +tap.start(); diff --git a/test/test_latest.sh b/test/test_latest.sh new file mode 100644 index 0000000..6b1fb7f --- /dev/null +++ b/test/test_latest.sh @@ -0,0 +1 @@ +echo 'hi' diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts new file mode 100644 index 0000000..979396c --- /dev/null +++ b/ts/00_commitinfo_data.ts @@ -0,0 +1,8 @@ +/** + * autocreated commitinfo by @pushrocks/commitinfo + */ +export const commitinfo = { + name: '@serve.zone/cloudly', + version: '1.0.214', + description: 'A cloud manager utilizing Docker Swarmkit, designed for operations on Cloudron, and supports various cloud platforms like DigitalOcean, Hetzner Cloud, and Cloudflare.' +} diff --git a/ts/cloudly.classes.cloudly.ts b/ts/cloudly.classes.cloudly.ts new file mode 100644 index 0000000..d37724f --- /dev/null +++ b/ts/cloudly.classes.cloudly.ts @@ -0,0 +1,120 @@ +import * as plugins from './cloudly.plugins.js'; +import { CloudlyConfig } from './cloudly.classes.config.js'; + +// interfaces +import {} from '@tsclass/tsclass'; + +// Cloudly mods +import { CloudlyInfo } from './cloudly.classes.cloudlyinfo.js'; +import { CloudlyServer } from './cloudly.classes.server.js'; + +// connectors +import { CloudflareConnector } from './connector.cloudflare/connector.js'; +import { LetsencryptConnector } from './connector.letsencrypt/connector.js'; +import { MongodbConnector } from './connector.mongodb/connector.js'; + +// processes +import { CloudlyCoreflowManager } from './manager.coreflow/coreflowmanager.js'; +import { ClusterManager } from './manager.cluster/clustermanager.js'; +import { CloudlyTaskmanager } from './manager.task/taskmanager.js'; +import { CloudlyVersionManager } from './manager.version/versionmanager.js'; +import { CloudlySecretManager } from './manager.secret/classes.secretmanager.js' +import { CloudlyServerManager } from './manager.server/servermanager.js'; +import { ExternalApiManager } from './manager.status/statusmanager.js'; +import { ImageManager } from './manager.image/classes.imagemanager.js'; +import { logger } from './cloudly.logging.js'; + +/** + * Cloudly class can be used to instantiate a cloudly server. + * It is implemented as class in order to make it easier ro write node services that are more adjusted to invidual services + * + * ```ts + * const mycloudly = new Cloudly ({...}) + * ``` + */ +export class Cloudly { + public typedrouter = new plugins.typedrequest.TypedRouter(); + + public config: CloudlyConfig; + public logger: plugins.smartlog.Smartlog; + public ready: Promise; + + // mods + public cloudlyInfo: CloudlyInfo; + public server: CloudlyServer; + + // connectors + public cloudflareConnector: CloudflareConnector; + public letsencryptConnector: LetsencryptConnector; + public mongodbConnector: MongodbConnector; + + // managers + public secretManager: CloudlySecretManager; + public clusterManager: ClusterManager; + public coreflowManager: CloudlyCoreflowManager; + public externalApiManager: ExternalApiManager; + public imageManager: ImageManager; + public taskManager: CloudlyTaskmanager; + public versionManager: CloudlyVersionManager; + public serverManager: CloudlyServerManager; + + private readyDeferred = new plugins.smartpromise.Deferred(); + + constructor() { + this.cloudlyInfo = new CloudlyInfo(this); + this.config = new CloudlyConfig(this); + + this.logger = logger; + this.server = new CloudlyServer(this); + this.ready = this.readyDeferred.promise; + + // connectors + this.mongodbConnector = new MongodbConnector(this); // database needs to go first + this.cloudflareConnector = new CloudflareConnector(this); + this.letsencryptConnector = new LetsencryptConnector(this); + + // processes + this.clusterManager = new ClusterManager(this); + this.coreflowManager = new CloudlyCoreflowManager(this); + this.externalApiManager = new ExternalApiManager(this); + this.imageManager = new ImageManager(this); + this.taskManager = new CloudlyTaskmanager(this); + this.versionManager = new CloudlyVersionManager(this); + this.secretManager = new CloudlySecretManager(this); + this.serverManager = new CloudlyServerManager(this); + } + + /** + * starts the cloudly instance and + * @param configArg + */ + public async start() { + // config + await this.config.init(); + + // manageers + await this.secretManager.start(); + await this.serverManager.start(); + + // connectors + await this.mongodbConnector.init(); + await this.cloudflareConnector.init(); + await this.letsencryptConnector.init(); + await this.clusterManager.init(); + await this.server.start(); + this.readyDeferred.resolve(); + + // start the managers + this.imageManager.start(); + } + + /** + * stop the reception instance + */ + public async stop() { + await this.server.stop(); + await this.letsencryptConnector.stop(); + await this.mongodbConnector.stop(); + await this.secretManager.stop(); + } +} diff --git a/ts/cloudly.classes.cloudlyinfo.ts b/ts/cloudly.classes.cloudlyinfo.ts new file mode 100644 index 0000000..3c78237 --- /dev/null +++ b/ts/cloudly.classes.cloudlyinfo.ts @@ -0,0 +1,13 @@ +import * as plugins from './cloudly.plugins.js'; +import * as paths from './cloudly.paths.js'; +import { Cloudly } from './index.js'; + +export class CloudlyInfo { + public cloudlyRef: Cloudly; + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + } + + public projectInfo = new plugins.projectinfo.ProjectInfo(paths.packageDir); +} diff --git a/ts/cloudly.classes.config.ts b/ts/cloudly.classes.config.ts new file mode 100644 index 0000000..42d09e9 --- /dev/null +++ b/ts/cloudly.classes.config.ts @@ -0,0 +1,79 @@ +import * as plugins from './cloudly.plugins.js'; +import * as paths from './cloudly.paths.js'; +import { logger } from './cloudly.logging.js'; +import type { Cloudly } from './cloudly.classes.cloudly.js'; + +/** + * the main cloudly config + */ +export class CloudlyConfig { + public cloudlyRef: Cloudly; + public appData: plugins.npmextra.AppData; + public data: plugins.servezoneInterfaces.data.ICloudlyConfig + + // authentication and settings + public smartjwtInstance: plugins.smartjwt.SmartJwt; + + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + } + + public async init() { + this.appData = await plugins.npmextra.AppData.createAndInit({ + envMapping: { + cfToken: 'CF_TOKEN', + environment: 'SERVEZONE_ENVIRONMENT' as 'production' | 'integration', + letsEncryptEmail: 'hard:domains@lossless.org', + hetznerToken: 'HETZNER_API_TOKEN', + letsEncryptPrivateKey: null, + publicUrl: 'SERVEZONE_URL', + publicPort: 'SERVEZONE_PORT', + mongoDescriptor: { + mongoDbUrl: 'MONGODB_URL', + mongoDbName: 'MONGODB_DATABASE', + mongoDbUser: 'MONGODB_USER', + mongoDbPass: 'MONGODB_PASSWORD', + }, + s3Descriptor: { + endpoint: 'S3_ENDPOINT', + accessKey: 'S3_ACCESSKEY', + accessSecret: 'S3_SECRETKEY', + port: 'S3_PORT', // Note: This will remain as a string. Ensure to parse it to an integer where it's used. + useSsl: true, + }, + sslMode: 'SERVEZONE_SSLMODE' as plugins.servezoneInterfaces.data.ICloudlyConfig['sslMode'], + }, + requiredKeys: [ + 'cfToken', + 'hetznerToken', + 'letsEncryptEmail', + 'publicUrl', + 'publicPort', + 'sslMode', + 'environment', + 'mongoDescriptor', + ], + }); + + this.smartjwtInstance = new plugins.smartjwt.SmartJwt(); + const kvStore = await this.appData.getKvStore(); + + const existingJwtKeys: plugins.tsclass.network.IJwtKeypair = await kvStore.readKey('jwtKeys'); + + if (!existingJwtKeys) { + await this.smartjwtInstance.createNewKeyPair(); + const newJwtKeys = this.smartjwtInstance.getKeyPairAsJson(); + await kvStore.writeKey('jwtKeys', newJwtKeys); + } else { + this.smartjwtInstance.setKeyPairAsJson(existingJwtKeys); + } + + this.data = await kvStore.readAll(); + const missingKeys = await this.appData.logMissingKeys(); + if (missingKeys.length > 0) { + logger.log('error', `missing keys: ${missingKeys.join(', ')}`); + throw new Error('missing keys'); + } + } +} diff --git a/ts/cloudly.classes.server.ts b/ts/cloudly.classes.server.ts new file mode 100644 index 0000000..4b998ba --- /dev/null +++ b/ts/cloudly.classes.server.ts @@ -0,0 +1,96 @@ +import * as plugins from './cloudly.plugins.js'; +import * as paths from './cloudly.paths.js'; +import { Cloudly } from './cloudly.classes.cloudly.js'; +import { logger } from './cloudly.logging.js'; + +/** + * handles incoming requests from CI to deploy new versions of apps + */ +export class CloudlyServer { + /** + * a reference to the cloudly instance + */ + private cloudlyRef: Cloudly; + + /** + * the smartexpress server handling the actual requests + */ + public typedServer: plugins.typedserver.TypedServer; + public typedsocketServer: plugins.typedsocket.TypedSocket; + + /** + * typedrouter + * @param cloudlyArg + */ + public typedrouter = new plugins.typedrequest.TypedRouter(); + + constructor(cloudlyArg: Cloudly) { + this.cloudlyRef = cloudlyArg; + this.cloudlyRef.typedrouter.addTypedRouter(this.typedrouter); + } + + // ========= + // LIFECYCLE + // ========= + + /** + * init the reception instance + */ + public async start() { + logger.log('info', `cloudly domain is ${this.cloudlyRef.config.data.publicUrl}`) + let sslCert: plugins.smartacme.Cert; + + if (this.cloudlyRef.config.data.sslMode === 'letsencrypt') { + logger.log('info', `Using letsencrypt for ssl mode. Trying to obtain a certificate...`) + logger.log('info', `This might take 10 minutes...`) + sslCert = await this.cloudlyRef.letsencryptConnector.getCertificateForDomain( + this.cloudlyRef.config.data.publicUrl + ); + logger.log('success', `Successfully obtained certificate for cloudly domain ${this.cloudlyRef.config.data.publicUrl}`) + } else if (this.cloudlyRef.config.data.sslMode === 'external') { + logger.log('info', `Using external certificate for ssl mode, meaning cloudly is not in charge of ssl termination.`) + } + + interface IRequestGuardData { + req: plugins.typedserver.Request; + res: plugins.typedserver.Response; + } + + // guards + const guardIp = new plugins.smartguard.Guard(async (dataArg) => { + if (true) { + return true; + } else { + dataArg.res.status(500); + dataArg.res.send(`Not allowed to perform this operation!`); + dataArg.res.end(); + return false; + } + }); + + // server + this.typedServer = new plugins.typedserver.TypedServer({ + cors: true, + forceSsl: false, + port: this.cloudlyRef.config.data.publicPort, + ...(sslCert ? { + privateKey: sslCert.privateKey, + publicKey: sslCert.publicKey, + } : {}), + injectReload: true, + serveDir: paths.distServeDir, + watch: true, + enableCompression: true, + preferredCompressionMethod: 'gzip', + }); + this.typedServer.typedrouter.addTypedRouter(this.typedrouter); + await this.typedServer.start(); + } + + /** + * stop the reception instance + */ + public async stop() { + await this.typedServer.stop(); + } +} diff --git a/ts/cloudly.logging.ts b/ts/cloudly.logging.ts new file mode 100644 index 0000000..0923105 --- /dev/null +++ b/ts/cloudly.logging.ts @@ -0,0 +1,16 @@ +import * as plugins from './cloudly.plugins.js'; +import * as paths from './cloudly.paths.js'; + +export const logger = new plugins.smartlog.Smartlog({ + logContext: { + company: null, + environment: null, + runtime: null, + zone: null, + companyunit: null, + containerName: null, + } +}); +logger.enableConsole({ + captureAll: false +}); diff --git a/ts/cloudly.paths.ts b/ts/cloudly.paths.ts new file mode 100644 index 0000000..a70eddd --- /dev/null +++ b/ts/cloudly.paths.ts @@ -0,0 +1,5 @@ +import * as plugins from './cloudly.plugins.js'; + +export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../'); +export const nogitDir = plugins.path.join(packageDir, '.nogit/'); +export const distServeDir = plugins.path.join(packageDir, './dist_serve'); diff --git a/ts/cloudly.plugins.ts b/ts/cloudly.plugins.ts new file mode 100644 index 0000000..20fb29a --- /dev/null +++ b/ts/cloudly.plugins.ts @@ -0,0 +1,77 @@ +// node native +import * as path from 'path'; + +export { path }; + +// @apiglobal scope +import * as typedrequest from '@api.global/typedrequest'; +import * as typedsocket from '@api.global/typedsocket'; + +export { typedrequest, typedsocket }; + +// @mojoio scope +import * as cloudflare from '@apiclient.xyz/cloudflare'; +import * as digitalocean from '@apiclient.xyz/digitalocean'; +import * as hetznercloud from '@apiclient.xyz/hetznercloud'; +import * as slack from '@apiclient.xyz/slack'; + +export { cloudflare, digitalocean, hetznercloud, slack }; + +// @tsclass scope +import * as tsclass from '@tsclass/tsclass'; + +export { tsclass }; + +// @push.rocks scope +import * as npmextra from '@push.rocks/npmextra'; +import * as projectinfo from '@push.rocks/projectinfo'; +import * as qenv from '@push.rocks/qenv'; +import * as smartacme from '@push.rocks/smartacme'; +import * as smartbucket from '@push.rocks/smartbucket'; +import * as smartcli from '@push.rocks/smartcli'; +import * as smartdata from '@push.rocks/smartdata'; +import * as smartdelay from '@push.rocks/smartdelay'; +import * as smartexit from '@push.rocks/smartexit'; +import * as typedserver from '@api.global/typedserver'; +import * as smartfile from '@push.rocks/smartfile'; +import * as smartguard from '@push.rocks/smartguard'; +import * as smartjson from '@push.rocks/smartjson'; +import * as smartjwt from '@push.rocks/smartjwt'; +import * as smartlog from '@push.rocks/smartlog'; +import * as smartpath from '@push.rocks/smartpath'; +import * as smartpromise from '@push.rocks/smartpromise'; +import * as smartrequest from '@push.rocks/smartrequest'; +import * as smartssh from '@push.rocks/smartssh'; +import * as smartstring from '@push.rocks/smartstring'; +import * as smartunique from '@push.rocks/smartunique'; +import * as taskbuffer from '@push.rocks/taskbuffer'; + +export { + npmextra, + projectinfo, + qenv, + smartacme, + smartbucket, + smartcli, + smartdata, + smartexit, + typedserver, + smartdelay, + smartfile, + smartguard, + smartjson, + smartjwt, + smartlog, + smartpath, + smartpromise, + smartrequest, + smartssh, + smartstring, + smartunique, + taskbuffer, +}; + +// @servezone scope +import * as servezoneInterfaces from '@serve.zone/interfaces'; + +export { servezoneInterfaces }; diff --git a/ts/connector.cloudflare/connector.ts b/ts/connector.cloudflare/connector.ts new file mode 100644 index 0000000..8fafb05 --- /dev/null +++ b/ts/connector.cloudflare/connector.ts @@ -0,0 +1,19 @@ +import * as plugins from '../cloudly.plugins.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; + +/** + * the portion of Cloudflare responsible + */ +export class CloudflareConnector { + private cloudlyRef: Cloudly; + public cloudflare: plugins.cloudflare.CloudflareAccount; + + constructor(cloudlyArg: Cloudly) { + this.cloudlyRef = cloudlyArg; + } + + // init the instance + public async init() { + this.cloudflare = new plugins.cloudflare.CloudflareAccount(this.cloudlyRef.config.data.cfToken); + } +} diff --git a/ts/connector.letsencrypt/connector.ts b/ts/connector.letsencrypt/connector.ts new file mode 100644 index 0000000..823f26c --- /dev/null +++ b/ts/connector.letsencrypt/connector.ts @@ -0,0 +1,46 @@ +import * as plugins from '../cloudly.plugins.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; + +export class LetsencryptConnector { + private cloudlyRef: Cloudly; + private smartacme: plugins.smartacme.SmartAcme; + + constructor(cloudlyArg: Cloudly) { + this.cloudlyRef = cloudlyArg; + } + + public async getCertificateForDomain(domainName: string) { + const cert = await this.smartacme.getCertificateForDomain(domainName); + return cert; + } + + /** + * inits letsencrypt + */ + public async init() { + this.smartacme = new plugins.smartacme.SmartAcme({ + accountEmail: this.cloudlyRef.config.data.letsEncryptEmail, + accountPrivateKey: this.cloudlyRef.config.data.letsEncryptPrivateKey, + environment: this.cloudlyRef.config.data.environment, + setChallenge: async (dnsChallenge) => { + await this.cloudlyRef.cloudflareConnector.cloudflare.convenience.acmeSetDnsChallenge( + dnsChallenge + ); + }, + removeChallenge: async (dnsChallenge) => { + await this.cloudlyRef.cloudflareConnector.cloudflare.convenience.acmeRemoveDnsChallenge( + dnsChallenge + ); + }, + mongoDescriptor: this.cloudlyRef.config.data.mongoDescriptor, + }); + await this.smartacme.init(); + } + + /** + * stops the instance + */ + public async stop() { + await this.smartacme.stop(); + } +} diff --git a/ts/connector.mongodb/connector.ts b/ts/connector.mongodb/connector.ts new file mode 100644 index 0000000..d71a171 --- /dev/null +++ b/ts/connector.mongodb/connector.ts @@ -0,0 +1,21 @@ +import * as plugins from '../cloudly.plugins.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; + +export class MongodbConnector { + // INSTANCE + private cloudlyRef: Cloudly; + public smartdataDb: plugins.smartdata.SmartdataDb; + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + } + + public async init() { + this.smartdataDb = new plugins.smartdata.SmartdataDb(this.cloudlyRef.config.data.mongoDescriptor); + await this.smartdataDb.init(); + } + + public async stop() { + await this.smartdataDb.close(); + } +} diff --git a/ts/demo/demo.data.clusters.ts b/ts/demo/demo.data.clusters.ts new file mode 100644 index 0000000..e69de29 diff --git a/ts/demo/demo.data.secrets.ts b/ts/demo/demo.data.secrets.ts new file mode 100644 index 0000000..9c78793 --- /dev/null +++ b/ts/demo/demo.data.secrets.ts @@ -0,0 +1,83 @@ +import * as plugins from '../cloudly.plugins.js'; + +// Create an array to hold 10 ISecretGroup objects +const demoSecretGroups: plugins.servezoneInterfaces.data.ISecretGroup[] = []; + +// Generate 10 ISecretGroup objects +for (let i = 1; i <= 10; i++) { + const secretGroup: plugins.servezoneInterfaces.data.ISecretGroup = { + id: `${plugins.smartunique.shortId(8)}`, + data: { + name: `Demo Secret Group ${i}`, + description: `This is a demo secret group for testing purposes ${i}`, + key: `CI_RUNNER_TOKEN_${i}`, + priority: i, + tags: [ + { + key: 'project', + value: `my_project_${i}`, + }, + { + key: 'environment', + value: i % 2 === 0 ? 'staging' : 'production', + }, + ], + environments: { + production: { + value: `prod_secret_value_${i}`, + lastUpdated: 1630522000 + i, + history: [ + { + timestamp: String(1630521000 + i), + value: `old_prod_value_${i}`, + }, + ], + }, + staging: { + value: `stag_secret_value_${i}`, + updateToken: `updateToken${i}`, + lastUpdated: 1630522500 + i, + history: [ + { + timestamp: String(1630521500 + i), + value: `old_stag_value_${i}`, + }, + ], + }, + }, + }, + }; + + // Push each ISecretGroup object into the array + demoSecretGroups.push(secretGroup); +} + +// Create an array to hold 10 IConfigBundle objects +const demoConfigBundles: plugins.servezoneInterfaces.data.ISecretBundle[] = []; + +// Generate 10 IConfigBundle objects that match demoSecretGroups +for (let i = 0; i < demoSecretGroups.length; i++) { + const secretGroup = demoSecretGroups[i]; + + const configBundle: plugins.servezoneInterfaces.data.ISecretBundle = { + id: `configBundleId${i + 1}`, + data: { + name: `Demo Config Bundle ${i + 1}`, + description: 'Demo Purpose', + includedSecretGroupIds: [secretGroup.id], + includedTags: secretGroup.data.tags, + authorizations: Object.keys(secretGroup.data.environments).map((env) => { + return { + secretAccessKey: `mockSecretAccessKeyFor${env}`, + environment: env, + }; + }), + }, + }; + + // Push each IConfigBundle object into the array + demoConfigBundles.push(configBundle); +} + +// Exporting the array of demo IConfigBundle objects +export { demoSecretGroups, demoConfigBundles }; diff --git a/ts/demo/index.ts b/ts/demo/index.ts new file mode 100644 index 0000000..d475f26 --- /dev/null +++ b/ts/demo/index.ts @@ -0,0 +1,38 @@ +import type { Cloudly } from '../cloudly.classes.cloudly.js'; + +export const installDemoData = async (cloudlyRef: Cloudly) => { + + // ================================================================================ + // SECRETS + + const demoDataSecrets = await import('./demo.data.secrets.js'); + + const secretGroups = await cloudlyRef.secretManager.CSecretGroup.getInstances({}); + for (const secretGroup of secretGroups) { + await secretGroup.delete(); + } + + const secretBundles = await cloudlyRef.secretManager.CSecretBundle.getInstances({}); + for (const secretBundle of secretBundles) { + await secretBundle.delete(); + } + + for (const secretData of demoDataSecrets.demoSecretGroups) { + const secretGroup = new cloudlyRef.secretManager.CSecretGroup(); + Object.assign(secretGroup, secretData); + await secretGroup.save(); + } + for (const secretBundleData of demoDataSecrets.demoConfigBundles) { + const secretBundle = new cloudlyRef.secretManager.CSecretBundle(); + Object.assign(secretBundle, secretBundleData); + await secretBundle.save(); + } + + // ================================================================================ + // CLUSTERS + const clusters = await cloudlyRef.clusterManager.CCluster.getInstances({}); + for (const cluster of clusters) { + await cluster.delete(); + } + +} \ No newline at end of file diff --git a/ts/index.ts b/ts/index.ts new file mode 100644 index 0000000..6581928 --- /dev/null +++ b/ts/index.ts @@ -0,0 +1,28 @@ +import * as early from '@push.rocks/early'; +early.start('cloudly'); +import * as plugins from './cloudly.plugins.js'; +import * as paths from './cloudly.paths.js'; +import { Cloudly } from './cloudly.classes.cloudly.js'; +import { logger } from './cloudly.logging.js'; +const cloudlyQenv = new plugins.qenv.Qenv(paths.packageDir, paths.nogitDir, true); +early.stop(); + + +/** + * starts the cloudly instance + */ +const runCli = async () => { + logger.log('info', process.env.SERVEZONE_ENVIRONMENT); + const cloudlyInstance = new Cloudly(); + + logger.log( + 'info', + `running in environment ${await cloudlyQenv.getEnvVarOnDemand('SERVEZONE_ENVIRONMENT')}` + ); + + await cloudlyInstance.start(); + const demoMod = await import('./demo/index.js'); + demoMod.installDemoData(cloudlyInstance); +}; + +export { runCli, Cloudly }; diff --git a/ts/manager.cluster/cluster.ts b/ts/manager.cluster/cluster.ts new file mode 100644 index 0000000..7c20c02 --- /dev/null +++ b/ts/manager.cluster/cluster.ts @@ -0,0 +1,31 @@ +import * as plugins from '../cloudly.plugins.js'; + +/* + * cluster defines a swarmkit cluster + */ +@plugins.smartdata.Manager() +export class Cluster extends plugins.smartdata.SmartDataDbDoc { + // STATIC + public static async fromConfigObject( + configObjectArg: plugins.servezoneInterfaces.data.ICluster + ) { + const newCluster = new Cluster(); + Object.assign(newCluster, configObjectArg); + return newCluster; + } + + // INSTANCE + @plugins.smartdata.unI() + public id: string; + + @plugins.smartdata.svDb() + public data: plugins.servezoneInterfaces.data.ICluster['data']; + + constructor() { + super(); + } + + public async getServices(): Promise { + return []; + } +} diff --git a/ts/manager.cluster/clustermanager.ts b/ts/manager.cluster/clustermanager.ts new file mode 100644 index 0000000..6e3f4b6 --- /dev/null +++ b/ts/manager.cluster/clustermanager.ts @@ -0,0 +1,131 @@ +import * as plugins from '../cloudly.plugins.js'; +import * as paths from '../cloudly.paths.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; +import { logger } from '../cloudly.logging.js'; + +import { Cluster } from './cluster.js'; + +export class ClusterManager { + public ready = plugins.smartpromise.defer(); + + public cloudlyRef: Cloudly; + public get db() { + return this.cloudlyRef.mongodbConnector.smartdataDb; + } + public typedrouter = new plugins.typedrequest.TypedRouter(); + + public CCluster = plugins.smartdata.setDefaultManagerForDoc(this, Cluster); + + constructor(cloudlyRef: Cloudly) { + this.cloudlyRef = cloudlyRef; + this.cloudlyRef.typedrouter.addTypedRouter(this.typedrouter); + + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler('createCluster', async (dataArg) => { + const cluster = await this.storeCluster({ + id: plugins.smartunique.uniSimple('cluster'), + data: { + name: dataArg.clusterName, + jumpCode: plugins.smartunique.uniSimple('cluster'), + jumpCodeUsedAt: null, + secretKey: plugins.smartunique.shortId(16), + acmeInfo: null, + cloudlyUrl: `https://${this.cloudlyRef.config.data.publicUrl}:${this.cloudlyRef.config.data.publicPort}/`, + servers: [], + sshKeys: [], + }, + }); + console.log(await cluster.createSavableObject()); + this.cloudlyRef.serverManager.ensureServerInfrastructure(); + return { + clusterConfig: await cluster.createSavableObject(), + }; + }) + ); + + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler('getAllClusters', async (dataArg) => { + // TODO: do authentication here + const clusters = await this.getAllClusters(); + return { + clusters: await Promise.all( + clusters.map((clusterArg) => clusterArg.createSavableObject()) + ), + }; + }) + ); + } + + public async init() { + // lets read the config folder + logger.log('info', 'config manager is now initializing'); + this.ready.resolve(); + } + + /** + * gets a cluster config by Name + */ + public async getClusterConfigBy_ServerIP() { + await this.ready.promise; + // TODO: implement getclusterConfigByServerIp + } + + public async getClusterConfigBy_JumpCode(jumpCodeArg: string) { + await this.ready.promise; + + return await Cluster.getInstance({ + data: { + jumpCode: jumpCodeArg, + }, + }); + } + + public async getClusterConfigBy_ClusterIdentifier( + clusterIdentifier: plugins.servezoneInterfaces.data.IClusterIdentifier + ) { + await this.ready.promise; + + return await Cluster.getInstance({ + data: { + name: clusterIdentifier.clusterName, + secretKey: clusterIdentifier.secretKey, + }, + }); + } + + /** + * get config by id + */ + public async getConfigBy_ConfigID(configId: string) { + await this.ready.promise; + + return await Cluster.getInstance({ + id: configId, + }); + } + + /** + * gets all cluster configs + */ + public async getAllClusters() { + await this.ready.promise; + + return await Cluster.getInstances({}); + } + + /** + * allows storage of a config + * @param configName + * @param configObjectArg + */ + public async storeCluster(configObjectArg: plugins.servezoneInterfaces.data.ICluster) { + let clusterInstance = await Cluster.getInstance({ id: configObjectArg.id }); + if (!clusterInstance) { + clusterInstance = await Cluster.fromConfigObject(configObjectArg); + } else { + Object.assign(clusterInstance, configObjectArg); + } + await clusterInstance.save(); + return clusterInstance; + } +} diff --git a/ts/manager.coreflow/coreflowmanager.ts b/ts/manager.coreflow/coreflowmanager.ts new file mode 100644 index 0000000..b132b77 --- /dev/null +++ b/ts/manager.coreflow/coreflowmanager.ts @@ -0,0 +1,73 @@ +import * as plugins from '../cloudly.plugins.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; + +/** + * in charge of talking to coreflow services on clusters + * coreflow runs on a server when ServerManager is done. + */ +export class CloudlyCoreflowManager { + public cloudlyRef: Cloudly; + public typedRouter = new plugins.typedrequest.TypedRouter(); + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + this.cloudlyRef.typedrouter.addTypedRouter(this.typedRouter); + + this.typedRouter.addTypedHandler( + new plugins.typedrequest.TypedHandler('getIdentityByJumpCode', async (requestData) => { + const clusterConfig = + await this.cloudlyRef.clusterManager.getClusterConfigBy_JumpCode( + requestData.jumpCode + ); + + if (!clusterConfig) { + throw new plugins.typedrequest.TypedResponseError('The supplied jumpCode is not valid.'); + } + + return { + clusterIdentifier: { + clusterName: clusterConfig.data.name, + secretKey: clusterConfig.data.secretKey, + }, + }; + }) + ); + + // lets enable the getting of cluster configs + this.typedRouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'getClusterConfig', + async (dataArg) => { + const clusterIdentifier = dataArg.clusterIdentifier; + console.log('trying to get clusterConfigSet'); + console.log(dataArg); + const clusterConfigSet = + await this.cloudlyRef.clusterManager.getClusterConfigBy_ClusterIdentifier( + clusterIdentifier + ); + console.log('got cluster config and sending it back to coreflow'); + return { + configData: await clusterConfigSet.createSavableObject() + }; + } + ) + ); + + // lets enable getting of certificates + this.typedRouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'getSslCertificate', + async (dataArg) => { + console.log(`got request for certificate ${dataArg.requiredCertName}`); + const cert = await this.cloudlyRef.letsencryptConnector.getCertificateForDomain( + dataArg.requiredCertName + ); + console.log(`got certificate ready for reponse ${dataArg.requiredCertName}`); + return { + certificate: await cert.createSavableObject(), + }; + } + ) + ); + } +} diff --git a/ts/manager.image/classes.image.ts b/ts/manager.image/classes.image.ts new file mode 100644 index 0000000..07d8685 --- /dev/null +++ b/ts/manager.image/classes.image.ts @@ -0,0 +1,21 @@ +import * as plugins from '../cloudly.plugins.js'; +import type { ImageManager } from './classes.imagemanager.js'; + +@plugins.smartdata.Manager() +export class Image extends plugins.smartdata.SmartDataDbDoc { + public static async create(imageDataArg: Partial) { + const image = new Image(); + image.id = plugins.smartunique.uni('image'); + Object.assign(image.data, imageDataArg); + await image.save(); + return image; + } + + @plugins.smartdata.unI() + public id: string; + + @plugins.smartdata.svDb() + public data: plugins.servezoneInterfaces.data.IImage['data']; + + public async getVersions() {} +} \ No newline at end of file diff --git a/ts/manager.image/classes.imagemanager.ts b/ts/manager.image/classes.imagemanager.ts new file mode 100644 index 0000000..7c1782d --- /dev/null +++ b/ts/manager.image/classes.imagemanager.ts @@ -0,0 +1,82 @@ +import type { Cloudly } from '../cloudly.classes.cloudly.js'; +import * as plugins from '../cloudly.plugins.js'; + +import { Image } from './classes.image.js'; + +export class ImageManager { + cloudlyRef: Cloudly; + get db() { + return this.cloudlyRef.mongodbConnector.smartdataDb; + } + public typedrouter = new plugins.typedrequest.TypedRouter(); + + public CImage = plugins.smartdata.setDefaultManagerForDoc(this, Image); + + smartbucketInstance: plugins.smartbucket.SmartBucket; + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + + this.cloudlyRef.typedrouter.addTypedRouter(this.typedrouter); + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'getAllImages', + async (requestArg) => { + const images = await this.CImage.getInstances({}); + return { + images: await Promise.all( + images.map((image) => { + return image.createSavableObject(); + }) + ), + }; + } + ) + ); + + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'createImage', + async (reqArg) => { + const image = await this.CImage.create({ + name: reqArg.name, + }); + return { + image: await image.createSavableObject(), + }; + } + ) + ); + + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'pullImage', + async (reqArg) => { + const image = await this.CImage.getInstance({ + data: { + name: reqArg.name, + } + }); + const imageVersion = + } + ) + ); + } + + public async start() { + const s3Descriptor: plugins.tsclass.storage.IS3Descriptor = + await this.cloudlyRef.config.appData.waitForAndGetKey('s3Descriptor'); + console.log(this.cloudlyRef.config.data.s3Descriptor); + this.smartbucketInstance = new plugins.smartbucket.SmartBucket( + this.cloudlyRef.config.data.s3Descriptor + ); + const bucket = await this.smartbucketInstance.getBucketByName('cloudly-test'); + await bucket.fastStore('test/test.txt', 'hello'); + } + + public async createImage(nameArg: string) { + const newImage = await this.CImage.create({ + name: nameArg, + }); + } +} diff --git a/ts/manager.log/logmanager.ts b/ts/manager.log/logmanager.ts new file mode 100644 index 0000000..82afb70 --- /dev/null +++ b/ts/manager.log/logmanager.ts @@ -0,0 +1,15 @@ +import * as plugins from '../cloudly.plugins.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; + +/** + * takes care of receiving and providing logs + */ +export class LogManager { + public cloudlyRef: Cloudly; + public typedRouter = new plugins.typedrequest.TypedRouter(); + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + this.cloudlyRef.typedrouter.addTypedRouter(this.typedRouter); + } +} \ No newline at end of file diff --git a/ts/manager.secret/classes.secretbundle.ts b/ts/manager.secret/classes.secretbundle.ts new file mode 100644 index 0000000..24d56de --- /dev/null +++ b/ts/manager.secret/classes.secretbundle.ts @@ -0,0 +1,62 @@ +// a secret bundle is a set of secrets ready to be used in a project. +// it bundles secretgroups +import { SecretGroup } from './classes.secretgroup.js'; +import * as plugins from '../cloudly.plugins.js'; + +@plugins.smartdata.Manager() +export class SecretBundle extends plugins.smartdata.SmartDataDbDoc< + SecretBundle, + plugins.servezoneInterfaces.data.ISecretBundle +> { + // STATIC + + // INSTANCE + @plugins.smartdata.unI() + public id: string; + + @plugins.smartdata.svDb() + public data: plugins.servezoneInterfaces.data.ISecretBundle['data']; + + public async getSecretGroups() { + const secretGroups: SecretGroup[] = []; + for (const secretGroupId of this.data.includedSecretGroupIds) { + secretGroups.push( + await SecretGroup.getInstance({ + id: secretGroupId, + }) + ); + } + return secretGroups; + } + + /** + * searches the secretGroups for environments and returns them + */ + public async getEnvironments() { + const environments = new Set(); + const secretGroups = await this.getSecretGroups(); + for (const secretGroup of secretGroups) { + environments.add(secretGroup.data.environments); + } + return Array.from(environments); + } + + public async getAuthorizationFromAuthKey(authKeyArg: string) { + const authorization = this.data.authorizations.find((authArg) => { + return authArg.secretAccessKey === authKeyArg; + }); + return authorization; + } + + public async getKeyValueObjectForEnvironment(environmentArg: string) { + const secretGroups = await this.getSecretGroups(); + const returnObject = {}; + for (const secretGroup of secretGroups) { + if (!secretGroup.data.environments[environmentArg]) { + continue; + } + returnObject[secretGroup.data.key] = secretGroup.data.environments[environmentArg].value; + } + return returnObject; + } +} diff --git a/ts/manager.secret/classes.secretgroup.ts b/ts/manager.secret/classes.secretgroup.ts new file mode 100644 index 0000000..2c1e9fa --- /dev/null +++ b/ts/manager.secret/classes.secretgroup.ts @@ -0,0 +1,21 @@ +/** + * a secretgroup is a set of secrets for different environments. + */ +import * as plugins from '../cloudly.plugins.js'; + +@plugins.smartdata.Manager() +export class SecretGroup extends plugins.smartdata.SmartDataDbDoc< + SecretGroup, + plugins.servezoneInterfaces.data.ISecretGroup +> { + // INSTANCE + + /** + * the insatnce id. This should be a random id, except for default + */ + @plugins.smartdata.unI() + id: string; + + @plugins.smartdata.svDb() + data: plugins.servezoneInterfaces.data.ISecretGroup['data']; +} diff --git a/ts/manager.secret/classes.secretmanager.ts b/ts/manager.secret/classes.secretmanager.ts new file mode 100644 index 0000000..e72dd63 --- /dev/null +++ b/ts/manager.secret/classes.secretmanager.ts @@ -0,0 +1,156 @@ +import * as plugins from '../cloudly.plugins.js'; +import * as paths from '../cloudly.paths.js'; +import { SecretBundle } from './classes.secretbundle.js'; +import { SecretGroup } from './classes.secretgroup.js'; +import { logger } from '../cloudly.logging.js'; +import type { Cloudly } from '../cloudly.classes.cloudly.js'; + +/** + * The `ConfigVault` class provides methods for reading and writing configuration data to a file. + * It uses the `TypedServer` and `TypedRouter` classes from the `configvault.plugins.js` module to handle HTTP requests and route them to the appropriate handlers. + * + * @class + */ +export class CloudlySecretManager { + // attached classes + public CSecretBundle = plugins.smartdata.setDefaultManagerForDoc(this, SecretBundle); + public CSecretGroup = plugins.smartdata.setDefaultManagerForDoc(this, SecretGroup); + + // INSTANCE + public cloudlyRef: Cloudly; + public projectinfo = new plugins.projectinfo.ProjectinfoNpm(paths.packageDir); + public serviceQenv = new plugins.qenv.Qenv(paths.packageDir, paths.nogitDir); + public typedrouter: plugins.typedrequest.TypedRouter; + + get db() { + return this.cloudlyRef.mongodbConnector.smartdataDb; + } + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + } + + public async start() { + // lets set up a typedrouter + this.typedrouter = new plugins.typedrequest.TypedRouter(); + this.cloudlyRef.typedrouter.addTypedRouter(this.typedrouter); + + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'adminLoginWithUsernameAndPassword', + async (dataArg) => { + let jwt: string; + // console.log(dataArg); + if (dataArg.username !== 'admin' || dataArg.password !== 'password') { + logger.log('warn', 'login failed'); + } else { + jwt = await this.cloudlyRef.config.smartjwtInstance.createJWT({ + status: 'loggedIn', + }); + logger.log('success', 'login successful'); + } + return { + jwt, + }; + } + ) + ); + + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'adminGetConfigBundlesAndSecretGroups', + async (dataArg) => { + dataArg.jwt + const secretBundles = await SecretBundle.getInstances({}); + const secretGroups = await SecretGroup.getInstances({}); + return { + secretBundles: [ + ...(await Promise.all( + secretBundles.map((configBundle) => configBundle.createSavableObject()) + )), + ], + secretGroups: [ + ...(await Promise.all( + secretGroups.map((secretGroup) => secretGroup.createSavableObject()) + )), + ], + }; + } + ) + ); + + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'adminCreateConfigBundlesAndSecretGroups', + async (dataArg) => { + for (const secretGroupObject of dataArg.secretGroups) { + const secretGroup = new SecretGroup(); + secretGroup.id = plugins.smartunique.shortId(8); + secretGroup.data = secretGroupObject.data; + await secretGroup.save(); + } + return { + ok: true, + }; + } + ) + ); + + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'adminDeleteConfigBundlesAndSecretGroups', + async (dataArg) => { + for (const secretGroupId of dataArg.secretGroupIds) { + const secretGroup = await SecretGroup.getInstance({ + id: secretGroupId, + }); + await secretGroup.delete(); + } + for (const secretBundleId of dataArg.secretBundleIds) { + const configBundle = await SecretBundle.getInstance({ + id: secretBundleId, + }); + await configBundle.delete(); + console.log(`deleted configbundle ${secretBundleId}`); + } + return { + ok: true, + }; + } + ) + ); + + // lets add typedrouter routes for accessing the configvailt from apps + this.typedrouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'getEnvBundle', + async (dataArg) => { + const wantedBundle = await SecretBundle.getInstance({ + data: { + authorizations: { + // @ts-ignore + $elemMatch: { + secretAccessKey: dataArg.authorization, + }, + }, + }, + }); + const authorization = await wantedBundle.getAuthorizationFromAuthKey( + dataArg.authorization + ); + return { + envBundle: { + configKeyValueObject: await wantedBundle.getKeyValueObjectForEnvironment( + authorization.environment + ), + environment: authorization.environment, + timeSensitive: false, + }, + }; + } + ) + ); + } + + public async stop() {} +} diff --git a/ts/manager.server/server.ts b/ts/manager.server/server.ts new file mode 100644 index 0000000..5b179b4 --- /dev/null +++ b/ts/manager.server/server.ts @@ -0,0 +1,39 @@ +import * as plugins from '../cloudly.plugins.js'; + +/* + * cluster defines a swarmkit cluster + */ +@plugins.smartdata.Manager() +export class Server extends plugins.smartdata.SmartDataDbDoc { + // STATIC + public static async createFromHetznerServer( + hetznerServerArg: plugins.hetznercloud.HetznerServer + ) { + const newServer = new Server(); + newServer.id = plugins.smartunique.shortId(8); + const data: plugins.servezoneInterfaces.data.IServer['data'] = { + assignedClusterId: hetznerServerArg.data.labels.clusterId, + requiredDebianPackages: [], + sshKeys: [], + type: 'hetzner', + } + Object.assign(newServer, { data }); + await newServer.save(); + return newServer; + } + + // INSTANCE + @plugins.smartdata.unI() + public id: string; + + @plugins.smartdata.svDb() + public data: plugins.servezoneInterfaces.data.IServer['data']; + + constructor() { + super(); + } + + public async getServices(): Promise { + return []; + } +} diff --git a/ts/manager.server/servermanager.ts b/ts/manager.server/servermanager.ts new file mode 100644 index 0000000..8e56b5e --- /dev/null +++ b/ts/manager.server/servermanager.ts @@ -0,0 +1,103 @@ +import * as plugins from '../cloudly.plugins.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; +import { Cluster } from '../manager.cluster/cluster.js'; +import { Server } from './server.js'; + +export class CloudlyServerManager { + public cloudlyRef: Cloudly; + public typedRouter = new plugins.typedrequest.TypedRouter(); + + public hetznerAccount: plugins.hetznercloud.HetznerAccount; + + public get db() { + return this.cloudlyRef.mongodbConnector.smartdataDb; + } + public CServer = plugins.smartdata.setDefaultManagerForDoc(this, Server); + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + + /** + * is used be serverconfig module on the server to get the actual server config + */ + this.typedRouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'getServerConfig', + async (requestData) => { + const serverId = requestData.serverId; + const server = await this.CServer.getInstance({ + id: serverId, + }) + return { + configData: await server.createSavableObject(), + }; + } + ) + ); + } + + public async start() { + this.hetznerAccount = new plugins.hetznercloud.HetznerAccount(this.cloudlyRef.config.data.hetznerToken); + } + + public async stop() {} + + /** + * creates the server infrastructure on hetzner + * ensures that there are exactly the reources that are needed + * no more, no less + */ + public async ensureServerInfrastructure() { + // get all clusters + const allClusters = await this.cloudlyRef.clusterManager.getAllClusters(); + for (const cluster of allClusters) { + // get existing servers + const servers = await this.getServersByCluster(cluster); + + // if there is no server, create one + if (servers.length === 0) { + const server = await this.hetznerAccount.createServer({ + name: plugins.smartunique.uniSimple('server'), + location: 'nbg1', + type: 'cpx41', + labels: { + clusterId: cluster.id, + priority: '1', + } + }); + const newServer = await Server.createFromHetznerServer(server); + console.log(`cluster created new server for cluster ${cluster.id}`); + } else { + console.log(`cluster ${cluster.id} already has servers. Making sure that they actually exist in the real world...`); + // if there is a server, make sure that it exists + for (const server of servers) { + const hetznerServer = await this.hetznerAccount.getServersByLabel({ + 'clusterId': cluster.id + }); + if (!hetznerServer) { + console.log(`server ${server.id} does not exist in the real world. Creating it now...`); + const hetznerServer = await this.hetznerAccount.createServer({ + name: plugins.smartunique.uniSimple('server'), + location: 'nbg1', + type: 'cpx41', + labels: { + clusterId: cluster.id, + priority: '1', + } + }); + const newServer = await Server.createFromHetznerServer(hetznerServer); + } + } + } + } + } + + public async getServersByCluster(clusterArg: Cluster) { + const results = await this.CServer.getInstances({ + data: { + assignedClusterId: clusterArg.id, + } + }); + return results; + } +} diff --git a/ts/manager.service/classes.service.ts b/ts/manager.service/classes.service.ts new file mode 100644 index 0000000..e69de29 diff --git a/ts/manager.service/classes.servicemanager.ts b/ts/manager.service/classes.servicemanager.ts new file mode 100644 index 0000000..e69de29 diff --git a/ts/manager.status/statusmanager.ts b/ts/manager.status/statusmanager.ts new file mode 100644 index 0000000..069d35a --- /dev/null +++ b/ts/manager.status/statusmanager.ts @@ -0,0 +1,22 @@ +import * as plugins from '../cloudly.plugins.js'; +import { Cloudly } from '../index.js'; + +/** + * external api manager manages external api requests + */ +export class ExternalApiManager { + public cloudlyRef: Cloudly; + public typedRouter = new plugins.typedrequest.TypedRouter(); + + constructor(cloudlyRef: Cloudly) { + this.cloudlyRef = cloudlyRef; + this.typedRouter.addTypedHandler( + new plugins.typedrequest.TypedHandler('getNetworkNodes', async (requestData) => { + const networkNodes = []; + return { + networkNodes, + }; + }) + ); + } +} diff --git a/ts/manager.task/taskmanager.ts b/ts/manager.task/taskmanager.ts new file mode 100644 index 0000000..cf9ee25 --- /dev/null +++ b/ts/manager.task/taskmanager.ts @@ -0,0 +1,35 @@ +import * as plugins from '../cloudly.plugins.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; + +import { logger } from '../cloudly.logging.js'; + +export class CloudlyTaskmanager { + public cloudlyRef: Cloudly; + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + } + + public everyMinuteTask = new plugins.taskbuffer.Task({ + taskFunction: async () => {}, + }); + + public everyHourTask = new plugins.taskbuffer.Task({ + taskFunction: async () => { + logger.log('info', `Performing hourly maintenance check.`); + const configs = await this.cloudlyRef.clusterManager.getAllClusters(); + logger.log('info', `Got ${configs.length} configs`); + configs.map((configArg) => { + console.log(configArg.name); + }); + }, + }); + + public everyDayTask = new plugins.taskbuffer.Task({ + taskFunction: async () => {}, + }); + + public everyWeekTask = new plugins.taskbuffer.Task({ + taskFunction: async () => {}, + }); +} diff --git a/ts/manager.version/containerversion.ts b/ts/manager.version/containerversion.ts new file mode 100644 index 0000000..518a567 --- /dev/null +++ b/ts/manager.version/containerversion.ts @@ -0,0 +1,32 @@ +import * as plugins from '../cloudly.plugins.js'; + +/* +A container version is managed by the versionmanager +*/ +@plugins.smartdata.Manager() +export class ContainerVersion + extends plugins.smartdata.SmartDataDbDoc + implements plugins.servezoneInterfaces.data.IContainerVersionData +{ + public static async fromIVersionData( + dataArg: plugins.servezoneInterfaces.data.IContainerVersionData + ) { + const containerVersionInstance = new ContainerVersion(); + containerVersionInstance.id = plugins.smartunique.shortId(); + Object.assign(containerVersionInstance, dataArg); + return containerVersionInstance; + } + + @plugins.smartdata.unI() + public id: string; + + @plugins.smartdata.svDb() + public dockerImageUrl: string; + + @plugins.smartdata.svDb() + public dockerImageVersion: string; + + constructor() { + super(); + } +} diff --git a/ts/manager.version/versionmanager.ts b/ts/manager.version/versionmanager.ts new file mode 100644 index 0000000..c2acb8a --- /dev/null +++ b/ts/manager.version/versionmanager.ts @@ -0,0 +1,149 @@ +import * as plugins from '../cloudly.plugins.js'; + +import { ContainerVersion } from './containerversion.js'; +import { Cloudly } from '../cloudly.classes.cloudly.js'; + +export class CloudlyVersionManager { + // INSTANCE + public cloudlyRef: Cloudly; + public get db() { + return this.cloudlyRef.mongodbConnector.smartdataDb; + } + public typedRouter = new plugins.typedrequest.TypedRouter(); + + // connected classes + public CContainerVersion = plugins.smartdata.setDefaultManagerForDoc(this, ContainerVersion); + + constructor(cloudlyRefArg: Cloudly) { + this.cloudlyRef = cloudlyRefArg; + this.cloudlyRef.typedrouter.addTypedRouter(this.typedRouter); + // get version + this.typedRouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'getLatestContainerVersion', + async (typedRequestData) => { + const containerVersionGet: ContainerVersion = + await ContainerVersion.getInstance({ + dockerImageUrl: typedRequestData.dockerImageUrl, + }); + return { + dockerImageUrl: containerVersionGet.dockerImageUrl, + dockerImageVersion: containerVersionGet.dockerImageVersion, + }; + } + ) + ); + + // update version + this.typedRouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'informCloudlyAboutNewContainerVersion', + async (dataArg) => { + console.log(`Got a container version announcement! "${dataArg.dockerImageUrl}"`); + let containerVersion: ContainerVersion = + await ContainerVersion.getInstance({ + dockerImageUrl: dataArg.dockerImageUrl, + }); + + if (containerVersion) { + containerVersion.dockerImageVersion = dataArg.dockerImageVersion; + await containerVersion.save(); + } else { + containerVersion = await ContainerVersion.fromIVersionData(dataArg); + await containerVersion.save(); + } + + // lets push this info to the relevant clusters + const clusters = await this.cloudlyRef.clusterManager.getAllClusters(); + let foundServices: plugins.servezoneInterfaces.data.IService; + let relevantClusterIdentifier: plugins.servezoneInterfaces.data.IClusterIdentifier; + for (const clusterArg of clusters) { + console.log(clusterArg); + for (const serviceArg of await clusterArg.getServices()) { + if (serviceArg.image === containerVersion.dockerImageUrl) { + foundServices = serviceArg; + break; + } + } + if (foundServices) { + relevantClusterIdentifier = { + clusterName: clusterArg.data.name, + secretKey: clusterArg.data.secretKey, + }; + break; + } + } + + if (!relevantClusterIdentifier) { + console.log('no cluster found that needs to update'); + return {}; + } else { + console.log('found relevant cluster identifier:'); + console.log(relevantClusterIdentifier); + } + + const targetConnection = + await this.cloudlyRef.server.typedsocketServer.findTargetConnection( + async (connectionArg) => { + const identityTag = await connectionArg.getTagById('identity'); + if (!identityTag) { + return false; + } + const result = + plugins.smartjson.stringify(identityTag.payload) === + plugins.smartjson.stringify(relevantClusterIdentifier); + return result; + } + ); + + if (targetConnection) { + console.log(`the relevant cluster is connected and is now being informed.`); + const informCoreflowTR = + this.cloudlyRef.server.typedsocketServer.createTypedRequest( + 'informCoreflowAboutNewContainerVersion', + targetConnection + ); + informCoreflowTR.fire({ + dockerImageUrl: containerVersion.dockerImageUrl, + dockerImageVersion: containerVersion.dockerImageVersion, + }); + } else { + console.log('the relevant cluster is not connected at this time.'); + } + + return {}; + } + ) + ); + + // lets support the servezone standard + this.typedRouter.addTypedHandler( + new plugins.typedrequest.TypedHandler( + 'servezonestandard_InformAboutNewContainerVersion', + async (dataArg) => { + const result = + await this.typedRouter.routeAndAddResponse( + { + method: 'informCloudlyAboutNewContainerVersion', + request: { + dockerImageUrl: dataArg.containerImageInfo.registryUrl, + dockerImageVersion: dataArg.containerImageInfo.version, + }, + response: null + }, + true + ); + return result.response; + } + ) + ); + } + + /** + * gets all versions + */ + public async getAllVersions() { + const result = await ContainerVersion.getInstances({}); + return result; + } +} diff --git a/ts_apiclient/classes.cloudlyclient.ts b/ts_apiclient/classes.cloudlyclient.ts new file mode 100644 index 0000000..ebc48d0 --- /dev/null +++ b/ts_apiclient/classes.cloudlyclient.ts @@ -0,0 +1,13 @@ +import * as plugins from './plugins.js'; + +export class CloudlyClient { + public clientToken: string; + + constructor(clientToken: string) { + this.clientToken = clientToken; + } + + public async getClusters() { + + } +} diff --git a/ts_apiclient/classes.cluster.ts b/ts_apiclient/classes.cluster.ts new file mode 100644 index 0000000..1fbed9f --- /dev/null +++ b/ts_apiclient/classes.cluster.ts @@ -0,0 +1,5 @@ +import * as plugins from './plugins.js'; + +export class Cluster { + public getServers() {} +} diff --git a/ts_apiclient/classes.image.ts b/ts_apiclient/classes.image.ts new file mode 100644 index 0000000..952ce21 --- /dev/null +++ b/ts_apiclient/classes.image.ts @@ -0,0 +1,5 @@ +import * as plugins from './plugins.js'; + +export class Image { + public getImages() {} +} \ No newline at end of file diff --git a/ts_apiclient/classes.server.ts b/ts_apiclient/classes.server.ts new file mode 100644 index 0000000..e69de29 diff --git a/ts_apiclient/classes.service.ts b/ts_apiclient/classes.service.ts new file mode 100644 index 0000000..c04e305 --- /dev/null +++ b/ts_apiclient/classes.service.ts @@ -0,0 +1,5 @@ +import * as plugins from './plugins.js'; + +export class Service { + +} diff --git a/ts_apiclient/index.ts b/ts_apiclient/index.ts new file mode 100644 index 0000000..4cffc19 --- /dev/null +++ b/ts_apiclient/index.ts @@ -0,0 +1 @@ +export * from './classes.cloudlyclient.js'; \ No newline at end of file diff --git a/ts_apiclient/plugins.ts b/ts_apiclient/plugins.ts new file mode 100644 index 0000000..f251064 --- /dev/null +++ b/ts_apiclient/plugins.ts @@ -0,0 +1,5 @@ +import * as typedrequest from '@api.global/typedrequest'; + +export { + typedrequest +} \ No newline at end of file diff --git a/ts_cliclient/index.ts b/ts_cliclient/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts new file mode 100644 index 0000000..979396c --- /dev/null +++ b/ts_web/00_commitinfo_data.ts @@ -0,0 +1,8 @@ +/** + * autocreated commitinfo by @pushrocks/commitinfo + */ +export const commitinfo = { + name: '@serve.zone/cloudly', + version: '1.0.214', + description: 'A cloud manager utilizing Docker Swarmkit, designed for operations on Cloudron, and supports various cloud platforms like DigitalOcean, Hetzner Cloud, and Cloudflare.' +} diff --git a/ts_web/appstate.ts b/ts_web/appstate.ts new file mode 100644 index 0000000..d557b50 --- /dev/null +++ b/ts_web/appstate.ts @@ -0,0 +1,192 @@ +import * as plugins from './plugins.js'; +import * as domtools from '@design.estate/dees-domtools'; + +const appstate = new plugins.deesDomtools.plugins.smartstate.Smartstate(); +export interface ILoginState { + jwt: string; +} +export const loginStatePart = await appstate.getStatePart( + 'login', + { jwt: null }, + 'persistent' +); + +export const loginAction = loginStatePart.createAction<{ username: string; password: string }>( + async (statePartArg, payloadArg) => { + const currentState = statePartArg.getState(); + const trLogin = + new domtools.plugins.typedrequest.TypedRequest( + '/typedrequest', + 'adminLoginWithUsernameAndPassword' + ); + const response = await trLogin.fire({ + username: payloadArg.username, + password: payloadArg.password, + }); + return { + ...currentState, + ...(response.jwt ? { jwt: response.jwt } : {}), + }; + } +); + +export const logoutAction = loginStatePart.createAction(async (statePartArg) => { + const currentState = statePartArg.getState(); + return { + ...currentState, + jwt: null, + }; +}); + +export interface IDataState { + secretGroups?: plugins.interfaces.data.ISecretGroup[]; + secretBundles?: plugins.interfaces.data.ISecretBundle[]; + clusters?: plugins.interfaces.data.ICluster[]; + images?: any[]; + services?: any[]; + deployments?: any[]; + dns?: any[]; + mails?: any[]; + logs?: any[]; + s3?: any[]; + dbs?: any[]; + backups?: any[]; +} +export const dataState = await appstate.getStatePart( + 'data', + { + secretGroups: [], + secretBundles: [], + clusters: [], + images: [], + services: [], + deployments: [], + dns: [], + mails: [], + logs: [], + s3: [], + dbs: [], + backups: [], + }, + 'soft' +); + +// Getting data +export const getDataAction = dataState.createAction(async (statePartArg) => { + let currentState = statePartArg.getState(); + // Secrets + const trGetSecrets = + new domtools.plugins.typedrequest.TypedRequest( + '/typedrequest', + 'adminGetConfigBundlesAndSecretGroups' + ); + const response = await trGetSecrets.fire({ + jwt: loginStatePart.getState().jwt, + }); + currentState = { + ...currentState, + ...response, + }; + + // Clusters + const trGetClusters = + new domtools.plugins.typedrequest.TypedRequest( + '/typedrequest', + 'getAllClusters' + ); + const responseClusters = await trGetClusters.fire({ + jwt: loginStatePart.getState().jwt, + }); + + currentState = { + ...currentState, + ...responseClusters, + } + + return currentState; +}); + +// SecretGroup Actions +export const createSecretGroupAction = dataState.createAction( + async (statePartArg, payloadArg: plugins.interfaces.data.ISecretGroup) => { + let currentState = statePartArg.getState(); + const trCreateSecretGroup = + new domtools.plugins.typedrequest.TypedRequest( + '/typedrequest', + 'adminCreateConfigBundlesAndSecretGroups' + ); + const response = await trCreateSecretGroup.fire({ + jwt: loginStatePart.getState().jwt, + secretBundles: [], + secretGroups: [payloadArg], + }); + currentState = await dataState.dispatchAction(getDataAction, null); + return currentState; + return currentState; + } +); + +export const deleteSecretGroupAction = dataState.createAction( + async (statePartArg, payloadArg: { secretGroupId: string }) => { + let currentState = statePartArg.getState(); + const trDeleteSecretGroup = + new domtools.plugins.typedrequest.TypedRequest( + '/typedrequest', + 'adminDeleteConfigBundlesAndSecretGroups' + ); + const response = await trDeleteSecretGroup.fire({ + jwt: loginStatePart.getState().jwt, + secretBundleIds: [], + secretGroupIds: [payloadArg.secretGroupId], + }); + currentState = await dataState.dispatchAction(getDataAction, null); + return currentState; + } +); + +// SecretBundle Actions +export const deleteSecretBundleAction = dataState.createAction( + async (statePartArg, payloadArg: { configBundleId: string }) => { + let currentState = statePartArg.getState(); + const trDeleteConfigBundle = + new domtools.plugins.typedrequest.TypedRequest( + '/typedrequest', + 'adminDeleteConfigBundlesAndSecretGroups' + ); + const response = await trDeleteConfigBundle.fire({ + jwt: loginStatePart.getState().jwt, + secretBundleIds: [payloadArg.configBundleId], + secretGroupIds: [], + }); + currentState = await dataState.dispatchAction(getDataAction, null); + return currentState; + } +); + +// cluster +export const addClusterAction = dataState.createAction( + async ( + statePartArg, + payloadArg: { + clusterName: string; + } + ) => { + let currentState = statePartArg.getState(); + const trAddCluster = + new domtools.plugins.typedrequest.TypedRequest( + '/typedrequest', + 'createCluster' + ); + const response = await trAddCluster.fire({ + jwt: loginStatePart.getState().jwt, + ...payloadArg, + }); + currentState = { + ...currentState, + ...{ + clusters: [...currentState.clusters, response.clusterConfig], + }, + } + return currentState; + } +); diff --git a/ts_web/elements/cloudly-dashboard.ts b/ts_web/elements/cloudly-dashboard.ts new file mode 100644 index 0000000..e24c4aa --- /dev/null +++ b/ts_web/elements/cloudly-dashboard.ts @@ -0,0 +1,202 @@ +import { commitinfo } from '../00_commitinfo_data.js'; +import * as plugins from '../plugins.js'; + +import * as appstate from '../appstate.js'; + +import { + DeesElement, + css, + cssManager, + customElement, + html, + state +} from '@design.estate/dees-element'; +import { CloudlyViewBackups } from './cloudly-view-backups.js'; +import { CloudlyViewClusters } from './cloudly-view-clusters.js'; +import { CloudlyViewDbs } from './cloudly-view-dbs.js'; +import { CloudlyViewDeployments } from './cloudly-view-deployments.js'; +import { CloudlyViewDns } from './cloudly-view-dns.js'; +import { CloudlyViewImages } from './cloudly-view-images.js'; +import { CloudlyViewLogs } from './cloudly-view-logs.js'; +import { CloudlyViewMails } from './cloudly-view-mails.js'; +import { CloudlyViewOverview } from './cloudly-view-overview.js'; +import { CloudlyViewS3 } from './cloudly-view-s3.js'; +import { CloudlyViewSecretBundles } from './cloudly-view-secretbundles.js'; +import { CloudlyViewSecretGroups } from './cloudly-view-secretgroups.js'; +import { CloudlyViewServices } from './cloudly-view-services.js'; + +declare global { + interface HTMLElementTagNameMap { + 'cvault-dashboard': CloudlyDashboard; + } +} + +@customElement('cloudly-dashboard') +export class CloudlyDashboard extends DeesElement { + @state() private jwt: string; + @state() private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + clusters: [], + }; + + constructor() { + super(); + const subcription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subcription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + .maincontainer { + position: relative; + width: 100vw; + height: 100vh; + } + + h1 { + font-weight: 400; + font-size: 24px; + font-family: 'Cal Sans'; + } + `, + ]; + public render() { + return html` +
+ + + +
+ `; + } + public async firstUpdated() { + const simpleLogin = this.shadowRoot.querySelector('dees-simple-login'); + simpleLogin.addEventListener('login', (e: CustomEvent) => { + console.log(e.detail); + this.login(e.detail.data.username, e.detail.data.password); + }); + this.addEventListener('contextmenu', (eventArg) => { + plugins.deesCatalog.DeesContextmenu.openContextMenuWithOptions(eventArg, [ + { + name: 'About', + iconName: 'mugHot', + action: async () => { + await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'About', + content: html`configvault ${commitinfo.version}`, + menuOptions: [ + { + name: 'close', + iconName: null, + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ]); + }); + + // lets deal with initial state + const domtools = await this.domtoolsPromise; + const loginState = appstate.loginStatePart.getState(); + console.log(loginState); + if (loginState.jwt) { + this.jwt = loginState.jwt; + await simpleLogin.switchToSlottedContent(); + await appstate.dataState.dispatchAction(appstate.getDataAction, null); + } + } + + private async login(username: string, password: string) { + const domtools = await this.domtoolsPromise; + console.log(`attempting to login...`); + const simpleLogin = this.shadowRoot.querySelector('dees-simple-login'); + const form = simpleLogin.shadowRoot.querySelector('dees-form'); + form.setStatus('pending', 'Logging in...'); + const state = await appstate.loginStatePart.dispatchAction(appstate.loginAction, { + username, + password, + }); + if (state.jwt) { + console.log('got jwt'); + this.jwt = state.jwt; + form.setStatus('success', 'Logged in!'); + await simpleLogin.switchToSlottedContent(); + await appstate.dataState.dispatchAction(appstate.getDataAction, null); + } else { + form.setStatus('error', 'Login failed!'); + await domtools.convenience.smartdelay.delayFor(2000); + form.reset(); + } + } + + private async logout() {} +} diff --git a/ts_web/elements/cloudly-view-backups.ts b/ts_web/elements/cloudly-view-backups.ts new file mode 100644 index 0000000..8f01f2b --- /dev/null +++ b/ts_web/elements/cloudly-view-backups.ts @@ -0,0 +1,133 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-backups') +export class CloudlyViewBackups extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + Backups + { + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add configBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add ConfigBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-clusters.ts b/ts_web/elements/cloudly-view-clusters.ts new file mode 100644 index 0000000..e9148ee --- /dev/null +++ b/ts_web/elements/cloudly-view-clusters.ts @@ -0,0 +1,140 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-clusters') +export class CloudlyViewClusters extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + Clusters + { + console.log(itemArg); + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add cluster', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add Cluster', + content: html` + + + + `, + menuOptions: [ + { + name: 'create', + action: async (modalArg) => { + const data: { + clusterName: string; + } = (await modalArg.shadowRoot + .querySelector('dees-form') + .collectFormData()) as any; + await appstate.dataState.dispatchAction(appstate.addClusterAction, data); + await modalArg.destroy(); + }, + }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-dbs.ts b/ts_web/elements/cloudly-view-dbs.ts new file mode 100644 index 0000000..e8363ca --- /dev/null +++ b/ts_web/elements/cloudly-view-dbs.ts @@ -0,0 +1,133 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-dbs') +export class CloudlyViewDbs extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + DBs + { + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add configBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add ConfigBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-deployments.ts b/ts_web/elements/cloudly-view-deployments.ts new file mode 100644 index 0000000..be6e9e6 --- /dev/null +++ b/ts_web/elements/cloudly-view-deployments.ts @@ -0,0 +1,133 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-deployments') +export class CloudlyViewDeployments extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + Deployments + { + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add configBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add ConfigBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-dns.ts b/ts_web/elements/cloudly-view-dns.ts new file mode 100644 index 0000000..5a80e2f --- /dev/null +++ b/ts_web/elements/cloudly-view-dns.ts @@ -0,0 +1,133 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-dns') +export class CloudlyViewDns extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + DNS + { + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add configBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add ConfigBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-images.ts b/ts_web/elements/cloudly-view-images.ts new file mode 100644 index 0000000..1d42462 --- /dev/null +++ b/ts_web/elements/cloudly-view-images.ts @@ -0,0 +1,367 @@ +import * as plugins from '../plugins.js'; + +import { DeesElement, customElement, html, state, css, cssManager } from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-images') +export class CloudlyViewImages extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + Images + { + return { + name: secretGroup.data.name, + priority: secretGroup.data.priority, + tags: html``, + key: secretGroup.data.key, + history: (() => { + const allHistory = []; + for (const environment in secretGroup.data.environments) { + allHistory.push(...secretGroup.data.environments[environment].history); + } + return allHistory.length; + })(), + }; + }} + .dataActions=${[ + { + name: 'add SecretGroup', + type: ['header', 'footer'], + iconName: 'plus', + actionFunc: async () => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'create new SecretGroup', + content: html` + + + + + { + dataArg.table.data.push({ + environment: 'new environment', + value: '', + }); + dataArg.table.requestUpdate('data'); + }, + }, + { + name: 'delete environment', + iconName: 'trash', + type: ['inRow'], + actionFunc: async (dataArg) => { + dataArg.table.data.splice(dataArg.table.data.indexOf(dataArg.item), 1); + dataArg.table.requestUpdate('data'); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + .editableFields=${['environment', 'value']} + > + + `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'save', + action: async (modalArg) => { + const deesForm = modalArg.shadowRoot.querySelector('dees-form'); + const formData = await deesForm.collectFormData(); + console.log(`Prepare saving of data:`); + console.log(formData); + const environments: plugins.interfaces.data.ISecretGroup['data']['environments'] = + {}; + for (const itemArg of formData['environments'] as any[]) { + environments[itemArg.environment] = { + value: itemArg.value, + history: [], + lastUpdated: Date.now(), + }; + } + await appstate.dataState.dispatchAction(appstate.createSecretGroupAction, { + id: null, + data: { + name: formData['data.name'] as string, + description: formData['data.description'] as string, + key: formData['data.key'] as string, + environments, + tags: [], + }, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'edit', + type: ['contextmenu', 'inRow', 'doubleClick'], + iconName: 'penToSquare', + actionFunc: async ( + dataArg: plugins.deesCatalog.ITableActionDataArg + ) => { + const environmentsArray: Array< + plugins.interfaces.data.ISecretGroup['data']['environments'][any] & { + environment: string; + } + > = []; + for (const environmentName of Object.keys(dataArg.item.data.environments)) { + environmentsArray.push({ + environment: environmentName, + ...dataArg.item.data.environments[environmentName], + }); + } + await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Edit Secret', + content: html` + + + + + + { + return { + environment: itemArg.environment, + value: itemArg.value, + }; + })} + .editableFields=${['environment', 'value']} + .dataActions=${[ + { + name: 'delete', + iconName: 'trash', + type: ['inRow'], + actionFunc: async (actionDataArg) => { + actionDataArg.table.data.splice( + actionDataArg.table.data.indexOf(actionDataArg.item), + 1 + ); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + > + + `, + menuOptions: [ + { + name: 'Cancel', + iconName: null, + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'Save', + iconName: null, + action: async (modalArg) => { + const data = await modalArg.shadowRoot + .querySelector('dees-form') + .collectFormData(); + console.log(data); + const updatedSecretGroup: plugins.interfaces.data.ISecretGroup = { + id: dataArg.item.id, + data: { + name: data['data.name'] as string, + description: data['data.description'] as string, + key: data['data.key'] as string, + environments: {}, + tags: dataArg.item.data.tags, + }, + }; + const environments: plugins.interfaces.data.ISecretGroup['data']['environments'] = + {}; + for (const itemArg of data['environments'] as any[]) { + } + }, + }, + ], + }); + }, + }, + { + name: 'history', + iconName: 'clockRotateLeft', + type: ['contextmenu', 'inRow'], + actionFunc: async ( + dataArg: plugins.deesCatalog.ITableActionDataArg + ) => { + const historyArray: Array<{ + environment: string; + value: string; + }> = []; + for (const environment of Object.keys(dataArg.item.data.environments)) { + for (const historyItem of dataArg.item.data.environments[environment].history) { + historyArray.push({ + environment, + value: historyItem.value, + }); + } + } + await plugins.deesCatalog.DeesModal.createAndShow({ + heading: `history for ${dataArg.item.data.key}`, + content: html` + + ) => { + console.log('delete', itemArg); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + > + `, + menuOptions: [ + { + name: 'close', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async ( + itemArg: plugins.deesCatalog.ITableActionDataArg + ) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ${itemArg.item.data.key}`, + content: html` +
Do you really want to delete the secret?
+
+ ${itemArg.item.data.key} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + console.log(`Delete ${itemArg.item.id}`); + await appstate.dataState.dispatchAction(appstate.deleteSecretGroupAction, { + secretGroupId: itemArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-logs.ts b/ts_web/elements/cloudly-view-logs.ts new file mode 100644 index 0000000..1653692 --- /dev/null +++ b/ts_web/elements/cloudly-view-logs.ts @@ -0,0 +1,133 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-logs') +export class CloudlyViewLogs extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + Logs + { + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add configBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add ConfigBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-mails.ts b/ts_web/elements/cloudly-view-mails.ts new file mode 100644 index 0000000..40dd638 --- /dev/null +++ b/ts_web/elements/cloudly-view-mails.ts @@ -0,0 +1,133 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-mails') +export class CloudlyViewMails extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + Mails + { + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add configBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add ConfigBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-overview.ts b/ts_web/elements/cloudly-view-overview.ts new file mode 100644 index 0000000..5731f59 --- /dev/null +++ b/ts_web/elements/cloudly-view-overview.ts @@ -0,0 +1,71 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-overview') +export class CloudlyViewOverview extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 8px 16px; + } + .clusterGrid { + display: grid; + grid-template-columns: ${cssManager.cssGridColumns(3, 8)}; + grid-gap: 16px; + margin-bottom: 40px; + } + `, + ]; + + public render() { + return html` + Overview + ${this.data.clusters.length === 0 ? html` + You need to create at least one cluster to see an overview. + `: html``} + ${this.data.clusters.map( + (clusterArg) => html` + +
+ + + + + + +
+ ` + )} + `; + } +} diff --git a/ts_web/elements/cloudly-view-s3.ts b/ts_web/elements/cloudly-view-s3.ts new file mode 100644 index 0000000..a4d1ee3 --- /dev/null +++ b/ts_web/elements/cloudly-view-s3.ts @@ -0,0 +1,133 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-s3') +export class CloudlyViewS3 extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + S3 + { + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add configBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add ConfigBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-secretbundles.ts b/ts_web/elements/cloudly-view-secretbundles.ts new file mode 100644 index 0000000..50c7e0e --- /dev/null +++ b/ts_web/elements/cloudly-view-secretbundles.ts @@ -0,0 +1,173 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-secretbundles') +export class CloudlyViewSecretBundles extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + SecretBundles + { + return { + name: itemArg.data.name, + secretGroups: (() => { + const secretGroupIds = itemArg.data.includedSecretGroupIds; + let secretGroupNames: string[] = []; + for (const secretGroupId of secretGroupIds) { + const secretGroup = this.data.secretGroups.find( + (secretGroupArg) => secretGroupArg.id === secretGroupId + ); + if (secretGroup) { + secretGroupNames.push(secretGroup.data.name); + } + } + return secretGroupNames.join(', '); + })(), + tags: html``, + }; + }} + .dataActions=${[ + { + name: 'add SecretBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add SecretBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'edit', + iconName: 'edit', + type: ['doubleClick', 'contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Edit SecretBundle', + content: html` + + + + `, + menuOptions: [ + { name: 'save', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-secretgroups.ts b/ts_web/elements/cloudly-view-secretgroups.ts new file mode 100644 index 0000000..d815dad --- /dev/null +++ b/ts_web/elements/cloudly-view-secretgroups.ts @@ -0,0 +1,367 @@ +import * as plugins from '../plugins.js'; + +import { DeesElement, customElement, html, state, css, cssManager } from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-secretsgroups') +export class CloudlyViewSecretGroups extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + SecretGroups + { + return { + name: secretGroup.data.name, + priority: secretGroup.data.priority, + tags: html``, + key: secretGroup.data.key, + history: (() => { + const allHistory = []; + for (const environment in secretGroup.data.environments) { + allHistory.push(...secretGroup.data.environments[environment].history); + } + return allHistory.length; + })(), + }; + }} + .dataActions=${[ + { + name: 'add SecretGroup', + type: ['header', 'footer'], + iconName: 'plus', + actionFunc: async () => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'create new SecretGroup', + content: html` + + + + + { + dataArg.table.data.push({ + environment: 'new environment', + value: '', + }); + dataArg.table.requestUpdate('data'); + }, + }, + { + name: 'delete environment', + iconName: 'trash', + type: ['inRow'], + actionFunc: async (dataArg) => { + dataArg.table.data.splice(dataArg.table.data.indexOf(dataArg.item), 1); + dataArg.table.requestUpdate('data'); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + .editableFields=${['environment', 'value']} + > + + `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'save', + action: async (modalArg) => { + const deesForm = modalArg.shadowRoot.querySelector('dees-form'); + const formData = await deesForm.collectFormData(); + console.log(`Prepare saving of data:`); + console.log(formData); + const environments: plugins.interfaces.data.ISecretGroup['data']['environments'] = + {}; + for (const itemArg of formData['environments'] as any[]) { + environments[itemArg.environment] = { + value: itemArg.value, + history: [], + lastUpdated: Date.now(), + }; + } + await appstate.dataState.dispatchAction(appstate.createSecretGroupAction, { + id: null, + data: { + name: formData['data.name'] as string, + description: formData['data.description'] as string, + key: formData['data.key'] as string, + environments, + tags: [], + }, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'edit', + type: ['contextmenu', 'inRow', 'doubleClick'], + iconName: 'penToSquare', + actionFunc: async ( + dataArg: plugins.deesCatalog.ITableActionDataArg + ) => { + const environmentsArray: Array< + plugins.interfaces.data.ISecretGroup['data']['environments'][any] & { + environment: string; + } + > = []; + for (const environmentName of Object.keys(dataArg.item.data.environments)) { + environmentsArray.push({ + environment: environmentName, + ...dataArg.item.data.environments[environmentName], + }); + } + await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Edit Secret', + content: html` + + + + + + { + return { + environment: itemArg.environment, + value: itemArg.value, + }; + })} + .editableFields=${['environment', 'value']} + .dataActions=${[ + { + name: 'delete', + iconName: 'trash', + type: ['inRow'], + actionFunc: async (actionDataArg) => { + actionDataArg.table.data.splice( + actionDataArg.table.data.indexOf(actionDataArg.item), + 1 + ); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + > + + `, + menuOptions: [ + { + name: 'Cancel', + iconName: null, + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'Save', + iconName: null, + action: async (modalArg) => { + const data = await modalArg.shadowRoot + .querySelector('dees-form') + .collectFormData(); + console.log(data); + const updatedSecretGroup: plugins.interfaces.data.ISecretGroup = { + id: dataArg.item.id, + data: { + name: data['data.name'] as string, + description: data['data.description'] as string, + key: data['data.key'] as string, + environments: {}, + tags: dataArg.item.data.tags, + }, + }; + const environments: plugins.interfaces.data.ISecretGroup['data']['environments'] = + {}; + for (const itemArg of data['environments'] as any[]) { + } + }, + }, + ], + }); + }, + }, + { + name: 'history', + iconName: 'clockRotateLeft', + type: ['contextmenu', 'inRow'], + actionFunc: async ( + dataArg: plugins.deesCatalog.ITableActionDataArg + ) => { + const historyArray: Array<{ + environment: string; + value: string; + }> = []; + for (const environment of Object.keys(dataArg.item.data.environments)) { + for (const historyItem of dataArg.item.data.environments[environment].history) { + historyArray.push({ + environment, + value: historyItem.value, + }); + } + } + await plugins.deesCatalog.DeesModal.createAndShow({ + heading: `history for ${dataArg.item.data.key}`, + content: html` + + ) => { + console.log('delete', itemArg); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + > + `, + menuOptions: [ + { + name: 'close', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async ( + itemArg: plugins.deesCatalog.ITableActionDataArg + ) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ${itemArg.item.data.key}`, + content: html` +
Do you really want to delete the secret?
+
+ ${itemArg.item.data.key} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + console.log(`Delete ${itemArg.item.id}`); + await appstate.dataState.dispatchAction(appstate.deleteSecretGroupAction, { + secretGroupId: itemArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/cloudly-view-services.ts b/ts_web/elements/cloudly-view-services.ts new file mode 100644 index 0000000..78e5d26 --- /dev/null +++ b/ts_web/elements/cloudly-view-services.ts @@ -0,0 +1,133 @@ +import * as plugins from '../plugins.js'; + +import { + DeesElement, + customElement, + html, + state, + css, + cssManager, +} from '@design.estate/dees-element'; + +import * as appstate from '../appstate.js'; + +@customElement('cloudly-view-services') +export class CloudlyViewServices extends DeesElement { + @state() + private data: appstate.IDataState = { + secretGroups: [], + secretBundles: [], + }; + + constructor() { + super(); + const subecription = appstate.dataState + .select((stateArg) => stateArg) + .subscribe((dataArg) => { + this.data = dataArg; + }); + this.rxSubscriptions.push(subecription); + } + + public static styles = [ + cssManager.defaultStyles, + css` + :host { + display: block; + margin: auto; + max-width: 1280px; + padding: 16px 16px; + } + `, + ]; + + public render() { + return html` + Services + { + return { + id: itemArg.id, + serverAmount: itemArg.data.servers.length, + }; + }} + .dataActions=${[ + { + name: 'add configBundle', + iconName: 'plus', + type: ['header', 'footer'], + actionFunc: async (dataActionArg) => { + const modal = await plugins.deesCatalog.DeesModal.createAndShow({ + heading: 'Add ConfigBundle', + content: html` + + + + + + `, + menuOptions: [ + { name: 'create', action: async (modalArg) => {} }, + { + name: 'cancel', + action: async (modalArg) => { + modalArg.destroy(); + }, + }, + ], + }); + }, + }, + { + name: 'delete', + iconName: 'trash', + type: ['contextmenu', 'inRow'], + actionFunc: async (actionDataArg) => { + plugins.deesCatalog.DeesModal.createAndShow({ + heading: `Delete ConfigBundle ${actionDataArg.item.id}`, + content: html` +
+ Do you really want to delete the ConfigBundle? +
+
+ ${actionDataArg.item.id} +
+ `, + menuOptions: [ + { + name: 'cancel', + action: async (modalArg) => { + await modalArg.destroy(); + }, + }, + { + name: 'delete', + action: async (modalArg) => { + appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, { + configBundleId: actionDataArg.item.id, + }); + await modalArg.destroy(); + }, + }, + ], + }); + }, + }, + ] as plugins.deesCatalog.ITableAction[]} + >
+ `; + } +} diff --git a/ts_web/elements/index.ts b/ts_web/elements/index.ts new file mode 100644 index 0000000..6b21cbb --- /dev/null +++ b/ts_web/elements/index.ts @@ -0,0 +1,4 @@ +export * from './shared/index.js'; +export * from './cloudly-dashboard.js'; +export * from './cloudly-view-secretgroups.js'; +export * from './cloudly-view-secretbundles.js'; \ No newline at end of file diff --git a/ts_web/elements/shared/cloudly-sectionheading.ts b/ts_web/elements/shared/cloudly-sectionheading.ts new file mode 100644 index 0000000..10e63c0 --- /dev/null +++ b/ts_web/elements/shared/cloudly-sectionheading.ts @@ -0,0 +1,33 @@ +import * as plugins from '../../plugins.js'; + +import { + customElement, + html, + DeesElement, + property, + type TemplateResult, + cssManager, + css, + unsafeCSS, + type CSSResult, + state, +} from '@design.estate/dees-element'; + +@customElement('cloudly-sectionheading') +export class CloudlySectionheading extends DeesElement { + public static styles = [ + cssManager.defaultStyles, + css` + h1 { + font-family: 'Cal Sans'; + letter-spacing: 0.025em; + } + `, + ] + + public render() { + return html` +

+ `; + } +} \ No newline at end of file diff --git a/ts_web/elements/shared/index.ts b/ts_web/elements/shared/index.ts new file mode 100644 index 0000000..f6e76a4 --- /dev/null +++ b/ts_web/elements/shared/index.ts @@ -0,0 +1 @@ +export * from './cloudly-sectionheading.js'; \ No newline at end of file diff --git a/ts_web/index.ts b/ts_web/index.ts new file mode 100644 index 0000000..5cdd4cd --- /dev/null +++ b/ts_web/index.ts @@ -0,0 +1,9 @@ +import * as plugins from './plugins.js'; + +import { html } from '@design.estate/dees-element'; + +import './elements/index.js'; + +plugins.deesElement.render(html` + +`, document.body); diff --git a/ts_web/plugins.ts b/ts_web/plugins.ts new file mode 100644 index 0000000..29b0688 --- /dev/null +++ b/ts_web/plugins.ts @@ -0,0 +1,19 @@ +import * as interfaces from '@serve.zone/interfaces'; + +export { + interfaces +} + +// @design.estate scope +import * as deesDomtools from '@design.estate/dees-domtools'; +import * as deesElement from '@design.estate/dees-element'; +import * as deesCatalog from '@design.estate/dees-catalog'; + +export { deesDomtools, deesElement, deesCatalog }; + +// @push.rocks scope +import * as webjwt from '@push.rocks/webjwt'; + +export { + webjwt, +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..dfe5a55 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "useDefineForClassFields": false, + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "verbatimModuleSyntax": true + }, + "exclude": [ + "dist_*/**/*.d.ts" + ] +}