diff --git a/.elasticbeanstalk/config.yml b/.elasticbeanstalk/config.yml new file mode 100644 index 0000000..8353597 --- /dev/null +++ b/.elasticbeanstalk/config.yml @@ -0,0 +1,19 @@ +branch-defaults: + alpha: + environment: null +global: + application_name: maestro + branch: null + default_ec2_keyname: null + default_platform: Docker running on 64bit Amazon Linux 2 + default_region: us-east-1 + include_git_submodules: true + instance_profile: null + platform_name: null + platform_version: null + profile: null + repository: null + sc: git + workspace_type: Application +deploy: + artifact: deploy.zip diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 87a14c3..e2496e9 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -10,102 +10,117 @@ jobs: deploy: runs-on: self-hosted steps: - - name: Checkout - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v2 - - name: Semantic Release - uses: cycjimmy/semantic-release-action@v2 - id: semantic - with: - semantic_version: 16 - extra_plugins: | - @saithodev/semantic-release-backmerge - conventional-changelog-eslint - branches: | - [ - 'main', - { - name: 'alpha', - prerelease: true - }, - { - name: 'beta', - prerelease: true - } - ] - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Because Semantic Realese deleted the .npmrc file, it was necessary to insert two steps to backup the file. + - name: BKP .npmrc Step 1 + run: | + cp .npmrc .npmrcbkp - - name: Update Pip - if: steps.semantic.outputs.new_release_published == 'true' - run: | - python3 -m pip install --upgrade pip + - name: Semantic Release + uses: cycjimmy/semantic-release-action@v2 + id: semantic + with: + semantic_version: 16 + extra_plugins: | + @saithodev/semantic-release-backmerge + conventional-changelog-eslint + branches: | + [ + 'main', + { + name: 'alpha', + prerelease: true + }, + { + name: 'beta', + prerelease: true + } + ] + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - - name: Install Docker Compose - if: steps.semantic.outputs.new_release_published == 'true' - run: | - python3 -m pip install docker-compose --upgrade + # Because Semantic Realese deleted the .npmrc file, it was necessary to insert two steps to backup the file. + - name: BKP .npmrc Step 2 + run: | + cp .npmrcbkp .npmrc - - name: Install AWS CLI - if: steps.semantic.outputs.new_release_published == 'true' - run: | - python3 -m pip install awscli --upgrade + - name: Update Pip + if: steps.semantic.outputs.new_release_published == 'true' + run: | + python3 -m pip install --upgrade pip - - name: Install AWS Elastic Beanstalk CLI - if: steps.semantic.outputs.new_release_published == 'true' - run: | - python3 -m pip install awsebcli --upgrade + - name: Install Docker Compose + if: steps.semantic.outputs.new_release_published == 'true' + run: | + python3 -m pip install docker-compose --upgrade - - name: Configure AWS Region - if: steps.semantic.outputs.new_release_published == 'true' - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-region: us-east-1 + - name: Install AWS CLI + if: steps.semantic.outputs.new_release_published == 'true' + run: | + python3 -m pip install awscli --upgrade - - name: Extract Environment - if: steps.semantic.outputs.new_release_published == 'true' - shell: bash - run: | - if [ ${GITHUB_REF} == "refs/heads/main" ]; then - echo "##[set-output name=result;]$(echo "production")" - else - echo "##[set-output name=result;]$(echo ${GITHUB_REF#refs/heads/})" - fi - id: extract_environment + - name: Install AWS Elastic Beanstalk CLI + if: steps.semantic.outputs.new_release_published == 'true' + run: | + python3 -m pip install awsebcli --upgrade - - name: Login to AWS ECR - if: steps.semantic.outputs.new_release_published == 'true' - id: login_ecr - uses: aws-actions/amazon-ecr-login@v1 + - name: Configure AWS Region + if: steps.semantic.outputs.new_release_published == 'true' + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-region: us-east-1 - - name: Build, Tag, and Push Image to AWS ECR - if: steps.semantic.outputs.new_release_published == 'true' - env: - ENV: ${{ steps.extract_environment.outputs.result }} - IMAGE_TAG: ${{ steps.semantic.outputs.new_release_version }} - run: | - docker-compose -f build.docker-compose.yml build - docker-compose -f build.docker-compose.yml push + - name: Extract Environment + if: steps.semantic.outputs.new_release_published == 'true' + shell: bash + run: | + if [ ${GITHUB_REF} == "refs/heads/main" ]; then + echo "##[set-output name=result;]$(echo "production")" + else + echo "##[set-output name=result;]$(echo ${GITHUB_REF#refs/heads/})" + fi + id: extract_environment - - name: Create ZIP file to Deploy AWS Beanstalk - if: steps.semantic.outputs.new_release_published == 'true' - env: - ENV: ${{ steps.extract_environment.outputs.result }} - IMAGE_TAG: ${{ steps.semantic.outputs.new_release_version }} - run: | - sed -i -e "s/\${ENV}/$ENV/g" docker-compose.yml - sed -i -e "s/\${IMAGE_TAG}/$IMAGE_TAG/g" docker-compose.yml - zip deploy.zip docker-compose.yml + - name: Login to AWS ECR + if: steps.semantic.outputs.new_release_published == 'true' + id: login_ecr + uses: aws-actions/amazon-ecr-login@v1 - - name: Deploy AWS Beanstalk - if: steps.semantic.outputs.new_release_published == 'true' - env: - ENV: ${{ steps.extract_environment.outputs.result }} - AWS_REGION: us-east-1 - APP_NAME: maestro - run: | - [[ -d .elasticbeanstalk/ ]] && rm -R .elasticbeanstalk/ - printf "1\nn" | eb init $APP_NAME --region $AWS_REGION - eb use $APP_NAME-$ENV - echo -e "deploy:\n artifact: deploy.zip" >> .elasticbeanstalk/config.yml - eb deploy + - name: Build, Tag, and Push Image to AWS ECR + if: steps.semantic.outputs.new_release_published == 'true' + env: + ENV: ${{ steps.extract_environment.outputs.result }} + IMAGE_TAG: ${{ steps.semantic.outputs.new_release_version }} + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + docker-compose -f build.docker-compose.yml build --build-arg NPM_TOKEN=${NPM_TOKEN} + docker-compose -f build.docker-compose.yml push + + - name: Create ZIP file to Deploy AWS Beanstalk + if: steps.semantic.outputs.new_release_published == 'true' + env: + ENV: ${{ steps.extract_environment.outputs.result }} + IMAGE_TAG: ${{ steps.semantic.outputs.new_release_version }} + run: | + sed -i -e "s/\${ENV}/$ENV/g" docker-compose.yml + sed -i -e "s/\${IMAGE_TAG}/$IMAGE_TAG/g" docker-compose.yml + zip deploy.zip docker-compose.yml -r .ebextensions + + - name: Deploy AWS Beanstalk + if: steps.semantic.outputs.new_release_published == 'true' + env: + ENV: ${{ steps.extract_environment.outputs.result }} + AWS_REGION: us-east-1 + APP_NAME: maestro + run: | + eb use $APP_NAME-$ENV + eb deploy + + - name: Remove Docker's Trash + continue-on-error: true + run: | + docker system prune + docker rmi -f $(docker images -aq) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index cc65444..1ec0dd7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,19 +16,21 @@ jobs: - name: Install Docker Compose run: | python3 -m pip install docker-compose --upgrade - - name: Build env: ENV: test IMAGE_TAG: test + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: | export ENV=test - docker-compose -f build.docker-compose.yml build - + export IMAGE_TAG=test + docker-compose -f build.docker-compose.yml build --build-arg NPM_TOKEN=${NPM_TOKEN} - name: Run Test env: ENV: test IMAGE_TAG: test + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: | export ENV=test - docker-compose run --rm --entrypoint="npm run test" maestro + export IMAGE_TAG=test + docker-compose -f build.docker-compose.yml run -e NPM_TOKEN=${NPM_TOKEN} --rm --entrypoint="npm run test" maestro \ No newline at end of file diff --git a/.gitignore b/.gitignore index 6851d1f..602e2e3 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,4 @@ lerna-debug.log* # Ignore .env files *.env -# Elastic Beanstalk Files -.elasticbeanstalk/* -!.elasticbeanstalk/*.cfg.yml -!.elasticbeanstalk/*.global.yml +.env \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..bd3327a --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +//registry.npmjs.org/:_authToken=${NPM_TOKEN} \ No newline at end of file diff --git a/.releaserc.json b/.releaserc.json index 851a670..80c93d6 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -5,18 +5,18 @@ { "preset": "eslint", "releaseRules": [ - { "tag": "Fix", "release": "patch" }, - { "tag": "Feat", "release": "minor" }, - { "tag": "Update", "release": "minor" }, - { "tag": "Upgrade", "release": "minor" }, - { "tag": "Breaking", "release": "major" }, - { "tag": "Docs", "release": "patch" }, - { "tag": "Chore", "release": "minor" }, - { "tag": "Build", "release": "patch" }, - { "tag": "Refactor", "release": "minor" }, - { "tag": "Test", "release": "patch" }, + { "tag": "FIX", "release": "patch" }, + { "tag": "FEAT", "release": "minor" }, + { "tag": "UPDATE", "release": "minor" }, + { "tag": "UPGRADE", "release": "minor" }, + { "tag": "BREAKING", "release": "major" }, + { "tag": "DOCS", "release": "patch" }, + { "tag": "CHORE", "release": "minor" }, + { "tag": "BUILD", "release": "patch" }, + { "tag": "REFACTOR", "release": "minor" }, + { "tag": "TEST", "release": "patch" }, { "tag": "CI", "release": "patch" }, - { "tag": "Perf", "release": "minor" } + { "tag": "PERF", "release": "minor" } ] } ], @@ -29,10 +29,14 @@ [ "@saithodev/semantic-release-backmerge", { - "branches": ["alpha", "beta"], + "branches": [ + { "from": "main", "to": "alpha" }, + { "from": "main", "to": "beta" } + ], "backmergeStrategy": "merge" } ], + "@semantic-release/npm", "@semantic-release/github" ] } diff --git a/Dockerfile b/Dockerfile index 3b435f3..f80c060 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,16 @@ -FROM node:14 as packages +FROM node:14.15.4-alpine3.12 as packages WORKDIR /packages +ARG NPM_TOKEN COPY package.json . +COPY .npmrc . RUN npm install +RUN rm -f ./.npmrc -FROM node:alpine +FROM node:14.15.4-alpine3.12 WORKDIR /app COPY . /app/ +ARG NPM_TOKEN COPY --from=packages /packages/node_modules /app/node_modules RUN npm run build EXPOSE 3333 -ENTRYPOINT npm run start +ENTRYPOINT npm run start \ No newline at end of file diff --git a/README.md b/README.md index 9fe8812..b226330 100644 --- a/README.md +++ b/README.md @@ -1,73 +1,6 @@

- Nest Logo + +

Maestro

-[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 -[circleci-url]: https://circleci.com/gh/nestjs/nest - -

A progressive Node.js framework for building efficient and scalable server-side applications.

-

-NPM Version -Package License -NPM Downloads -CircleCI -Coverage -Discord -Backers on Open Collective -Sponsors on Open Collective - - Support us - -

- - -## Description - -[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. - -## Installation - -```bash -$ npm install -``` - -## Running the app - -```bash -# development -$ npm run start - -# watch mode -$ npm run start:dev - -# production mode -$ npm run start:prod -``` - -## Test - -```bash -# unit tests -$ npm run test - -# e2e tests -$ npm run test:e2e - -# test coverage -$ npm run test:cov -``` - -## Support - -Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). - -## Stay in touch - -- Author - [Kamil Myƛliwiec](https://kamilmysliwiec.com) -- Website - [https://nestjs.com](https://nestjs.com/) -- Twitter - [@nestframework](https://twitter.com/nestframework) - -## License - -Nest is [MIT licensed](LICENSE). +x diff --git a/assets/maestro.svg b/assets/maestro.svg new file mode 100644 index 0000000..73ad3cd --- /dev/null +++ b/assets/maestro.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docker-compose.yml b/docker-compose.yml index 619f44f..fb0aad4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,8 @@ services: restart: always ports: - 3333:3333 + env_file: + - .env node_exporter: image: prom/node-exporter:v1.3.1 diff --git a/package-lock.json b/package-lock.json index bb11934..3a1ef2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,25 @@ { "name": "grpc-server-and-client-nestjs-micro-pattern", - "version": "0.0.1", + "version": "0.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@ampproject/remapping": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.2.tgz", - "integrity": "sha512-sE8Gx+qSDMLoJvb3QarJJlDQK7SSY4rK3hxp4XsiANeFOmjU46ZI7Y9adAQRJrmbz8zbtZkp3mJTT+rGxtF0XA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.2.2", - "sourcemap-codec": "1.4.8" + "@jridgewell/trace-mapping": "^0.3.0" } }, "@angular-devkit/core": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.2.tgz", - "integrity": "sha512-uXVesIRiCL/Nv+RSV8JM4j8IoZiGCGnqV2FOJ1hvH7DPxIjhjPMdG/B54xMydZpeASW3ofuxeORyAXxFIBm8Zg==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.3.0.tgz", + "integrity": "sha512-8YrreVbWlJVZnk5zs4vfkRItrPEtWhUcxWOBfYT/Kwu4FwJVAnNuhJAxxXOAQ2Ckd7cv30Idh/RFVLbTZ5Gs9w==", "dev": true, "requires": { - "ajv": "8.8.2", + "ajv": "8.9.0", "ajv-formats": "2.1.1", "fast-json-stable-stringify": "2.1.0", "magic-string": "0.25.7", @@ -46,12 +45,12 @@ } }, "@angular-devkit/schematics": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.2.tgz", - "integrity": "sha512-ayYbHGU8QpMGx8ZyhKOBupz+Zfv/2H1pNQErahYV3qg7hA9hfjTGmNmDQ4iw0fiT04NajjUxuomlKsCsg7oXDw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.3.0.tgz", + "integrity": "sha512-hq7tqnB3uVT/iDgqWWZ4kvnijeAcgd4cfLzZiCPaYn1nuhZf0tWsho6exhJ/odMZHvVp7w8OibqWiUKxNY9zHA==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.3.0", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -76,19 +75,29 @@ } }, "@angular-devkit/schematics-cli": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-13.1.2.tgz", - "integrity": "sha512-XSkcVuaaajijQOWE8YerY/8DVuYQWvXxVukweEwkaHSftDQZhfCOZ83nGKbuWkdOdnuDbrc9ve5ZzekplkzVQw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-13.3.0.tgz", + "integrity": "sha512-DXT+k4228Ke1zCoU9QxPhXm1xzeYBs5aqgMWhyjXdkfDokJcjQM79CSVLHdKX/OLgR51qhnQ5qVFEHHhVV40EQ==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", + "@angular-devkit/core": "13.3.0", + "@angular-devkit/schematics": "13.3.0", "ansi-colors": "4.1.1", "inquirer": "8.2.0", "minimist": "1.2.5", "symbol-observable": "4.0.0" }, "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "inquirer": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz", @@ -123,26 +132,26 @@ } }, "@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", "dev": true }, "@babel/core": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", - "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.7.tgz", + "integrity": "sha512-djHlEfFHnSnTAcPb7dATbiM5HxGOP98+3JLBZtjRb5I7RXrw7kFRoG2dXM8cm3H+o11A8IFH/uprmJpwFynRNQ==", "dev": true, "requires": { - "@ampproject/remapping": "^2.0.0", + "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.0", - "@babel/parser": "^7.17.0", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.7", + "@babel/parser": "^7.17.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", @@ -151,30 +160,6 @@ "semver": "^6.3.0" }, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -184,9 +169,9 @@ } }, "@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", + "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", "dev": true, "requires": { "@babel/types": "^7.17.0", @@ -203,12 +188,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", "dev": true, "requires": { - "@babel/compat-data": "^7.16.4", + "@babel/compat-data": "^7.17.7", "@babel/helper-validator-option": "^7.16.7", "browserslist": "^4.17.5", "semver": "^6.3.0" @@ -270,19 +255,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", "@babel/helper-split-export-declaration": "^7.16.7", "@babel/helper-validator-identifier": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" } }, "@babel/helper-plugin-utils": { @@ -292,12 +277,12 @@ "dev": true }, "@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-split-export-declaration": { @@ -322,13 +307,13 @@ "dev": true }, "@babel/helpers": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", - "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.7.tgz", + "integrity": "sha512-TKsj9NkjJfTBxM7Phfy7kv6yYc4ZcOo+AaWGqQOKTPDOmcGkIFb5xNA746eKisQkm4yavUYh4InYM9S+VnO01w==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", + "@babel/traverse": "^7.17.3", "@babel/types": "^7.17.0" } }, @@ -378,6 +363,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -396,9 +387,9 @@ } }, "@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.7.tgz", + "integrity": "sha512-bm3AQf45vR4gKggRfvJdYJ0gFLoCbsPxiFLSH6hTVYABptNHY6l9NrhnucVjQ/X+SPtLANT9lc0fFhikj+VBRA==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -530,43 +521,28 @@ } }, "@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", + "version": "7.17.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", + "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", + "@babel/generator": "^7.17.3", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", + "@babel/parser": "^7.17.3", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, @@ -602,16 +578,16 @@ } }, "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", + "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -630,49 +606,21 @@ "uri-js": "^4.2.2" } }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "@grpc/grpc-js": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.4.tgz", - "integrity": "sha512-+nJTOsqpFAXnfFrMZ7Too4XXZ/J9O+8jYvSoaunupoC7I7b9H4iex1BRsbTdOmiowfPGJrWit7jUPmbENSUSpw==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.5.10.tgz", + "integrity": "sha512-++oAubX/7rJzlqH0ShyzDENNNDHYrlttdc3NM40KlaVQDcgGqQknuPoavmyTC+oNUDyxPCX5dHceKhfcgN3tiw==", "requires": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" - }, - "dependencies": { - "@types/node": { - "version": "17.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz", - "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==" - } } }, "@grpc/proto-loader": { @@ -688,31 +636,14 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@humanwhocodes/object-schema": { @@ -743,12 +674,6 @@ "sprintf-js": "~1.0.2" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -774,118 +699,142 @@ "dev": true }, "@jest/console": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.4.6.tgz", - "integrity": "sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", + "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "@jest/core": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.4.7.tgz", - "integrity": "sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", + "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", "dev": true, "requires": { - "@jest/console": "^27.4.6", - "@jest/reporters": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/console": "^27.5.1", + "@jest/reporters": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.8.1", "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.4.2", - "jest-config": "^27.4.7", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-resolve-dependencies": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "jest-watcher": "^27.4.6", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^27.5.1", + "jest-config": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-resolve-dependencies": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "jest-watcher": "^27.5.1", "micromatch": "^4.0.4", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "@jest/environment": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.4.6.tgz", - "integrity": "sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", + "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, "requires": { - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.4.6" + "jest-mock": "^27.5.1" } }, "@jest/fake-timers": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.4.6.tgz", - "integrity": "sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", + "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", "@types/node": "*", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" } }, "@jest/globals": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.4.6.tgz", - "integrity": "sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", + "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dev": true, "requires": { - "@jest/environment": "^27.4.6", - "@jest/types": "^27.4.2", - "expect": "^27.4.6" + "@jest/environment": "^27.5.1", + "@jest/types": "^27.5.1", + "expect": "^27.5.1" } }, "@jest/reporters": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.4.6.tgz", - "integrity": "sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", + "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/console": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", "exit": "^0.1.2", "glob": "^7.1.2", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-instrument": "^5.1.0", "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", + "jest-haste-map": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "slash": "^3.0.0", "source-map": "^0.6.0", "string-length": "^4.0.1", @@ -893,6 +842,16 @@ "v8-to-istanbul": "^8.1.0" }, "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -902,13 +861,13 @@ } }, "@jest/source-map": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.4.0.tgz", - "integrity": "sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", + "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "dev": true, "requires": { "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "source-map": "^0.6.0" }, "dependencies": { @@ -921,45 +880,45 @@ } }, "@jest/test-result": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.4.6.tgz", - "integrity": "sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", + "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dev": true, "requires": { - "@jest/console": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/console": "^27.5.1", + "@jest/types": "^27.5.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" } }, "@jest/test-sequencer": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz", - "integrity": "sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", + "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", "dev": true, "requires": { - "@jest/test-result": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-runtime": "^27.4.6" + "@jest/test-result": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-runtime": "^27.5.1" } }, "@jest/transform": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.4.6.tgz", - "integrity": "sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", + "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-util": "^27.4.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-util": "^27.5.1", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -967,6 +926,16 @@ "write-file-atomic": "^3.0.0" }, "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -976,9 +945,9 @@ } }, "@jest/types": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.4.2.tgz", - "integrity": "sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", @@ -986,22 +955,40 @@ "@types/node": "*", "@types/yargs": "^16.0.0", "chalk": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "@jridgewell/resolve-uri": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", - "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.2.5.tgz", - "integrity": "sha512-K+Eths78fXDFOvQ2hgJhCiI5s+g81r2yXmACBpbn+f2+Qt94PNoTgUcAXPT8DZkhXCsZRsHVWVtY5KIBMcpDqQ==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", - "sourcemap-codec": "1.4.8" + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@mapbox/node-pre-gyp": { @@ -1021,20 +1008,20 @@ } }, "@nestjs/cli": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-8.2.0.tgz", - "integrity": "sha512-f5grQOgrRcfHfOUP94OWsMdVYy6bit0zRSxPZ5+tfsFWkiPWdcx5Ba2M2socTykkiNHruXBu07lYvcKh94do7Q==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-8.2.4.tgz", + "integrity": "sha512-9zNV9oMtaz1vwLO3WXviD0wzRpyiaLWJZ7KCIZLk62U22RDNRsbtLLDS52Wkig5L8UU7Z1xRfrEv+s3f9keysQ==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", - "@angular-devkit/schematics-cli": "13.1.2", + "@angular-devkit/core": "13.3.0", + "@angular-devkit/schematics": "13.3.0", + "@angular-devkit/schematics-cli": "13.3.0", "@nestjs/schematics": "^8.0.3", "chalk": "3.0.0", - "chokidar": "3.5.2", + "chokidar": "3.5.3", "cli-table3": "0.6.1", "commander": "4.1.1", - "fork-ts-checker-webpack-plugin": "6.5.0", + "fork-ts-checker-webpack-plugin": "7.2.1", "inquirer": "7.3.3", "node-emoji": "1.11.0", "ora": "5.4.1", @@ -1043,61 +1030,96 @@ "shelljs": "0.8.5", "source-map-support": "0.5.21", "tree-kill": "1.2.2", - "tsconfig-paths": "3.12.0", + "tsconfig-paths": "3.14.0", "tsconfig-paths-webpack-plugin": "3.5.2", - "typescript": "4.5.4", - "webpack": "5.66.0", + "typescript": "4.6.2", + "webpack": "5.70.0", "webpack-node-externals": "3.0.0" }, "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "tsconfig-paths": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.0.tgz", + "integrity": "sha512-cg/1jAZoL57R39+wiw4u/SCC6Ic9Q5NqjBOb+9xISedOYurfog9ZNmKJSxAnb2m/5Bq4lE9lhUcau33Ml8DM0g==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" } }, "typescript": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", - "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", + "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", "dev": true } } }, "@nestjs/common": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-8.2.6.tgz", - "integrity": "sha512-flLYSXunxcKyjbYddrhwbc49uE705MxBt85rS3mHyhDbAIPSGGeZEqME44YyAzCg1NTfJSNe7ztmOce5kNkb9A==", + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-8.4.3.tgz", + "integrity": "sha512-QIhWykB7IPOwHQB/K9wMwmQKibQ5dhg9dt8ySOoD36uFFwN3RJQelzMFF9Rtu7hrMPk6pSyismEUKQ8BZMUD9w==", "requires": { - "axios": "0.24.0", + "axios": "0.26.1", "iterare": "1.2.1", "tslib": "2.3.1", "uuid": "8.3.2" }, "dependencies": { "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", "requires": { - "follow-redirects": "^1.14.4" + "follow-redirects": "^1.14.8" } } } }, + "@nestjs/config": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-1.2.1.tgz", + "integrity": "sha512-EgaGTXvG4unD5lGWmdSrUFrkGpX32lQGE/8qS60EnL82sIZV7HT1ZL7ib5S86P1nB+DnFDbDhDqTaZ3mivTyOg==", + "requires": { + "dotenv": "16.0.0", + "dotenv-expand": "5.1.0", + "lodash": "4.17.21", + "uuid": "8.3.2" + }, + "dependencies": { + "dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" + } + } + }, "@nestjs/core": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.2.6.tgz", - "integrity": "sha512-NwPcEIMmCsucs3QaDlQvkoU1FlFM2wm/WjaqLQhkSoIEmAR1gNtBo88f5io5cpMwCo1k5xYhqGlaSl6TfngwWQ==", + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-8.4.3.tgz", + "integrity": "sha512-1etUwTR5jTCTcNh6MW1tFYrHMCvcdIzJ3Z9O9ETR8EYIsphhzsxxRCa0dfb9peKJEQpl6SkoGOILIFkxfokOPw==", "requires": { "@nuxtjs/opencollective": "0.3.2", "fast-safe-stringify": "2.1.1", "iterare": "1.2.1", - "object-hash": "2.2.0", + "object-hash": "3.0.0", "path-to-regexp": "3.2.0", "tslib": "2.3.1", "uuid": "8.3.2" @@ -1109,9 +1131,9 @@ "integrity": "sha512-NFvofzSinp00j5rzUd4tf+xi9od6383iY0JP7o0Bnu1fuItAUkWBgc4EKuIQ3D+c2QI3i9pG1kDWAeY27EMGtg==" }, "@nestjs/microservices": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-8.2.6.tgz", - "integrity": "sha512-2RxUESoOKveqfs0k57a+EX5Yr3rdwsKXNr7KrO9oseqJvSJPYLyE8MoYUjEAsGHWIeymdLzZwag047kIVBX7eg==", + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-8.4.3.tgz", + "integrity": "sha512-/ZT5wo1s65J9Cqp2g5eNrYO34VH7/qUkDu4jJyZCT61I9UqpO49J3+1YIAHfmJJzHcrenjgt1sBtlFhwPR3Lgg==", "requires": { "iterare": "1.2.1", "json-socket": "0.3.0", @@ -1119,37 +1141,37 @@ } }, "@nestjs/platform-express": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-8.2.6.tgz", - "integrity": "sha512-wbPqXrLdeokfMCHkWBHgFobCVL4OKRAOJIFGNlT/3u4JIJndoGBIuSDQohhY2o7Ue0JIYqKw+PyXiN4y/iUEng==", + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-8.4.3.tgz", + "integrity": "sha512-MXXaShhWRChf7jKBrvRKjCFX84ii/4245TcB8Gei7UAGzDRHbM08lpLXDR+wUUUtC8rN2gWu8d8IGptAnqMGpA==", "requires": { - "body-parser": "1.19.1", + "body-parser": "1.19.2", "cors": "2.8.5", - "express": "4.17.2", + "express": "4.17.3", "multer": "1.4.4", "tslib": "2.3.1" } }, "@nestjs/schematics": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-8.0.5.tgz", - "integrity": "sha512-nK1hWQeLNbdhsiJDX/XJXLqq7nC6/xxC8CN+seFTQmly+H3gG2xaFnl6JPHURumuQaYJX8JEpC8m0+4tz+wvOg==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-8.0.8.tgz", + "integrity": "sha512-xIIb5YnMQN/OJQ68+MCapy2bXvTxSWgINoqQbyZWkLL/yTIuROvZCdtV850NPGyr7f7l93VBP0ZPitbFIexy3Q==", "dev": true, "requires": { - "@angular-devkit/core": "13.0.2", - "@angular-devkit/schematics": "13.0.2", - "fs-extra": "10.0.0", + "@angular-devkit/core": "13.2.5", + "@angular-devkit/schematics": "13.2.5", + "fs-extra": "10.0.1", "jsonc-parser": "3.0.0", "pluralize": "8.0.0" }, "dependencies": { "@angular-devkit/core": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.0.2.tgz", - "integrity": "sha512-I4co4GH+iu0tns+UXfMtjJISO+cLpaUuiEH6kf0wF5cqjaIeluA9UjIRnxuNbdTW8iE2xVj/UWhQfHe/Ncp76w==", + "version": "13.2.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.2.5.tgz", + "integrity": "sha512-WuWp/1R0FtCHPBcJLF13lTLHETtDGFUX0ULfGPRaYB5OVCSQcovVp5UbZTTy/Ss3ub3EOEmJlU8kMJfBrWuq+A==", "dev": true, "requires": { - "ajv": "8.6.3", + "ajv": "8.9.0", "ajv-formats": "2.1.1", "fast-json-stable-stringify": "2.1.0", "magic-string": "0.25.7", @@ -1158,30 +1180,18 @@ } }, "@angular-devkit/schematics": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.0.2.tgz", - "integrity": "sha512-qrTe1teQptgP8gmVy6QX0T4dNfnNipEv+cM2cr7JXOmkPpwF+6oBDrTRIJ55t6rziqrXHJ3rxjKm1aHAxFrIEQ==", + "version": "13.2.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.2.5.tgz", + "integrity": "sha512-kAye6VYiF9JQAoeO+BYhy8eT2QOmhB+WLziRjXoFCBxh5+yXTygTVfs9fD5jmIpHmeu4hd2ErSh69yT5xWcD9g==", "dev": true, "requires": { - "@angular-devkit/core": "13.0.2", + "@angular-devkit/core": "13.2.5", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", "rxjs": "6.6.7" } }, - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -1200,9 +1210,9 @@ } }, "@nestjs/swagger": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-5.2.0.tgz", - "integrity": "sha512-wcW2KCe7irwBw0WKsb03uFk4gnjqNcAcJxXGZxi6ljFiDgyLrQtx5MpE95o703tnn4V/hZR8MqMNFOXuup7Pqw==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-5.2.1.tgz", + "integrity": "sha512-7dNa08WCnTsW/oAk3Ujde+z64JMfNm19DhpXasFR8oJp/9pggYAbYU927HpA+GJsSFJX6adjIRZsCKUqaGWznw==", "requires": { "@nestjs/mapped-types": "1.0.1", "lodash": "4.17.21", @@ -1210,9 +1220,9 @@ } }, "@nestjs/testing": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-8.2.6.tgz", - "integrity": "sha512-Cg8tM7yxlLDBO+CTNjk6X/UkxGRsprFc8gDHGEGesiE9wLErxNnslFugfUnYWJaSzmLZSqcFFig7mThc8VSxrw==", + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-8.4.3.tgz", + "integrity": "sha512-6+b2UCObr5onv7TG398VUdkNeU9n+f+TeTvlzmZlp9LKIAS4ZxDxwpdLDl5m/AssdkaZpfb0u755BJfKP5wbNw==", "dev": true, "requires": { "optional": "0.1.4", @@ -1253,6 +1263,17 @@ "chalk": "^4.1.0", "consola": "^2.15.0", "node-fetch": "^2.6.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "@protobufjs/aspromise": { @@ -1415,13 +1436,6 @@ "requires": { "@types/long": "*", "@types/node": "*" - }, - "dependencies": { - "@types/node": { - "version": "17.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz", - "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==" - } } }, "@types/connect": { @@ -1460,9 +1474,9 @@ } }, "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, "@types/express": { @@ -1570,10 +1584,9 @@ "dev": true }, "@types/node": { - "version": "16.11.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.22.tgz", - "integrity": "sha512-DYNtJWauMQ9RNpesl4aVothr97/tIJM8HbyOXJ0AYT1Z2bEjLHyfjOBPAQQVMLf8h3kSShYfNk8Wnto8B2zHUA==", - "dev": true + "version": "16.11.26", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz", + "integrity": "sha512-GZ7bu5A6+4DtG7q9GsoHXy3ALcgeIHP4NnL0Vv2wu0uUB/yQex26v0tf6/na1mm0+bS9Uw+0DFex7aaKr2qawQ==" }, "@types/parse-json": { "version": "4.0.0", @@ -1582,9 +1595,9 @@ "dev": true }, "@types/prettier": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.3.tgz", - "integrity": "sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.4.4.tgz", + "integrity": "sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA==", "dev": true }, "@types/qs": { @@ -1626,9 +1639,9 @@ } }, "@types/supertest": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.11.tgz", - "integrity": "sha512-uci4Esokrw9qGb9bvhhSVEjd6rkny/dk5PK/Qz4yxKiyppEI+dOPlNrZBahE3i+PoKFYyDxChVXZ/ysS/nrm1Q==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", "dev": true, "requires": { "@types/superagent": "*" @@ -1644,174 +1657,114 @@ } }, "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", - "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.17.0.tgz", + "integrity": "sha512-qVstvQilEd89HJk3qcbKt/zZrfBZ+9h2ynpAGlWjWiizA7m/MtLT9RoX6gjtpE500vfIg8jogAkDzdCxbsFASQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/type-utils": "5.10.2", - "@typescript-eslint/utils": "5.10.2", + "@typescript-eslint/scope-manager": "5.17.0", + "@typescript-eslint/type-utils": "5.17.0", + "@typescript-eslint/utils": "5.17.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", "regexpp": "^3.2.0", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/parser": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", - "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.17.0.tgz", + "integrity": "sha512-aRzW9Jg5Rlj2t2/crzhA2f23SIYFlF9mchGudyP0uiD6SenIxzKoLjwzHbafgHn39dNV/TV7xwQkLfFTZlJ4ig==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", + "@typescript-eslint/scope-manager": "5.17.0", + "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/typescript-estree": "5.17.0", "debug": "^4.3.2" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/scope-manager": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", - "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.17.0.tgz", + "integrity": "sha512-062iCYQF/doQ9T2WWfJohQKKN1zmmXVfAcS3xaiialiw8ZUGy05Em6QVNYJGO34/sU1a7a+90U3dUNfqUDHr3w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2" + "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/visitor-keys": "5.17.0" } }, "@typescript-eslint/type-utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", - "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.17.0.tgz", + "integrity": "sha512-3hU0RynUIlEuqMJA7dragb0/75gZmwNwFf/QJokWzPehTZousP/MNifVSgjxNcDCkM5HI2K22TjQWUmmHUINSg==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.10.2", + "@typescript-eslint/utils": "5.17.0", "debug": "^4.3.2", "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/types": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", - "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.17.0.tgz", + "integrity": "sha512-AgQ4rWzmCxOZLioFEjlzOI3Ch8giDWx8aUDxyNw9iOeCvD3GEYAB7dxWGQy4T/rPVe8iPmu73jPHuaSqcjKvxw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", - "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.17.0.tgz", + "integrity": "sha512-X1gtjEcmM7Je+qJRhq7ZAAaNXYhTgqMkR10euC4Si6PIjb+kwEQHSxGazXUQXFyqfEXdkGf6JijUu5R0uceQzg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/visitor-keys": "5.10.2", + "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/visitor-keys": "5.17.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "@typescript-eslint/utils": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", - "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.17.0.tgz", + "integrity": "sha512-DVvndq1QoxQH+hFv+MUQHrrWZ7gQ5KcJzyjhzcqB1Y2Xes1UQQkTRPUfRpqhS8mhTWsSb2+iyvDW1Lef5DD7vA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.10.2", - "@typescript-eslint/types": "5.10.2", - "@typescript-eslint/typescript-estree": "5.10.2", + "@typescript-eslint/scope-manager": "5.17.0", + "@typescript-eslint/types": "5.17.0", + "@typescript-eslint/typescript-estree": "5.17.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.10.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", - "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.17.0.tgz", + "integrity": "sha512-6K/zlc4OfCagUu7Am/BD5k8PSWQOgh34Nrv9Rxe2tBzlJ7uOeJ/h7ugCGDCeEZHT6k2CJBhbk9IsbkPI0uvUkA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/types": "5.17.0", "eslint-visitor-keys": "^3.0.0" } }, + "@victorradael/protospack": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@victorradael/protospack/-/protospack-1.3.9.tgz", + "integrity": "sha512-UDhTCw7UY1MjFTYB739zj2fzXnk9bR9K+703dTwetAk+tOkIOr+28C4QctZ8R+wve1dESkki7j76rlEM2qmAuA==", + "requires": { + "rxjs": "^7.5.5" + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -2038,27 +1991,12 @@ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "ajv": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.2.tgz", - "integrity": "sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -2077,10 +2015,13 @@ } }, "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } }, "ansi-colors": { "version": "4.1.1", @@ -2095,6 +2036,14 @@ "dev": true, "requires": { "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, "ansi-regex": { @@ -2214,12 +2163,6 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, "axios": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", @@ -2229,19 +2172,31 @@ } }, "babel-jest": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.4.6.tgz", - "integrity": "sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", + "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", "dev": true, "requires": { - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.4.0", + "babel-preset-jest": "^27.5.1", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "babel-plugin-istanbul": { @@ -2258,9 +2213,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz", - "integrity": "sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", + "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -2290,12 +2245,12 @@ } }, "babel-preset-jest": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz", - "integrity": "sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", + "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^27.4.0", + "babel-plugin-jest-hoist": "^27.5.1", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -2355,20 +2310,35 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "requires": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", + "qs": "6.9.7", + "raw-body": "2.4.3", "type-is": "~1.6.18" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "brace-expansion": { @@ -2401,15 +2371,15 @@ "dev": true }, "browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", + "version": "4.20.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.2.tgz", + "integrity": "sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", + "caniuse-lite": "^1.0.30001317", + "electron-to-chromium": "^1.4.84", "escalade": "^3.1.1", - "node-releases": "^2.0.1", + "node-releases": "^2.0.2", "picocolors": "^1.0.0" } }, @@ -2476,9 +2446,9 @@ } }, "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "call-bind": { "version": "1.0.2", @@ -2497,20 +2467,22 @@ "dev": true }, "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "caniuse-lite": { - "version": "1.0.30001306", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001306.tgz", - "integrity": "sha512-Wd1OuggRzg1rbnM5hv1wXs2VkxJH/AA+LuudlIqvZiCvivF+wJJe2mgBZC8gPMgI7D76PP5CTx8Luvaqc1V6OQ==", + "version": "1.0.30001317", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001317.tgz", + "integrity": "sha512-xIZLh8gBm4dqNX0gkzrBeyI86J2eCjWzYAs40q88smG844YIrN4tVQl/RhquHvKEKImWWFIVh1Lxe5n1G/N+GQ==", "dev": true }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2529,9 +2501,9 @@ "dev": true }, "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -2773,9 +2745,9 @@ } }, "cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" }, "cookie-signature": { "version": "1.0.6", @@ -2803,16 +2775,16 @@ } }, "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", + "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", - "yaml": "^1.7.2" + "yaml": "^1.10.0" } }, "create-require": { @@ -2864,42 +2836,14 @@ "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^8.0.0" - }, - "dependencies": { - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - } } }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { @@ -2998,9 +2942,9 @@ "dev": true }, "diff-sequences": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.4.0.tgz", - "integrity": "sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", "dev": true }, "dir-glob": { @@ -3043,6 +2987,11 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==" }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==" + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -3057,9 +3006,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.4.63", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.63.tgz", - "integrity": "sha512-e0PX/LRJPFRU4kzJKLvTobxyFdnANCvcoDCe8XcyTqP58nTWIwdsHvXLIl1RkB39X5yaosLaroMASWB0oIsgCA==", + "version": "1.4.84", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.84.tgz", + "integrity": "sha512-b+DdcyOiZtLXHdgEG8lncYJdxbdJWJvclPNMg0eLUDcSOSO876WA/pYjdSblUTd7eJdIs4YdIxHWGazx7UPSJw==", "dev": true }, "elliptic": { @@ -3102,21 +3051,13 @@ } }, "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", + "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" - }, - "dependencies": { - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - } } }, "error-ex": { @@ -3145,9 +3086,9 @@ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "escodegen": { @@ -3218,12 +3159,12 @@ } }, "eslint": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", - "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.5", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -3231,10 +3172,10 @@ "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3272,25 +3213,20 @@ "uri-js": "^4.2.2" } }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ms": "2.1.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -3317,19 +3253,13 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true } } }, "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true }, "eslint-plugin-prettier": { @@ -3369,20 +3299,20 @@ } }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, "requires": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "eslint-visitor-keys": "^3.3.0" } }, "esprima": { @@ -3449,19 +3379,19 @@ "dev": true }, "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, @@ -3472,28 +3402,28 @@ "dev": true }, "expect": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.4.6.tgz", - "integrity": "sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", + "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, "requires": { - "@jest/types": "^27.4.2", - "jest-get-type": "^27.4.0", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6" + "@jest/types": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1" } }, "express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.1", + "body-parser": "1.19.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.1", + "cookie": "0.4.2", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -3508,7 +3438,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.9.6", + "qs": "6.9.7", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.17.2", @@ -3520,6 +3450,19 @@ "vary": "~1.1.2" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -3605,6 +3548,14 @@ "dev": true, "requires": { "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } } }, "file-entry-cache": { @@ -3637,6 +3588,21 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } } }, "find-up": { @@ -3666,41 +3632,37 @@ "dev": true }, "follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==" + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" }, "fork-ts-checker-webpack-plugin": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.0.tgz", - "integrity": "sha512-cS178Y+xxtIjEUorcHddKS7yCMlrDPV31mt47blKKRfMd70Kxu5xruAFE2o9sDY6wVC5deuob/u/alD04YYHnw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.2.1.tgz", + "integrity": "sha512-uOfQdg/iQ8iokQ64qcbu8iZb114rOmaKLQFu7hU14/eJaKgsP91cQ7ts7v2iiDld6TzDe84Meksha8/MkWiCyw==", "dev": true, "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" + "schema-utils": "4.0.0", + "semver": "^7.3.5", + "tapable": "^2.2.1" }, "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } } } @@ -3747,9 +3709,9 @@ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.1.tgz", + "integrity": "sha512-NbdoVMZso2Lsrn/QwLXOy6rm0ufY2zEOKCDzJR/0kBsb0E6qed0P3iYK+Ath3BfvXEeu4JhEtXLgILx5psUfag==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -3840,13 +3802,10 @@ "dev": true }, "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, "glob": { "version": "7.2.0", @@ -3877,20 +3836,12 @@ "dev": true }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" - }, - "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - } } }, "globby": { @@ -3931,6 +3882,11 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -4023,9 +3979,9 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-unicode": { @@ -4094,23 +4050,6 @@ "@tootallnate/once": "1", "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "https-proxy-agent": { @@ -4120,27 +4059,12 @@ "requires": { "agent-base": "6", "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "iconv-lite": { @@ -4224,6 +4148,16 @@ "through": "^2.3.6" }, "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "rxjs": { "version": "6.6.7", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", @@ -4403,21 +4337,6 @@ "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4427,9 +4346,9 @@ } }, "istanbul-reports": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.3.tgz", - "integrity": "sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -4442,298 +4361,363 @@ "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==" }, "jest": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.4.7.tgz", - "integrity": "sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", + "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "dev": true, "requires": { - "@jest/core": "^27.4.7", + "@jest/core": "^27.5.1", "import-local": "^3.0.2", - "jest-cli": "^27.4.7" - }, - "dependencies": { - "jest-cli": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.4.7.tgz", - "integrity": "sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw==", - "dev": true, - "requires": { - "@jest/core": "^27.4.7", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.4.7", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - } - } + "jest-cli": "^27.5.1" } }, "jest-changed-files": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.4.2.tgz", - "integrity": "sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", + "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "execa": "^5.0.0", "throat": "^6.0.1" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - } } }, "jest-circus": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.4.6.tgz", - "integrity": "sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", + "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", "dev": true, "requires": { - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", - "expect": "^27.4.6", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jest-cli": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", + "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", + "dev": true, + "requires": { + "@jest/core": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", + "prompts": "^2.0.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-config": { - "version": "27.4.7", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.4.7.tgz", - "integrity": "sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", + "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", "dev": true, "requires": { "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.4.6", - "@jest/types": "^27.4.2", - "babel-jest": "^27.4.6", + "@jest/test-sequencer": "^27.5.1", + "@jest/types": "^27.5.1", + "babel-jest": "^27.5.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-circus": "^27.4.6", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-jasmine2": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-runner": "^27.4.6", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", + "graceful-fs": "^4.2.9", + "jest-circus": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-jasmine2": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runner": "^27.5.1", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", - "slash": "^3.0.0" + "parse-json": "^5.2.0", + "pretty-format": "^27.5.1", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-diff": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.4.6.tgz", - "integrity": "sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.4.0", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-docblock": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.4.0.tgz", - "integrity": "sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", + "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.4.6.tgz", - "integrity": "sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", + "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6" + "jest-get-type": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-environment-jsdom": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz", - "integrity": "sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", + "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "dev": true, "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2", + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1", "jsdom": "^16.6.0" } }, "jest-environment-node": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.4.6.tgz", - "integrity": "sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", + "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", "dev": true, "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", - "jest-mock": "^27.4.6", - "jest-util": "^27.4.2" + "jest-mock": "^27.5.1", + "jest-util": "^27.5.1" } }, "jest-get-type": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.4.0.tgz", - "integrity": "sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", "dev": true }, "jest-haste-map": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.4.6.tgz", - "integrity": "sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", + "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.4.0", - "jest-serializer": "^27.4.0", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^27.5.1", + "jest-serializer": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "micromatch": "^4.0.4", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz", - "integrity": "sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", + "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, "requires": { - "@jest/environment": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/environment": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "expect": "^27.4.6", + "expect": "^27.5.1", "is-generator-fn": "^2.0.0", - "jest-each": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", - "pretty-format": "^27.4.6", + "jest-each": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", + "pretty-format": "^27.5.1", "throat": "^6.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-leak-detector": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz", - "integrity": "sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", + "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", "dev": true, "requires": { - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" } }, "jest-matcher-utils": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz", - "integrity": "sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", "dev": true, "requires": { "chalk": "^4.0.0", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "pretty-format": "^27.4.6" + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-message-util": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.4.6.tgz", - "integrity": "sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", + "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^27.4.6", + "pretty-format": "^27.5.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-mock": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.4.6.tgz", - "integrity": "sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "@types/node": "*" } }, @@ -4744,151 +4728,149 @@ "dev": true }, "jest-regex-util": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.4.0.tgz", - "integrity": "sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true }, "jest-resolve": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.4.6.tgz", - "integrity": "sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", + "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.4.2", - "jest-validate": "^27.4.6", + "jest-util": "^27.5.1", + "jest-validate": "^27.5.1", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-resolve-dependencies": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz", - "integrity": "sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", + "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", "dev": true, "requires": { - "@jest/types": "^27.4.2", - "jest-regex-util": "^27.4.0", - "jest-snapshot": "^27.4.6" + "@jest/types": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-snapshot": "^27.5.1" } }, "jest-runner": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.4.6.tgz", - "integrity": "sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", + "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", "dev": true, "requires": { - "@jest/console": "^27.4.6", - "@jest/environment": "^27.4.6", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/console": "^27.5.1", + "@jest/environment": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.4.0", - "jest-environment-jsdom": "^27.4.6", - "jest-environment-node": "^27.4.6", - "jest-haste-map": "^27.4.6", - "jest-leak-detector": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-resolve": "^27.4.6", - "jest-runtime": "^27.4.6", - "jest-util": "^27.4.2", - "jest-worker": "^27.4.6", + "graceful-fs": "^4.2.9", + "jest-docblock": "^27.5.1", + "jest-environment-jsdom": "^27.5.1", + "jest-environment-node": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-leak-detector": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-runtime": "^27.5.1", + "jest-util": "^27.5.1", + "jest-worker": "^27.5.1", "source-map-support": "^0.5.6", "throat": "^6.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-runtime": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.4.6.tgz", - "integrity": "sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", + "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", "dev": true, "requires": { - "@jest/environment": "^27.4.6", - "@jest/fake-timers": "^27.4.6", - "@jest/globals": "^27.4.6", - "@jest/source-map": "^27.4.0", - "@jest/test-result": "^27.4.6", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/environment": "^27.5.1", + "@jest/fake-timers": "^27.5.1", + "@jest/globals": "^27.5.1", + "@jest/source-map": "^27.5.1", + "@jest/test-result": "^27.5.1", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-mock": "^27.4.6", - "jest-regex-util": "^27.4.0", - "jest-resolve": "^27.4.6", - "jest-snapshot": "^27.4.6", - "jest-util": "^27.4.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-mock": "^27.5.1", + "jest-regex-util": "^27.5.1", + "jest-resolve": "^27.5.1", + "jest-snapshot": "^27.5.1", + "jest-util": "^27.5.1", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true } } }, "jest-serializer": { - "version": "27.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.4.0.tgz", - "integrity": "sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", + "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, "requires": { "@types/node": "*", - "graceful-fs": "^4.2.4" + "graceful-fs": "^4.2.9" } }, "jest-snapshot": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.4.6.tgz", - "integrity": "sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", + "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "dev": true, "requires": { "@babel/core": "^7.7.2", @@ -4896,51 +4878,75 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.0.0", - "@jest/transform": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/transform": "^27.5.1", + "@jest/types": "^27.5.1", "@types/babel__traverse": "^7.0.4", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^27.4.6", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.4.6", - "jest-get-type": "^27.4.0", - "jest-haste-map": "^27.4.6", - "jest-matcher-utils": "^27.4.6", - "jest-message-util": "^27.4.6", - "jest-util": "^27.4.2", + "expect": "^27.5.1", + "graceful-fs": "^4.2.9", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "jest-haste-map": "^27.5.1", + "jest-matcher-utils": "^27.5.1", + "jest-message-util": "^27.5.1", + "jest-util": "^27.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^27.4.6", + "pretty-format": "^27.5.1", "semver": "^7.3.2" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-util": { - "version": "27.4.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.4.2.tgz", - "integrity": "sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", + "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-validate": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.4.6.tgz", - "integrity": "sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", + "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dev": true, "requires": { - "@jest/types": "^27.4.2", + "@jest/types": "^27.5.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", - "jest-get-type": "^27.4.0", + "jest-get-type": "^27.5.1", "leven": "^3.1.0", - "pretty-format": "^27.4.6" + "pretty-format": "^27.5.1" }, "dependencies": { "camelcase": { @@ -4948,28 +4954,50 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } } } }, "jest-watcher": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.4.6.tgz", - "integrity": "sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", + "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", "dev": true, "requires": { - "@jest/test-result": "^27.4.6", - "@jest/types": "^27.4.2", + "@jest/test-result": "^27.5.1", + "@jest/types": "^27.5.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", - "jest-util": "^27.4.2", + "jest-util": "^27.5.1", "string-length": "^4.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { "@types/node": "*", @@ -5036,34 +5064,6 @@ "whatwg-url": "^8.5.0", "ws": "^7.4.6", "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - } } }, "jsesc": { @@ -5102,12 +5102,12 @@ "dev": true }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "jsonc-parser": { @@ -5143,11 +5143,6 @@ "semver": "^5.6.0" }, "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -5305,6 +5300,18 @@ "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "long": { @@ -5417,16 +5424,16 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.51.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -5446,9 +5453,9 @@ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -5484,9 +5491,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multer": { "version": "1.4.4", @@ -5546,6 +5553,27 @@ "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "requires": { "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } } }, "node-int64": { @@ -5555,9 +5583,9 @@ "dev": true }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "dev": true }, "nopt": { @@ -5611,9 +5639,9 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" }, "object-inspect": { "version": "1.12.0", @@ -5686,6 +5714,18 @@ "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "os-locale": { @@ -5842,9 +5882,9 @@ "dev": true }, "prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.1.tgz", + "integrity": "sha512-8UVbTBYGwN37Bs9LERmxCPjdvPxlEowx2urIL6urHzdb3SDq4B/Z6xLFCblrSnE4iKWcS6ziJ3aOYrc1kz/E2A==", "dev": true }, "prettier-linter-helpers": { @@ -5857,9 +5897,9 @@ } }, "pretty-format": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.4.6.tgz", - "integrity": "sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "requires": { "ansi-regex": "^5.0.1", @@ -5908,13 +5948,6 @@ "@types/long": "^4.0.1", "@types/node": ">=13.7.0", "long": "^4.0.0" - }, - "dependencies": { - "@types/node": { - "version": "17.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.14.tgz", - "integrity": "sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng==" - } } }, "proxy-addr": { @@ -5949,9 +5982,9 @@ "dev": true }, "qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" }, "queue-microtask": { "version": "1.2.3", @@ -5974,11 +6007,11 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "requires": { - "bytes": "3.1.1", + "bytes": "3.1.2", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" @@ -6121,9 +6154,9 @@ } }, "rxjs": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz", - "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "requires": { "tslib": "^2.1.0" } @@ -6148,34 +6181,15 @@ } }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - } + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" } }, "semver": { @@ -6206,6 +6220,21 @@ "statuses": "~1.5.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6281,9 +6310,9 @@ } }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sisteransi": { "version": "1.0.5", @@ -6394,9 +6423,9 @@ } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true }, "strip-final-newline": { @@ -6430,15 +6459,6 @@ "semver": "^7.3.5" }, "dependencies": { - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -6456,12 +6476,6 @@ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -6528,9 +6542,9 @@ "dev": true }, "swagger-ui-dist": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.4.1.tgz", - "integrity": "sha512-eYe4Utyem3GJC1gLZvKyzMEKEk5dMikbhVxuFKpPJA8l+hzAo6S0HGHLJA6cZKboqVnyCZrQfx6bl716y7T4dA==" + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.6.2.tgz", + "integrity": "sha512-BSt+ukOGkGZ2uHV4jyyCAzt60ysyQpGZAAhtIh7AMHT4MH1xXGkoXm2tfr1oRqO1N4IEY6qqNAlmcfMo/dAYuw==" }, "swagger-ui-express": { "version": "4.3.0", @@ -6553,9 +6567,9 @@ "dev": true }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tar": { @@ -6589,11 +6603,12 @@ } }, "terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.12.1.tgz", + "integrity": "sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ==", "dev": true, "requires": { + "acorn": "^8.5.0", "commander": "^2.20.0", "source-map": "~0.7.2", "source-map-support": "~0.5.20" @@ -6632,6 +6647,12 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6741,9 +6762,13 @@ } }, "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } }, "tree-kill": { "version": "1.2.2", @@ -6752,9 +6777,9 @@ "dev": true }, "ts-jest": { - "version": "27.1.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.3.tgz", - "integrity": "sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA==", + "version": "27.1.4", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.1.4.tgz", + "integrity": "sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==", "dev": true, "requires": { "bs-logger": "0.x", @@ -6765,35 +6790,36 @@ "make-error": "1.x", "semver": "7.x", "yargs-parser": "20.x" - }, - "dependencies": { - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - } } }, "ts-loader": { - "version": "9.2.6", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", - "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.8.tgz", + "integrity": "sha512-gxSak7IHUuRtwKf3FIPSW1VpZcqF9+MBrHOvBp9cjHh+525SjtCIJKVGjRKIAfxBwDGDGCFF00rTfzB1quxdSw==", "dev": true, "requires": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "ts-node": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", - "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", "dev": true, "requires": { "@cspotcode/source-map-support": "0.7.0", @@ -6807,6 +6833,7 @@ "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", "yn": "3.1.1" }, "dependencies": { @@ -6819,15 +6846,38 @@ } }, "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } } }, "tsconfig-paths-webpack-plugin": { @@ -6839,6 +6889,18 @@ "chalk": "^4.1.0", "enhanced-resolve": "^5.7.0", "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, "tslib": { @@ -6879,9 +6941,9 @@ "dev": true }, "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -6908,9 +6970,9 @@ } }, "typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "universalify": { @@ -6954,6 +7016,12 @@ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "dev": true + }, "v8-to-istanbul": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", @@ -7017,18 +7085,19 @@ } }, "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true }, "webpack": { - "version": "5.66.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.66.0.tgz", - "integrity": "sha512-NJNtGT7IKpGzdW7Iwpn/09OXz9inIkeIQ/ibY6B+MdV1x6+uReqz/5z1L89ezWnpPDWpXF0TY5PCYKQdWVn8Vg==", + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", "dev": true, "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", @@ -7036,7 +7105,7 @@ "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.3", + "enhanced-resolve": "^5.9.2", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -7050,7 +7119,7 @@ "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", "watchpack": "^2.3.1", - "webpack-sources": "^3.2.2" + "webpack-sources": "^3.2.3" }, "dependencies": { "ajv": { @@ -7065,6 +7134,12 @@ "uri-js": "^4.2.2" } }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -7081,12 +7156,6 @@ "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true } } }, @@ -7118,12 +7187,14 @@ "dev": true }, "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" } }, "which": { @@ -7155,6 +7226,40 @@ "dev": true, "requires": { "execa": "^4.0.2" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + } } }, "word-wrap": { @@ -7191,9 +7296,9 @@ } }, "ws": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.6.tgz", - "integrity": "sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", "dev": true }, "xml-name-validator": { diff --git a/package.json b/package.json index 3f02885..9a06df6 100644 --- a/package.json +++ b/package.json @@ -21,14 +21,16 @@ "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { - "@grpc/grpc-js": "^1.5.0", + "@grpc/grpc-js": "^1.5.10", "@grpc/proto-loader": "^0.6.9", - "@nestjs/common": "^8.0.0", - "@nestjs/core": "^8.0.0", + "@nestjs/common": "^8.4.3", + "@nestjs/config": "^1.2.1", + "@nestjs/core": "^8.4.3", "@nestjs/mapped-types": "*", - "@nestjs/microservices": "^8.2.4", - "@nestjs/platform-express": "^8.0.0", - "@nestjs/swagger": "^5.1.5", + "@nestjs/microservices": "^8.4.3", + "@nestjs/platform-express": "^8.4.3", + "@nestjs/swagger": "^5.2.1", + "@victorradael/protospack": "^1.3.9", "axios": "^0.25.0", "dotenv": "^14.2.0", "grpc": "^1.24.11", @@ -36,33 +38,33 @@ "jwk-to-pem": "^2.0.5", "reflect-metadata": "^0.1.13", "rimraf": "^3.0.2", - "rxjs": "^7.2.0", + "rxjs": "^7.5.5", "swagger-ui-express": "^4.3.0" }, "devDependencies": { - "@nestjs/cli": "^8.0.0", - "@nestjs/schematics": "^8.0.0", - "@nestjs/testing": "^8.0.0", + "@nestjs/cli": "^8.2.4", + "@nestjs/schematics": "^8.0.8", + "@nestjs/testing": "^8.4.3", "@types/express": "^4.17.13", "@types/jest": "27.0.2", "@types/jsonwebtoken": "^8.5.8", "@types/jwk-to-pem": "^2.0.1", - "@types/node": "^16.0.0", - "@types/supertest": "^2.0.11", - "@typescript-eslint/eslint-plugin": "^5.0.0", - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^8.0.1", - "eslint-config-prettier": "^8.3.0", + "@types/node": "^16.11.26", + "@types/supertest": "^2.0.12", + "@typescript-eslint/eslint-plugin": "^5.17.0", + "@typescript-eslint/parser": "^5.17.0", + "eslint": "^8.12.0", + "eslint-config-prettier": "^8.5.0", "eslint-plugin-prettier": "^4.0.0", - "jest": "^27.2.5", - "prettier": "^2.3.2", + "jest": "^27.5.1", + "prettier": "^2.6.1", "source-map-support": "^0.5.20", "supertest": "^6.1.3", - "ts-jest": "^27.0.3", - "ts-loader": "^9.2.3", - "ts-node": "^10.0.0", - "tsconfig-paths": "^3.10.1", - "typescript": "^4.3.5" + "ts-jest": "^27.1.4", + "ts-loader": "^9.2.7", + "ts-node": "^10.7.0", + "tsconfig-paths": "^3.14.1", + "typescript": "^4.6.3" }, "jest": { "moduleFileExtensions": [ diff --git a/src/app.module.ts b/src/app.module.ts index c0de4de..74cb547 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,44 +1,102 @@ -import { MiddlewareConsumer, Module, NestModule, RequestMethod } from '@nestjs/common'; -import { InputGrpcClientModule } from './inputs/input-grpc-client.module'; -import { UsersGrpcClientModule } from './users-grpc-client/users-grpc-client.module'; -import { OutputsModule } from './outputs/outputs.module'; -import { EnrichmentModule } from './enrichment/enrichment.module'; -import { TransformationsModule } from './transformations/transformations.module'; -import { PipelinesModule } from './pipelines/pipelines.module'; -import { RestInputsModule } from './rest/rest-inputs/rest-inputs.module'; -import { RestOutputsModule } from './rest/rest-outputs/rest-outputs.module'; -import { RestEnrichmentsModule } from './rest/rest-enrichments/rest-enrichments.module'; -import { RestTransformationsModule } from './rest/rest-transformations/rest-transformations.module'; -import { RestPipelinesModule } from './rest/rest-pipelines/rest-pipelines.module'; -import { RestUserModule } from './rest/rest-user/rest-user.module'; -import { RestFactoryModule } from './rest/rest-factory/rest-factory.module'; -import { LoggerMiddleware } from './middlewares/authentication'; -import { RestInputsController } from './rest/rest-inputs/rest-inputs.controller'; -import { RestOutputsController } from './rest/rest-outputs/rest-outputs.controller'; -import { RestTransformationsController } from './rest/rest-transformations/rest-transformations.controller'; -import { RestPipelinesController } from './rest/rest-pipelines/rest-pipelines.controller'; -import { RestEnrichmentsController } from './rest/rest-enrichments/rest-enrichments.controller'; -import { RestFactoryController } from './rest/rest-factory/rest-factory.controller'; -import { HealthModule } from './health/health.module'; -@Module({ - imports: [ - RestInputsModule, RestOutputsModule, RestEnrichmentsModule, RestTransformationsModule, RestPipelinesModule, RestUserModule, RestFactoryModule, HealthModule, - // InputGrpcClientModule, - //OutputsModule, - //EnrichmentModule, - //TransformationsModule, - //PipelinesModule - ], - controllers: [], - providers: [], -}) -export class AppModule implements NestModule{ +import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common'; +import { ClientsModule } from '@nestjs/microservices'; +import { ConfigModule } from '@nestjs/config'; +import { LoggerMiddleware } from './middlewares/authentication'; + +import { InputsController } from './modules/inputs/inputs.controller'; +import { TransformationsController } from './modules/transformations/transformations.controller'; +import { OutputsController } from './modules/outputs/outputs.controllers'; +import { PipelinesController } from './modules/pipelines/pipelines.controller'; +import { AuthController } from './modules/auth/auth.controller'; +import { HealthController } from './modules/health/health.controller'; + +import { InputsService } from './modules/inputs/inputs.service'; +import { TransformationsService } from './modules/transformations/transformations.service'; +import { OutputsService } from './modules/outputs/outputs.service'; +import { PipelinesService } from './modules/pipelines/pipelines.service'; +// import { AuthService } from './modules/auth/auth.service'; +import { HealthService } from './modules/health/health.service'; + +import { InputsClientService } from './clients/inputs/client.service'; +import { TransformationsClientService } from './clients/transformations/client.service'; +import { OutputsClientService } from './clients/outputs/client.service'; +import { PipelinesClientService } from './clients/pipelines/client.service'; +import { AuthClientService } from './clients/auth/client.service'; + +import { OutputsClientConfiguration } from './clients/outputs/client.config'; +import { TransformationsClientConfiguration } from './clients/transformations/client.config'; +import { AuthClient } from './clients/auth/client.config'; +import { InputsClientConfiguration } from './clients/inputs/client.config'; +import { PipelinesClientConfiguration } from './clients/pipelines/client.config'; + +const authClient = new AuthClient(); +const inputClient = new InputsClientConfiguration(); +const outputClient = new OutputsClientConfiguration(); +const pipelineClient = new PipelinesClientConfiguration(); +const transformationClient = new TransformationsClientConfiguration(); + +@Module({ + controllers: [ + InputsController, + TransformationsController, + OutputsController, + PipelinesController, + AuthController, + HealthController, + ], + providers: [ + InputsService, + TransformationsService, + OutputsService, + PipelinesService, + // AuthService, + HealthService, + InputsClientService, + TransformationsClientService, + OutputsClientService, + PipelinesClientService, + AuthClientService, + ], + imports: [ + ConfigModule.forRoot({ + isGlobal: true, + }), + + ClientsModule.register([ + { + name: 'INPUTS_PACKAGE', + ...inputClient.config(), + }, + + { + name: 'TRANSFORMATIONS_PACKAGE', + ...transformationClient.config(), + }, + { + name: 'OUTPUTS_PACKAGE', + ...outputClient.config(), + }, + { + name: 'AUTH_PACKAGE', + ...authClient.config(), + }, + { + name: 'PIPELINES_PACKAGE', + ...pipelineClient.config(), + }, + ]), + ], +}) +export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer .apply(LoggerMiddleware) - .forRoutes(RestInputsController,RestOutputsController,RestTransformationsController,RestPipelinesController,RestEnrichmentsController,RestFactoryController) + .forRoutes( + InputsController, + TransformationsController, + OutputsController, + PipelinesController, + ); } - - } diff --git a/src/clients/auth/client.config.ts b/src/clients/auth/client.config.ts new file mode 100644 index 0000000..995a967 --- /dev/null +++ b/src/clients/auth/client.config.ts @@ -0,0 +1,23 @@ +import { credentials } from '@grpc/grpc-js'; +import { ClientOptions, Transport } from '@nestjs/microservices'; + +import { DucProtofile } from '@victorradael/protospack'; + +export class AuthClient { + config(): ClientOptions { + return { + transport: Transport.GRPC, + options: { + url: process.env.DUC_URL, + package: 'duc', + credentials: credentials.createSsl(), + protoPath: DucProtofile, + loader: { + enums: String, + objects: true, + arrays: true, + }, + }, + }; + } +} diff --git a/src/clients/auth/client.service.ts b/src/clients/auth/client.service.ts new file mode 100644 index 0000000..79669e1 --- /dev/null +++ b/src/clients/auth/client.service.ts @@ -0,0 +1,43 @@ +import { OnModuleInit, Inject } from '@nestjs/common'; +import { ClientGrpc } from '@nestjs/microservices'; + +import { CognitoServiceInterface } from '@victorradael/protospack'; + +import { ILogin } from './interfaces'; + +export class AuthClientService implements OnModuleInit { + private cognitoService: CognitoServiceInterface; + constructor( + @Inject('AUTH_PACKAGE') private readonly grpcClient: ClientGrpc, + ) {} + + onModuleInit() { + this.cognitoService = this.grpcClient.getService( + 'CognitoProtoService', + ); + } + + async signIn({ username, password }: ILogin): Promise { + console.log('CognitoClientService', 'SignIn'); + + const tokens = await new Promise((resolve, reject) => { + this.cognitoService.signIn({ username, password }).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + return tokens; + } +} diff --git a/src/clients/auth/interfaces.d.ts b/src/clients/auth/interfaces.d.ts new file mode 100644 index 0000000..ffede69 --- /dev/null +++ b/src/clients/auth/interfaces.d.ts @@ -0,0 +1,4 @@ +export interface ILogin { + username: string; + password: string; +} diff --git a/src/clients/inputs/client.config.ts b/src/clients/inputs/client.config.ts new file mode 100644 index 0000000..8e0ec83 --- /dev/null +++ b/src/clients/inputs/client.config.ts @@ -0,0 +1,23 @@ +import { credentials } from '@grpc/grpc-js'; +import { ClientOptions, Transport } from '@nestjs/microservices'; + +import { InputProtofile } from '@victorradael/protospack'; + +export class InputsClientConfiguration { + config(): ClientOptions { + return { + transport: Transport.GRPC, + options: { + url: process.env.INFACTORY_URL, + package: 'input', + credentials: credentials.createSsl(), + protoPath: InputProtofile, + loader: { + enums: String, + objects: true, + arrays: true, + }, + }, + }; + } +} diff --git a/src/clients/inputs/client.service.ts b/src/clients/inputs/client.service.ts new file mode 100644 index 0000000..eca07d5 --- /dev/null +++ b/src/clients/inputs/client.service.ts @@ -0,0 +1,173 @@ +import { OnModuleInit, Inject } from '@nestjs/common'; +import { ClientGrpc } from '@nestjs/microservices'; +import { InputService } from '@victorradael/protospack'; +import { + objectCamelToSnake, + objectSnakeToCamel, +} from 'src/utils/CaseConverter'; +import { + ICreateInputRequest, + IIdRequest, + ITestConnectionRequest, + UpdateInputRequest, +} from './interfaces'; + +export class InputsClientService implements OnModuleInit { + private inputService: InputService; + constructor( + @Inject('INPUTS_PACKAGE') private readonly grpcClient: ClientGrpc, + ) {} + + onModuleInit() { + this.inputService = + this.grpcClient.getService('InputService'); + } + + async create(createInputDto: ICreateInputRequest) { + console.log('InputClientService', 'Create'); + + const createInputResponse = await new Promise((resolve, reject) => { + this.inputService.Create(objectSnakeToCamel(createInputDto)).subscribe({ + next(x) { + resolve(objectCamelToSnake(x)); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return createInputResponse; + } + + async findOne(data: IIdRequest) { + console.log('InputClientService', 'FindOne'); + + const findOneInputResponse = await new Promise((resolve, reject) => { + this.inputService.FindOne(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(objectCamelToSnake(x)); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return findOneInputResponse; + } + + async findAll(data) { + console.log('InputClientService', 'FindAll'); + + const findAllInputResponse = await new Promise((resolve, reject) => { + this.inputService.FindAll(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(objectCamelToSnake(x)); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return findAllInputResponse; + } + + async update(updateInputDTO: UpdateInputRequest) { + console.log('InputClientService', 'Update'); + const updateInputResponse = await new Promise((resolve, reject) => { + this.inputService.Update(objectSnakeToCamel(updateInputDTO)).subscribe({ + next(x) { + resolve(objectCamelToSnake(x)); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return updateInputResponse; + } + + async remove(idRequest: IIdRequest) { + console.log('InputClientService', 'Remove'); + + const removeInputResponse = await new Promise((resolve, reject) => { + this.inputService.Remove(objectSnakeToCamel(idRequest)).subscribe({ + next(x) { + resolve(objectCamelToSnake(x)); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return removeInputResponse; + } + + async testConnection(data: ITestConnectionRequest) { + console.log('InputClientService', 'TestConnection'); + const testConnectionResponse = await new Promise((resolve, reject) => { + this.inputService.TestConnection(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(objectCamelToSnake(x)); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return testConnectionResponse; + } +} diff --git a/src/clients/inputs/interfaces.d.ts b/src/clients/inputs/interfaces.d.ts new file mode 100644 index 0000000..0df0786 --- /dev/null +++ b/src/clients/inputs/interfaces.d.ts @@ -0,0 +1,62 @@ +interface Values { + jdbc_user: string; + jdbc_password: string; + database: string; + endpoint: string; + tables: string[]; + port: string; + engine: string; + schema: string; +} + +interface Cron { + hours: string[]; + hour_interval: boolean; + hour_resourse: boolean; + hour_resourse_value: number; + month_day: string[]; + month_day_interval: boolean; + month_day_resourse: boolean; + month_day_resourse_value: number; + month: string[]; + month_interval: boolean; + month_resourse: boolean; + month_resourse_value: number; + week_days: string[]; + week_days_interval: boolean; + week_days_resourse: boolean; + week_days_resourse_value: number; +} + +export interface Info { + costumer_id: string; + user_id: string; +} + +export interface ICreateInputRequest { + cron: string; + name: string; + plugin: string; + values: Values; + operation: string; + info: Info; +} +export interface IIdRequest { + id: string; + info: Info; +} + +export interface UpdateInputRequest { + id: string; + cron: string; + name: string; + plugin: string; + values: Values; + operation: string; + info: Info; +} + +export interface ITestConnectionRequest { + plugin: string; + values: Values; +} diff --git a/src/clients/outputs/client.config.ts b/src/clients/outputs/client.config.ts new file mode 100644 index 0000000..f574a4e --- /dev/null +++ b/src/clients/outputs/client.config.ts @@ -0,0 +1,22 @@ +import { OutputProtofile } from '@victorradael/protospack'; +import { ClientOptions, Transport } from '@nestjs/microservices'; +import { credentials } from '@grpc/grpc-js'; + +export class OutputsClientConfiguration { + config(): ClientOptions { + return { + transport: Transport.GRPC, + options: { + url: process.env.OTFACTORY_URL, + package: 'output', + credentials: credentials.createSsl(), + protoPath: OutputProtofile, + loader: { + enums: String, + objects: true, + arrays: true, + }, + }, + }; + } +} diff --git a/src/clients/outputs/client.service.ts b/src/clients/outputs/client.service.ts new file mode 100644 index 0000000..e1e55a5 --- /dev/null +++ b/src/clients/outputs/client.service.ts @@ -0,0 +1,156 @@ +import { Controller, Inject, OnModuleInit } from '@nestjs/common'; +import { ClientGrpc, Payload } from '@nestjs/microservices'; +import { OutputsServiceInterface } from '@victorradael/protospack'; +import { + objectCamelToSnake, + objectSnakeToCamel, +} from 'src/utils/CaseConverter'; +import { + ICreateOutputRequest, + IIdRequest, + IOutputUpdateRequest, +} from './interfaces'; + +@Controller('output') +export class OutputsClientService implements OnModuleInit { + private outputService: OutputsServiceInterface; + constructor( + @Inject('OUTPUTS_PACKAGE') private readonly grpcClient: ClientGrpc, + ) {} + + onModuleInit() { + this.outputService = + this.grpcClient.getService('OutputService'); + } + + async create(@Payload() createOutputDto: ICreateOutputRequest) { + console.log('OutputClientService', 'Create'); + + const createOutputResponse = await new Promise((resolve, reject) => { + this.outputService.Create(objectSnakeToCamel(createOutputDto)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + const convertedItem = objectCamelToSnake(createOutputResponse['output']); + createOutputResponse['output'] = convertedItem; + return createOutputResponse; + } + + async findAll(data) { + console.log('OutputClientService', 'FindAll'); + + const findAllOutputResponse = await new Promise((resolve, reject) => { + this.outputService.FindAll(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + const convertedOutputs = findAllOutputResponse['outputs'].map((ot) => { + return objectCamelToSnake(ot); + }); + + return { outputs: convertedOutputs }; + } + + async findOne(data: IIdRequest) { + console.log('OutputClientService', 'FindOne'); + + const findOneOutputResponse = await new Promise((resolve, reject) => { + this.outputService.FindOne(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return objectCamelToSnake(findOneOutputResponse); + } + + async update(updateOutPutDTO: IOutputUpdateRequest) { + console.log('OutputClientService', 'Update'); + + const updateOutputResponse = await new Promise((resolve, reject) => { + this.outputService.Update(objectSnakeToCamel(updateOutPutDTO)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return objectCamelToSnake(updateOutputResponse); + } + + async remove(data: IIdRequest) { + console.log('OutputClientService', 'Remove'); + + const removeOutputResponse = await new Promise((resolve, reject) => { + this.outputService.Remove(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(objectCamelToSnake(x)); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return removeOutputResponse; + } +} diff --git a/src/clients/outputs/interfaces.d.ts b/src/clients/outputs/interfaces.d.ts new file mode 100644 index 0000000..0f94f66 --- /dev/null +++ b/src/clients/outputs/interfaces.d.ts @@ -0,0 +1,29 @@ +export interface ICreateOutputRequest { + operation: string; + name: string; + plugin: string; + values: Values; +} + +export interface Values { + prefix: string; +} + +interface Info { + user_id: string; + customer_id: string; +} + +export interface IIdRequest { + id: string; + info: Info; +} + +export interface IOutputUpdateRequest { + id: string; + operation: string; + values: Values; + plugin: string; + name: string; + info: Info; +} diff --git a/src/clients/pipelines/client.config.ts b/src/clients/pipelines/client.config.ts new file mode 100644 index 0000000..fae827f --- /dev/null +++ b/src/clients/pipelines/client.config.ts @@ -0,0 +1,22 @@ +import { ClientOptions, Transport } from '@nestjs/microservices'; +import { PipelineProtofile } from '@victorradael/protospack'; +import { credentials } from '@grpc/grpc-js'; + +export class PipelinesClientConfiguration { + config(): ClientOptions { + return { + transport: Transport.GRPC, + options: { + url: process.env.PIFACTORY_URL, + package: 'pipeline', + credentials: credentials.createSsl(), + protoPath: PipelineProtofile, + loader: { + enums: String, + objects: true, + arrays: true, + }, + }, + }; + } +} diff --git a/src/clients/pipelines/client.service.ts b/src/clients/pipelines/client.service.ts new file mode 100644 index 0000000..c11d528 --- /dev/null +++ b/src/clients/pipelines/client.service.ts @@ -0,0 +1,205 @@ +import { Inject, OnModuleInit } from '@nestjs/common'; +import { ClientGrpc, Payload } from '@nestjs/microservices'; +import { PipelinesServiceInterface } from '@victorradael/protospack'; +import { + objectCamelToSnake, + objectSnakeToCamel, +} from 'src/utils/CaseConverter'; +import { + ICreatePipelineDto, + IdRequest, + IGetPipelineLogsRequest, + IIdRequest, + IUpdatePipelineRequest, +} from './interfaces'; + +export class PipelinesClientService implements OnModuleInit { + private pipelineService: PipelinesServiceInterface; + constructor( + @Inject('PIPELINES_PACKAGE') private readonly grpcClient: ClientGrpc, + ) {} + + onModuleInit() { + this.pipelineService = + this.grpcClient.getService('PipelineService'); + } + + async create(@Payload() createPipelineDto: ICreatePipelineDto) { + console.log('PipelinesClientService', 'Create'); + + const createPipelineResponse = await new Promise((resolve, reject) => { + this.pipelineService + .create(objectSnakeToCamel(createPipelineDto)) + .subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return createPipelineResponse; + } + + async findAll(data: IIdRequest) { + console.log('PipelinesClientService', 'FindAll'); + + const findAllPipelineResponse = await new Promise((resolve, reject) => { + this.pipelineService.findAll(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return findAllPipelineResponse; + } + + async findOne(data: IIdRequest) { + console.log('PipelinesClientService', 'FindOne'); + + const findOnePipelineResponse = await new Promise((resolve, reject) => { + this.pipelineService.findOne(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return findOnePipelineResponse; + } + + async update(UpdatePipelineRequest: IUpdatePipelineRequest) { + console.log('PipelinesClientService', 'Update'); + + const updatePipelineResponse = await new Promise((resolve, reject) => { + this.pipelineService + .update(objectSnakeToCamel(UpdatePipelineRequest)) + .subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return updatePipelineResponse; + } + + async remove(data: IIdRequest) { + console.log('PipelinesClientService', 'Remove'); + + const removePipelineResponse = await new Promise((resolve, reject) => { + this.pipelineService.remove(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(objectCamelToSnake(x)); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return removePipelineResponse; + } + + async getPipelineLogsMessages(data: IGetPipelineLogsRequest) { + console.log('PipelinesClientService', 'GetPipelineLogsMessages'); + + const logsPipelineResponse = await new Promise((resolve, reject) => { + this.pipelineService.getPipelineLogs(data).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return logsPipelineResponse; + } + + async getPipelineStatus({ id }: IdRequest) { + console.log('PipelinesClientService', 'GetPipelineStatus'); + + const statusPipelineResponse = await new Promise((resolve, reject) => { + this.pipelineService.getPipelineStatus({ id }).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return statusPipelineResponse; + } +} diff --git a/src/clients/pipelines/interfaces.d.ts b/src/clients/pipelines/interfaces.d.ts new file mode 100644 index 0000000..2a3ddbe --- /dev/null +++ b/src/clients/pipelines/interfaces.d.ts @@ -0,0 +1,39 @@ +export interface ICreatePipelineDto { + input: IdRequest; + transformations: IdRequest[]; + output: IdRequest; + tags: string[]; + name: string; + description: string; + info: Info; +} + +export interface Info { + customer_id: sting; + user_id: string; +} + +export interface IdRequest { + id: string; +} + +export interface IIdRequest { + id: string; + info: Info; +} + +export interface IUpdatePipelineRequest { + input: IdRequest; + transformations: IdRequest[]; + output: IdRequest; + tags: string[]; + name: string; + description: string; + id: string; + info: Info; +} + +export interface IGetPipelineLogsRequest { + id: string; + details: string; +} diff --git a/src/clients/transformations/client.config.ts b/src/clients/transformations/client.config.ts new file mode 100644 index 0000000..e1ffe93 --- /dev/null +++ b/src/clients/transformations/client.config.ts @@ -0,0 +1,22 @@ +import { ClientOptions, Transport } from '@nestjs/microservices'; +import { TransformationProtofile } from '@victorradael/protospack'; +import { credentials } from '@grpc/grpc-js'; + +export class TransformationsClientConfiguration { + config(): ClientOptions { + return { + transport: Transport.GRPC, + options: { + url: process.env.TRFACTORY_URL, + package: 'transformation', + credentials: credentials.createSsl(), + protoPath: TransformationProtofile, + loader: { + enums: String, + objects: true, + arrays: true, + }, + }, + }; + } +} diff --git a/src/clients/transformations/client.service.ts b/src/clients/transformations/client.service.ts new file mode 100644 index 0000000..0b7eaaf --- /dev/null +++ b/src/clients/transformations/client.service.ts @@ -0,0 +1,173 @@ +import { Controller, Inject, OnModuleInit, Post } from '@nestjs/common'; +import { ClientGrpc } from '@nestjs/microservices'; +import { TransformationsServiceInterface } from '@victorradael/protospack'; +import { + objectCamelToSnake, + objectSnakeToCamel, +} from 'src/utils/CaseConverter'; +import { ICreateTransformationsRequest, IIdRequest } from './interfaces'; + +@Controller('transformation') +export class TransformationsClientService implements OnModuleInit { + private transformationService: TransformationsServiceInterface; + constructor( + @Inject('TRANSFORMATIONS_PACKAGE') private readonly grpcClient: ClientGrpc, + ) {} + + onModuleInit() { + this.transformationService = + this.grpcClient.getService( + 'TransformationService', + ); + } + + @Post() + async create(createTransformationsDto: ICreateTransformationsRequest) { + console.log('TransformationClientService', 'Create'); + + const createTransformationResponse = await new Promise( + (resolve, reject) => { + this.transformationService + .create(objectSnakeToCamel(createTransformationsDto)) + .subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }, + ) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + const convertedTransforms = createTransformationResponse[ + 'transformations' + ].map((tr) => { + return objectCamelToSnake(tr); + }); + + return { transformations: convertedTransforms }; + } + + async findAll(data) { + console.log('TransformationClientService', 'FindAll'); + + const findAllTransformationResponse = await new Promise( + (resolve, reject) => { + this.transformationService.findAll(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }, + ) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + const convertedTransforms = findAllTransformationResponse[ + 'transformations' + ].map((tr) => { + return objectCamelToSnake(tr); + }); + return { transformations: convertedTransforms }; + } + + async findOne(data: IIdRequest) { + console.log('TransformationClientService', 'FindOne'); + + const findOneTransformationResponse = await new Promise( + (resolve, reject) => { + this.transformationService.findOne(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }, + ) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return objectCamelToSnake(findOneTransformationResponse); + } + + async update(updateTransformationDTO) { + console.log('TransformationClientService', 'Update'); + + const updateTransformationResponse = await new Promise( + (resolve, reject) => { + this.transformationService + .update(objectSnakeToCamel(updateTransformationDTO)) + .subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }, + ) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return objectCamelToSnake(updateTransformationResponse); + } + + async remove(data: IIdRequest) { + console.log('TransformationClientService', 'Remove'); + + const removeTransformationResponse = await new Promise( + (resolve, reject) => { + this.transformationService.remove(objectSnakeToCamel(data)).subscribe({ + next(x) { + resolve(x); + }, + error(err) { + console.log('Observable Error'); + reject(err); + }, + complete() { + console.log('done'); + }, + }); + }, + ) + .then((res) => res) + .catch((err) => { + throw new Error(err); + }); + + return objectCamelToSnake(removeTransformationResponse); + } +} diff --git a/src/clients/transformations/interfaces.d.ts b/src/clients/transformations/interfaces.d.ts new file mode 100644 index 0000000..253450d --- /dev/null +++ b/src/clients/transformations/interfaces.d.ts @@ -0,0 +1,37 @@ +export interface ICreateTransformationsRequest { + transformations: Transformation[]; + info: Info; +} +interface Param { + base_column: string; + column_name: string; + n_digits: number; + start_index: number; + randbelow: number; + const: string; +} + +export interface Info { + customer_id: string; + user_id: string; +} + +interface Transformation { + created_at: string; + id: string; + client_id: string; + type: string; + params: Param[]; + input_source: string; + table: string; +} + +export interface IIdRequest { + id: string; + info: Info; +} + +export interface IUpdateTransformationRequest { + transformation: Transformation; + info: Info; +} diff --git a/src/enrichment/config/grpc-client.ts b/src/enrichment/config/grpc-client.ts deleted file mode 100644 index 7dcf5e1..0000000 --- a/src/enrichment/config/grpc-client.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { join } from 'path'; -import { ClientOptions, Transport } from '@nestjs/microservices'; - -export const GrpcClientConfiguration: ClientOptions = { - transport: Transport.GRPC, - options: { - //url: `${process.env.USERS_SVC_URL}:${process.env.USERS_SVC_PORT}`, - url: `127.0.0.1:50053`, - package: 'enrichment', - protoPath: join(__dirname, '..', 'proto', 'enrichment.proto'), - loader: { - enums: String, - objects: true, - arrays: true, - }, - }, -}; diff --git a/src/enrichment/dto/create-enrichment.dto.ts b/src/enrichment/dto/create-enrichment.dto.ts deleted file mode 100644 index 6ec0db3..0000000 --- a/src/enrichment/dto/create-enrichment.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class CreateEnrichmentDto { - - type:string; - - columns:string[] -} diff --git a/src/enrichment/dto/update-enrichment.dto.ts b/src/enrichment/dto/update-enrichment.dto.ts deleted file mode 100644 index 570394a..0000000 --- a/src/enrichment/dto/update-enrichment.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { PartialType } from '@nestjs/mapped-types'; -import { CreateEnrichmentDto } from './create-enrichment.dto'; - -export class UpdateEnrichmentDto extends PartialType(CreateEnrichmentDto) { - -} diff --git a/src/enrichment/enrichment.controller.spec.ts b/src/enrichment/enrichment.controller.spec.ts deleted file mode 100644 index 4b81e7f..0000000 --- a/src/enrichment/enrichment.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { EnrichmentController } from './enrichment.controller'; -import { EnrichmentsService } from './enrichment.service'; - -describe('EnrichmentController', () => { - let controller: EnrichmentController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [EnrichmentController], - providers: [EnrichmentsService], - }).compile(); - - controller = module.get(EnrichmentController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/enrichment/enrichment.controller.ts b/src/enrichment/enrichment.controller.ts deleted file mode 100644 index b39f929..0000000 --- a/src/enrichment/enrichment.controller.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - Controller, - Delete, - Get, - OnModuleInit, - Param, - Post, - Put, -} from '@nestjs/common'; -import { Client, ClientGrpc, Payload } from '@nestjs/microservices'; -import { EnrichmentsService } from './enrichment.service'; -import { CreateEnrichmentDto } from './dto/create-enrichment.dto'; -import { UpdateEnrichmentDto } from './dto/update-enrichment.dto'; -import { ApiTags } from '@nestjs/swagger'; -import { GrpcClientConfiguration } from './config/grpc-client'; - -@ApiTags('enrichments') -@Controller('enrichment') -export class EnrichmentController implements OnModuleInit { - - @Client(GrpcClientConfiguration) - private enrichmentServiceClient: ClientGrpc; - - private enrichmentService: EnrichmentsService; - - onModuleInit() { - this.enrichmentService = - this.enrichmentServiceClient.getService( - 'EnrichmentService', - ); - } - - @Post() - create(@Payload() createEnrichmentDto: CreateEnrichmentDto) { - return this.enrichmentService.create(createEnrichmentDto); - } - - @Get() - list() { - return this.enrichmentService.list(); - } - - @Get(':id') - show(@Param() id: string) { - return this.enrichmentService.show(id); - } - - @Put(':id') - update( - @Param() id: string, - @Payload() updateEnrichmentDto: UpdateEnrichmentDto, - ) { - return this.enrichmentService.update(id, updateEnrichmentDto); - } - - @Delete(':id') - remove(@Param() id: string) { - return this.enrichmentService.remove(id); - } -} diff --git a/src/enrichment/enrichment.module.ts b/src/enrichment/enrichment.module.ts deleted file mode 100644 index ceafbbf..0000000 --- a/src/enrichment/enrichment.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { EnrichmentsService } from './enrichment.service'; -import { EnrichmentController } from './enrichment.controller'; - -@Module({ - controllers: [EnrichmentController], - providers: [EnrichmentsService], -}) -export class EnrichmentModule {} diff --git a/src/enrichment/enrichment.service.spec.ts b/src/enrichment/enrichment.service.spec.ts deleted file mode 100644 index 3cdb40b..0000000 --- a/src/enrichment/enrichment.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { EnrichmentsService } from './enrichment.service'; - -describe('EnrichmentService', () => { - let service: EnrichmentsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [EnrichmentsService], - }).compile(); - - service = module.get(EnrichmentsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/enrichment/enrichment.service.ts b/src/enrichment/enrichment.service.ts deleted file mode 100644 index aafcceb..0000000 --- a/src/enrichment/enrichment.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateEnrichmentDto } from './dto/create-enrichment.dto'; -import { UpdateEnrichmentDto } from './dto/update-enrichment.dto'; - -@Injectable() -export class EnrichmentsService { - create(createEnrichmentDto: CreateEnrichmentDto) { - return 'This action adds a new enrichment'; - } - - list() { - return `This action returns all enrichment`; - } - - show(id: string) { - return `This action returns a #${id} enrichment`; - } - - update(id: string, updateEnrichmentDto: UpdateEnrichmentDto) { - return `This action updates a #${id} enrichment`; - } - - remove(id: string) { - return `This action removes a #${id} enrichment`; - } -} diff --git a/src/enrichment/entities/enrichment.entity.ts b/src/enrichment/entities/enrichment.entity.ts deleted file mode 100644 index fecf084..0000000 --- a/src/enrichment/entities/enrichment.entity.ts +++ /dev/null @@ -1,8 +0,0 @@ -export class Enrichment { - - id:string; - - type:string; - - columns:string[] -} diff --git a/src/enrichment/proto/enrichment.proto b/src/enrichment/proto/enrichment.proto deleted file mode 100644 index 85baa06..0000000 --- a/src/enrichment/proto/enrichment.proto +++ /dev/null @@ -1,43 +0,0 @@ -syntax = "proto3"; - -package enrichment; - - -import "google/protobuf/timestamp.proto"; - - - -service EnrichmentService { - rpc Create(CreateEnrichmentRequest) returns (Enrichment) {} - rpc Show(IdRequest) returns (Enrichment) {} - rpc List(Empty) returns (ListResponse){} - rpc Update(UpdateEnrichmentRequest) returns (Enrichment){} - rpc Remove(IdRequest) returns (Empty){} -} - -message Empty {} - -message IdRequest{ - string id = 1; -} - -message UpdateEnrichmentRequest{ - string id = 1; - string type = 2; - repeated string columns = 3; -} - -message Enrichment { - string id = 1; - string type = 2; - repeated string columns = 3; -} - -message CreateEnrichmentRequest { - string type = 1; - repeated string columns = 2; -} - -message ListResponse { - repeated Enrichment enrichments = 2; -} diff --git a/src/error/http-exception.filter.spec.ts b/src/error/http-exception.filter.spec.ts new file mode 100644 index 0000000..8f016dd --- /dev/null +++ b/src/error/http-exception.filter.spec.ts @@ -0,0 +1,7 @@ +import { HttpExceptionFilter } from './http-exception.filter'; + +describe('HttpExceptionFilter', () => { + it('should be defined', () => { + expect(new HttpExceptionFilter()).toBeDefined(); + }); +}); diff --git a/src/error/http-exception.filter.ts b/src/error/http-exception.filter.ts new file mode 100644 index 0000000..e5cfa26 --- /dev/null +++ b/src/error/http-exception.filter.ts @@ -0,0 +1,24 @@ +import { + ExceptionFilter, + Catch, + ArgumentsHost, + HttpException, +} from '@nestjs/common'; +import { Request, Response } from 'express'; + +@Catch(HttpException) +export class HttpExceptionFilter implements ExceptionFilter { + catch(exception: HttpException, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + const request = ctx.getRequest(); + const status = exception.getStatus(); + + response.status(status).json({ + status_code: status, + timestamp: new Date().toISOString(), + path: request.url, + method: request.method, + }); + } +} diff --git a/src/health/entities/health.entity.ts b/src/health/entities/health.entity.ts deleted file mode 100644 index d16a76c..0000000 --- a/src/health/entities/health.entity.ts +++ /dev/null @@ -1 +0,0 @@ -export class Health {} diff --git a/src/health/health.module.ts b/src/health/health.module.ts deleted file mode 100644 index ab943a5..0000000 --- a/src/health/health.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { HealthService } from './health.service'; -import { HealthController } from './health.controller'; - -@Module({ - controllers: [HealthController], - providers: [HealthService], -}) -export class HealthModule {} diff --git a/src/inputs/config/grpc-client.ts b/src/inputs/config/grpc-client.ts deleted file mode 100644 index d81788a..0000000 --- a/src/inputs/config/grpc-client.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { join } from 'path'; -import { ClientOptions, Transport } from '@nestjs/microservices'; - -export const GrpcClientConfiguration: ClientOptions = { - transport: Transport.GRPC, - options: { - //url: `${process.env.USERS_SVC_URL}:${process.env.USERS_SVC_PORT}`, - url: `127.0.0.1:50052`, - package: 'input', - protoPath: join(__dirname, '..', 'proto', 'input.proto'), - loader: { - enums: String, - objects: true, - arrays: true, - }, - }, -}; diff --git a/src/inputs/dto/create-input-grpc-client.dto.ts b/src/inputs/dto/create-input-grpc-client.dto.ts deleted file mode 100644 index c2c1acd..0000000 --- a/src/inputs/dto/create-input-grpc-client.dto.ts +++ /dev/null @@ -1,13 +0,0 @@ - -export class CreateInputGrpcClientDto { - - cron:string; - - name:string; - - plugin:string; - - values:string; - - operation:string; -} diff --git a/src/inputs/dto/test-connection-grpc-client.dto.ts b/src/inputs/dto/test-connection-grpc-client.dto.ts deleted file mode 100644 index 48275c4..0000000 --- a/src/inputs/dto/test-connection-grpc-client.dto.ts +++ /dev/null @@ -1,5 +0,0 @@ -export class TestConnectionDTO{ - - values:string; - plugin:string; -} diff --git a/src/inputs/dto/update-input-grpc-client.dto.ts b/src/inputs/dto/update-input-grpc-client.dto.ts deleted file mode 100644 index 67ac954..0000000 --- a/src/inputs/dto/update-input-grpc-client.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { PartialType } from '@nestjs/mapped-types'; -import { CreateInputGrpcClientDto } from './create-input-grpc-client.dto'; - -export class UpdateInputGrpcClientDto extends PartialType( - CreateInputGrpcClientDto, -) {} diff --git a/src/inputs/entities/input-grcp-client.entity.ts b/src/inputs/entities/input-grcp-client.entity.ts deleted file mode 100644 index 4e4fed6..0000000 --- a/src/inputs/entities/input-grcp-client.entity.ts +++ /dev/null @@ -1,14 +0,0 @@ -export class InputGrpcClient { - - id:string; - - cron:string; - - name:string; - - plugin:string; - - values:string; - - operation:string; -} diff --git a/src/inputs/input-grpc-client.controller.ts b/src/inputs/input-grpc-client.controller.ts deleted file mode 100644 index 22e02bc..0000000 --- a/src/inputs/input-grpc-client.controller.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { - Get, - Post, - Controller, - Delete, - OnModuleInit, - Put, - Param -} from '@nestjs/common'; -import { Client, ClientGrpc, Payload } from '@nestjs/microservices'; -import { CreateInputGrpcClientDto } from './dto/create-input-grpc-client.dto'; -import { UpdateInputGrpcClientDto } from './dto/update-input-grpc-client.dto'; -import { InputGrpcClientService } from './input-grpc-client.service'; -import { GrpcClientConfiguration } from './config/grpc-client'; -import { TestConnectionDTO } from './dto/test-connection-grpc-client.dto'; -import { ApiTags } from '@nestjs/swagger'; - -@Controller('grpc/input') -export class InputGrpcClientController implements OnModuleInit { - @Client(GrpcClientConfiguration) - private inputServiceClient: ClientGrpc; - - private inputService: InputGrpcClientService; - - onModuleInit() { - this.inputService = - this.inputServiceClient.getService('InputService'); - } - - @Post() - async create(@Payload() createInputDto: CreateInputGrpcClientDto) { - return this.inputService.create(createInputDto); - } - - @Get() - list() { - return this.inputService.list(); - } - - @Get(':id') - show(@Param() id: string) { - return this.inputService.show(id); - } - - @Put(':id') - update( - @Payload() updateInputDto: UpdateInputGrpcClientDto, - @Param() id: string, - ) { - return this.inputService.update(id, updateInputDto); - } - - @Delete(':id') - remove(@Param() id: string) { - return this.inputService.remove(id); - } - - @Get('/test-connection') - testConnection(@Payload() testConnectionDTO:TestConnectionDTO){ - - return this.inputService.testConnection(testConnectionDTO) - } -} diff --git a/src/inputs/input-grpc-client.module.ts b/src/inputs/input-grpc-client.module.ts deleted file mode 100644 index 53dd6ed..0000000 --- a/src/inputs/input-grpc-client.module.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Module } from '@nestjs/common'; -import { InputGrpcClientService } from './input-grpc-client.service'; -import { InputGrpcClientController } from './input-grpc-client.controller'; -// import { InputRestClientController } from './input-rest-client.controller'; - -@Module({ - controllers: [ - InputGrpcClientController, - // InputRestClientController - ], - providers: [InputGrpcClientService], -}) -export class InputGrpcClientModule {} diff --git a/src/inputs/input-grpc-client.service.spec.ts b/src/inputs/input-grpc-client.service.spec.ts deleted file mode 100644 index 65f90aa..0000000 --- a/src/inputs/input-grpc-client.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { InputGrpcClientService } from './input-grpc-client.service'; - -describe('InputGrcpClientService', () => { - let service: InputGrpcClientService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [InputGrpcClientService], - }).compile(); - - service = module.get(InputGrpcClientService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/inputs/input-grpc-client.service.ts b/src/inputs/input-grpc-client.service.ts deleted file mode 100644 index db99157..0000000 --- a/src/inputs/input-grpc-client.service.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateInputGrpcClientDto } from './dto/create-input-grpc-client.dto'; -import { TestConnectionDTO } from './dto/test-connection-grpc-client.dto'; -import { UpdateInputGrpcClientDto } from './dto/update-input-grpc-client.dto'; - -@Injectable() -export class InputGrpcClientService { - create(createInputGrcpClientDto: CreateInputGrpcClientDto) { - return 'This action adds a new InputGrcpClient'; - } - - list() { - return `This action returns all InputGrcpClient`; - } - - show(id: string) { - return `This action returns a #${id} InputGrcpClient`; - } - - update(id: string, updateInputGrcpClientDto: UpdateInputGrpcClientDto) { - return `This action updates a #${id} InputGrcpClient`; - } - - remove(id: string) { - return `This action removes a #${id} InputGrcpClient`; - } - - testConnection(testConnectionDTO:TestConnectionDTO){ - return `This action tests a given connection`; - } -} diff --git a/src/inputs/input-rest-client.controller.ts b/src/inputs/input-rest-client.controller.ts deleted file mode 100644 index 99e379a..0000000 --- a/src/inputs/input-rest-client.controller.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Body, Controller, Delete, Get, Param, Post, Put, Redirect } from '@nestjs/common'; -import { Payload } from '@nestjs/microservices'; -import axios from 'axios'; -import { Console } from 'console'; -import { CreateInputGrpcClientDto } from './dto/create-input-grpc-client.dto'; -import { UpdateInputGrpcClientDto } from './dto/update-input-grpc-client.dto'; - -@Controller('input') -export class InputRestClientController { - - - @Get('/test-connection/') - async testConnection(){ - console.log(process.env.DEV_URL+`/test-connection`, "ON TEST CONNECTION ROUTE") - await axios.get(process.env.DEV_URL+`/test-connection`).then( (response) => { - return response - }) - } - - @Post() - async create(@Body() createInputDto: CreateInputGrpcClientDto){ - console.log(createInputDto) - console.log(process.env.DEV_URL+`/input`, "ON CREATE ROUTE") - - await axios.post(process.env.DEV_URL+'/input',createInputDto).then( (response) => { - return response - }) - } - - @Get() - async list(){ - console.log(process.env.DEV_URL+`/input`, "ON GET ROUTE") - await axios.get(process.env.DEV_URL+`/input`).then( (response) => { - return response - }) - } - - - @Get('/:id') - async show(@Param() id: string){ - console.log(process.env.DEV_URL+`/input/${id}`, "ON SHOW ROUTE") - await axios.get(process.env.DEV_URL+`/input/${id}`).then( (response) => { - return response - }) - } - - - @Put(':id') - async update( - @Payload() updateInputDto: UpdateInputGrpcClientDto, - @Param() id: string, - ){ - console.log(process.env.DEV_URL+`/input/${id}`, "ON UPDATE ROUTE") - await axios.put(process.env.DEV_URL+`input/${id}`,updateInputDto).then( (response) => { - return response - }) - } - - - @Delete(':id') - async delete(@Param() id: string){ - console.log(process.env.DEV_URL+`/input/${id}`, "ON DELETE ROUTE") - - await axios.delete(process.env.DEV_URL+`/input/${id}`).then( (response) => { - return response - }) - } - - - -} diff --git a/src/inputs/proto/input.proto b/src/inputs/proto/input.proto deleted file mode 100644 index 87cf829..0000000 --- a/src/inputs/proto/input.proto +++ /dev/null @@ -1,65 +0,0 @@ -syntax = "proto3"; - -package input; - - -import "google/protobuf/timestamp.proto"; - - - -service InputService { - rpc Create(CreateInputRequest) returns (Input) {} - rpc Show(IdRequest) returns (Input) {} - rpc List(Empty) returns (ListResponse){} - rpc Update(UpdateInputRequest) returns (Input){} - rpc Remove(IdRequest) returns (Empty){} - rpc TestConnection(TestConnectionRequest) returns (TestConnectionResponse){} -} - -message Empty {} - -message IdRequest{ - string id = 1; -} - -message UpdateInputRequest{ - string id = 1; - string cron = 2; - string name = 3; - string plugin = 4; - string values = 5; - string operation = 6; -} - -message Input { - string id = 1; - string cronFormated = 2; - string name = 3; - string plugin = 4; - string values = 5; - string operation = 6; -} - -message CreateInputRequest { - string cron = 1; - string name = 2; - string plugin = 3; - string values = 4; - string operation = 5; -} - -message ListResponse { - repeated Input inputs = 1; -} - -message TestConnectionRequest{ - string values = 1; - string plugin = 2; -} - -message TestConnectionResponse{ - - // nao sei como vai ser a resposta - bool respose = 1; - -} diff --git a/src/main.ts b/src/main.ts index a5e74f8..ba714fa 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,10 +3,16 @@ import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { writeFileSync } from 'fs'; import { AppModule } from './app.module'; -import { config } from 'dotenv'; -config(); + async function bootstrap() { - const app = await NestFactory.create(AppModule); + const app = await NestFactory.create(AppModule, { + cors: { + origin: '*', + methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', + preflightContinue: false, + optionsSuccessStatus: 204, + }, + }); const config = new DocumentBuilder() .setTitle('Maestro Grpc Documentation') diff --git a/src/middlewares/authentication.ts b/src/middlewares/authentication.ts index cdd1412..83abf9d 100644 --- a/src/middlewares/authentication.ts +++ b/src/middlewares/authentication.ts @@ -1,30 +1,123 @@ import { Request, Response, NextFunction } from 'express'; import axios from 'axios'; -import { NestMiddleware } from '@nestjs/common'; +import { + ForbiddenException, + InternalServerErrorException, + NestMiddleware, + UnauthorizedException, + UseFilters, +} from '@nestjs/common'; +import jwkToPem from 'jwk-to-pem'; +import { decode, verify } from 'jsonwebtoken'; +import { HttpExceptionFilter } from 'src/error/http-exception.filter'; -export class LoggerMiddleware implements NestMiddleware{ +@UseFilters(new HttpExceptionFilter()) +export class LoggerMiddleware implements NestMiddleware { + use = async (request: Request, response: Response, next: NextFunction) => { + const idToken = request.get('Dadosfera-User'); + const accessToken = request.get('Authorization'); + const privateKey = process.env.JWT_PRIVATE_KEY; + const requiredMethod = request.method.trim(); + const requiredRoute = request.route.path.split('/')[1].trim(); - use = async ( - request: Request, - response: Response, - next: NextFunction - ) => { + verify(idToken, privateKey, (err) => { + if (err) { + throw new UnauthorizedException(); + } + }); + const jwtDecoded: any = decode(idToken); + console.log(jwtDecoded); + const permissions = jwtDecoded.user.permissions; + const clienId = jwtDecoded.user.customerId; + const userId = jwtDecoded.user.id; - try { - const verify_response = await axios.post( - `${process.env.DEV_URL}/user/verify`, - { "token":request.get('Authorization')} - ).then(response =>{ - if(response.data.message == "Success"){ - next() - } - }) + await verifyToken(accessToken); + let havePermission = false; + permissions.forEach((permission) => { + permission = permission.split('/'); + const method = permission[0].trim(); + const route = permission[1].trim(); - } catch (error) { - response.status(401).send({ message: 'Authentication Failed!' }); - } + if (method === requiredMethod && route === requiredRoute) { + havePermission = true; + } + }); + + if (havePermission) { + request.body.info = { + customer_id: clienId, + user_id: userId, }; + next(); + } else { + throw new ForbiddenException(); + } + }; } + +let pems: { [key: string]: Record }[]; + +const setUp = async (region: string, id: string) => { + const URL = `https://cognito-idp.${region}.amazonaws.com/${id}/.well-known/jwks.json`; + + try { + const response = await axios.get(URL); + + if (response.status !== 200) { + throw new InternalServerErrorException(); + } + const data = await response.data; + const { keys } = data; + + pems = keys.map((key: any) => { + const modulus = key.n; + const exponent = key.e; + const keyType = key.kty; + const jwk = { kty: keyType, n: modulus, e: exponent }; + const pem = jwkToPem(jwk); + const keyId = key.kid; + + return { [keyId]: pem }; + }); + } catch (error) { + // console.log(error); + // console.log('Error! Unable to download JWKs'); + } +}; + +const verifyToken = async (accessToken: string) => { + const awsRegion = process.env.AWS_REGION; + const awsPoolId = process.env.AWS_IDENTITY_POOL_ID; + + try { + await setUp(awsRegion, awsPoolId); + if (accessToken) { + const user: any = decode(accessToken, { complete: true }); + + if (user === null) { + throw new UnauthorizedException(); + } + + const { kid } = user.header; + const pem = pems.filter((item: any) => item[kid]); + const pemValue: any = pem[0][kid]; + + if (!pem) { + throw new UnauthorizedException(); + } + + verify(accessToken, pemValue, (err: any) => { + if (err) { + throw new UnauthorizedException(); + } + + return; + }); + } + } catch (error) { + throw new UnauthorizedException(); + } +}; diff --git a/src/modules/auth/auth.controller.ts b/src/modules/auth/auth.controller.ts new file mode 100644 index 0000000..c58f248 --- /dev/null +++ b/src/modules/auth/auth.controller.ts @@ -0,0 +1,25 @@ +import { Body, Controller, Post } from '@nestjs/common'; + +import { AuthClientService } from 'src/clients/auth/client.service'; + +interface ISignIn { + username: string; + password: string; +} + +@Controller('auth') +export class AuthController { + constructor(private authClient: AuthClientService) {} + + @Post() + async signIn(@Body() { username, password }: ISignIn) { + console.log(`/auth`, 'SignIn'); + + const tokens = await this.authClient + .signIn({ username, password }) + .then((result) => result) + .catch((err) => console.log(err)); + + return tokens; + } +} diff --git a/src/modules/auth/auth.service.spec.ts b/src/modules/auth/auth.service.spec.ts new file mode 100644 index 0000000..89e1958 --- /dev/null +++ b/src/modules/auth/auth.service.spec.ts @@ -0,0 +1,5 @@ +describe('PipelinesGrpcServerService', () => { + it('should be defined', () => { + expect(2 + 2).toBe(4); + }); +}); diff --git a/src/health/health.controller.ts b/src/modules/health/health.controller.ts similarity index 88% rename from src/health/health.controller.ts rename to src/modules/health/health.controller.ts index 137c8d3..86445fb 100644 --- a/src/health/health.controller.ts +++ b/src/modules/health/health.controller.ts @@ -7,6 +7,7 @@ export class HealthController { @Get() check() { + console.log(`/health`, 'check'); return this.healthService.check(); } } diff --git a/src/modules/health/health.service.spec.ts b/src/modules/health/health.service.spec.ts new file mode 100644 index 0000000..89e1958 --- /dev/null +++ b/src/modules/health/health.service.spec.ts @@ -0,0 +1,5 @@ +describe('PipelinesGrpcServerService', () => { + it('should be defined', () => { + expect(2 + 2).toBe(4); + }); +}); diff --git a/src/health/health.service.ts b/src/modules/health/health.service.ts similarity index 83% rename from src/health/health.service.ts rename to src/modules/health/health.service.ts index 62b5601..8754715 100644 --- a/src/health/health.service.ts +++ b/src/modules/health/health.service.ts @@ -3,6 +3,7 @@ import { Injectable } from '@nestjs/common'; @Injectable() export class HealthService { check() { + console.log('HEALTH'); return { message: 'Ok' }; } } diff --git a/src/modules/inputs/inputs.controller.ts b/src/modules/inputs/inputs.controller.ts new file mode 100644 index 0000000..e626d01 --- /dev/null +++ b/src/modules/inputs/inputs.controller.ts @@ -0,0 +1,89 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + Post, + Put, +} from '@nestjs/common'; +import { InputsService } from './inputs.service'; +import { InputsClientService } from 'src/clients/inputs/client.service'; +import { + ICreateInputRequest, + UpdateInputRequest, +} from 'src/clients/inputs/interfaces'; + +@Controller('inputs') +export class InputsController { + constructor(private inputsClientService: InputsClientService) {} + + @Post('/test-connection') + async testConnection(@Body() data) { + console.log(`/test-connection`, 'ON TEST CONNECTION ROUTE'); + + const inputService = new InputsService(this.inputsClientService); + const response = await inputService.testConnection(data); + + return response; + } + + @Post() + async create(@Body() createInputDto: ICreateInputRequest) { + console.log(`/input`, 'ON CREATE ROUTE'); + + const inputService = new InputsService(this.inputsClientService); + const response = await inputService.create(createInputDto); + + return response; + } + + @Get() + async findAll(@Body() body) { + console.log(`/input`, 'ON FIND ALL ROUTE'); + + const inputService = new InputsService(this.inputsClientService); + + const response = await inputService.findAll(body); + + return response; + } + + @Get('/:id') + async findOne(@Body() body, @Param() params) { + const { id } = params; + console.log(`/input/${id}`, 'ON FIND ONE ROUTE'); + const inputService = new InputsService(this.inputsClientService); + + const response = await inputService.findOne({ id, ...body }); + + return response; + } + + @Put(':id') + async update(@Body() updateInputDto: UpdateInputRequest, @Param() params) { + const { id } = params; + const { info } = updateInputDto; + delete updateInputDto.info; + + console.log(`/input/${id}`, 'ON UPDATE ROUTE'); + const inputService = new InputsService(this.inputsClientService); + + const response = await inputService.update(id, updateInputDto, info); + + return response; + } + + @Delete(':id') + async delete(@Body() data, @Param() params) { + const { id } = params; + + console.log(`/input/${id}`, 'ON DELETE ROUTE'); + + const inputService = new InputsService(this.inputsClientService); + + const response = await inputService.remove({ id, ...data }); + + return response; + } +} diff --git a/src/modules/inputs/inputs.service.spec.ts b/src/modules/inputs/inputs.service.spec.ts new file mode 100644 index 0000000..89e1958 --- /dev/null +++ b/src/modules/inputs/inputs.service.spec.ts @@ -0,0 +1,5 @@ +describe('PipelinesGrpcServerService', () => { + it('should be defined', () => { + expect(2 + 2).toBe(4); + }); +}); diff --git a/src/modules/inputs/inputs.service.ts b/src/modules/inputs/inputs.service.ts new file mode 100644 index 0000000..d090b52 --- /dev/null +++ b/src/modules/inputs/inputs.service.ts @@ -0,0 +1,77 @@ +import { Body, HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { InputsClientService } from 'src/clients/inputs/client.service'; +import { + ICreateInputRequest, + IIdRequest, + Info, +} from 'src/clients/inputs/interfaces'; + +@Injectable() +export class InputsService { + constructor(private inputClient: InputsClientService) {} + + async create(@Body() data: ICreateInputRequest) { + try { + const createInputResponse = await this.inputClient.create(data); + + return createInputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async findAll(body) { + try { + const findAllInputResponse = await this.inputClient.findAll(body); + + return findAllInputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async findOne(idRequest: IIdRequest) { + try { + const findOneInputResponse = await this.inputClient.findOne(idRequest); + return findOneInputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async update(id: string, data, info: Info) { + try { + const updateInputResponse = await this.inputClient.update({ + id, + info, + ...data, + }); + + return updateInputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async remove(idRequest: IIdRequest) { + try { + const removeInputResponse = await this.inputClient.remove(idRequest); + + return removeInputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async testConnection(data) { + try { + const testConnectionInputResponse = await this.inputClient.testConnection( + data, + ); + + return testConnectionInputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } +} diff --git a/src/modules/outputs/outputs.controllers.ts b/src/modules/outputs/outputs.controllers.ts new file mode 100644 index 0000000..e9f73d3 --- /dev/null +++ b/src/modules/outputs/outputs.controllers.ts @@ -0,0 +1,73 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + Post, + Put, +} from '@nestjs/common'; +import { Payload } from '@nestjs/microservices'; +import { OutputsClientService } from 'src/clients/outputs/client.service'; +import { OutputsService } from './outputs.service'; + +@Controller('outputs') +export class OutputsController { + constructor(private outputsClientService: OutputsClientService) {} + + @Post() + async create(@Body() createOutputDto) { + console.log(process.env.DEV_URL + `/output`, 'ON CREATE ROUTE'); + + const outputService = new OutputsService(this.outputsClientService); + const response = await outputService.create(createOutputDto); + + return response; + } + + @Get() + async findAll(@Body() data) { + console.log(process.env.DEV_URL + `/output`, 'ON Find All ROUTE'); + + const outputService = new OutputsService(this.outputsClientService); + const response = await outputService.findAll(data); + + return response; + } + + @Get('/:id') + async findOne(@Body() data, @Param() params) { + const { id } = params; + console.log(process.env.DEV_URL + `/output/${id}`, 'ON Find One ROUTE'); + + const outputService = new OutputsService(this.outputsClientService); + const response = await outputService.findOne({ id, ...data }); + + return response; + } + + @Put(':id') + async update(@Payload() updateOutputDto, @Param() params) { + const { id } = params; + const { info } = updateOutputDto; + delete updateOutputDto.info; + + console.log(process.env.DEV_URL + `/output/${id}`, 'ON UPDATE ROUTE'); + + const outputService = new OutputsService(this.outputsClientService); + const response = await outputService.update(id, updateOutputDto, info); + + return response; + } + + @Delete(':id') + async delete(@Body() data, @Param() params) { + const { id } = params; + console.log(process.env.DEV_URL + `/output/${id}`, 'ON DELETE ROUTE'); + + const outputService = new OutputsService(this.outputsClientService); + const response = await outputService.remove({ id, ...data }); + + return response; + } +} diff --git a/src/modules/outputs/outputs.service.spec.ts b/src/modules/outputs/outputs.service.spec.ts new file mode 100644 index 0000000..89e1958 --- /dev/null +++ b/src/modules/outputs/outputs.service.spec.ts @@ -0,0 +1,5 @@ +describe('PipelinesGrpcServerService', () => { + it('should be defined', () => { + expect(2 + 2).toBe(4); + }); +}); diff --git a/src/modules/outputs/outputs.service.ts b/src/modules/outputs/outputs.service.ts new file mode 100644 index 0000000..25a521d --- /dev/null +++ b/src/modules/outputs/outputs.service.ts @@ -0,0 +1,63 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { IIdRequest, Info } from 'src/clients/outputs/interfaces'; +import { OutputsClientService } from 'src/clients/outputs/client.service'; + +@Injectable() +export class OutputsService { + constructor(private outputClient: OutputsClientService) {} + + async create(createOutputDto) { + try { + const createOutputResponse = await this.outputClient.create( + createOutputDto, + ); + + return createOutputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async findOne(data: IIdRequest) { + try { + const findOneOutputResponse = await this.outputClient.findOne(data); + return findOneOutputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async findAll(data) { + try { + const findAllOutputResponse = await this.outputClient.findAll(data); + + return findAllOutputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async update(id: string, data, info: Info) { + try { + const updateOutputResponse = await this.outputClient.update({ + id, + info, + ...data, + }); + + return updateOutputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async remove(data: IIdRequest) { + try { + const removeOutputResponse = await this.outputClient.remove(data); + + return removeOutputResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } +} diff --git a/src/modules/pipelines/pipelines.controller.ts b/src/modules/pipelines/pipelines.controller.ts new file mode 100644 index 0000000..5460273 --- /dev/null +++ b/src/modules/pipelines/pipelines.controller.ts @@ -0,0 +1,100 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + Post, + Put, +} from '@nestjs/common'; +import { PipelinesClientService } from 'src/clients/pipelines/client.service'; +import { PipelinesService } from './pipelines.service'; + +@Controller('pipelines') +export class PipelinesController { + constructor(private pipelinesClientService: PipelinesClientService) {} + + @Get(':id/status') + async getPipelineStatus(@Param() params) { + const { id } = params; + console.log( + process.env.DEV_URL + `/pipeline/${id}`, + 'ON GET PIPELINE STATUS ROUTE', + ); + + const pipelineService = new PipelinesService(this.pipelinesClientService); + const response = await pipelineService.getPipelineStatus(id); + + return response; + } + + @Get(':id/:details') + async getPipelineLogs(@Param() params) { + const { id, details } = params; + console.log( + process.env.DEV_URL + `/pipeline/${id}`, + 'ON GET PIPELINE LOGS ROUTE', + ); + + const pipelineService = new PipelinesService(this.pipelinesClientService); + const response = await pipelineService.getPipelineLogsMessages(id, details); + + return response; + } + + @Post() + async create(@Body() createPipelineDto) { + console.log(process.env.DEV_URL + `/pipelines`, 'ON CREATE ROUTE'); + + const pipelineService = new PipelinesService(this.pipelinesClientService); + const response = await pipelineService.create(createPipelineDto); + + return response; + } + + @Get() + async findAll(@Body() data) { + console.log(process.env.DEV_URL + `/pipeline`, 'ON Find All ROUTE'); + + const pipelineService = new PipelinesService(this.pipelinesClientService); + const response = await pipelineService.findAll(data); + + return response; + } + + @Get('/:id') + async findOne(@Body() data, @Param() params) { + const { id } = params; + console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON Find One ROUTE'); + + const pipelineService = new PipelinesService(this.pipelinesClientService); + const response = await pipelineService.findOne({ id, ...data }); + + return response; + } + + @Put(':id') + async update(@Body() updatePipelineDto, @Param() params) { + const { id } = params; + const { info } = updatePipelineDto; + delete updatePipelineDto.info; + + console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON UPDATE ROUTE'); + + const pipelineService = new PipelinesService(this.pipelinesClientService); + const response = await pipelineService.update(id, updatePipelineDto, info); + + return response; + } + + @Delete(':id') + async delete(@Body() data, @Param() params) { + const { id } = params; + console.log(process.env.DEV_URL + `/pipeline/${id}`, 'ON DELETE ROUTE'); + + const pipelineService = new PipelinesService(this.pipelinesClientService); + const response = await pipelineService.remove({ id, ...data }); + + return response; + } +} diff --git a/src/modules/pipelines/pipelines.service.spec.ts b/src/modules/pipelines/pipelines.service.spec.ts new file mode 100644 index 0000000..89e1958 --- /dev/null +++ b/src/modules/pipelines/pipelines.service.spec.ts @@ -0,0 +1,5 @@ +describe('PipelinesGrpcServerService', () => { + it('should be defined', () => { + expect(2 + 2).toBe(4); + }); +}); diff --git a/src/modules/pipelines/pipelines.service.ts b/src/modules/pipelines/pipelines.service.ts new file mode 100644 index 0000000..86a8a76 --- /dev/null +++ b/src/modules/pipelines/pipelines.service.ts @@ -0,0 +1,87 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { PipelinesClientService } from 'src/clients/pipelines/client.service'; +import { IIdRequest, Info } from 'src/clients/pipelines/interfaces'; +import { objectCamelToSnake } from 'src/utils/CaseConverter'; + +@Injectable() +export class PipelinesService { + constructor(private pipelineClient: PipelinesClientService) {} + + async create(createPipelineDto) { + try { + const createPipelineResponse = await this.pipelineClient.create( + createPipelineDto, + ); + + return objectCamelToSnake(createPipelineResponse); + } catch (err) { + console.log(err); + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async findOne(data: IIdRequest) { + try { + const findOnePipelineResponse = await this.pipelineClient.findOne(data); + return objectCamelToSnake(findOnePipelineResponse); + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async findAll(data) { + try { + const findAllPipelineResponse = await this.pipelineClient.findAll(data); + + return objectCamelToSnake(findAllPipelineResponse); + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async update(id: string, data, info: Info) { + try { + const updatePipelineResponse = await this.pipelineClient.update({ + id, + info, + ...data, + }); + + return objectCamelToSnake(updatePipelineResponse); + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async remove(data: IIdRequest) { + try { + const removePipelineResponse = await this.pipelineClient.remove(data); + + return removePipelineResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async getPipelineLogsMessages(id: string, details: string) { + try { + const pipelineLogsResponse = + await this.pipelineClient.getPipelineLogsMessages({ id, details }); + + return objectCamelToSnake(pipelineLogsResponse); + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async getPipelineStatus(id: string) { + try { + const pipelineStatusResponse = + await this.pipelineClient.getPipelineStatus({ id }); + + return objectCamelToSnake(pipelineStatusResponse); + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } +} diff --git a/src/modules/transformations/transformations.controller.ts b/src/modules/transformations/transformations.controller.ts new file mode 100644 index 0000000..3234dfc --- /dev/null +++ b/src/modules/transformations/transformations.controller.ts @@ -0,0 +1,97 @@ +import { + Body, + Controller, + Delete, + Get, + Param, + Post, + Put, +} from '@nestjs/common'; +import { Payload } from '@nestjs/microservices'; +import { TransformationsClientService } from 'src/clients/transformations/client.service'; +import { IIdRequest } from 'src/clients/transformations/interfaces'; +import { TransformationsService } from './transformations.service'; + +@Controller('transformations') +export class TransformationsController { + constructor( + private transformationsClientService: TransformationsClientService, + ) {} + + @Post() + async create(@Body() createTransformationDto) { + console.log(process.env.DEV_URL + `/transformation`, 'ON CREATE ROUTE'); + + const transformationService = new TransformationsService( + this.transformationsClientService, + ); + const response = await transformationService.create( + createTransformationDto, + ); + + return response; + } + + @Get() + async findAll(@Body() data: IIdRequest) { + console.log(process.env.DEV_URL + `/transformation`, 'ON Find All ROUTE'); + + const transformationService = new TransformationsService( + this.transformationsClientService, + ); + const response = await transformationService.findAll(data); + + return response; + } + + @Get('/:id') + async findOne(@Body() data, @Param() params) { + const { id } = params; + console.log( + process.env.DEV_URL + `/transformation/${id}`, + 'ON Find One ROUTE', + ); + + const transformationService = new TransformationsService( + this.transformationsClientService, + ); + const response = await transformationService.findOne({ id, ...data }); + + return response; + } + + @Put(':id') + async update(@Payload() updateTransformationDto, @Param() params) { + const { id } = params; + console.log( + process.env.DEV_URL + `/transformation/${id}`, + 'ON UPDATE ROUTE', + ); + + const transformationService = new TransformationsService( + this.transformationsClientService, + ); + const response = await transformationService.update( + id, + updateTransformationDto, + ); + + return response; + } + + @Delete(':id') + async delete(@Body() data, @Param() params) { + const { id } = params; + console.log( + process.env.DEV_URL + `/transformation/${id}`, + 'ON DELETE ROUTE', + ); + + const transformationService = new TransformationsService( + this.transformationsClientService, + ); + const response = await transformationService.remove({ id, ...data }); + + return response; + } +} diff --git a/src/modules/transformations/transformations.service.spec.ts b/src/modules/transformations/transformations.service.spec.ts new file mode 100644 index 0000000..89e1958 --- /dev/null +++ b/src/modules/transformations/transformations.service.spec.ts @@ -0,0 +1,5 @@ +describe('PipelinesGrpcServerService', () => { + it('should be defined', () => { + expect(2 + 2).toBe(4); + }); +}); diff --git a/src/modules/transformations/transformations.service.ts b/src/modules/transformations/transformations.service.ts new file mode 100644 index 0000000..7cce933 --- /dev/null +++ b/src/modules/transformations/transformations.service.ts @@ -0,0 +1,74 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { TransformationsClientService } from 'src/clients/transformations/client.service'; +import { + ICreateTransformationsRequest, + IIdRequest, +} from 'src/clients/transformations/interfaces'; +import { trSnakeToCamel } from 'src/utils/CaseConverter'; + +@Injectable() +export class TransformationsService { + constructor(private transformationClient: TransformationsClientService) {} + + async create(createTransformationDto: ICreateTransformationsRequest) { + try { + const convertedDTO = createTransformationDto.transformations.map((tr) => { + return trSnakeToCamel(tr); + }); + + const createTransformationResponse = + await this.transformationClient.create({ + transformations: convertedDTO, + info: createTransformationDto.info, + }); + + return createTransformationResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async findOne(data: IIdRequest) { + try { + const findOneTransformationResponse = + await this.transformationClient.findOne(data); + return findOneTransformationResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async findAll(data) { + try { + const findAllTransformationResponse = + await this.transformationClient.findAll(data); + + return findAllTransformationResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async update(id: string, data) { + try { + data.transformation['id'] = id; + const updateTransformationResponse = + await this.transformationClient.update({ ...data }); + + return updateTransformationResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } + + async remove(data: IIdRequest) { + try { + const removeTransformationResponse = + await this.transformationClient.remove(data); + + return removeTransformationResponse; + } catch (err) { + throw new HttpException(err.message, HttpStatus.NOT_FOUND); + } + } +} diff --git a/src/outputs/config/grpc-client.ts b/src/outputs/config/grpc-client.ts deleted file mode 100644 index acbec96..0000000 --- a/src/outputs/config/grpc-client.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { join } from 'path'; -import { ClientOptions, Transport } from '@nestjs/microservices'; - -export const GrpcClientConfiguration: ClientOptions = { - transport: Transport.GRPC, - options: { - //url: `${process.env.USERS_SVC_URL}:${process.env.USERS_SVC_PORT}`, - url: `127.0.0.1:50053`, - package: 'output', - protoPath: join(__dirname, '..', 'proto', 'output.proto'), - loader: { - enums: String, - objects: true, - arrays: true, - }, - }, -}; diff --git a/src/outputs/dto/create-output.dto.ts b/src/outputs/dto/create-output.dto.ts deleted file mode 100644 index ac9bb0f..0000000 --- a/src/outputs/dto/create-output.dto.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class CreateOutputDto { - - name:string; - plugin:string; - values:string; - operation:string; -} diff --git a/src/outputs/dto/update-output.dto.ts b/src/outputs/dto/update-output.dto.ts deleted file mode 100644 index 62d92a5..0000000 --- a/src/outputs/dto/update-output.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { PartialType } from '@nestjs/mapped-types'; -import { CreateOutputDto } from './create-output.dto'; - -export class UpdateOutputDto extends PartialType(CreateOutputDto) { - -} diff --git a/src/outputs/entities/output.entity.ts b/src/outputs/entities/output.entity.ts deleted file mode 100644 index f3557e3..0000000 --- a/src/outputs/entities/output.entity.ts +++ /dev/null @@ -1,9 +0,0 @@ -export class Output { - - id:string; - name:string; - plugin:string; - values:string; - operation:string; - -} diff --git a/src/outputs/outputs.controller.spec.ts b/src/outputs/outputs.controller.spec.ts deleted file mode 100644 index 407ee10..0000000 --- a/src/outputs/outputs.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { OutputsController } from './outputs.controller'; -import { OutputsService } from './outputs.service'; - -describe('OutputsController', () => { - let controller: OutputsController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [OutputsController], - providers: [OutputsService], - }).compile(); - - controller = module.get(OutputsController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/outputs/outputs.controller.ts b/src/outputs/outputs.controller.ts deleted file mode 100644 index 6e23c70..0000000 --- a/src/outputs/outputs.controller.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - Controller, - Delete, - Get, - OnModuleInit, - Param, - Post, - Put, -} from '@nestjs/common'; -import { - Client, - ClientGrpc, - MessagePattern, - Payload, -} from '@nestjs/microservices'; -import { OutputsService } from './outputs.service'; -import { CreateOutputDto } from './dto/create-output.dto'; -import { UpdateOutputDto } from './dto/update-output.dto'; -import { ApiTags } from '@nestjs/swagger'; -import { GrpcClientConfiguration } from './config/grpc-client'; - -@Controller('output') -export class OutputsController implements OnModuleInit { - @Client(GrpcClientConfiguration) - private outputServiceClient: ClientGrpc; - - private outputService: OutputsService; - - onModuleInit() { - this.outputService = - this.outputServiceClient.getService('OutputService'); - } - @Post() - create(@Payload() createOutputDto: CreateOutputDto) { - return this.outputService.create(createOutputDto); - } - - @Get() - list() { - return this.outputService.list(); - } - - @Get(':id') - show(@Param() id: string) { - return this.outputService.show(id); - } - - @Put(':id') - update(@Param() id: string, @Payload() updateOutputDto: UpdateOutputDto) { - return this.outputService.update(id, updateOutputDto); - } - - @Delete(':id') - remove(@Param() id: string) { - return this.outputService.remove(id); - } -} diff --git a/src/outputs/outputs.module.ts b/src/outputs/outputs.module.ts deleted file mode 100644 index c907f54..0000000 --- a/src/outputs/outputs.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { OutputsService } from './outputs.service'; -import { OutputsController } from './outputs.controller'; - -@Module({ - controllers: [OutputsController], - providers: [OutputsService], -}) -export class OutputsModule {} diff --git a/src/outputs/outputs.service.spec.ts b/src/outputs/outputs.service.spec.ts deleted file mode 100644 index d0ce19e..0000000 --- a/src/outputs/outputs.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { OutputsService } from './outputs.service'; - -describe('OutputsService', () => { - let service: OutputsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [OutputsService], - }).compile(); - - service = module.get(OutputsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/outputs/outputs.service.ts b/src/outputs/outputs.service.ts deleted file mode 100644 index d39a029..0000000 --- a/src/outputs/outputs.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateOutputDto } from './dto/create-output.dto'; -import { UpdateOutputDto } from './dto/update-output.dto'; - -@Injectable() -export class OutputsService { - create(createOutputDto: CreateOutputDto) { - return 'This action adds a new output'; - } - - list() { - return `This action returns all outputs`; - } - - show(id: string) { - return `This action returns a #${id} output`; - } - - update(id: string, updateOutputDto: UpdateOutputDto) { - return `This action updates a #${id} output`; - } - - remove(id: string) { - return `This action removes a #${id} output`; - } -} diff --git a/src/outputs/proto/output.proto b/src/outputs/proto/output.proto deleted file mode 100644 index eadb489..0000000 --- a/src/outputs/proto/output.proto +++ /dev/null @@ -1,48 +0,0 @@ -syntax = "proto3"; - -package output; - -import "google/protobuf/timestamp.proto"; - - -service OutputService{ - rpc Create(CreateOutputRequest) returns (Output) {} - rpc Show(IdRequest) returns (Output) {} - rpc List(Empty) returns (ListResponse){} - rpc Update(UpdateOutputRequest) returns (Output){} - rpc Remove(IdRequest) returns (Empty){} -} - - -message Empty {} - -message IdRequest{ - string id = 1; -} - -message Output { - string id = 1; - string name = 2; - string plugin = 3; - string values = 4; - string operation = 5; -} - -message CreateOutputRequest { - string name = 1; - string plugin = 2; - string values = 3; - string operation = 4; -} - -message UpdateOutputRequest{ - string id = 1; - string name = 3; - string plugin = 4; - string values = 5; - string operation = 6; -} - -message ListResponse { - repeated Output outputs = 1; -} diff --git a/src/pipelines/config/grpc-client.ts b/src/pipelines/config/grpc-client.ts deleted file mode 100644 index af87bbe..0000000 --- a/src/pipelines/config/grpc-client.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { join } from 'path'; -import { ClientOptions, Transport } from '@nestjs/microservices'; - -export const GrpcClientConfiguration: ClientOptions = { - transport: Transport.GRPC, - options: { - //url: `${process.env.USERS_SVC_URL}:${process.env.USERS_SVC_PORT}`, - url: `127.0.0.1:50054`, - package: 'pipeline', - protoPath: join(__dirname, '..', 'proto', 'pipeline.proto'), - loader: { - enums: String, - objects: true, - arrays: true, - }, - }, -}; diff --git a/src/pipelines/dto/create-pipeline.dto.ts b/src/pipelines/dto/create-pipeline.dto.ts deleted file mode 100644 index cb543d8..0000000 --- a/src/pipelines/dto/create-pipeline.dto.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { InputGrpcClient } from "src/inputs/entities/input-grcp-client.entity"; -import { Output } from "src/outputs/entities/output.entity"; -import { Transformation } from "src/transformations/entities/transformation.entity"; - -export class CreatePipelineDto { - input:InputGrpcClient; - output:Output; - transformations:Transformation; - tags:string[]; - name:string; - description:string; -} diff --git a/src/pipelines/dto/update-pipeline.dto.ts b/src/pipelines/dto/update-pipeline.dto.ts deleted file mode 100644 index b1848b4..0000000 --- a/src/pipelines/dto/update-pipeline.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { PartialType } from '@nestjs/mapped-types'; -import { CreatePipelineDto } from './create-pipeline.dto'; - -export class UpdatePipelineDto extends PartialType(CreatePipelineDto) { - -} diff --git a/src/pipelines/entities/pipeline.entity.ts b/src/pipelines/entities/pipeline.entity.ts deleted file mode 100644 index 2e4eafb..0000000 --- a/src/pipelines/entities/pipeline.entity.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { InputGrpcClient } from "src/inputs/entities/input-grcp-client.entity"; -import { Output } from "src/outputs/entities/output.entity"; -import { Transformation } from "src/transformations/entities/transformation.entity"; - -export class Pipeline { - id:string; - input:InputGrpcClient; - output:Output; - transformations:Transformation; - tags:string[]; - name:string; - description:string; - status:string; -} diff --git a/src/pipelines/pipelines.controller.spec.ts b/src/pipelines/pipelines.controller.spec.ts deleted file mode 100644 index 968b6b8..0000000 --- a/src/pipelines/pipelines.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { PipelinesController } from './pipelines.controller'; -import { PipelinesService } from './pipelines.service'; - -describe('PipelinesController', () => { - let controller: PipelinesController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [PipelinesController], - providers: [PipelinesService], - }).compile(); - - controller = module.get(PipelinesController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/pipelines/pipelines.controller.ts b/src/pipelines/pipelines.controller.ts deleted file mode 100644 index 681c293..0000000 --- a/src/pipelines/pipelines.controller.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { - Controller, - Delete, - Get, - OnModuleInit, - Param, - Post, - Put, -} from '@nestjs/common'; -import { - Client, - ClientGrpc, - MessagePattern, - Payload, -} from '@nestjs/microservices'; -import { PipelinesService } from './pipelines.service'; -import { CreatePipelineDto } from './dto/create-pipeline.dto'; -import { UpdatePipelineDto } from './dto/update-pipeline.dto'; -import { GrpcClientConfiguration } from './config/grpc-client'; - -@Controller('pipeline') - -export class PipelinesController implements OnModuleInit { - - @Client(GrpcClientConfiguration) - private pipelineServiceClient: ClientGrpc; - - private pipelineService: PipelinesService; - - onModuleInit() { - this.pipelineService = - this.pipelineServiceClient.getService( - 'PipelineService', - ); - } - - @Post() - create(@Payload() createPipelineDto: CreatePipelineDto) { - return this.pipelineService.create(createPipelineDto); - } - - @Get() - list() { - return this.pipelineService.list(); - } - - @Get(':id') - show(@Param() id: string) { - return this.pipelineService.show(id); - } - - @Put(':id') - update(@Param() id: string, @Payload() updatePipelineDto: UpdatePipelineDto) { - return this.pipelineService.update(id, updatePipelineDto); - } - - @Delete() - remove(@Param() id: string) { - return this.pipelineService.remove(id); - } - - @Post() - getPipelineLogsMessages(@Param() id: string, @Payload() details: string) { - return this.pipelineService.getPipelineLogsMessages(id, details); - } - - getPipelineStatus(id: string) { - return this.pipelineService.getPipelineStatus(id); - } -} diff --git a/src/pipelines/pipelines.module.ts b/src/pipelines/pipelines.module.ts deleted file mode 100644 index 2eb2334..0000000 --- a/src/pipelines/pipelines.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { PipelinesService } from './pipelines.service'; -import { PipelinesController } from './pipelines.controller'; - -@Module({ - controllers: [PipelinesController], - providers: [PipelinesService], -}) -export class PipelinesModule {} diff --git a/src/pipelines/pipelines.service.spec.ts b/src/pipelines/pipelines.service.spec.ts deleted file mode 100644 index e7a30b6..0000000 --- a/src/pipelines/pipelines.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { PipelinesService } from './pipelines.service'; - -describe('PipelinesService', () => { - let service: PipelinesService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [PipelinesService], - }).compile(); - - service = module.get(PipelinesService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/pipelines/pipelines.service.ts b/src/pipelines/pipelines.service.ts deleted file mode 100644 index ed5aaf8..0000000 --- a/src/pipelines/pipelines.service.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreatePipelineDto } from './dto/create-pipeline.dto'; -import { UpdatePipelineDto } from './dto/update-pipeline.dto'; - -@Injectable() -export class PipelinesService { - create(createPipelineDto: CreatePipelineDto) { - return 'This action adds a new pipeline'; - } - - list() { - return `This action returns all pipelines`; - } - - show(id: string) { - return `This action returns a #${id} pipeline`; - } - - update(id: string, updatePipelineDto: UpdatePipelineDto) { - return `This action updates a #${id} pipeline`; - } - - remove(id: string) { - return `This action removes a #${id} pipeline`; - } - - getPipelineLogsMessages(id: string, details: string) { - return `This action perfoms a getLogMessages on #${id} pipeline`; - } - - getPipelineStatus(id: string) { - return `This action performs a getStatus on #${id} pipeline`; - } -} diff --git a/src/pipelines/proto/pipeline.proto b/src/pipelines/proto/pipeline.proto deleted file mode 100644 index 9e187d7..0000000 --- a/src/pipelines/proto/pipeline.proto +++ /dev/null @@ -1,97 +0,0 @@ -syntax = "proto3"; - -package pipeline; - -import "google/protobuf/timestamp.proto"; - -service PipelineService{ - rpc Create(CreatePipelineRequest) returns (Pipeline) {} - rpc Show(IdRequest) returns (Pipeline) {} - rpc List(Empty) returns (ListResponse){} - rpc Update(UpdatePipelineRequest) returns (Pipeline){} - rpc Remove(IdRequest) returns (Empty){} - rpc getPipelineLogsMessages(getPipelineLogsMessagesRequest) returns (getPipelineLogsMessagesResponse){} - rpc getPipelineStatus(IdRequest) returns (getPipelineStatusResponse){} -} - - -message Empty {} - -message IdRequest{ - string id = 1; -} - -message Transformation { - string id = 1; - string inputSource = 2; - string table = 3; - string type = 4; - string params = 5; -} - -message Input { - string id = 1; - string cronFormated = 2; - string name = 3; - string plugin = 4; - string values = 5; - string operation = 6; -} - -message Output { - string id = 1; - string name = 2; - string plugin = 3; - string values = 4; - string operation = 5; -} - -message Pipeline { - string id = 1; - Input input = 2; - Output output = 3; - Transformation transformations = 4; - repeated string tags = 5; - string name = 6; - string description = 7; - string status = 8; -} - -message CreatePipelineRequest { - Input input = 1; - Output output = 2; - Transformation transformations = 3; - repeated string tags = 4; - string name = 5; - string description = 6; -} - -message UpdatePipelineRequest{ - string id = 1; - repeated string tags = 2; - string name = 3; - string description = 4; - string status = 5; -} - -message ListResponse { - repeated Pipeline pipelines = 1; -} - -message getPipelineLogsMessagesRequest{ - string id = 1; - string details = 2; -} - -message getPipelineLogsMessagesResponseItem{ - string date = 1; - string log = 2; -} - -message getPipelineLogsMessagesResponse{ - repeated getPipelineLogsMessagesResponseItem pipelineLogs = 1; -} - -message getPipelineStatusResponse{ - string status = 1; -} diff --git a/src/rest/rest-enrichments/dto/create-rest-enrichment.dto.ts b/src/rest/rest-enrichments/dto/create-rest-enrichment.dto.ts deleted file mode 100644 index 0821f28..0000000 --- a/src/rest/rest-enrichments/dto/create-rest-enrichment.dto.ts +++ /dev/null @@ -1,6 +0,0 @@ -export class CreateRestEnrichmentDto { - - type:string; - - columns -} diff --git a/src/rest/rest-enrichments/dto/update-rest-enrichment.dto.ts b/src/rest/rest-enrichments/dto/update-rest-enrichment.dto.ts deleted file mode 100644 index b3a2c60..0000000 --- a/src/rest/rest-enrichments/dto/update-rest-enrichment.dto.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PartialType } from '@nestjs/swagger'; -import { CreateRestEnrichmentDto } from './create-rest-enrichment.dto'; - -export class UpdateRestEnrichmentDto extends PartialType(CreateRestEnrichmentDto) {} diff --git a/src/rest/rest-enrichments/entities/rest-enrichment.entity.ts b/src/rest/rest-enrichments/entities/rest-enrichment.entity.ts deleted file mode 100644 index 3595d46..0000000 --- a/src/rest/rest-enrichments/entities/rest-enrichment.entity.ts +++ /dev/null @@ -1,7 +0,0 @@ -export class RestEnrichment { - id:string; - - type:string; - - columns:string[] -} diff --git a/src/rest/rest-enrichments/rest-enrichments.controller.spec.ts b/src/rest/rest-enrichments/rest-enrichments.controller.spec.ts deleted file mode 100644 index e4c8579..0000000 --- a/src/rest/rest-enrichments/rest-enrichments.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestEnrichmentsController } from './rest-enrichments.controller'; -import { RestEnrichmentsService } from './rest-enrichments.service'; - -describe('RestEnrichmentsController', () => { - let controller: RestEnrichmentsController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [RestEnrichmentsController], - providers: [RestEnrichmentsService], - }).compile(); - - controller = module.get(RestEnrichmentsController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/rest/rest-enrichments/rest-enrichments.controller.ts b/src/rest/rest-enrichments/rest-enrichments.controller.ts deleted file mode 100644 index 5a84ad2..0000000 --- a/src/rest/rest-enrichments/rest-enrichments.controller.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete, Put, Headers} from '@nestjs/common'; -import { RestEnrichmentsService } from './rest-enrichments.service'; -import { CreateRestEnrichmentDto } from './dto/create-rest-enrichment.dto'; -import { UpdateRestEnrichmentDto } from './dto/update-rest-enrichment.dto'; -import axios from 'axios'; -import { ApiTags } from '@nestjs/swagger'; - -@ApiTags('Enrichments') -@Controller('enrichment') -export class RestEnrichmentsController { - constructor(private readonly restEnrichmentsService: RestEnrichmentsService) {} - - @Post() - async create(@Body() body: CreateRestEnrichmentDto,@Headers() headers) { - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/enrichment`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - @Get() - async list(@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/enrichment`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Get(':id') - async show(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/enrichment/${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Put(':id') - async update(@Param('id') id: string,@Headers() headers, @Body() body: UpdateRestEnrichmentDto) { - - const connectionResponse = await axios.put( - `${process.env.DEV_URL}/enrichment/${id}`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - @Delete(':id') - async remove(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.delete( - `${process.env.DEV_URL}/enrichment/${id}`, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } -} diff --git a/src/rest/rest-enrichments/rest-enrichments.module.ts b/src/rest/rest-enrichments/rest-enrichments.module.ts deleted file mode 100644 index 54c9912..0000000 --- a/src/rest/rest-enrichments/rest-enrichments.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { RestEnrichmentsService } from './rest-enrichments.service'; -import { RestEnrichmentsController } from './rest-enrichments.controller'; - -@Module({ - controllers: [RestEnrichmentsController], - providers: [RestEnrichmentsService] -}) -export class RestEnrichmentsModule {} diff --git a/src/rest/rest-enrichments/rest-enrichments.service.spec.ts b/src/rest/rest-enrichments/rest-enrichments.service.spec.ts deleted file mode 100644 index 8edbc0d..0000000 --- a/src/rest/rest-enrichments/rest-enrichments.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestEnrichmentsService } from './rest-enrichments.service'; - -describe('RestEnrichmentsService', () => { - let service: RestEnrichmentsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [RestEnrichmentsService], - }).compile(); - - service = module.get(RestEnrichmentsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/rest/rest-enrichments/rest-enrichments.service.ts b/src/rest/rest-enrichments/rest-enrichments.service.ts deleted file mode 100644 index 03efa72..0000000 --- a/src/rest/rest-enrichments/rest-enrichments.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateRestEnrichmentDto } from './dto/create-rest-enrichment.dto'; -import { UpdateRestEnrichmentDto } from './dto/update-rest-enrichment.dto'; - -@Injectable() -export class RestEnrichmentsService { - create(createRestEnrichmentDto: CreateRestEnrichmentDto) { - return 'This action adds a new restEnrichment'; - } - - findAll() { - return `This action returns all restEnrichments`; - } - - findOne(id: number) { - return `This action returns a #${id} restEnrichment`; - } - - update(id: number, updateRestEnrichmentDto: UpdateRestEnrichmentDto) { - return `This action updates a #${id} restEnrichment`; - } - - remove(id: number) { - return `This action removes a #${id} restEnrichment`; - } -} diff --git a/src/rest/rest-factory/dto/create-rest-factory.dto.ts b/src/rest/rest-factory/dto/create-rest-factory.dto.ts deleted file mode 100644 index 905b39e..0000000 --- a/src/rest/rest-factory/dto/create-rest-factory.dto.ts +++ /dev/null @@ -1 +0,0 @@ -export class CreateRestFactoryDto {} diff --git a/src/rest/rest-factory/dto/update-rest-factory.dto.ts b/src/rest/rest-factory/dto/update-rest-factory.dto.ts deleted file mode 100644 index a682c19..0000000 --- a/src/rest/rest-factory/dto/update-rest-factory.dto.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PartialType } from '@nestjs/swagger'; -import { CreateRestFactoryDto } from './create-rest-factory.dto'; - -export class UpdateRestFactoryDto extends PartialType(CreateRestFactoryDto) {} diff --git a/src/rest/rest-factory/entities/rest-factory.entity.ts b/src/rest/rest-factory/entities/rest-factory.entity.ts deleted file mode 100644 index 4daced3..0000000 --- a/src/rest/rest-factory/entities/rest-factory.entity.ts +++ /dev/null @@ -1 +0,0 @@ -export class RestFactory {} diff --git a/src/rest/rest-factory/rest-factory.controller.spec.ts b/src/rest/rest-factory/rest-factory.controller.spec.ts deleted file mode 100644 index 5c8d7e2..0000000 --- a/src/rest/rest-factory/rest-factory.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestFactoryController } from './rest-factory.controller'; -import { RestFactoryService } from './rest-factory.service'; - -describe('RestFactoryController', () => { - let controller: RestFactoryController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [RestFactoryController], - providers: [RestFactoryService], - }).compile(); - - controller = module.get(RestFactoryController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/rest/rest-factory/rest-factory.controller.ts b/src/rest/rest-factory/rest-factory.controller.ts deleted file mode 100644 index e740b36..0000000 --- a/src/rest/rest-factory/rest-factory.controller.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Controller, Get, Param, Headers } from '@nestjs/common'; -import { RestFactoryService } from './rest-factory.service'; -import axios from 'axios'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; - -@ApiTags('Dag Factory') -@ApiBearerAuth() -@Controller('factory') -export class RestFactoryController { - constructor(private readonly restFactoryService: RestFactoryService) {} - - - @Get('/start') - async startDagFactory(@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/factory/start`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - - @Get('/pipeline_params') - async sendJSONSettingsToDagFactory(@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/factory/pipeline_params`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Get('/start/:pipelineId') - async startDag(@Param('pipelineId') pipelineId:string,@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/factory/start/${pipelineId}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - -} diff --git a/src/rest/rest-factory/rest-factory.module.ts b/src/rest/rest-factory/rest-factory.module.ts deleted file mode 100644 index 58d778f..0000000 --- a/src/rest/rest-factory/rest-factory.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { RestFactoryService } from './rest-factory.service'; -import { RestFactoryController } from './rest-factory.controller'; - -@Module({ - controllers: [RestFactoryController], - providers: [RestFactoryService] -}) -export class RestFactoryModule {} diff --git a/src/rest/rest-factory/rest-factory.service.spec.ts b/src/rest/rest-factory/rest-factory.service.spec.ts deleted file mode 100644 index 493fa9e..0000000 --- a/src/rest/rest-factory/rest-factory.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestFactoryService } from './rest-factory.service'; - -describe('RestFactoryService', () => { - let service: RestFactoryService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [RestFactoryService], - }).compile(); - - service = module.get(RestFactoryService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/rest/rest-factory/rest-factory.service.ts b/src/rest/rest-factory/rest-factory.service.ts deleted file mode 100644 index 93104df..0000000 --- a/src/rest/rest-factory/rest-factory.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateRestFactoryDto } from './dto/create-rest-factory.dto'; -import { UpdateRestFactoryDto } from './dto/update-rest-factory.dto'; - -@Injectable() -export class RestFactoryService { - create(createRestFactoryDto: CreateRestFactoryDto) { - return 'This action adds a new restFactory'; - } - - findAll() { - return `This action returns all restFactory`; - } - - findOne(id: number) { - return `This action returns a #${id} restFactory`; - } - - update(id: number, updateRestFactoryDto: UpdateRestFactoryDto) { - return `This action updates a #${id} restFactory`; - } - - remove(id: number) { - return `This action removes a #${id} restFactory`; - } -} diff --git a/src/rest/rest-inputs/dto/HTTPInputValues.dto.ts b/src/rest/rest-inputs/dto/HTTPInputValues.dto.ts deleted file mode 100644 index f73642e..0000000 --- a/src/rest/rest-inputs/dto/HTTPInputValues.dto.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - - -export class HTTPInputValues{ - - @ApiProperty({ - description:"Choosen url", - example:"http://testroute/dadosfera/inputs/values" - }) - urls:string; - - @ApiProperty({ - description:"Schedule name", - example:"Test_Schedule" - }) - schedule:string -} diff --git a/src/rest/rest-inputs/dto/JDBCInputValues.dto.ts b/src/rest/rest-inputs/dto/JDBCInputValues.dto.ts deleted file mode 100644 index c7bad27..0000000 --- a/src/rest/rest-inputs/dto/JDBCInputValues.dto.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - - -export class JDBCInputvalues{ - - @ApiProperty({ - description:"JDBC user", - example:"airflow" - }) - jdbc_user: string; - - @ApiProperty({ - description:"JDBC password", - example:"password123" - }) - jdbc_password: string; - - @ApiProperty({ - description:"Database", - example:"airflow" - }) - database: string; - - @ApiProperty({ - description:"Connection endpoint", - example:"dadosfera-postgres-db.test123.us-east" - }) - endpoint: string; - - @ApiProperty({ - description:"Schema name", - example:"cadastros" - }) - schema?:string; - - @ApiProperty({ - description:"Tables names", - example:["pessoas", "clients"] - }) - table: string[]; - - @ApiProperty({ - description:"Port", - example:"5432" - }) - port: string; - - @ApiProperty({ - description:"Engine name", - example:"postgres" - }) - engine: string; -} diff --git a/src/rest/rest-inputs/dto/create-rest-input.dto.ts b/src/rest/rest-inputs/dto/create-rest-input.dto.ts deleted file mode 100644 index 84ce3a3..0000000 --- a/src/rest/rest-inputs/dto/create-rest-input.dto.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; -import { CronDTO } from "./cron.dto"; -import { HTTPInputValues } from "./HTTPInputValues.dto"; -import { JDBCInputvalues } from "./JDBCInputValues.dto"; -import { S3InputValues } from "./s3InputValues.dto"; -import { SalesforceInputValuesDTO } from "./salesforceInputValues.dto"; - -export class CreateRestInputDto { - - @ApiProperty({ - description:"Input CRON", - example:{ - hours: ["3", "7"], - hour_interval: true, - hour_resourse: true, - hour_resourse_value: 3, - month_day: ["3"], - month_day_interval: true, - month_day_resourse: false, - month_day_resourse_value: null, - month: ["3"], - month_interval: false, - month_resourse: false, - month_resourse_value: null, - week_days: [], - week_days_interval: false, - week_days_resourse: false, - week_days_resourse_value: null - } - }) - cron:CronDTO; - - @ApiProperty({ - description:"Name of the input", - example:"Test_Input" - }) - name:string; - - @ApiProperty({ - description:"Plugin", - example:"s3" - }) - plugin:string; - - @ApiProperty({ - description:"Values for choosen input", - example:{ - jdbc_user: "user123", - jdbc_password: "password123", - database: "default_database", - endpoint: "dadosfera-postgres-db.test123.us-east-1.rds.amazonaws.com", - table: "test_table", - port: "5432", - engine: "postgresql" - } - }) - values: SalesforceInputValuesDTO|HTTPInputValues|S3InputValues|JDBCInputvalues; - - @ApiProperty({ - description:"Operation name", - example:"input" - }) - operation:string; -} diff --git a/src/rest/rest-inputs/dto/cron.dto.ts b/src/rest/rest-inputs/dto/cron.dto.ts deleted file mode 100644 index 9220775..0000000 --- a/src/rest/rest-inputs/dto/cron.dto.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - - -export class CronDTO{ - - @ApiProperty({ - description:"Hours to the cron", - example:["3","7"] - }) - hours: string[]; - - @ApiProperty({ - description:"Boolean for hour interval", - example:true - }) - hour_interval: boolean; - - @ApiProperty({ - description:"Boolean for hour resourse", - example:true - }) - hour_resourse: boolean; - - @ApiProperty({ - description:"Value for hour resourse", - example:3 - }) - hour_resourse_value: number; - - @ApiProperty({ - description:"Month day to the cron", - example:["3"] - }) - month_day: string[]; - - @ApiProperty({ - description:"Boolean for month day interval", - example:true - }) - month_day_interval: boolean; - - @ApiProperty({ - description:"Boolean for month day resourse", - example:false - }) - month_day_resourse: boolean; - - @ApiProperty({ - description:"Value for month day resourse", - example:null - }) - month_day_resourse_value:number|null; - - @ApiProperty({ - description:"Month to the cron", - example:["3"] - }) - month: string[]; - - @ApiProperty({ - description:"Boolean from month interval", - example:false - }) - month_interval: boolean; - - @ApiProperty({ - description:"Boolean from month resourse", - example:false - }) - month_resourse: boolean; - - @ApiProperty({ - description:"Value to month resourse", - example:null - }) - month_resourse_value:number|null; - - @ApiProperty({ - description:"Week days to the cron", - example:[] - }) - week_days: string[]; - - @ApiProperty({ - description:"Boolean for the week days", - example:false - }) - week_days_interval: boolean; - - @ApiProperty({ - description:"Boolean for week day resourse", - example:false - }) - week_days_resourse: boolean; - - @ApiProperty({ - description:"Hours to the cron", - example:null - }) - week_days_resourse_value:number|null - -} diff --git a/src/rest/rest-inputs/dto/s3InputValues.dto.ts b/src/rest/rest-inputs/dto/s3InputValues.dto.ts deleted file mode 100644 index 93d371a..0000000 --- a/src/rest/rest-inputs/dto/s3InputValues.dto.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - - -export class S3InputValues{ - - @ApiProperty({ - description:"file to extract path", - example:"s3_connector/testfile.csv" - }) - file_to_extract: string; - - @ApiProperty({ - description:"target bucket path", - example:"dadosfera-test" - }) - target_bucket?: string; - - @ApiProperty({ - description:"client bucket path", - example:"dadosfera-test" - }) - client_bucket: string; - - @ApiProperty({ - description:"Format to the file", - example:"csv" - }) - format_file: string; - - @ApiProperty({ - description:"Clients AWS Access Key Id", - example:"AKIBN5B19D3NGZI" - }) - client_aws_access_key_id: string; - - @ApiProperty({ - description:"Clients AWS Secret Access Key Id", - example:"ct5R1EjrVC78bvaJ636gG90O5NqOrOUoq4Ri" - }) - client_aws_secret_access_key : string; - - @ApiProperty({ - description:"file params format", - example:{sep: "," , header: "true"} - }) - format_file_params?: { - sep: string, - header: string - } -} diff --git a/src/rest/rest-inputs/dto/salesforceInputValues.dto.ts b/src/rest/rest-inputs/dto/salesforceInputValues.dto.ts deleted file mode 100644 index 6f6998e..0000000 --- a/src/rest/rest-inputs/dto/salesforceInputValues.dto.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - - -export class SalesforceInputValuesDTO{ - - @ApiProperty({ - description:"Salesforce username", - example:"dadosfera@devs.com" - }) - username_salesforce: string; - - @ApiProperty({ - description:"Salesforce password", - example:"Salesforce@test123" - })password_salesforce: string; - - @ApiProperty({ - description:"Salesforce Security Token", - example:"A67Tdg7qHUvhZDOFjWwtPMjmQ" - })security_token_salesforce: string; - - @ApiProperty({ - description:"Salesforce Query", - example:"SELECT * FROM Users" - })query_salesforce: string; - -} diff --git a/src/rest/rest-inputs/dto/testConnection.dto.ts b/src/rest/rest-inputs/dto/testConnection.dto.ts deleted file mode 100644 index 0e6d73e..0000000 --- a/src/rest/rest-inputs/dto/testConnection.dto.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; -import { HTTPInputValues } from "./HTTPInputValues.dto"; -import { JDBCInputvalues } from "./JDBCInputValues.dto"; -import { S3InputValues } from "./s3InputValues.dto"; -import { SalesforceInputValuesDTO } from "./salesforceInputValues.dto"; - - -export class testConnectionDTO{ - - @ApiProperty({ - description:"Input Plugin Name", - example:"mysql" - }) - plugin:string; - - - @ApiProperty({ - description:"Plugin name", - example:{ - plugin: "mysql", - values: { - jdbc_user: "test", - jdbc_password: "test1234", - database: "users", - endpoint: "dadosfera.test123.us-east-1.rds.amazonaws.com", - schema: "user", - port: "5432", - engine: "mysql" - } - } - }) - - values:HTTPInputValues|SalesforceInputValuesDTO|S3InputValues|JDBCInputvalues -} diff --git a/src/rest/rest-inputs/dto/update-rest-input.dto.ts b/src/rest/rest-inputs/dto/update-rest-input.dto.ts deleted file mode 100644 index 2a198c6..0000000 --- a/src/rest/rest-inputs/dto/update-rest-input.dto.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PartialType } from '@nestjs/swagger'; -import { CreateRestInputDto } from './create-rest-input.dto'; - -export class UpdateRestInputDto extends PartialType(CreateRestInputDto) {} diff --git a/src/rest/rest-inputs/entities/rest-input.entity.ts b/src/rest/rest-inputs/entities/rest-input.entity.ts deleted file mode 100644 index 2525e65..0000000 --- a/src/rest/rest-inputs/entities/rest-input.entity.ts +++ /dev/null @@ -1,14 +0,0 @@ -export class RestInput { - - id:string; - - cron:string; - - name:string; - - plugin:string; - - values:string; - - operation:string; -} diff --git a/src/rest/rest-inputs/rest-inputs.controller.spec.ts b/src/rest/rest-inputs/rest-inputs.controller.spec.ts deleted file mode 100644 index 208e5ac..0000000 --- a/src/rest/rest-inputs/rest-inputs.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestInputsController } from './rest-inputs.controller'; -import { RestInputsService } from './rest-inputs.service'; - -describe('RestInputsController', () => { - let controller: RestInputsController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [RestInputsController], - providers: [RestInputsService], - }).compile(); - - controller = module.get(RestInputsController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/rest/rest-inputs/rest-inputs.controller.ts b/src/rest/rest-inputs/rest-inputs.controller.ts deleted file mode 100644 index 9439ca6..0000000 --- a/src/rest/rest-inputs/rest-inputs.controller.ts +++ /dev/null @@ -1,123 +0,0 @@ -import axios from 'axios'; -require("dotenv").config(); -import { RestInputsService } from './rest-inputs.service'; -import { Controller, Get, Post, Body, Patch, Param, Delete, Put, Headers } from '@nestjs/common'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; -import { CreateRestInputDto } from './dto/create-rest-input.dto'; -import { UpdateRestInputDto } from './dto/update-rest-input.dto'; -import { testConnectionDTO } from './dto/testConnection.dto'; - - -@ApiTags('Inputs') -@ApiBearerAuth() -@Controller('input') -export class RestInputsController { - constructor(private readonly restInputsService: RestInputsService) {} - - - @Post('/test-connection/') - async testConnection(@Body() body:testConnectionDTO,@Headers() headers){ - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/input/test-connection`, - body, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - - return connectionResponse.data - } - - @Post() - async create(@Body() body: CreateRestInputDto,@Headers() headers){ - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/input`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - - return connectionResponse.data - } - - @Get() - async list(@Headers() headers){ - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/input`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - - return connectionResponse.data - } - - @Get('/:id') - async show(@Param() id: string,@Headers() headers){ - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/input/:${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - - return connectionResponse.data - } - - @Put(':id') - async update( - @Body() body: UpdateRestInputDto, - @Param() id: string, - @Headers() headers - ){ - - const connectionResponse = await axios.put( - `${process.env.DEV_URL}/input/:${id}`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - - return connectionResponse.data - } - - @Delete(':id') - async delete(@Param() id: string,@Headers() headers){ - - const connectionResponse = await axios.delete( - `${process.env.DEV_URL}/input/:${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - - return connectionResponse.data - } - -} diff --git a/src/rest/rest-inputs/rest-inputs.module.ts b/src/rest/rest-inputs/rest-inputs.module.ts deleted file mode 100644 index fb91425..0000000 --- a/src/rest/rest-inputs/rest-inputs.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { RestInputsService } from './rest-inputs.service'; -import { RestInputsController } from './rest-inputs.controller'; - -@Module({ - controllers: [RestInputsController], - providers: [RestInputsService] -}) -export class RestInputsModule {} diff --git a/src/rest/rest-inputs/rest-inputs.service.spec.ts b/src/rest/rest-inputs/rest-inputs.service.spec.ts deleted file mode 100644 index 31becf5..0000000 --- a/src/rest/rest-inputs/rest-inputs.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestInputsService } from './rest-inputs.service'; - -describe('RestInputsService', () => { - let service: RestInputsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [RestInputsService], - }).compile(); - - service = module.get(RestInputsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/rest/rest-inputs/rest-inputs.service.ts b/src/rest/rest-inputs/rest-inputs.service.ts deleted file mode 100644 index 4dc8dab..0000000 --- a/src/rest/rest-inputs/rest-inputs.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateRestInputDto } from './dto/create-rest-input.dto'; -import { UpdateRestInputDto } from './dto/update-rest-input.dto'; - -@Injectable() -export class RestInputsService { - create(createRestInputDto: CreateRestInputDto) { - return 'This action adds a new restInput'; - } - - findAll() { - return `This action returns all restInputs`; - } - - findOne(id: number) { - return `This action returns a #${id} restInput`; - } - - update(id: number, updateRestInputDto: UpdateRestInputDto) { - return `This action updates a #${id} restInput`; - } - - remove(id: number) { - return `This action removes a #${id} restInput`; - } -} diff --git a/src/rest/rest-outputs/dto/create-rest-output.dto.ts b/src/rest/rest-outputs/dto/create-rest-output.dto.ts deleted file mode 100644 index 9dc126e..0000000 --- a/src/rest/rest-outputs/dto/create-rest-output.dto.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - -export class CreateRestOutputDto { - - @ApiProperty({ - description:"Output name", - example:"Test Output" - }) - name:string; - - @ApiProperty({ - description:"Plugin name", - example:"Test Plugin" - }) - plugin:string; - - @ApiProperty({ - description:"Plugin values", - example:{ - prefix:"test" - } - }) - values:{ - prefix:string - }; - - @ApiProperty({ - description:"Operation name", - example:"output" - }) - operation:string; -} diff --git a/src/rest/rest-outputs/dto/update-rest-output.dto.ts b/src/rest/rest-outputs/dto/update-rest-output.dto.ts deleted file mode 100644 index 902bffd..0000000 --- a/src/rest/rest-outputs/dto/update-rest-output.dto.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PartialType } from '@nestjs/swagger'; -import { CreateRestOutputDto } from './create-rest-output.dto'; - -export class UpdateRestOutputDto extends PartialType(CreateRestOutputDto) {} diff --git a/src/rest/rest-outputs/entities/rest-output.entity.ts b/src/rest/rest-outputs/entities/rest-output.entity.ts deleted file mode 100644 index 7ccc372..0000000 --- a/src/rest/rest-outputs/entities/rest-output.entity.ts +++ /dev/null @@ -1 +0,0 @@ -export class RestOutput {} diff --git a/src/rest/rest-outputs/rest-outputs.controller.spec.ts b/src/rest/rest-outputs/rest-outputs.controller.spec.ts deleted file mode 100644 index 3640110..0000000 --- a/src/rest/rest-outputs/rest-outputs.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestOutputsController } from './rest-outputs.controller'; -import { RestOutputsService } from './rest-outputs.service'; - -describe('RestOutputsController', () => { - let controller: RestOutputsController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [RestOutputsController], - providers: [RestOutputsService], - }).compile(); - - controller = module.get(RestOutputsController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/rest/rest-outputs/rest-outputs.controller.ts b/src/rest/rest-outputs/rest-outputs.controller.ts deleted file mode 100644 index 1de86fe..0000000 --- a/src/rest/rest-outputs/rest-outputs.controller.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { Controller, Get, Post, Body, Headers, Param, Delete, Put } from '@nestjs/common'; -import { RestOutputsService } from './rest-outputs.service'; -import { CreateRestOutputDto } from './dto/create-rest-output.dto'; -import { UpdateRestOutputDto } from './dto/update-rest-output.dto'; -import axios from 'axios'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; - -@ApiTags('Outputs') -@ApiBearerAuth() -@Controller('output') -export class RestOutputsController { - constructor(private readonly restOutputsService: RestOutputsService) {} - - @Post() - async create(@Body() body: CreateRestOutputDto,@Headers() headers) { - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/output`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - @Get() - async list(@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/output`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Get(':id') - async show(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/output/${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Put(':id') - async update(@Param('id') id: string, @Body() body: UpdateRestOutputDto,@Headers() headers) { - - const connectionResponse = await axios.put( - `${process.env.DEV_URL}/output/${id}`, - body, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Delete(':id') - async remove(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.delete( - `${process.env.DEV_URL}/output/${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } -} diff --git a/src/rest/rest-outputs/rest-outputs.module.ts b/src/rest/rest-outputs/rest-outputs.module.ts deleted file mode 100644 index 18d5a1b..0000000 --- a/src/rest/rest-outputs/rest-outputs.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { RestOutputsService } from './rest-outputs.service'; -import { RestOutputsController } from './rest-outputs.controller'; - -@Module({ - controllers: [RestOutputsController], - providers: [RestOutputsService] -}) -export class RestOutputsModule {} diff --git a/src/rest/rest-outputs/rest-outputs.service.spec.ts b/src/rest/rest-outputs/rest-outputs.service.spec.ts deleted file mode 100644 index 7457923..0000000 --- a/src/rest/rest-outputs/rest-outputs.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestOutputsService } from './rest-outputs.service'; - -describe('RestOutputsService', () => { - let service: RestOutputsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [RestOutputsService], - }).compile(); - - service = module.get(RestOutputsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/rest/rest-outputs/rest-outputs.service.ts b/src/rest/rest-outputs/rest-outputs.service.ts deleted file mode 100644 index fa4f905..0000000 --- a/src/rest/rest-outputs/rest-outputs.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateRestOutputDto } from './dto/create-rest-output.dto'; -import { UpdateRestOutputDto } from './dto/update-rest-output.dto'; - -@Injectable() -export class RestOutputsService { - create(createRestOutputDto: CreateRestOutputDto) { - return 'This action adds a new restOutput'; - } - - findAll() { - return `This action returns all restOutputs`; - } - - findOne(id: number) { - return `This action returns a #${id} restOutput`; - } - - update(id: number, updateRestOutputDto: UpdateRestOutputDto) { - return `This action updates a #${id} restOutput`; - } - - remove(id: number) { - return `This action removes a #${id} restOutput`; - } -} diff --git a/src/rest/rest-pipelines/dto/create-rest-pipeline.dto.ts b/src/rest/rest-pipelines/dto/create-rest-pipeline.dto.ts deleted file mode 100644 index 7b56caa..0000000 --- a/src/rest/rest-pipelines/dto/create-rest-pipeline.dto.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - -export class CreateRestPipelineDto { - - @ApiProperty({ - description:"Pipeline Input", - example:{ - id:"ac8f828a-708d-4f28-a5b4-0170eaf96843" - } - }) - input:{ - id:string - } - - @ApiProperty({ - description:"Pipeline Transformations", - example:[ - { - id:"b2579a1a-2874-47f6-b609-7568a2930468" - }, - { - id:"6bac1a1a-3037-474f-8211-c3ceb8ea04e8" - } - ] - }) - transformations:[ - { - id:string - } - ] - - @ApiProperty({ - description:"Pipeline Output", - example:{ - id:"06f9ce35-d9c0-4f95-a49b-c09ea00b8e48" - } - }) - output:{ - id:string - } - - @ApiProperty({ - description:"Pipeline Tags", - example:[] - }) - tags:string[] - - @ApiProperty({ - description:"Pipeline Name", - example:"Dadosfera Pipeline" - }) - name:string - - @ApiProperty({ - description:"Pipeline Description", - example:"Example pipeline" - }) - description:string -} diff --git a/src/rest/rest-pipelines/dto/update-rest-pipeline.dto.ts b/src/rest/rest-pipelines/dto/update-rest-pipeline.dto.ts deleted file mode 100644 index 0cccbef..0000000 --- a/src/rest/rest-pipelines/dto/update-rest-pipeline.dto.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PartialType } from '@nestjs/swagger'; -import { CreateRestPipelineDto } from './create-rest-pipeline.dto'; - -export class UpdateRestPipelineDto extends PartialType(CreateRestPipelineDto) {} diff --git a/src/rest/rest-pipelines/entities/rest-pipeline.entity.ts b/src/rest/rest-pipelines/entities/rest-pipeline.entity.ts deleted file mode 100644 index fc1724f..0000000 --- a/src/rest/rest-pipelines/entities/rest-pipeline.entity.ts +++ /dev/null @@ -1 +0,0 @@ -export class RestPipeline {} diff --git a/src/rest/rest-pipelines/rest-pipelines.controller.spec.ts b/src/rest/rest-pipelines/rest-pipelines.controller.spec.ts deleted file mode 100644 index 6471cdc..0000000 --- a/src/rest/rest-pipelines/rest-pipelines.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestPipelinesController } from './rest-pipelines.controller'; -import { RestPipelinesService } from './rest-pipelines.service'; - -describe('RestPipelinesController', () => { - let controller: RestPipelinesController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [RestPipelinesController], - providers: [RestPipelinesService], - }).compile(); - - controller = module.get(RestPipelinesController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/rest/rest-pipelines/rest-pipelines.controller.ts b/src/rest/rest-pipelines/rest-pipelines.controller.ts deleted file mode 100644 index bce0df0..0000000 --- a/src/rest/rest-pipelines/rest-pipelines.controller.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { Controller, Get, Post, Body, Headers, Param, Delete, Put } from '@nestjs/common'; -import { RestPipelinesService } from './rest-pipelines.service'; -import { CreateRestPipelineDto } from './dto/create-rest-pipeline.dto'; -import { UpdateRestPipelineDto } from './dto/update-rest-pipeline.dto'; -import axios from 'axios'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; - -@ApiTags('Pipelines') -@ApiBearerAuth() -@Controller('pipeline') -export class RestPipelinesController { - constructor(private readonly restPipelinesService: RestPipelinesService) {} - - @Post() - async create(@Body() body: CreateRestPipelineDto,@Headers() headers) { - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/pipeline`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - @Get() - async list(@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/pipeline`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Get(':id/logs/details') - async showLogs(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/pipeline/${id}/logs/details`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Get(':id/status') - async showStatus(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/pipeline/${id}/status`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Get(':id') - async show(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/pipeline/${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } - - @Put(':id') - async update(@Param('id') id: string, @Headers() headers, @Body() body: UpdateRestPipelineDto) { - - const connectionResponse = await axios.put( - `${process.env.DEV_URL}/pipeline/${id}`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - @Delete(':id') - async remove(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.delete( - `${process.env.DEV_URL}/pipeline/${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - return connectionResponse.data - } -} diff --git a/src/rest/rest-pipelines/rest-pipelines.module.ts b/src/rest/rest-pipelines/rest-pipelines.module.ts deleted file mode 100644 index 641517a..0000000 --- a/src/rest/rest-pipelines/rest-pipelines.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { RestPipelinesService } from './rest-pipelines.service'; -import { RestPipelinesController } from './rest-pipelines.controller'; - -@Module({ - controllers: [RestPipelinesController], - providers: [RestPipelinesService] -}) -export class RestPipelinesModule {} diff --git a/src/rest/rest-pipelines/rest-pipelines.service.spec.ts b/src/rest/rest-pipelines/rest-pipelines.service.spec.ts deleted file mode 100644 index a440ebe..0000000 --- a/src/rest/rest-pipelines/rest-pipelines.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestPipelinesService } from './rest-pipelines.service'; - -describe('RestPipelinesService', () => { - let service: RestPipelinesService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [RestPipelinesService], - }).compile(); - - service = module.get(RestPipelinesService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/rest/rest-pipelines/rest-pipelines.service.ts b/src/rest/rest-pipelines/rest-pipelines.service.ts deleted file mode 100644 index 66a831e..0000000 --- a/src/rest/rest-pipelines/rest-pipelines.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateRestPipelineDto } from './dto/create-rest-pipeline.dto'; -import { UpdateRestPipelineDto } from './dto/update-rest-pipeline.dto'; - -@Injectable() -export class RestPipelinesService { - create(createRestPipelineDto: CreateRestPipelineDto) { - return 'This action adds a new restPipeline'; - } - - findAll() { - return `This action returns all restPipelines`; - } - - findOne(id: number) { - return `This action returns a #${id} restPipeline`; - } - - update(id: number, updateRestPipelineDto: UpdateRestPipelineDto) { - return `This action updates a #${id} restPipeline`; - } - - remove(id: number) { - return `This action removes a #${id} restPipeline`; - } -} diff --git a/src/rest/rest-transformations/dto/create-rest-transformation.dto.ts b/src/rest/rest-transformations/dto/create-rest-transformation.dto.ts deleted file mode 100644 index f29a451..0000000 --- a/src/rest/rest-transformations/dto/create-rest-transformation.dto.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - -export class Transformation{ - transformations:[{ - type:string; - params:[{ - base_column:string, - column_name:string - }] - }] -} - -export class UpdateTransformation{ - transformations:[{ - inputSource:string; - table:string; - type:string; - params:[{ - base_column:string, - column_name:string - }] - }] -} - -export class CreateRestTransformationDto { - - @ApiProperty({ - description:"Array of transformations", - example:[ - { - type:"hide_full_name", - params:[ - { - base_column:"full_name", - column_name:"hiden_full_name" - } - ] - }, - { - type: "hide_cpf", - params: [ - { - base_column: "cpf", - column_name: "cpf_hashed" - } - ] - }, - ] - }) - transformations: Transformation | UpdateTransformation; - -} diff --git a/src/rest/rest-transformations/dto/update-rest-transformation.dto.ts b/src/rest/rest-transformations/dto/update-rest-transformation.dto.ts deleted file mode 100644 index 266b6bc..0000000 --- a/src/rest/rest-transformations/dto/update-rest-transformation.dto.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PartialType } from '@nestjs/swagger'; -import { CreateRestTransformationDto } from './create-rest-transformation.dto'; - -export class UpdateRestTransformationDto extends PartialType(CreateRestTransformationDto) {} diff --git a/src/rest/rest-transformations/entities/rest-transformation.entity.ts b/src/rest/rest-transformations/entities/rest-transformation.entity.ts deleted file mode 100644 index aec27d5..0000000 --- a/src/rest/rest-transformations/entities/rest-transformation.entity.ts +++ /dev/null @@ -1 +0,0 @@ -export class RestTransformation {} diff --git a/src/rest/rest-transformations/rest-transformations.controller.spec.ts b/src/rest/rest-transformations/rest-transformations.controller.spec.ts deleted file mode 100644 index 8c3adb2..0000000 --- a/src/rest/rest-transformations/rest-transformations.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestTransformationsController } from './rest-transformations.controller'; -import { RestTransformationsService } from './rest-transformations.service'; - -describe('RestTransformationsController', () => { - let controller: RestTransformationsController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [RestTransformationsController], - providers: [RestTransformationsService], - }).compile(); - - controller = module.get(RestTransformationsController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/rest/rest-transformations/rest-transformations.controller.ts b/src/rest/rest-transformations/rest-transformations.controller.ts deleted file mode 100644 index edc0577..0000000 --- a/src/rest/rest-transformations/rest-transformations.controller.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { Controller, Get, Post, Body, Headers, Param, Delete, Put } from '@nestjs/common'; -import { RestTransformationsService } from './rest-transformations.service'; -import { CreateRestTransformationDto } from './dto/create-rest-transformation.dto'; -import { UpdateRestTransformationDto } from './dto/update-rest-transformation.dto'; -import axios from 'axios'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; - -@ApiTags('Transformations') -@ApiBearerAuth() -@Controller('transformation') -export class RestTransformationsController { - constructor(private readonly restTransformationsService: RestTransformationsService) {} - - @Post() - async create(@Body() body: CreateRestTransformationDto,@Headers() headers) { - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/transformation`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - - return connectionResponse.data - } - - @Get() - async list(@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/transformation`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - - return connectionResponse.data - } - - @Get(':id') - async show(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.get( - `${process.env.DEV_URL}/transformation/${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - - return connectionResponse.data - } - - @Put(':id') - async update(@Param('id') id: string, @Headers() headers, @Body() body: UpdateRestTransformationDto) { - - const connectionResponse = await axios.put( - `${process.env.DEV_URL}/transformation/${id}`, - body, - { - headers:{ - "Authorization":headers.authorization, - "Content-Type":"application/json" - } - } - ) - - - return connectionResponse.data - } - - @Delete(':id') - async remove(@Param('id') id: string,@Headers() headers) { - - const connectionResponse = await axios.delete( - `${process.env.DEV_URL}/transformation/${id}`, - { - headers:{ - "Authorization":headers.authorization - } - } - ) - - - return connectionResponse.data - } -} diff --git a/src/rest/rest-transformations/rest-transformations.module.ts b/src/rest/rest-transformations/rest-transformations.module.ts deleted file mode 100644 index 6dbe1a5..0000000 --- a/src/rest/rest-transformations/rest-transformations.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { RestTransformationsService } from './rest-transformations.service'; -import { RestTransformationsController } from './rest-transformations.controller'; - -@Module({ - controllers: [RestTransformationsController], - providers: [RestTransformationsService] -}) -export class RestTransformationsModule {} diff --git a/src/rest/rest-transformations/rest-transformations.service.spec.ts b/src/rest/rest-transformations/rest-transformations.service.spec.ts deleted file mode 100644 index d0f1a2a..0000000 --- a/src/rest/rest-transformations/rest-transformations.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestTransformationsService } from './rest-transformations.service'; - -describe('RestTransformationsService', () => { - let service: RestTransformationsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [RestTransformationsService], - }).compile(); - - service = module.get(RestTransformationsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/rest/rest-transformations/rest-transformations.service.ts b/src/rest/rest-transformations/rest-transformations.service.ts deleted file mode 100644 index 8183baf..0000000 --- a/src/rest/rest-transformations/rest-transformations.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateRestTransformationDto } from './dto/create-rest-transformation.dto'; -import { UpdateRestTransformationDto } from './dto/update-rest-transformation.dto'; - -@Injectable() -export class RestTransformationsService { - create(createRestTransformationDto: CreateRestTransformationDto) { - return 'This action adds a new restTransformation'; - } - - findAll() { - return `This action returns all restTransformations`; - } - - findOne(id: number) { - return `This action returns a #${id} restTransformation`; - } - - update(id: number, updateRestTransformationDto: UpdateRestTransformationDto) { - return `This action updates a #${id} restTransformation`; - } - - remove(id: number) { - return `This action removes a #${id} restTransformation`; - } -} diff --git a/src/rest/rest-user/dto/create-rest-user.dto.ts b/src/rest/rest-user/dto/create-rest-user.dto.ts deleted file mode 100644 index bc5f892..0000000 --- a/src/rest/rest-user/dto/create-rest-user.dto.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - -export class CreateRestUserDto { - - @ApiProperty({ - description:"User Email", - example:"dev@dadosfera.ai" - }) - email: string; - - @ApiProperty({ - description:"User Password", - example:"dadospassword123" - }) - password: string; - - @ApiProperty({ - description:"User Username", - example:"dev_fera" - }) - username: string; - - @ApiProperty({ - description:"User name", - example:"Fulano da Silva" - }) - name: string; - - @ApiProperty({ - description:"Customer id", - example:"dadosfera" - }) - customer_id: string; - - @ApiProperty({ - description:"User rules", - example:"['admin']" - }) - rules: string; -} diff --git a/src/rest/rest-user/dto/resendCode.dto.ts b/src/rest/rest-user/dto/resendCode.dto.ts deleted file mode 100644 index dd00c8d..0000000 --- a/src/rest/rest-user/dto/resendCode.dto.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - - -export class ResendCodeDTO{ - @ApiProperty({ - description:"User username", - example:"dev_fera" - }) - username:string -} diff --git a/src/rest/rest-user/dto/update-rest-user.dto.ts b/src/rest/rest-user/dto/update-rest-user.dto.ts deleted file mode 100644 index a753406..0000000 --- a/src/rest/rest-user/dto/update-rest-user.dto.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PartialType } from '@nestjs/swagger'; -import { CreateRestUserDto } from './create-rest-user.dto'; - -export class UpdateRestUserDto extends PartialType(CreateRestUserDto) {} diff --git a/src/rest/rest-user/dto/userAuth.dto.ts b/src/rest/rest-user/dto/userAuth.dto.ts deleted file mode 100644 index d8f3b1d..0000000 --- a/src/rest/rest-user/dto/userAuth.dto.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - - - -export class UserAuthDTO{ - - @ApiProperty({ - description:"User username", - example:"dev_fera" - }) - username:string; - - @ApiProperty({ - description:"User password", - example:"dadospassword123" - }) - password:string; -} diff --git a/src/rest/rest-user/dto/userConfirmation.dto.ts b/src/rest/rest-user/dto/userConfirmation.dto.ts deleted file mode 100644 index 8c95261..0000000 --- a/src/rest/rest-user/dto/userConfirmation.dto.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { ApiProperty } from "@nestjs/swagger"; - - -export class UserConfirmationDTO{ - @ApiProperty({ - description:"User username", - example:"dev_fera" - }) - username:string; - - - @ApiProperty({ - description:"Received Confirmation Code", - example:"315246" - }) - confirmationCode:string; -} diff --git a/src/rest/rest-user/entities/rest-user.entity.ts b/src/rest/rest-user/entities/rest-user.entity.ts deleted file mode 100644 index 5e7bb30..0000000 --- a/src/rest/rest-user/entities/rest-user.entity.ts +++ /dev/null @@ -1 +0,0 @@ -export class RestUser {} diff --git a/src/rest/rest-user/rest-user.controller.spec.ts b/src/rest/rest-user/rest-user.controller.spec.ts deleted file mode 100644 index 58f5be9..0000000 --- a/src/rest/rest-user/rest-user.controller.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestUserController } from './rest-user.controller'; -import { RestUserService } from './rest-user.service'; - -describe('RestUserController', () => { - let controller: RestUserController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [RestUserController], - providers: [RestUserService], - }).compile(); - - controller = module.get(RestUserController); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/rest/rest-user/rest-user.controller.ts b/src/rest/rest-user/rest-user.controller.ts deleted file mode 100644 index 022a690..0000000 --- a/src/rest/rest-user/rest-user.controller.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; -import { RestUserService } from './rest-user.service'; -import { CreateRestUserDto } from './dto/create-rest-user.dto'; -import { UpdateRestUserDto } from './dto/update-rest-user.dto'; -import axios from 'axios'; -import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; -import { UserAuthDTO } from './dto/userAuth.dto'; -import { UserConfirmationDTO } from './dto/userConfirmation.dto'; -import { ResendCodeDTO } from './dto/resendCode.dto'; - -@ApiTags('Users') -@Controller('user') -export class RestUserController { - constructor(private readonly restUserService: RestUserService) {} - - @Post('/register') - async create(@Body() body: CreateRestUserDto) { - - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/user/register`, - body, - { - headers:{ - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - @Post('/auth') - async auth(@Body() body: UserAuthDTO) { - - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/user/auth`, - body, - { - headers:{ - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - @Post('/confirm') - async confirm(@Body() body: UserConfirmationDTO) { - - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/user/confirm`, - body, - { - headers:{ - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - @Post('/resendCode') - async resendCode(@Body() body: ResendCodeDTO) { - - - const connectionResponse = await axios.post( - `${process.env.DEV_URL}/user/resendCode`, - body, - { - headers:{ - "Content-Type":"application/json" - } - } - ) - - return connectionResponse.data - } - - -} diff --git a/src/rest/rest-user/rest-user.module.ts b/src/rest/rest-user/rest-user.module.ts deleted file mode 100644 index c6cf241..0000000 --- a/src/rest/rest-user/rest-user.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { RestUserService } from './rest-user.service'; -import { RestUserController } from './rest-user.controller'; - -@Module({ - controllers: [RestUserController], - providers: [RestUserService] -}) -export class RestUserModule {} diff --git a/src/rest/rest-user/rest-user.service.spec.ts b/src/rest/rest-user/rest-user.service.spec.ts deleted file mode 100644 index fab24a9..0000000 --- a/src/rest/rest-user/rest-user.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { RestUserService } from './rest-user.service'; - -describe('RestUserService', () => { - let service: RestUserService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [RestUserService], - }).compile(); - - service = module.get(RestUserService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/rest/rest-user/rest-user.service.ts b/src/rest/rest-user/rest-user.service.ts deleted file mode 100644 index 8f93a4a..0000000 --- a/src/rest/rest-user/rest-user.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateRestUserDto } from './dto/create-rest-user.dto'; -import { UpdateRestUserDto } from './dto/update-rest-user.dto'; - -@Injectable() -export class RestUserService { - create(createRestUserDto: CreateRestUserDto) { - return 'This action adds a new restUser'; - } - - findAll() { - return `This action returns all restUser`; - } - - findOne(id: number) { - return `This action returns a #${id} restUser`; - } - - update(id: number, updateRestUserDto: UpdateRestUserDto) { - return `This action updates a #${id} restUser`; - } - - remove(id: number) { - return `This action removes a #${id} restUser`; - } -} diff --git a/src/transformations/config/grpc-client.ts b/src/transformations/config/grpc-client.ts deleted file mode 100644 index f918bed..0000000 --- a/src/transformations/config/grpc-client.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { join } from 'path'; -import { ClientOptions, Transport } from '@nestjs/microservices'; - -export const GrpcClientConfiguration: ClientOptions = { - transport: Transport.GRPC, - options: { - //url: `${process.env.USERS_SVC_URL}:${process.env.USERS_SVC_PORT}`, - url: `127.0.0.1:50054`, - package: 'transformation', - protoPath: join(__dirname, '..', 'proto', 'transformation.proto'), - loader: { - enums: String, - objects: true, - arrays: true, - }, - }, -}; diff --git a/src/transformations/dto/create-transformation.dto.ts b/src/transformations/dto/create-transformation.dto.ts deleted file mode 100644 index 1e2f42e..0000000 --- a/src/transformations/dto/create-transformation.dto.ts +++ /dev/null @@ -1,11 +0,0 @@ - - -export class CreateTransformationDto { - inputSource:string; - - table:string; - - type:string; - - params:string; -} diff --git a/src/transformations/dto/update-transformation.dto.ts b/src/transformations/dto/update-transformation.dto.ts deleted file mode 100644 index b9fcab6..0000000 --- a/src/transformations/dto/update-transformation.dto.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { PartialType } from '@nestjs/mapped-types'; -import { CreateTransformationDto } from './create-transformation.dto'; - -export class UpdateTransformationDto extends PartialType(CreateTransformationDto) { -} diff --git a/src/transformations/entities/transformation.entity.ts b/src/transformations/entities/transformation.entity.ts deleted file mode 100644 index 6f067a7..0000000 --- a/src/transformations/entities/transformation.entity.ts +++ /dev/null @@ -1,14 +0,0 @@ -export class Transformation { - - id:string; - - inputSource:string; - - table:string; - - type:string; - - params:string; - - -} diff --git a/src/transformations/proto/transformation.proto b/src/transformations/proto/transformation.proto deleted file mode 100644 index 55f553e..0000000 --- a/src/transformations/proto/transformation.proto +++ /dev/null @@ -1,49 +0,0 @@ -syntax = "proto3"; - -package transformation; - - -import "google/protobuf/timestamp.proto"; - - - -service TransformationService { - rpc Create(CreateTransformationRequest) returns (Transformation) {} - rpc Show(IdRequest) returns (Transformation) {} - rpc List(Empty) returns (ListResponse){} - rpc Update(UpdateTransformationRequest) returns (Transformation){} - rpc Remove(IdRequest) returns (Empty){} -} - -message Empty {} - -message IdRequest{ - string id = 1; -} - -message UpdateTransformationRequest{ - string id = 1; - string inputSource = 2; - string table = 3; - string type = 4; - string params = 5; -} - -message Transformation { - string id = 1; - string inputSource = 2; - string table = 3; - string type = 4; - string params = 5; -} - -message CreateTransformationRequest { - string inputSource = 1; - string table = 2; - string type = 3; - string params = 4; -} - -message ListResponse { - repeated Transformation transformations = 2; -} diff --git a/src/transformations/transformations.controller.spec.ts b/src/transformations/transformations.controller.spec.ts deleted file mode 100644 index 77899d9..0000000 --- a/src/transformations/transformations.controller.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { TransformationsController } from './transformations.controller'; -import { TransformationsService } from './transformations.service'; - -describe('TransformationsController', () => { - let controller: TransformationsController; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - controllers: [TransformationsController], - providers: [TransformationsService], - }).compile(); - - controller = module.get( - TransformationsController, - ); - }); - - it('should be defined', () => { - expect(controller).toBeDefined(); - }); -}); diff --git a/src/transformations/transformations.controller.ts b/src/transformations/transformations.controller.ts deleted file mode 100644 index c4206eb..0000000 --- a/src/transformations/transformations.controller.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { - Controller, - Delete, - Get, - OnModuleInit, - Param, - Post, - Put, -} from '@nestjs/common'; -import { - Client, - ClientGrpc, - MessagePattern, - Payload, -} from '@nestjs/microservices'; -import { TransformationsService } from './transformations.service'; -import { CreateTransformationDto } from './dto/create-transformation.dto'; -import { UpdateTransformationDto } from './dto/update-transformation.dto'; -import { ApiTags } from '@nestjs/swagger'; -import { GrpcClientConfiguration } from './config/grpc-client'; - -@Controller('transformation') -export class TransformationsController implements OnModuleInit { - @Client(GrpcClientConfiguration) - private transformationServiceClient: ClientGrpc; - - private transformationService: TransformationsService; - - onModuleInit() { - this.transformationService = - this.transformationServiceClient.getService( - 'TransformationService', - ); - } - - @Post() - create(@Payload() createTransformationDto: CreateTransformationDto[]) { - return createTransformationDto.map((transf) => - this.transformationService.create(transf), - ); - } - - @Get() - list() { - return this.transformationService.list(); - } - - @Get(':id') - show(@Payload() id: string) { - return this.transformationService.show(id); - } - - @Put(':id') - update( - @Param() id: string, - @Payload() updateTransformationDto: UpdateTransformationDto, - ) { - return this.transformationService.update(id, updateTransformationDto); - } - - @Delete(':id') - remove(@Param() id: string) { - return this.transformationService.remove(id); - } -} diff --git a/src/transformations/transformations.module.ts b/src/transformations/transformations.module.ts deleted file mode 100644 index 6e54df6..0000000 --- a/src/transformations/transformations.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { TransformationsService } from './transformations.service'; -import { TransformationsController } from './transformations.controller'; - -@Module({ - controllers: [TransformationsController], - providers: [TransformationsService], -}) -export class TransformationsModule {} diff --git a/src/transformations/transformations.service.spec.ts b/src/transformations/transformations.service.spec.ts deleted file mode 100644 index 1c78677..0000000 --- a/src/transformations/transformations.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { TransformationsService } from './transformations.service'; - -describe('TransformationsService', () => { - let service: TransformationsService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [TransformationsService], - }).compile(); - - service = module.get(TransformationsService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/transformations/transformations.service.ts b/src/transformations/transformations.service.ts deleted file mode 100644 index 44a373e..0000000 --- a/src/transformations/transformations.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateTransformationDto } from './dto/create-transformation.dto'; -import { UpdateTransformationDto } from './dto/update-transformation.dto'; - -@Injectable() -export class TransformationsService { - create(createTransformationDto: CreateTransformationDto) { - return 'This action adds a new transformation'; - } - - list() { - return `This action returns all transformations`; - } - - show(id: string) { - return `This action returns a #${id} transformation`; - } - - update(id: string, updateTransformationDto: UpdateTransformationDto) { - return `This action updates a #${id} transformation`; - } - - remove(id: string) { - return `This action removes a #${id} transformation`; - } -} diff --git a/src/users-grpc-client/config/grpc-client.ts b/src/users-grpc-client/config/grpc-client.ts deleted file mode 100644 index ebec6ef..0000000 --- a/src/users-grpc-client/config/grpc-client.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { join } from 'path'; -import { ClientOptions, Transport } from '@nestjs/microservices'; - -export const GrpcClientConfiguration: ClientOptions = { - transport: Transport.GRPC, - options: { - //url: `${process.env.USERS_SVC_URL}:${process.env.USERS_SVC_PORT}`, - url: `127.0.0.1:50051`, - package: 'user', - protoPath: join(__dirname, '..', 'proto', 'user.proto'), - loader: { - enums: String, - objects: true, - arrays: true, - }, - }, -}; diff --git a/src/users-grpc-client/dto/create-users-grpc-client.dto.ts b/src/users-grpc-client/dto/create-users-grpc-client.dto.ts deleted file mode 100644 index b05e8f2..0000000 --- a/src/users-grpc-client/dto/create-users-grpc-client.dto.ts +++ /dev/null @@ -1 +0,0 @@ -export class CreateUsersGrpcClientDto {} diff --git a/src/users-grpc-client/dto/update-users-grpc-client.dto.ts b/src/users-grpc-client/dto/update-users-grpc-client.dto.ts deleted file mode 100644 index b71a964..0000000 --- a/src/users-grpc-client/dto/update-users-grpc-client.dto.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { PartialType } from '@nestjs/mapped-types'; -import { CreateUsersGrpcClientDto } from './create-users-grpc-client.dto'; - -export class UpdateUsersGrpcClientDto extends PartialType( - CreateUsersGrpcClientDto, -) { - id: number; -} diff --git a/src/users-grpc-client/entities/users-grcp-client.entity.ts b/src/users-grpc-client/entities/users-grcp-client.entity.ts deleted file mode 100644 index efc66ac..0000000 --- a/src/users-grpc-client/entities/users-grcp-client.entity.ts +++ /dev/null @@ -1 +0,0 @@ -export class UsersGrpcClient {} diff --git a/src/users-grpc-client/proto/user.proto b/src/users-grpc-client/proto/user.proto deleted file mode 100644 index 3ce8dad..0000000 --- a/src/users-grpc-client/proto/user.proto +++ /dev/null @@ -1,37 +0,0 @@ -syntax = "proto3"; - -package user; - - -import "google/protobuf/timestamp.proto"; - - - -service UserService { - rpc Create(UserRequest) returns (UserResponse) {} - rpc Show(Empty) returns (ShowResponse) {} -} - -message Empty {} - -message User { - int32 id = 1; - string name = 2; - string email = 3; - uint64 created_at = 4; - string updated_at = 5; -} - -message UserRequest { - string name = 1; - string email = 2; - -} - -message UserResponse { - User user = 1; -} - -message ShowResponse { - repeated UserResponse users = 1; -} diff --git a/src/users-grpc-client/users-grpc-client.controller.ts b/src/users-grpc-client/users-grpc-client.controller.ts deleted file mode 100644 index 88d9298..0000000 --- a/src/users-grpc-client/users-grpc-client.controller.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { - Get, - Post, - Controller, - Delete, - OnModuleInit, - Put, - Query, -} from '@nestjs/common'; -import { Client, ClientGrpc, Payload } from '@nestjs/microservices'; -import { CreateUsersGrpcClientDto } from './dto/create-users-grpc-client.dto'; -import { UpdateUsersGrpcClientDto } from './dto/update-users-grpc-client.dto'; -import { UsersGrpcClientService } from './users-grpc-client.service'; -import { GrpcClientConfiguration } from './config/grpc-client'; - -@Controller('users-grpc-client') -export class UsersGrpcClientController implements OnModuleInit { - @Client(GrpcClientConfiguration) - private usersServiceClient: ClientGrpc; - - private usersService: UsersGrpcClientService; - - onModuleInit() { - this.usersService = - this.usersServiceClient.getService('UserService'); - } - - @Post() - async create(@Payload() createUserDto: CreateUsersGrpcClientDto) { - return this.usersService.create(createUserDto); - } - - @Get() - findAll() { - return this.usersService.findAll(); - } - - @Get(':id') - findOne(@Query() id: string) { - return this.usersService.findOne(id); - } - - @Put() - update( - @Payload() updateUserDto: UpdateUsersGrpcClientDto, - @Query() id: string, - ) { - return this.usersService.update(id, updateUserDto); - } - - @Delete() - remove(@Query() id: string) { - return this.usersService.remove(id); - } -} diff --git a/src/users-grpc-client/users-grpc-client.module.ts b/src/users-grpc-client/users-grpc-client.module.ts deleted file mode 100644 index 6a10d16..0000000 --- a/src/users-grpc-client/users-grpc-client.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { UsersGrpcClientService } from './users-grpc-client.service'; -import { UsersGrpcClientController } from './users-grpc-client.controller'; - -@Module({ - controllers: [UsersGrpcClientController], - providers: [UsersGrpcClientService], -}) -export class UsersGrpcClientModule {} diff --git a/src/users-grpc-client/users-grpc-client.service.spec.ts b/src/users-grpc-client/users-grpc-client.service.spec.ts deleted file mode 100644 index 88bcaca..0000000 --- a/src/users-grpc-client/users-grpc-client.service.spec.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { UsersGrpcClientService } from './users-grpc-client.service'; - -describe('UsersGrcpClientService', () => { - let service: UsersGrpcClientService; - - beforeEach(async () => { - const module: TestingModule = await Test.createTestingModule({ - providers: [UsersGrpcClientService], - }).compile(); - - service = module.get(UsersGrpcClientService); - }); - - it('should be defined', () => { - expect(service).toBeDefined(); - }); -}); diff --git a/src/users-grpc-client/users-grpc-client.service.ts b/src/users-grpc-client/users-grpc-client.service.ts deleted file mode 100644 index 827816d..0000000 --- a/src/users-grpc-client/users-grpc-client.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateUsersGrpcClientDto } from './dto/create-users-grpc-client.dto'; -import { UpdateUsersGrpcClientDto } from './dto/update-users-grpc-client.dto'; - -@Injectable() -export class UsersGrpcClientService { - create(createUsersGrcpClientDto: CreateUsersGrpcClientDto) { - return 'This action adds a new usersGrcpClient'; - } - - findAll() { - return `This action returns all usersGrcpClient`; - } - - findOne(id: string) { - return `This action returns a #${id} usersGrcpClient`; - } - - update(id: string, updateUsersGrcpClientDto: UpdateUsersGrpcClientDto) { - return `This action updates a #${id} usersGrcpClient`; - } - - remove(id: string) { - return `This action removes a #${id} usersGrcpClient`; - } -} diff --git a/src/utils/Authenticate.ts b/src/utils/Authenticate.ts deleted file mode 100644 index e9b4627..0000000 --- a/src/utils/Authenticate.ts +++ /dev/null @@ -1,29 +0,0 @@ -import axios from "axios"; - - -export class AuthenticateController{ - - private username:string; - private password:string; - - constructor(){ - this.username = process.env.AUTH_USERNAME - this.password = process.env.AUTH_PASSWORD - } - - - - async authenticate():Promise{ - - const response = await axios.post(process.env.AUTH_ROUTE, - { - username:this.username, - password:this.password - } - ) - - return response.data.accessToken - } - - -} diff --git a/src/utils/CaseConverter.ts b/src/utils/CaseConverter.ts new file mode 100644 index 0000000..741c3cf --- /dev/null +++ b/src/utils/CaseConverter.ts @@ -0,0 +1,62 @@ +export const objectCamelToSnake = (object) => { + const objectKeys = Object.keys(object); + const objectValues = Object.values(object); + + const newKeys = objectKeys.map((key) => { + return key + .split(/(?=[A-Z])/) + .join('_') + .toLowerCase(); + }); + + objectKeys.forEach((key, index) => { + object[newKeys[index]] = object[key]; + if (newKeys[index] !== objectKeys[index]) { + delete object[key]; + } + }); + + objectValues.forEach((value) => { + if (typeof value === 'object') { + objectCamelToSnake(value); + } + }); + + return object; +}; + +export const objectSnakeToCamel = (object) => { + const objectKeys = Object.keys(object); + const objectValues = Object.values(object); + + const newKeys = objectKeys.map((key) => { + return key.replace(/([-_][a-z])/gi, ($1) => { + return $1.toUpperCase().replace('-', '').replace('_', ''); + }); + }); + + objectKeys.forEach((key, index) => { + object[newKeys[index]] = object[key]; + if (newKeys[index] !== objectKeys[index]) { + delete object[key]; + } + }); + objectValues.forEach((value) => { + if (value == null) return; + if (typeof value === 'object') { + objectSnakeToCamel(value); + } + }); + + return object; +}; + +export const trSnakeToCamel = (object) => { + const convertedParams = object.params.map((param) => { + return objectSnakeToCamel(param); + }); + + object.params = convertedParams; + + return objectSnakeToCamel(object); +}; diff --git a/swagger.json b/swagger.json index 1ed2c5f..539ae84 100644 --- a/swagger.json +++ b/swagger.json @@ -1 +1 @@ -{"openapi":"3.0.0","paths":{"/input/test-connection":{"post":{"operationId":"RestInputsController_testConnection","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/testConnectionDTO"}}}},"responses":{"201":{"description":""}},"tags":["Inputs"],"security":[{"bearer":[]}]}},"/input":{"post":{"operationId":"RestInputsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRestInputDto"}}}},"responses":{"201":{"description":""}},"tags":["Inputs"],"security":[{"bearer":[]}]},"get":{"operationId":"RestInputsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Inputs"],"security":[{"bearer":[]}]}},"/input/{id}":{"get":{"operationId":"RestInputsController_show","parameters":[],"responses":{"200":{"description":""}},"tags":["Inputs"],"security":[{"bearer":[]}]},"put":{"operationId":"RestInputsController_update","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRestInputDto"}}}},"responses":{"200":{"description":""}},"tags":["Inputs"],"security":[{"bearer":[]}]},"delete":{"operationId":"RestInputsController_delete","parameters":[],"responses":{"200":{"description":""}},"tags":["Inputs"],"security":[{"bearer":[]}]}},"/output":{"post":{"operationId":"RestOutputsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRestOutputDto"}}}},"responses":{"201":{"description":""}},"tags":["Outputs"],"security":[{"bearer":[]}]},"get":{"operationId":"RestOutputsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Outputs"],"security":[{"bearer":[]}]}},"/output/{id}":{"get":{"operationId":"RestOutputsController_show","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Outputs"],"security":[{"bearer":[]}]},"put":{"operationId":"RestOutputsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRestOutputDto"}}}},"responses":{"200":{"description":""}},"tags":["Outputs"],"security":[{"bearer":[]}]},"delete":{"operationId":"RestOutputsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Outputs"],"security":[{"bearer":[]}]}},"/enrichment":{"post":{"operationId":"RestEnrichmentsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRestEnrichmentDto"}}}},"responses":{"201":{"description":""}},"tags":["Enrichments"]},"get":{"operationId":"RestEnrichmentsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Enrichments"]}},"/enrichment/{id}":{"get":{"operationId":"RestEnrichmentsController_show","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Enrichments"]},"put":{"operationId":"RestEnrichmentsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRestEnrichmentDto"}}}},"responses":{"200":{"description":""}},"tags":["Enrichments"]},"delete":{"operationId":"RestEnrichmentsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Enrichments"]}},"/transformation":{"post":{"operationId":"RestTransformationsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRestTransformationDto"}}}},"responses":{"201":{"description":""}},"tags":["Transformations"],"security":[{"bearer":[]}]},"get":{"operationId":"RestTransformationsController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Transformations"],"security":[{"bearer":[]}]}},"/transformation/{id}":{"get":{"operationId":"RestTransformationsController_show","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Transformations"],"security":[{"bearer":[]}]},"put":{"operationId":"RestTransformationsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRestTransformationDto"}}}},"responses":{"200":{"description":""}},"tags":["Transformations"],"security":[{"bearer":[]}]},"delete":{"operationId":"RestTransformationsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Transformations"],"security":[{"bearer":[]}]}},"/pipeline":{"post":{"operationId":"RestPipelinesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRestPipelineDto"}}}},"responses":{"201":{"description":""}},"tags":["Pipelines"],"security":[{"bearer":[]}]},"get":{"operationId":"RestPipelinesController_list","parameters":[],"responses":{"200":{"description":""}},"tags":["Pipelines"],"security":[{"bearer":[]}]}},"/pipeline/{id}/logs/details":{"get":{"operationId":"RestPipelinesController_showLogs","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pipelines"],"security":[{"bearer":[]}]}},"/pipeline/{id}/status":{"get":{"operationId":"RestPipelinesController_showStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pipelines"],"security":[{"bearer":[]}]}},"/pipeline/{id}":{"get":{"operationId":"RestPipelinesController_show","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pipelines"],"security":[{"bearer":[]}]},"put":{"operationId":"RestPipelinesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRestPipelineDto"}}}},"responses":{"200":{"description":""}},"tags":["Pipelines"],"security":[{"bearer":[]}]},"delete":{"operationId":"RestPipelinesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Pipelines"],"security":[{"bearer":[]}]}},"/user/register":{"post":{"operationId":"RestUserController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRestUserDto"}}}},"responses":{"201":{"description":""}},"tags":["Users"]}},"/user/auth":{"post":{"operationId":"RestUserController_auth","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserAuthDTO"}}}},"responses":{"201":{"description":""}},"tags":["Users"]}},"/user/confirm":{"post":{"operationId":"RestUserController_confirm","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserConfirmationDTO"}}}},"responses":{"201":{"description":""}},"tags":["Users"]}},"/user/resendCode":{"post":{"operationId":"RestUserController_resendCode","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendCodeDTO"}}}},"responses":{"201":{"description":""}},"tags":["Users"]}},"/factory/start":{"get":{"operationId":"RestFactoryController_startDagFactory","parameters":[],"responses":{"200":{"description":""}},"tags":["Dag Factory"],"security":[{"bearer":[]}]}},"/factory/pipeline_params":{"get":{"operationId":"RestFactoryController_sendJSONSettingsToDagFactory","parameters":[],"responses":{"200":{"description":""}},"tags":["Dag Factory"],"security":[{"bearer":[]}]}},"/factory/start/{pipelineId}":{"get":{"operationId":"RestFactoryController_startDag","parameters":[{"name":"pipelineId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Dag Factory"],"security":[{"bearer":[]}]}},"/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":""}}}}},"info":{"title":"Maestro Grpc Documentation","description":"Documentation for Maestro gateway","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{"testConnectionDTO":{"type":"object","properties":{"plugin":{"type":"string","description":"Input Plugin Name","example":"mysql"},"values":{"type":"object","description":"Plugin name","example":{"plugin":"mysql","values":{"jdbc_user":"test","jdbc_password":"test1234","database":"users","endpoint":"dadosfera.test123.us-east-1.rds.amazonaws.com","schema":"user","port":"5432","engine":"mysql"}}}},"required":["plugin","values"]},"CronDTO":{"type":"object","properties":{"hours":{"description":"Hours to the cron","example":["3","7"],"type":"array","items":{"type":"string"}},"hour_interval":{"type":"boolean","description":"Boolean for hour interval","example":true},"hour_resourse":{"type":"boolean","description":"Boolean for hour resourse","example":true},"hour_resourse_value":{"type":"number","description":"Value for hour resourse","example":3},"month_day":{"description":"Month day to the cron","example":["3"],"type":"array","items":{"type":"string"}},"month_day_interval":{"type":"boolean","description":"Boolean for month day interval","example":true},"month_day_resourse":{"type":"boolean","description":"Boolean for month day resourse","example":false},"month_day_resourse_value":{"type":"number","description":"Value for month day resourse","example":null},"month":{"description":"Month to the cron","example":["3"],"type":"array","items":{"type":"string"}},"month_interval":{"type":"boolean","description":"Boolean from month interval","example":false},"month_resourse":{"type":"boolean","description":"Boolean from month resourse","example":false},"month_resourse_value":{"type":"number","description":"Value to month resourse","example":null},"week_days":{"description":"Week days to the cron","example":[],"type":"array","items":{"type":"string"}},"week_days_interval":{"type":"boolean","description":"Boolean for the week days","example":false},"week_days_resourse":{"type":"boolean","description":"Boolean for week day resourse","example":false},"week_days_resourse_value":{"type":"number","description":"Hours to the cron","example":null}},"required":["hours","hour_interval","hour_resourse","hour_resourse_value","month_day","month_day_interval","month_day_resourse","month_day_resourse_value","month","month_interval","month_resourse","month_resourse_value","week_days","week_days_interval","week_days_resourse","week_days_resourse_value"]},"CreateRestInputDto":{"type":"object","properties":{"cron":{"description":"Input CRON","example":{"hours":["3","7"],"hour_interval":true,"hour_resourse":true,"hour_resourse_value":3,"month_day":["3"],"month_day_interval":true,"month_day_resourse":false,"month_day_resourse_value":null,"month":["3"],"month_interval":false,"month_resourse":false,"month_resourse_value":null,"week_days":[],"week_days_interval":false,"week_days_resourse":false,"week_days_resourse_value":null},"allOf":[{"$ref":"#/components/schemas/CronDTO"}]},"name":{"type":"string","description":"Name of the input","example":"Test_Input"},"plugin":{"type":"string","description":"Plugin","example":"s3"},"values":{"type":"object","description":"Values for choosen input","example":{"jdbc_user":"user123","jdbc_password":"password123","database":"default_database","endpoint":"dadosfera-postgres-db.test123.us-east-1.rds.amazonaws.com","table":"test_table","port":"5432","engine":"postgresql"}},"operation":{"type":"string","description":"Operation name","example":"input"}},"required":["cron","name","plugin","values","operation"]},"UpdateRestInputDto":{"type":"object","properties":{"cron":{"description":"Input CRON","example":{"hours":["3","7"],"hour_interval":true,"hour_resourse":true,"hour_resourse_value":3,"month_day":["3"],"month_day_interval":true,"month_day_resourse":false,"month_day_resourse_value":null,"month":["3"],"month_interval":false,"month_resourse":false,"month_resourse_value":null,"week_days":[],"week_days_interval":false,"week_days_resourse":false,"week_days_resourse_value":null},"allOf":[{"$ref":"#/components/schemas/CronDTO"}]},"name":{"type":"string","description":"Name of the input","example":"Test_Input"},"plugin":{"type":"string","description":"Plugin","example":"s3"},"values":{"type":"object","description":"Values for choosen input","example":{"jdbc_user":"user123","jdbc_password":"password123","database":"default_database","endpoint":"dadosfera-postgres-db.test123.us-east-1.rds.amazonaws.com","table":"test_table","port":"5432","engine":"postgresql"}},"operation":{"type":"string","description":"Operation name","example":"input"}}},"CreateRestOutputDto":{"type":"object","properties":{"name":{"type":"string","description":"Output name","example":"Test Output"},"plugin":{"type":"string","description":"Plugin name","example":"Test Plugin"},"values":{"type":"object","description":"Plugin values","example":{"prefix":"test"}},"operation":{"type":"string","description":"Operation name","example":"output"}},"required":["name","plugin","values","operation"]},"UpdateRestOutputDto":{"type":"object","properties":{"name":{"type":"string","description":"Output name","example":"Test Output"},"plugin":{"type":"string","description":"Plugin name","example":"Test Plugin"},"values":{"type":"object","description":"Plugin values","example":{"prefix":"test"}},"operation":{"type":"string","description":"Operation name","example":"output"}}},"CreateRestEnrichmentDto":{"type":"object","properties":{}},"UpdateRestEnrichmentDto":{"type":"object","properties":{}},"CreateRestTransformationDto":{"type":"object","properties":{"transformations":{"type":"object","description":"Array of transformations","example":[{"type":"hide_full_name","params":[{"base_column":"full_name","column_name":"hiden_full_name"}]},{"type":"hide_cpf","params":[{"base_column":"cpf","column_name":"cpf_hashed"}]}]}},"required":["transformations"]},"UpdateRestTransformationDto":{"type":"object","properties":{"transformations":{"type":"object","description":"Array of transformations","example":[{"type":"hide_full_name","params":[{"base_column":"full_name","column_name":"hiden_full_name"}]},{"type":"hide_cpf","params":[{"base_column":"cpf","column_name":"cpf_hashed"}]}]}}},"CreateRestPipelineDto":{"type":"object","properties":{"input":{"type":"object","description":"Pipeline Input","example":{"id":"ac8f828a-708d-4f28-a5b4-0170eaf96843"}},"transformations":{"description":"Pipeline Transformations","example":[{"id":"b2579a1a-2874-47f6-b609-7568a2930468"},{"id":"6bac1a1a-3037-474f-8211-c3ceb8ea04e8"}],"type":"array","items":{"type":"string"}},"output":{"type":"object","description":"Pipeline Output","example":{"id":"06f9ce35-d9c0-4f95-a49b-c09ea00b8e48"}},"tags":{"description":"Pipeline Tags","example":[],"type":"array","items":{"type":"string"}},"name":{"type":"string","description":"Pipeline Name","example":"Dadosfera Pipeline"},"description":{"type":"string","description":"Pipeline Description","example":"Example pipeline"}},"required":["input","transformations","output","tags","name","description"]},"UpdateRestPipelineDto":{"type":"object","properties":{"input":{"type":"object","description":"Pipeline Input","example":{"id":"ac8f828a-708d-4f28-a5b4-0170eaf96843"}},"transformations":{"description":"Pipeline Transformations","example":[{"id":"b2579a1a-2874-47f6-b609-7568a2930468"},{"id":"6bac1a1a-3037-474f-8211-c3ceb8ea04e8"}],"type":"array","items":{"type":"string"}},"output":{"type":"object","description":"Pipeline Output","example":{"id":"06f9ce35-d9c0-4f95-a49b-c09ea00b8e48"}},"tags":{"description":"Pipeline Tags","example":[],"type":"array","items":{"type":"string"}},"name":{"type":"string","description":"Pipeline Name","example":"Dadosfera Pipeline"},"description":{"type":"string","description":"Pipeline Description","example":"Example pipeline"}}},"CreateRestUserDto":{"type":"object","properties":{"email":{"type":"string","description":"User Email","example":"dev@dadosfera.ai"},"password":{"type":"string","description":"User Password","example":"dadospassword123"},"username":{"type":"string","description":"User Username","example":"dev_fera"},"name":{"type":"string","description":"User name","example":"Fulano da Silva"},"customer_id":{"type":"string","description":"Customer id","example":"dadosfera"},"rules":{"type":"string","description":"User rules","example":"['admin']"}},"required":["email","password","username","name","customer_id","rules"]},"UserAuthDTO":{"type":"object","properties":{"username":{"type":"string","description":"User username","example":"dev_fera"},"password":{"type":"string","description":"User password","example":"dadospassword123"}},"required":["username","password"]},"UserConfirmationDTO":{"type":"object","properties":{"username":{"type":"string","description":"User username","example":"dev_fera"},"confirmationCode":{"type":"string","description":"Received Confirmation Code","example":"315246"}},"required":["username","confirmationCode"]},"ResendCodeDTO":{"type":"object","properties":{"username":{"type":"string","description":"User username","example":"dev_fera"}},"required":["username"]}}}} +{"openapi":"3.0.0","paths":{"/inputs/test-connection":{"post":{"operationId":"InputsController_testConnection","parameters":[],"responses":{"201":{"description":""}}}},"/inputs":{"post":{"operationId":"InputsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"InputsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/inputs/{id}":{"get":{"operationId":"InputsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"InputsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"InputsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/transformations":{"post":{"operationId":"TransformationsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"TransformationsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/transformations/{id}":{"get":{"operationId":"TransformationsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"TransformationsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"TransformationsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/outputs":{"post":{"operationId":"OutputsController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"OutputsController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/outputs/{id}":{"get":{"operationId":"OutputsController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"OutputsController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"OutputsController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}/status":{"get":{"operationId":"PipelinesController_getPipelineStatus","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}/{details}":{"get":{"operationId":"PipelinesController_getPipelineLogs","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines":{"post":{"operationId":"PipelinesController_create","parameters":[],"responses":{"201":{"description":""}}},"get":{"operationId":"PipelinesController_findAll","parameters":[],"responses":{"200":{"description":""}}}},"/pipelines/{id}":{"get":{"operationId":"PipelinesController_findOne","parameters":[],"responses":{"200":{"description":""}}},"put":{"operationId":"PipelinesController_update","parameters":[],"responses":{"200":{"description":""}}},"delete":{"operationId":"PipelinesController_delete","parameters":[],"responses":{"200":{"description":""}}}},"/auth":{"post":{"operationId":"AuthController_signIn","parameters":[],"responses":{"201":{"description":""}}}},"/health":{"get":{"operationId":"HealthController_check","parameters":[],"responses":{"200":{"description":""}}}}},"info":{"title":"Maestro Grpc Documentation","description":"Documentation for Maestro gateway","version":"1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"}},"schemas":{}}} \ No newline at end of file