diff --git a/.circleci/config.yml b/.circleci/config.yml index f53927f6e..9084f075f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -109,10 +109,14 @@ jobs: name: Install general dependencies command: *defaults_Dependencies - checkout - - restore_cache: - name: Restore Yarn Package Cache - keys: - - yarn-packages-{{ checksum "yarn.lock" }} + ## TODO: figure out why jest is not installed + # - restore_cache: + # name: Restore Yarn Package Cache + # keys: + # - yarn-packages-{{ checksum "yarn.lock" }} + - run: + name: Install Yarn dependencies + command: yarn install - run: name: Execute unit tests command: yarn run test:unit @@ -121,6 +125,7 @@ jobs: - store_artifacts: path: /home/circleci/project/junit.xml + ## TODO: Fix Integration tests test-integration: executor: default-machine steps: diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..f30343f28 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,18 @@ +deploy/ +coverage/ +node_modules/ +.dockerignore +.editorconfig +.git/ +.gitignore +.istanbul.yml +circle.yml +docker-compose.circle.yml +docker-compose.dev.yml +docker-compose.functional.yml +docker-compose.yml +Dockerfile +LICENSE +README.md +sonar-project.properties +.devspace/ diff --git a/.npmignore b/.npmignore new file mode 100644 index 000000000..1640b92cc --- /dev/null +++ b/.npmignore @@ -0,0 +1,2 @@ +# Ignore tests for publishing +test/* diff --git a/Dockerfile b/Dockerfile index d2a7b135f..a42d3a19f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ RUN apk add --no-cache git python3 build-base EXPOSE 3000 -WORKDIR /src +WORKDIR /opt/app # This is super-ugly, but it means we don't have to re-run npm install every time any of the source # files change- only when any dependencies change- which is a superior developer experience when @@ -12,7 +12,11 @@ WORKDIR /src COPY ./package.json . COPY ./package-lock.json . RUN npm ci --only=production + + FROM node:16.15.0-alpine +WORKDIR /opt/app + ARG BUILD_DATE ARG VCS_URL @@ -28,11 +32,13 @@ LABEL org.label-schema.vcs-ref=$VCS_REF LABEL org.label-schema.url="https://mojaloop.io/" LABEL org.label-schema.version=$VERSION -COPY --from=builder /src/ /src -COPY ./src ./src -COPY ./secrets / +# Create a non-root user: ml-user +RUN adduser -D ml-user + +COPY src /opt/app/src -CMD ["node", "src/index.js"] +USER ml-user +COPY --chown=ml-user --from=builder /opt/app . -# TODO: compose the docker image \ No newline at end of file +CMD ["npm", "run", "start"] diff --git a/README.md b/README.md index 0bb9729e6..ae58146bb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ [![Git Commit](https://img.shields.io/github/last-commit/mojaloop/sdk-scheme-adapter.svg?style=flat)](https://github.com/mojaloop/sdk-scheme-adapter/commits/master) [![Git Releases](https://img.shields.io/github/release/mojaloop/sdk-scheme-adapter.svg?style=flat)](https://github.com/mojaloop/sdk-scheme-adapter/releases) +[![Docker pulls](https://img.shields.io/docker/pulls/mojaloop/sdk-scheme-adapter.svg?style=flat)](https://hub.docker.com/r/mojaloop/sdk-scheme-adapter) [![Npm Version](https://img.shields.io/npm/v/@mojaloop/sdk-scheme-adapter.svg?style=flat)](https://www.npmjs.com/package/@mojaloop/sdk-scheme-adapter) [![NPM Vulnerabilities](https://img.shields.io/snyk/vulnerabilities/npm/@mojaloop/sdk-scheme-adapter.svg?style=flat)](https://www.npmjs.com/package/@mojaloop/sdk-scheme-adapter) [![CircleCI](https://circleci.com/gh/mojaloop/sdk-scheme-adapter.svg?style=svg)](https://circleci.com/gh/mojaloop/sdk-scheme-adapter) diff --git a/audit-ci.jsonc b/audit-ci.jsonc index dc7981356..9c733d55a 100644 --- a/audit-ci.jsonc +++ b/audit-ci.jsonc @@ -11,6 +11,7 @@ "GHSA-6vfc-qv3f-vr6c", "GHSA-rjqq-98f6-6j3r", "GHSA-phwq-j96m-2c2q", - "GHSA-pfrx-2q88-qq97" + "GHSA-pfrx-2q88-qq97", + "GHSA-wc69-rhjr-hc9g" ] } \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 33b4bcae9..d943a6a02 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,9 +22,10 @@ services: - "4002:4002" depends_on: - redis - command: sh -c "/wait4/wait4.js sdk-scheme-adapter; node src/index.js" + command: sh -c "/tmp/wait4/wait4.js sdk-scheme-adapter && npm run start" volumes: - - ./docker/wait4:/wait4 + - ./docker/wait4:/tmp/wait4 + - ./secrets:/opt/app/secrets ml-testing-toolkit: networks: diff --git a/modules/api-svc/CHANGELOG.md b/modules/api-svc/CHANGELOG.md index 02d2f518f..03e3a5710 100644 --- a/modules/api-svc/CHANGELOG.md +++ b/modules/api-svc/CHANGELOG.md @@ -1,4 +1,61 @@ -# Changelog: [mojaloop/thirdparty-api-svc](https://github.com/mojaloop/thirdparty-api-svc) +# Changelog: [mojaloop/sdk-scheme-adapter](https://github.com/mojaloop/sdk-scheme-adapter) +### [18.0.1](https://github.com/mojaloop/sdk-scheme-adapter/compare/v18.0.0...v18.0.1) (2022-07-12) + + +### Chore + +* added .npmignore so that the test folder is not included when publishing packages ([#332](https://github.com/mojaloop/sdk-scheme-adapter/issues/332)) ([602b3ab](https://github.com/mojaloop/sdk-scheme-adapter/commit/602b3abfe861123623768e2a1c3497063ce4b909)) +* uodated deps ([#333](https://github.com/mojaloop/sdk-scheme-adapter/issues/333)) ([7f9e027](https://github.com/mojaloop/sdk-scheme-adapter/commit/7f9e0277ff760ad22ab29dc3abee20322030d7dc)) + +## [18.0.0](https://github.com/mojaloop/sdk-scheme-adapter/compare/v17.0.1...v18.0.0) (2022-07-11) + + +### ⚠ BREAKING CHANGES + +* **mojaloop/#2811:** docker image now uses `/opt/app` instead of the root folder which will impact config mounts, and the secrets folder is no longer included in the docker image which aligns with best practices. Both these changes should NOT be a breaking change but I have marked them as such to make this change more obvious. + +### Bug Fixes + +* **mojaloop/#2811:** sdk-scheme-adapter sending incorrect transferState on a PUT transfers Callback ([#331](https://github.com/mojaloop/sdk-scheme-adapter/issues/331)) ([f7e450c](https://github.com/mojaloop/sdk-scheme-adapter/commit/f7e450cc2568f70f6c9abbb39d9c2186787c31b7)), closes [mojaloop/#2811](https://github.com/mojaloop/sdk-scheme-adapter/issues/2811) [mojaloop/#2811](https://github.com/mojaloop/sdk-scheme-adapter/issues/2811) [mojaloop/#2816](https://github.com/mojaloop/sdk-scheme-adapter/issues/2816) +* updated dependencies ([6500476](https://github.com/mojaloop/sdk-scheme-adapter/commit/650047699ce7679d21a08daa1fb3cf2956b0e514)) + +### [17.0.1](https://github.com/mojaloop/sdk-scheme-adapter/compare/v17.0.0...v17.0.1) (2022-07-04) + + +### Bug Fixes + +* creating inbound server ([#329](https://github.com/mojaloop/sdk-scheme-adapter/issues/329)) ([962420f](https://github.com/mojaloop/sdk-scheme-adapter/commit/962420f6fed02722c5a9aeee6c108b6fbc9f021d)) + +## [17.0.0](https://github.com/mojaloop/sdk-scheme-adapter/compare/v15.0.1...v17.0.0) (2022-07-04) + + +### ⚠ BREAKING CHANGES + +* add dummy pr to major version bump due to unsquashed title (#327) + +### Features + +* suppress health check logs ([#328](https://github.com/mojaloop/sdk-scheme-adapter/issues/328)) ([64fadde](https://github.com/mojaloop/sdk-scheme-adapter/commit/64faddea8307aa0c19d56466d0afe8f8208c4d66)) + + +### Chore + +* add dummy pr to major version bump due to unsquashed title ([#327](https://github.com/mojaloop/sdk-scheme-adapter/issues/327)) ([ff0f29b](https://github.com/mojaloop/sdk-scheme-adapter/commit/ff0f29b7ce560565ee21cf6ae84118e1b391b5b5)) +* **release:** 16.0.0 [skip ci] ([0071c65](https://github.com/mojaloop/sdk-scheme-adapter/commit/0071c65c3665239d0a482e76498f9eec5c288043)) + +## [16.0.0](https://github.com/mojaloop/sdk-scheme-adapter/compare/v15.0.1...v16.0.0) (2022-07-01) + + +### ⚠ BREAKING CHANGES + +* add dummy pr to major version bump due to unsquashed title (#327) + +### Chore + +* add dummy pr to major version bump due to unsquashed title ([#327](https://github.com/mojaloop/sdk-scheme-adapter/issues/327)) ([ff0f29b](https://github.com/mojaloop/sdk-scheme-adapter/commit/ff0f29b7ce560565ee21cf6ae84118e1b391b5b5)) + +### [15.0.1](https://github.com/mojaloop/sdk-scheme-adapter/compare/v15.0.0...v15.0.1) (2022-07-01) + ## [15.0.0](https://github.com/mojaloop/sdk-scheme-adapter/compare/v14.0.0...v15.0.0) (2022-06-17) diff --git a/modules/api-svc/audit-resolve.json b/modules/api-svc/audit-resolve.json index 9fbf5713a..a7963b3bd 100644 --- a/modules/api-svc/audit-resolve.json +++ b/modules/api-svc/audit-resolve.json @@ -1,599 +1,69 @@ { "decisions": { - "1556|@mojaloop/central-services-shared>widdershins>node-fetch": { - "decision": "fix", - "madeAt": 1624032509533 - }, - "1589|@mojaloop/central-services-shared>rc>ini": { - "decision": "fix", - "madeAt": 1624032519962 - }, - "1654|@mojaloop/central-services-shared>widdershins>swagger2openapi>yargs>y18n": { - "decision": "fix", - "madeAt": 1624032531602 - }, - "1654|@mojaloop/central-services-shared>widdershins>yargs>y18n": { - "decision": "fix", - "madeAt": 1624032531602 - }, - "1673|@mojaloop/central-services-shared>openapi-backend>lodash": { - "decision": "fix", - "madeAt": 1624032541954 - }, - "1673|@mojaloop/central-services-shared>shins>sanitize-html>lodash": { - "decision": "fix", - "madeAt": 1624032541954 - }, - "1673|koa2-oauth-server>00unidentified>lodash": { - "decision": "fix", - "madeAt": 1624032544849 - }, - "1500|@mojaloop/central-services-shared>widdershins>yargs>yargs-parser": { - "decision": "ignore", - "madeAt": 1631785234887, - "expiresAt": 1632390016480 - }, - "1675|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1631785236962, - "expiresAt": 1632390016480 - }, - "1676|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1631785236962, - "expiresAt": 1632390016480 - }, - "1766|@mojaloop/central-services-shared>widdershins>urijs": { - "decision": "fix", - "madeAt": 1627405029179 - }, - "1779|@mojaloop/event-sdk>grpc>@mapbox/node-pre-gyp>tar": { - "decision": "fix", - "madeAt": 1631785230676 - }, - "1780|@mojaloop/event-sdk>grpc>@mapbox/node-pre-gyp>tar": { - "decision": "fix", - "madeAt": 1631785230676 - }, - "1781|@mojaloop/event-sdk>grpc>@mapbox/node-pre-gyp>tar": { - "decision": "fix", - "madeAt": 1631785230676 - }, - "1002401|@mojaloop/event-sdk>@grpc/proto-loader>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>wrap-ansi>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/event-sdk>@grpc/proto-loader>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/event-sdk>@grpc/proto-loader>yargs>cliui>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716056413, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716073663, - "expiresAt": 1637308004771 - }, - "1002401|@mojaloop/central-services-shared>widdershins>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1634716073664, - "expiresAt": 1637308004771 - }, - "1002865|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1634716077764, - "expiresAt": 1637308004771 - }, - "1002866|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1634716077764, - "expiresAt": 1637308004771 - }, - "1003019|@mojaloop/central-services-shared>widdershins>yargs>yargs-parser": { - "decision": "ignore", - "madeAt": 1634716081521, - "expiresAt": 1637308004771 - }, - "1004946|@mojaloop/event-sdk>@grpc/proto-loader>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175753, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175753, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175753, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175753, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175754, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>wrap-ansi>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175754, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/event-sdk>@grpc/proto-loader>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175754, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175754, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175754, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175754, - "expiresAt": 1647471172307 - }, - "1004946|@mojaloop/event-sdk>@grpc/proto-loader>yargs>cliui>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879175754, - "expiresAt": 1647471172307 - }, - "1004854|@mojaloop/central-services-shared>widdershins>openapi-sampler>json-pointer": { - "decision": "ignore", - "madeAt": 1644879153322, - "expiresAt": 1647471110577 - }, - "1004869|@mojaloop/central-services-shared>widdershins>swagger2openapi>better-ajv-errors>jsonpointer": { - "decision": "ignore", - "madeAt": 1644879154472, - "expiresAt": 1647471110577 - }, - "1004869|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>better-ajv-errors>jsonpointer": { - "decision": "ignore", - "madeAt": 1644879154472, - "expiresAt": 1647471110577 - }, - "1004946|@mojaloop/central-services-shared>widdershins>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879155619, - "expiresAt": 1647471110577 - }, - "1004946|@mojaloop/central-services-shared>widdershins>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1644879155619, - "expiresAt": 1647471110577 - }, - "1005383|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1644879156746, - "expiresAt": 1647471110577 - }, - "1005384|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1644879156746, - "expiresAt": 1647471110577 - }, - "1005534|@mojaloop/central-services-shared>widdershins>yargs>yargs-parser": { - "decision": "ignore", - "madeAt": 1644879157837, - "expiresAt": 1647471110577 - }, - "1006865|axios>follow-redirects": { - "decision": "fix", - "madeAt": 1644879138577 - }, - "1006865|@mojaloop/central-services-shared>axios>follow-redirects": { - "decision": "fix", - "madeAt": 1644879138577 - }, - "1007023|axios>follow-redirects": { - "decision": "fix", - "madeAt": 1644879138577 - }, - "1007023|@mojaloop/central-services-shared>axios>follow-redirects": { - "decision": "fix", - "madeAt": 1644879138577 - }, - "1006899|@mojaloop/central-services-shared>widdershins>node-fetch": { - "decision": "fix", - "madeAt": 1644879149946 - }, - "1006899|@mojaloop/event-sdk>grpc>@mapbox/node-pre-gyp>node-fetch": { - "decision": "fix", - "madeAt": 1644879149946 - }, - "1006846|@mojaloop/central-services-shared>shins>sanitize-html>postcss": { - "decision": "ignore", - "madeAt": 1644879158938, - "expiresAt": 1647471110577 - }, - "1006886|@mojaloop/central-services-shared>shins>markdown-it": { - "decision": "ignore", - "madeAt": 1644879160175, - "expiresAt": 1647471110577 - }, - "1007017|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>ajv": { - "decision": "ignore", - "madeAt": 1644879161354, - "expiresAt": 1647471110577 - }, - "1064587|@mojaloop/central-services-shared>widdershins>urijs": { - "decision": "fix", - "madeAt": 1647565572809 - }, - "1064606|@mojaloop/central-services-shared>widdershins>urijs": { - "decision": "fix", - "madeAt": 1647565572809 - }, - "1067233|@mojaloop/central-services-shared>widdershins>urijs": { - "decision": "fix", - "madeAt": 1647565572809 - }, - "1064843|@mojaloop/event-sdk>@grpc/proto-loader>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>wrap-ansi>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/event-sdk>@grpc/proto-loader>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/central-services-shared>widdershins>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608486, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>oas-resolver>yargs>cliui>wrap-ansi>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608487, - "expiresAt": 1650157604921 - }, - "1064843|@mojaloop/event-sdk>@grpc/proto-loader>yargs>cliui>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565608487, - "expiresAt": 1650157604921 - }, - "1064661|@mojaloop/central-services-shared>shins>markdown-it": { - "decision": "ignore", - "madeAt": 1647565592292, - "expiresAt": 1650157555692 - }, - "1064744|@mojaloop/central-services-shared>widdershins>openapi-sampler>json-pointer": { - "decision": "ignore", - "madeAt": 1647565593879, - "expiresAt": 1650157555692 - }, - "1064761|@mojaloop/central-services-shared>widdershins>swagger2openapi>better-ajv-errors>jsonpointer": { - "decision": "ignore", - "madeAt": 1647565594838, - "expiresAt": 1650157555692 - }, - "1064761|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>better-ajv-errors>jsonpointer": { - "decision": "ignore", - "madeAt": 1647565594838, - "expiresAt": 1650157555692 - }, - "1064843|@mojaloop/central-services-shared>widdershins>yargs>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565599016, - "expiresAt": 1650157555692 - }, - "1064843|@mojaloop/central-services-shared>widdershins>yargs>cliui>string-width>strip-ansi>ansi-regex": { - "decision": "ignore", - "madeAt": 1647565599016, - "expiresAt": 1650157555692 - }, - "1065159|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>ajv": { - "decision": "ignore", - "madeAt": 1647565600359, - "expiresAt": 1650157555692 - }, - "1065367|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1647565601450, - "expiresAt": 1650157555692 - }, - "1065368|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1647565601450, - "expiresAt": 1650157555692 - }, - "1065523|@mojaloop/central-services-shared>widdershins>yargs>yargs-parser": { - "decision": "ignore", - "madeAt": 1647565602524, - "expiresAt": 1650157555692 - }, - "1069972|@mojaloop/central-services-shared>@mojaloop/event-sdk>moment": { - "decision": "ignore", - "madeAt": 1649898254012, - "expiresAt": 1652490250295 - }, - "1069972|@mojaloop/event-sdk>moment": { - "decision": "ignore", - "madeAt": 1649898254012, - "expiresAt": 1652490250295 - }, - "1067456|@mojaloop/central-services-shared>widdershins>markdown-it": { - "decision": "ignore", - "madeAt": 1649898255401, - "expiresAt": 1652490250295 - }, - "1068310|@mojaloop/central-services-shared>widdershins>yargs>yargs-parser": { - "decision": "ignore", - "madeAt": 1654208208192, - "expiresAt": 1656800189114 - }, - "1067946|ajv": { + "1075703|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs": { "decision": "ignore", - "madeAt": 1649898257344, - "expiresAt": 1652490250295 + "madeAt": 1657188195403, + "expiresAt": 1659780190646 }, - "1070030|@mojaloop/central-services-shared>widdershins>markdown-it": { + "1075704|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs": { "decision": "ignore", - "madeAt": 1652982823332, - "expiresAt": 1655574816261 + "madeAt": 1657188196343, + "expiresAt": 1659780190646 }, - "1070030|@mojaloop/central-services-shared>shins>markdown-it": { + "1080944|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment": { "decision": "ignore", - "madeAt": 1654208210848, - "expiresAt": 1656800189114 + "madeAt": 1657188197274, + "expiresAt": 1659780190646 }, - "1068154|@mojaloop/central-services-shared>shins>sanitize-html": { + "1070030|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment>shins>markdown-it": { "decision": "ignore", - "madeAt": 1650459474362, - "expiresAt": 1653051469252 - }, - "1068155|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1654208203284, - "expiresAt": 1656800189114 - }, - "1070245|@mojaloop/central-services-shared>@mojaloop/event-sdk>moment": { - "decision": "ignore", - "madeAt": 1651072086111, - "expiresAt": 1653664079920 - }, - "1070245|@mojaloop/event-sdk>moment": { - "decision": "ignore", - "madeAt": 1651072086111, - "expiresAt": 1653664079920 - }, - "1070030|@mojaloop/central-services-shared>@mojaloop/event-sdk>moment>shins>markdown-it": { - "decision": "ignore", - "madeAt": 1651072088351, - "expiresAt": 1653664079920 + "madeAt": 1657188198190, + "expiresAt": 1659780190646 }, "1070030|widdershins>markdown-it": { "decision": "ignore", - "madeAt": 1654209004788, - "expiresAt": 1656800991863 - }, - "1068154|@mojaloop/central-services-shared>@mojaloop/event-sdk>moment>shins>markdown-it>sanitize-html": { - "decision": "ignore", - "madeAt": 1651072089481, - "expiresAt": 1653664079920 + "madeAt": 1657188198190, + "expiresAt": 1659780190646 }, - "1068155|@mojaloop/central-services-shared>@mojaloop/event-sdk>moment>shins>markdown-it>sanitize-html": { + "1068155|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment>shins>markdown-it>sanitize-html": { "decision": "ignore", - "madeAt": 1651072090420, - "expiresAt": 1653664079920 + "madeAt": 1657188199040, + "expiresAt": 1659780190646 }, - "1070250|ansi-regex": { + "1070260|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment>shins>markdown-it>sanitize-html": { "decision": "ignore", - "madeAt": 1651072091389, - "expiresAt": 1653664079920 + "madeAt": 1657188199954, + "expiresAt": 1659780190646 }, - "1070252|ansi-regex": { - "decision": "ignore", - "madeAt": 1651072092335, - "expiresAt": 1653664079920 - }, - "1070256|ejs": { - "decision": "ignore", - "madeAt": 1651072093304, - "expiresAt": 1653664079920 - }, - "1067536|json-pointer": { + "1070412|ejs": { "decision": "ignore", - "madeAt": 1651072094695, - "expiresAt": 1653664079920 + "madeAt": 1657188200902, + "expiresAt": 1659780190646 }, "1067553|swagger2openapi>better-ajv-errors>jsonpointer": { "decision": "ignore", - "madeAt": 1654209013381, - "expiresAt": 1656800991863 + "madeAt": 1657188201786, + "expiresAt": 1659780190646 }, "1067946|swagger2openapi>better-ajv-errors>jsonpointer>oas-validator>ajv": { "decision": "ignore", - "madeAt": 1654209015474, - "expiresAt": 1656800991863 + "madeAt": 1657188202661, + "expiresAt": 1659780190646 }, "1068310|widdershins>markdown-it>yargs>yargs-parser": { "decision": "ignore", - "madeAt": 1654209017825, - "expiresAt": 1656800991863 - }, - "1070260|@mojaloop/central-services-shared>shins>sanitize-html": { - "decision": "ignore", - "madeAt": 1654208205836, - "expiresAt": 1656800189114 - }, - "1068155|@mojaloop/central-services-shared>shins>markdown-it>sanitize-html": { - "decision": "ignore", - "madeAt": 1652981366297, - "expiresAt": 1655573359219 - }, - "1070260|@mojaloop/central-services-shared>shins>markdown-it>sanitize-html": { - "decision": "ignore", - "madeAt": 1652981367363, - "expiresAt": 1655573359219 - }, - "1070030|shins>markdown-it": { - "decision": "ignore", - "madeAt": 1654872421648, - "expiresAt": 1657464405390 - }, - "1068310|@mojaloop/central-services-shared>widdershins>markdown-it>yargs>yargs-parser": { - "decision": "ignore", - "madeAt": 1652982824567, - "expiresAt": 1655574816261 - }, - "1068155|shins>markdown-it>sanitize-html": { - "decision": "ignore", - "madeAt": 1652982826025, - "expiresAt": 1655574816261 - }, - "1070260|shins>markdown-it>sanitize-html": { - "decision": "ignore", - "madeAt": 1652982827137, - "expiresAt": 1655574816261 - }, - "1067553|@mojaloop/central-services-shared>widdershins>swagger2openapi>better-ajv-errors>jsonpointer": { - "decision": "ignore", - "madeAt": 1654208197641, - "expiresAt": 1656800189114 - }, - "1067553|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>better-ajv-errors>jsonpointer": { - "decision": "ignore", - "madeAt": 1654208197642, - "expiresAt": 1656800189114 - }, - "1067946|@mojaloop/central-services-shared>widdershins>swagger2openapi>oas-validator>ajv": { - "decision": "ignore", - "madeAt": 1654208200360, - "expiresAt": 1656800189114 - }, - "1070412|@mojaloop/central-services-shared>shins>ejs": { - "decision": "ignore", - "madeAt": 1654208217831, - "expiresAt": 1656800189114 - }, - "1070449|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs": { - "decision": "ignore", - "madeAt": 1654209002758, - "expiresAt": 1656800991863 - }, - "1070030|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>markdown-it": { - "decision": "ignore", - "madeAt": 1654209004788, - "expiresAt": 1656800991863 - }, - "1068155|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>markdown-it>sanitize-html": { - "decision": "ignore", - "madeAt": 1654209006663, - "expiresAt": 1656800991863 - }, - "1070260|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>shins>markdown-it>sanitize-html": { - "decision": "ignore", - "madeAt": 1654209008676, - "expiresAt": 1656800991863 - }, - "1070412|ejs": { - "decision": "ignore", - "madeAt": 1654209011201, - "expiresAt": 1656800991863 - }, - "1070483|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs": { - "decision": "ignore", - "madeAt": 1654872419659, - "expiresAt": 1657464405390 + "madeAt": 1657188203603, + "expiresAt": 1659780190646 }, - "1070030|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>widdershins>markdown-it": { + "1080969|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment": { "decision": "ignore", - "madeAt": 1654872421648, - "expiresAt": 1657464405390 + "madeAt": 1657217280998, + "expiresAt": 1659809259103 }, - "1068310|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>widdershins>markdown-it>yargs>yargs-parser": { + "1081008|@mojaloop/central-services-shared>@mojaloop/event-sdk>grpc>protobufjs>moment": { "decision": "ignore", - "madeAt": 1654872423852, - "expiresAt": 1657464405390 + "madeAt": 1657621042651, + "expiresAt": 1660213039412 } }, "rules": {}, diff --git a/modules/api-svc/docs/dfspInboundApi.yaml b/modules/api-svc/docs/dfspInboundApi.yaml index f7d3a4bd0..cfea0d6e4 100644 --- a/modules/api-svc/docs/dfspInboundApi.yaml +++ b/modules/api-svc/docs/dfspInboundApi.yaml @@ -832,6 +832,17 @@ components: homeTransactionId: type: string description: Transaction ID from the DFSP backend, used to reconcile transactions between the Switch and DFSP backend systems. + fulfilment: + $ref: '#/components/schemas/IlpFulfilment' + description: Fulfilment from the DFSP backend, used for testing purposes to inject an invalid fulfilment via a rule. + transferState: + $ref: '#/components/schemas/transferState' + description: Transfer state from the DFSP backend, used for testing purposes to inject an desired transfer state via a rule. + example: ABORTED + completedTimestamp: + $ref: '#/components/schemas/timestamp' + description: Completed timestamp from the DFSP backend, used for testing purposes to inject a given completed timestamp via a rule. + example: "2020-05-19T08:38:08.699-04:00" transferDetailsResponse: type: object diff --git a/modules/api-svc/package.json b/modules/api-svc/package.json index 96aa23953..2b86718b5 100644 --- a/modules/api-svc/package.json +++ b/modules/api-svc/package.json @@ -1,6 +1,6 @@ { "name": "@mojaloop/sdk-scheme-adapter-api-svc", - "version": "15.0.0", + "version": "18.0.1", "description": "An adapter for connecting to Mojaloop API enabled switches.", "main": "src/index.js", "types": "src/index.d.ts", @@ -11,15 +11,18 @@ "~": "src" }, "scripts": { - "build": "yarn run build:openapi; yarn run build:dto:outbound", + "start": "node src/index.js", + "audit:resolve": "echo 'TBD'", + "audit:check": "echo 'TBD'", + "build": "yarn run build:openapi && yarn run build:dto:outbound", "build:openapi": "yarn run build:openapi:inbound && yarn run build:openapi:outbound", "build:openapi:inbound": "openapi bundle --output ./src/InboundServer/api.yaml --ext yaml ./src/InboundServer/api_template.yaml", "build:openapi:outbound": "openapi bundle --output ./src/OutboundServer/api.yaml --ext yaml ./src/OutboundServer/api_template/openapi.yaml", "build:dto:outbound": "openapi-typescript ./src/OutboundServer/api.yaml --output ./src/OutboundServer/api_interfaces/openapi.d.ts", - "lint": "npx eslint ./src/", - "lint:fix": "npx eslint ./src/ --fix", - "start": "node src/index.js", - "test:unit": "jest --ci --reporters=default --reporters=jest-junit --env=node test/unit/", + "lint": "eslint ./src/", + "lint:fix": "eslint ./src/ --fix", + "test": "yarn run test:unit", + "test:unit": "jest --runInBand --ci --reporters=default --reporters=jest-junit --env=node test/unit/", "test:int": "jest --ci --reporters=default --reporters=jest-junit --env=node test/integration", "validate:api": "yarn run validate:api:in && yarn run validate:api:out", "validate:api:in": "swagger-cli validate ./src/InboundServer/api.yaml", @@ -28,7 +31,8 @@ "updates:update": "yarn run dep:update && yarn install", "dep:check": "npx ncu -e 2", "dep:update": "npx ncu -u", - "release": "standard-version --releaseCommitMessageFormat 'chore(release): {{currentTag}} [skip ci]'" + "release": "standard-version --releaseCommitMessageFormat 'chore(release): {{currentTag}} [skip ci]'", + "snapshot": "standard-version --no-verify --skip.changelog --prerelease snapshot --releaseCommitMessageFormat 'chore(snapshot): {{currentTag}}'" }, "author": "Matt Kingston, James Bush, ModusBox Inc.", "contributors": [ @@ -38,7 +42,8 @@ "Shashikant Hirugade ", "Paweł Marzec ", "Kevin Leyow " + "Miguel de Barros ", + "Yevhen Kyriukha " ], "license": "Apache-2.0", "licenses": [ @@ -52,58 +57,56 @@ "url": "git@github.com:mojaloop/sdk-scheme-adapter.git" }, "dependencies": { - "@koa/cors": "^3.1.0", - "@mojaloop/central-services-error-handling": "^12.0.3", + "@koa/cors": "^3.3.0", + "@mojaloop/central-services-error-handling": "^12.0.4", "@mojaloop/central-services-logger": "^11.0.1", "@mojaloop/central-services-metrics": "^12.0.5", "@mojaloop/central-services-shared": "17.0.2", "@mojaloop/event-sdk": "^11.0.2", - "@mojaloop/sdk-standard-components": "^17.0.1", + "@mojaloop/sdk-standard-components": "^17.1.1", "ajv": "8.11.0", - "ajv-keywords": "^5.1.0", - "axios": "^0.21.4", + "axios": "^0.27.2", "co-body": "^6.1.0", - "dotenv": "^10.0.0", - "env-var": "^7.0.1", - "express": "^4.17.2", + "dotenv": "^16.0.1", + "env-var": "^7.1.1", + "express": "^4.18.1", "fast-json-patch": "^3.1.1", "javascript-state-machine": "^3.1.0", "js-yaml": "^4.1.0", "json-schema-ref-parser": "^9.0.9", - "koa": "^2.13.1", - "koa-body": "^4.2.0", + "koa": "^2.13.4", + "koa-body": "^5.0.0", "lodash": "^4.17.21", "module-alias": "^2.2.2", "oauth2-server": "^4.0.0-dev.2", - "openapi-jsonschema-parameters": "^9.3.0", - "prom-client": "^12.0.0", + "openapi-jsonschema-parameters": "^12.0.0", + "prom-client": "^14.0.1", "promise-timeout": "^1.3.0", "random-word-slugs": "^0.1.6", - "redis": "^3.1.2", - "uuidv4": "^6.2.12", - "ws": "^7.5.5" + "redis": "^4.2.0", + "uuidv4": "^6.2.13", + "ws": "^8.8.0" }, "devDependencies": { - "@babel/core": "^7.15.5", - "@babel/preset-env": "^7.15.6", - "@mojaloop/api-snippets": "^13.0.9", - "@redocly/openapi-cli": "^1.0.0-beta.59", - "@types/jest": "^27.0.1", - "babel-jest": "^27.2.0", - "eslint": "^7.32.0", - "eslint-config-airbnb-base": "^14.2.1", - "eslint-plugin-import": "^2.24.2", - "eslint-plugin-jest": "^24.4.0", - "jest": "^27.2.0", - "jest-junit": "^12.2.0", - "nock": "^13.1.3", - "npm-audit-resolver": "^3.0.0-0", - "npm-check-updates": "^11.8.5", - "openapi-response-validator": "^9.3.0", - "openapi-typescript": "^4.0.2", + "@babel/core": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@mojaloop/api-snippets": "^14.0.0", + "@redocly/openapi-cli": "^1.0.0-beta.94", + "@types/jest": "^28.1.4", + "babel-jest": "^28.1.2", + "eslint": "^8.19.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jest": "^26.5.3", + "jest": "^28.1.2", + "jest-junit": "^14.0.0", + "nock": "^13.2.8", + "npm-check-updates": "^15.2.6", + "openapi-response-validator": "^12.0.0", + "openapi-typescript": "^5.4.1", "redis-mock": "^0.56.3", - "standard-version": "^9.3.1", - "supertest": "^6.1.6", + "standard-version": "^9.5.0", + "supertest": "^6.2.4", "swagger-cli": "^4.0.4" } } diff --git a/modules/api-svc/src/ControlAgent/index.js b/modules/api-svc/src/ControlAgent/index.js index 40eb6ade2..3f1bdc074 100644 --- a/modules/api-svc/src/ControlAgent/index.js +++ b/modules/api-svc/src/ControlAgent/index.js @@ -22,10 +22,10 @@ // It expects new configuration to be supplied as an array of JSON patches. It therefore exposes // the current configuration to -const assert = require('assert').strict; const ws = require('ws'); const jsonPatch = require('fast-json-patch'); const { generateSlug } = require('random-word-slugs'); +const _ = require('lodash'); /************************************************************************** * The message protocol messages, verbs, and errors @@ -163,15 +163,6 @@ class Client extends ws { this.close(); } - reconfigure({ logger = this._logger, port = 0, appConfig = this._appConfig }) { - assert(port === this._socket.remotePort, 'Cannot reconfigure running port'); - return () => { - this._logger = logger; - this._appConfig = appConfig; - this._logger.log('restarted'); - }; - } - // Handle incoming message from the server. _handle(data) { // TODO: json-schema validation of received message- should be pretty straight-forward @@ -187,7 +178,13 @@ class Client extends ws { switch (msg.msg) { case MESSAGE.CONFIGURATION: switch (msg.verb) { - case VERB.NOTIFY: + case VERB.NOTIFY: { + const dup = JSON.parse(JSON.stringify(this._appConfig)); // fast-json-patch explicitly mutates + _.merge(dup, msg.data); + this._logger.push({ oldConf: this._appConfig, newConf: dup }).log('Emitting new configuration'); + this.emit(EVENT.RECONFIGURE, dup); + break; + } case VERB.PATCH: { const dup = JSON.parse(JSON.stringify(this._appConfig)); // fast-json-patch explicitly mutates jsonPatch.applyPatch(dup, msg.data); diff --git a/modules/api-svc/src/ControlServer/index.js b/modules/api-svc/src/ControlServer/index.js index 9f22c04c6..3cef99759 100644 --- a/modules/api-svc/src/ControlServer/index.js +++ b/modules/api-svc/src/ControlServer/index.js @@ -22,11 +22,11 @@ // It expects new configuration to be supplied as an array of JSON patches. It therefore exposes // the current configuration to -const assert = require('assert').strict; const ws = require('ws'); const jsonPatch = require('fast-json-patch'); const { generateSlug } = require('random-word-slugs'); +const _ = require('lodash'); /************************************************************************** @@ -213,21 +213,14 @@ class Server extends ws.Server { // Close the server then wait for all the client sockets to close async stop() { - await new Promise(this.close.bind(this)); + const closing = new Promise(resolve => this.close(resolve)); + for (const client of this.clients) { + client.terminate(); + } + await closing; this._logger.log('Control server shutdown complete'); } - reconfigure({ logger = this._logger, port = 0, appConfig = this._appConfig }) { - assert(port === this._port, 'Cannot reconfigure running port'); - return () => { - const reconfigureClientLogger = - ({ logger: clientLogger }) => clientLogger.configure(logger); - this._clientData.values(reconfigureClientLogger); - this._logger = logger; - this._appConfig = appConfig; - this._logger.log('restarted'); - }; - } async notifyClientsOfCurrentConfig() { const updateConfMsg = build.CONFIGURATION.NOTIFY(this._appConfig); @@ -261,6 +254,13 @@ class Server extends ws.Server { case VERB.READ: client.send(build.CONFIGURATION.NOTIFY(this._appConfig, msg.id)); break; + case VERB.NOTIFY: { + const dup = JSON.parse(JSON.stringify(this._appConfig)); // fast-json-patch explicitly mutates + _.merge(dup, msg.data); + this._logger.push({ oldConf: this._appConfig, newConf: dup }).log('Emitting new configuration'); + this.emit(EVENT.RECONFIGURE, dup); + break; + } case VERB.PATCH: { // TODO: validate the incoming patch? Or assume clients have used the // client library? diff --git a/modules/api-svc/src/InboundServer/index.js b/modules/api-svc/src/InboundServer/index.js index 13c40465b..98e83b1f1 100644 --- a/modules/api-svc/src/InboundServer/index.js +++ b/modules/api-svc/src/InboundServer/index.js @@ -18,33 +18,24 @@ const fs = require('fs'); const path = require('path'); const EventEmitter = require('events'); -const { WSO2Auth } = require('@mojaloop/sdk-standard-components'); - const Validate = require('../lib/validate'); const router = require('../lib/router'); const handlers = require('./handlers'); const middlewares = require('./middlewares'); -const check = require('../lib/check'); + +const logExcludePaths = ['/']; class InboundApi extends EventEmitter { - constructor(conf, logger, cache, validator) { + constructor(conf, logger, cache, validator, wso2) { super({ captureExceptions: true }); this._conf = conf; this._cache = cache; - this._wso2 = { - auth: new WSO2Auth({ - ...conf.wso2.auth, - logger, - tlsCreds: conf.inbound.tls.mutualTLS.enabled && conf.inbound.tls.creds, - }), - retryWso2AuthFailureTimes: conf.wso2.requestAuthFailureRetryTimes, - }; - this._wso2.auth.on('error', (msg) => { - this.emit('error', 'WSO2 auth error in InboundApi', msg); - }); if (conf.validateInboundJws) { - this._jwsVerificationKeys = conf.pm4mlEnabled ? conf.peerJWSKeys : InboundApi._GetJwsKeys(conf.jwsVerificationKeysDirectory); + // peerJWSKey is a special config option specifically for Payment Manager for Mojaloop + // that is populated by a management api. + // This map supersedes local keys that would be loaded in by jwsVerificationKeysDirectory. + this._jwsVerificationKeys = conf.pm4mlEnabled ? conf.peerJWSKeys : InboundApi._GetJwsKeys(conf.jwsVerificationKeysDirectory); } this._api = InboundApi._SetupApi({ conf, @@ -52,19 +43,15 @@ class InboundApi extends EventEmitter { validator, cache, jwsVerificationKeys: this._jwsVerificationKeys, - wso2: this._wso2, + wso2, }); } async start() { this._startJwsWatcher(); - if (!this._conf.testingDisableWSO2AuthStart) { - await this._wso2.auth.start(); - } } stop() { - this._wso2.auth.stop(); if (this._keyWatcher) { this._keyWatcher.close(); this._keyWatcher = null; @@ -114,7 +101,7 @@ class InboundApi extends EventEmitter { api.use(middlewares.createJwsValidator(logger, jwsVerificationKeys, jwsExclusions)); } - api.use(middlewares.applyState({ cache, wso2, conf })); + api.use(middlewares.applyState({ cache, wso2, conf, logExcludePaths })); api.use(middlewares.createLogger(logger)); api.use(middlewares.createRequestValidator(validator)); api.use(middlewares.assignFspiopIdentifier()); @@ -145,16 +132,17 @@ class InboundApi extends EventEmitter { } class InboundServer extends EventEmitter { - constructor(conf, logger, cache) { + constructor(conf, logger, cache, wso2) { super({ captureExceptions: true }); this._conf = conf; - this._validator = new Validate(); + this._validator = new Validate({ logExcludePaths }); this._logger = logger; this._api = new InboundApi( conf, this._logger.push({ component: 'api' }), cache, - this._validator + this._validator, + wso2, ); this._api.on('error', (...args) => { this.emit('error', ...args); @@ -173,52 +161,17 @@ class InboundServer extends EventEmitter { await this._validator.initialise(apiSpecs); await this._api.start(); await new Promise((resolve) => this._server.listen(this._conf.inbound.port, resolve)); - this._logger.log(`Serving outbound API on port ${this._conf.inbound.port}`); + this._logger.log(`Serving inbound API on port ${this._conf.inbound.port}`); } async stop() { - if (this._server) { + if (this._server.listening) { await new Promise(resolve => this._server.close(resolve)); - this._server = null; - } - if (this._api) { - await this._api.stop(); - this._api = null; } + await this._api.stop(); this._logger.log('inbound shut down complete'); } - async reconfigure(conf, logger, cache) { - // It may be possible to extract the socket from an existing HTTP/HTTPS server and replace - // it in a new server of the other type, as Node's HTTP and HTTPS servers both eventually - // are subclasses of net.Server. This wasn't considered as a requirement at the time of - // writing. - assert( - this._conf.inbound.tls.mutualTLS.enabled === conf.inbound.tls.mutualTLS.enabled, - 'Cannot live-restart an HTTPS server as HTTP or vice versa', - ); - const newApi = new InboundApi(conf, logger, cache, this._validator); - await newApi.start(); - return () => { - this._logger = logger; - this._cache = cache; - // TODO: .tls might be undefined, causing an.. err.. undefined dereference.. - const tlsCredsChanged = check.notDeepEqual( - conf.inbound.tls.creds, - this._conf.inbound.tls.creds - ); - if (this._conf.inbound.tls.mutualTLS.enabled && tlsCredsChanged) { - this._server.setSecureContext(conf.inbound.tls.creds); - } - this._server.removeAllListeners('request'); - this._server.on('request', newApi.callback()); - this._api.stop(); - this._api = newApi; - this._conf = conf; - this._logger.log('restarted'); - }; - } - _createServer(tlsEnabled, tlsCreds, handler) { if (!tlsEnabled) { return http.createServer(handler); diff --git a/modules/api-svc/src/InboundServer/middlewares.js b/modules/api-svc/src/InboundServer/middlewares.js index ec6883865..1ea19c9c2 100644 --- a/modules/api-svc/src/InboundServer/middlewares.js +++ b/modules/api-svc/src/InboundServer/middlewares.js @@ -353,13 +353,17 @@ const createLogger = (logger) => async (ctx, next) => { path: ctx.path, method: ctx.method }}); - ctx.state.logger.push({ body: ctx.request.body }).log('Request received'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.push({body: ctx.request.body}).log('Request received'); + } try { await next(); } catch (err) { ctx.state.logger.push(err).log('Error'); } - await ctx.state.logger.log('Request processed'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + await ctx.state.logger.log('Request processed'); + } }; @@ -369,10 +373,14 @@ const createLogger = (logger) => async (ctx, next) => { * @return {Function} */ const createRequestValidator = (validator) => async (ctx, next) => { - ctx.state.logger.log('Validating request'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.log('Validating request'); + } try { ctx.state.path = validator.validateRequest(ctx, ctx.state.logger); - ctx.state.logger.log('Request passed validation'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.log('Request passed validation'); + } await next(); } catch (err) { ctx.state.logger.push({ err }).log('Request failed validation.'); diff --git a/modules/api-svc/src/OAuthTestServer/index.js b/modules/api-svc/src/OAuthTestServer/index.js index 3272a7394..c12fce8aa 100644 --- a/modules/api-svc/src/OAuthTestServer/index.js +++ b/modules/api-svc/src/OAuthTestServer/index.js @@ -10,7 +10,6 @@ 'use strict'; -const { assert } = require('assert'); const express = require('express'); const bodyParser = require('body-parser'); const OAuth2Server = require('oauth2-server'); @@ -28,7 +27,6 @@ class OAuthTestServer { * @param {Logger} conf.logger Logger */ constructor({ port, clientKey, clientSecret, logger }) { - this._api = null; this._port = port; this._logger = logger; this._clientKey = clientKey; @@ -65,17 +63,6 @@ class OAuthTestServer { this._logger.log('OAuth2 Test Server shut down complete'); } - async reconfigure({ port, clientKey, clientSecret, logger }) { - assert(port === this._port, 'Cannot reconfigure running port'); - return () => { - this._port = port; - this._logger = logger; - this.stop().then(() => this.start()); - this._api = OAuthTestServer._SetupApi({ clientKey, clientSecret }); - this._logger.log('restarted'); - }; - } - handleResponse(req, res, response) { if (response.status === 302) { const location = response.headers.location; diff --git a/modules/api-svc/src/OutboundServer/index.js b/modules/api-svc/src/OutboundServer/index.js index 42b70dcc8..6b804b596 100644 --- a/modules/api-svc/src/OutboundServer/index.js +++ b/modules/api-svc/src/OutboundServer/index.js @@ -16,9 +16,6 @@ const yaml = require('js-yaml'); const fs = require('fs'); const path = require('path'); const EventEmitter = require('events'); -const cors = require('@koa/cors'); - -const { WSO2Auth } = require('@mojaloop/sdk-standard-components'); const Validate = require('../lib/validate'); const router = require('../lib/router'); @@ -26,9 +23,10 @@ const handlers = require('./handlers'); const middlewares = require('./middlewares'); const endpointRegex = /\/.*/g; +const logExcludePaths = ['/']; class OutboundApi extends EventEmitter { - constructor(conf, logger, cache, validator, metricsClient) { + constructor(conf, logger, cache, validator, metricsClient, wso2) { super({ captureExceptions: true }); this._logger = logger; this._api = new Koa(); @@ -36,26 +34,10 @@ class OutboundApi extends EventEmitter { this._cache = cache; this._metricsClient = metricsClient; - this._wso2 = { - auth: new WSO2Auth({ - ...this._conf.wso2.auth, - logger: this._logger, - tlsCreds: this._conf.outbound.tls.mutualTLS.enabled && this._conf.outbound.tls.creds, - }), - retryWso2AuthFailureTimes: conf.wso2.requestAuthFailureRetryTimes, - }; - this._wso2.auth.on('error', (msg) => { - this.emit('error', 'WSO2 auth error in OutboundApi', msg); - }); - - // use CORS - // https://github.com/koajs/cors - this._api.use(cors()); - this._api.use(middlewares.createErrorHandler(this._logger)); this._api.use(middlewares.createRequestIdGenerator()); this._api.use(koaBody()); // outbound always expects application/json - this._api.use(middlewares.applyState({ cache, wso2: this._wso2, conf, metricsClient })); + this._api.use(middlewares.applyState({ cache, wso2, conf, metricsClient, logExcludePaths })); this._api.use(middlewares.createLogger(this._logger)); //Note that we strip off any path on peerEndpoint config after the origin. @@ -67,7 +49,7 @@ class OutboundApi extends EventEmitter { peerEndpoint: conf.peerEndpoint.replace(endpointRegex, ''), proxyConfig: conf.proxyConfig, logger: this._logger, - wso2Auth: this._wso2.auth, + wso2Auth: wso2.auth, tls: conf.outbound.tls, })); } @@ -76,15 +58,9 @@ class OutboundApi extends EventEmitter { this._api.use(router(handlers)); } - async start() { - if (!this._conf.testingDisableWSO2AuthStart) { - await this._wso2.auth.start(); - } - } + start() {} - async stop() { - this._wso2.auth.stop(); - } + stop() {} callback() { return this._api.callback(); @@ -92,9 +68,9 @@ class OutboundApi extends EventEmitter { } class OutboundServer extends EventEmitter { - constructor(conf, logger, cache, metricsClient) { + constructor(conf, logger, cache, metricsClient, wso2) { super({ captureExceptions: true }); - this._validator = new Validate(); + this._validator = new Validate({ logExcludePaths }); this._conf = conf; this._logger = logger; this._server = null; @@ -103,7 +79,8 @@ class OutboundServer extends EventEmitter { this._logger.push({ component: 'api' }), cache, this._validator, - metricsClient + metricsClient, + wso2, ); this._api.on('error', (...args) => { this.emit('error', ...args); @@ -121,30 +98,11 @@ class OutboundServer extends EventEmitter { } async stop() { - if (this._server) { + if (this._server.listening) { await new Promise(resolve => this._server.close(resolve)); - this._server = null; } - if (this._api) { - await this._api.stop(); - this._api = null; - } - this._logger.log('Shut down complete'); - } - - async reconfigure(conf, logger, cache, metricsClient) { - const newApi = new OutboundApi(conf, logger, cache, this._validator, metricsClient); - await newApi.start(); - return () => { - this._logger = logger; - this._cache = cache; - this._server.removeAllListeners('request'); - this._server.on('request', newApi.callback()); - this._api.stop(); - this._api = newApi; - this._conf = conf; - this._logger.log('restarted'); - }; + await this._api.stop(); + this._logger.log('outbound shut down complete'); } } diff --git a/modules/api-svc/src/OutboundServer/middlewares.js b/modules/api-svc/src/OutboundServer/middlewares.js index 06a82a80b..0c167ceee 100644 --- a/modules/api-svc/src/OutboundServer/middlewares.js +++ b/modules/api-svc/src/OutboundServer/middlewares.js @@ -20,10 +20,14 @@ const { applyState, createErrorHandler, createLogger, createRequestIdGenerator } * @return {Function} */ const createRequestValidator = (validator) => async (ctx, next) => { - ctx.state.logger.log('Validating request'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.log('Validating request'); + } try { ctx.state.path = validator.validateRequest(ctx, ctx.state.logger); - ctx.state.logger.log('Request passed validation'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.log('Request passed validation'); + } await next(); } catch (err) { ctx.state.logger.push({ err }).log('Request failed validation.'); diff --git a/modules/api-svc/src/TestServer/index.js b/modules/api-svc/src/TestServer/index.js index 5e54a1528..119937bf1 100644 --- a/modules/api-svc/src/TestServer/index.js +++ b/modules/api-svc/src/TestServer/index.js @@ -11,7 +11,6 @@ const Koa = require('koa'); const ws = require('ws'); -const assert = require('assert').strict; const http = require('http'); const yaml = require('js-yaml'); const fs = require('fs').promises; @@ -22,6 +21,8 @@ const router = require('../lib/router'); const handlers = require('./handlers'); const middlewares = require('../InboundServer/middlewares'); +const logExcludePaths = ['/']; + const getWsIp = (req) => [ req.socket.remoteAddress, ...( @@ -37,7 +38,7 @@ class TestApi { this._api.use(middlewares.createErrorHandler(logger)); this._api.use(middlewares.createRequestIdGenerator()); - this._api.use(middlewares.applyState({ cache })); + this._api.use(middlewares.applyState({ cache, logExcludePaths })); this._api.use(middlewares.createLogger(logger)); this._api.use(middlewares.createRequestValidator(validator)); @@ -84,7 +85,11 @@ class WsServer extends ws.Server { // Close the server then wait for all the client sockets to close async stop() { - await new Promise(resolve => this.close(resolve)); + const closing = new Promise(resolve => this.close(resolve)); + for (const client of this.clients) { + client.terminate(); + } + await closing; // If we don't wait for all clients to close before shutting down, the socket close // handlers will be called after we return from this function, resulting in behaviour // occurring after the server tells the user it has shutdown. @@ -171,7 +176,7 @@ class TestServer { constructor({ port, logger, cache }) { this._port = port; this._logger = logger; - this._validator = new Validate(); + this._validator = new Validate({ logExcludePaths }); this._api = new TestApi(this._logger.push({ component: 'api' }), this._validator, cache); this._server = http.createServer(this._api.callback()); // TODO: why does this appear to need to be called after creating this._server (try reorder @@ -201,7 +206,7 @@ class TestServer { async stop() { if (this._wsapi) { this._logger.log('Shutting down websocket server'); - this._wsapi.stop(); + await this._wsapi.stop(); this._wsapi = null; } if (this._server) { @@ -211,36 +216,6 @@ class TestServer { } this._logger.log('Test server shutdown complete'); } - - async reconfigure({ port, logger, cache }) { - assert(port === this._port, 'Cannot reconfigure running port'); - const newApi = new TestApi(logger, cache, this._validator); - const newWsApi = new WsServer(logger.push({ component: 'websocket-server' }), cache); - await newWsApi.start(); - - return () => { - const oldWsApi = this._wsapi; - this._logger = logger; - this._cache = cache; - this._wsapi = newWsApi; - this._api = newApi; - this._server.removeAllListeners('upgrade'); - this._server.on('upgrade', (req, socket, head) => { - this._wsapi.handleUpgrade(req, socket, head, (ws) => - this._wsapi.emit('connection', ws, req)); - }); - this._server.removeAllListeners('request'); - this._server.on('request', newApi.callback()); - // TODO: we can't guarantee client implementations. Therefore we can't guarantee - // reconnect logic/behaviour. Therefore instead of closing all websocket client - // connections as we do below, we should replace handlers. - oldWsApi.stop().catch((err) => { - this._logger.push({ err }).log('Error stopping websocket server during reconfigure'); - }); - - this._logger.log('restarted'); - }; - } } module.exports = TestServer; diff --git a/modules/api-svc/src/config.js b/modules/api-svc/src/config.js index 15821e3f0..85746a10a 100644 --- a/modules/api-svc/src/config.js +++ b/modules/api-svc/src/config.js @@ -129,10 +129,7 @@ module.exports = { jwsSignPutParties: env.get('JWS_SIGN_PUT_PARTIES').default('false').asBool(), jwsSigningKey: env.get('JWS_SIGNING_KEY_PATH').asFileContent(), jwsVerificationKeysDirectory: env.get('JWS_VERIFICATION_KEYS_DIRECTORY').asString(), - cacheConfig: { - host: env.get('CACHE_HOST').required().asString(), - port: env.get('CACHE_PORT').required().asPortNumber(), - }, + cacheUrl: env.get('CACHE_URL').default('redis://redis:6379').asUrlString(), enableTestFeatures: env.get('ENABLE_TEST_FEATURES').default('false').asBool(), oauthTestServer: { enabled: env.get('ENABLE_OAUTH_TOKEN_ENDPOINT').default('false').asBool(), diff --git a/modules/api-svc/src/index.js b/modules/api-svc/src/index.js index 08dea7b54..640fd5127 100644 --- a/modules/api-svc/src/index.js +++ b/modules/api-svc/src/index.js @@ -10,11 +10,10 @@ 'use strict'; -const assert = require('assert/strict'); const { hostname } = require('os'); +const _ = require('lodash'); const config = require('./config'); const EventEmitter = require('events'); -const _ = require('lodash'); const InboundServer = require('./InboundServer'); const OutboundServer = require('./OutboundServer'); @@ -30,8 +29,7 @@ const OutboundServerMiddleware = require('./OutboundServer/middlewares.js'); const Router = require('./lib/router'); const Validate = require('./lib/validate'); const Cache = require('./lib/cache'); -const check = require('./lib/check'); -const { Logger } = require('@mojaloop/sdk-standard-components'); +const { Logger, WSO2Auth } = require('@mojaloop/sdk-standard-components'); const LOG_ID = { INBOUND: { app: 'mojaloop-connector-inbound-api' }, @@ -52,7 +50,7 @@ class Server extends EventEmitter { this.conf = conf; this.logger = logger; this.cache = new Cache({ - ...conf.cacheConfig, + cacheUrl: conf.cacheUrl, logger: this.logger.push(LOG_ID.CACHE), enableTestFeatures: conf.enableTestFeatures, }); @@ -64,11 +62,23 @@ class Server extends EventEmitter { logger: this.logger.push(LOG_ID.METRICS) }); + this.wso2 = { + auth: new WSO2Auth({ + ...conf.wso2.auth, + logger, + tlsCreds: conf.outbound.tls.mutualTLS.enabled && conf.outbound.tls.creds, + }), + retryWso2AuthFailureTimes: conf.wso2.requestAuthFailureRetryTimes, + }; + this.wso2.auth.on('error', (msg) => { + this.emit('error', 'WSO2 auth error in InboundApi', msg); + }); + this.inboundServer = new InboundServer( this.conf, this.logger.push(LOG_ID.INBOUND), this.cache, - this.metricsClient + this.wso2, ); this.inboundServer.on('error', (...args) => { this.logger.push({ args }).log('Unhandled error in Inbound Server'); @@ -79,76 +89,63 @@ class Server extends EventEmitter { this.conf, this.logger.push(LOG_ID.OUTBOUND), this.cache, - this.metricsClient + this.metricsClient, + this.wso2, ); this.outboundServer.on('error', (...args) => { this.logger.push({ args }).log('Unhandled error in Outbound Server'); this.emit('error', 'Unhandled error in Outbound Server'); }); - this.oauthTestServer = new OAuthTestServer({ - clientKey: this.conf.oauthTestServer.clientKey, - clientSecret: this.conf.oauthTestServer.clientSecret, - port: this.conf.oauthTestServer.listenPort, - logger: this.logger.push(LOG_ID.OAUTHTEST), - }); + if (this.conf.oauthTestServer.enabled) { + this.oauthTestServer = new OAuthTestServer({ + clientKey: this.conf.oauthTestServer.clientKey, + clientSecret: this.conf.oauthTestServer.clientSecret, + port: this.conf.oauthTestServer.listenPort, + logger: this.logger.push(LOG_ID.OAUTHTEST), + }); + } - this.testServer = new TestServer({ - port: this.conf.test.port, - logger: this.logger.push(LOG_ID.TEST), - cache: this.cache, - }); + if (this.conf.enableTestFeatures) { + this.testServer = new TestServer({ + port: this.conf.test.port, + logger: this.logger.push(LOG_ID.TEST), + cache: this.cache, + }); + } + } + + async start() { + await this.cache.connect(); + await this.wso2.auth.start(); + + // We only start the control client if we're running within Mojaloop Payment Manager. + // The control server is the Payment Manager Management API Service. + // We only start the client to connect to and listen to the Management API service for + // management protocol messages e.g configuration changes, certicate updates etc. + if (this.conf.pm4mlEnabled) { + const RESTART_INTERVAL_MS = 10000; + this.controlClient = await ControlAgent.Client.Create({ + address: this.conf.control.mgmtAPIWsUrl, + port: this.conf.control.mgmtAPIWsPort, + logger: this.logger.push(LOG_ID.CONTROL), + appConfig: this.conf, + }); + this.controlClient.on(ControlAgent.EVENT.RECONFIGURE, this.restart.bind(this)); + this.controlClient.on('close', () => setTimeout(() => this.restart(_.merge({}, this.conf, { control: { stopped: Date.now() } })), RESTART_INTERVAL_MS)); + } + + await Promise.all([ + this.inboundServer.start(), + this.outboundServer.start(), + this.metricsServer.start(), + this.testServer?.start(), + this.oauthTestServer?.start(), + ]); } async restart(newConf) { - // Figuring out what config is necessary in each server and component is a pretty big job - // that we'll have to save for later. For now, when the config changes, we'll restart - // more than we might have to. - // We'll do this by: - // 0. creating a new instance of the logger, if necessary - // 1. creating a new instance of the cache, if necessary - // 2. calling the async reconfigure method of each of the servers as necessary- this will - // return a synchronous function that we can call to swap over the server events and - // object properties to the new ones. It will: - // 1. remove the `request` listener for each of the HTTP servers - // 2. add the new appropriate `request` listener - // This results in a completely synchronous listener changeover to the new config and - // therefore hopefully avoids any concurrency issues arising from restarting different - // servers or components concurrently. - // TODO: in the sense of being able to reason about the code, it would make some sense to - // turn the config items or object passed to each server into an event emitter, or pass an - // additional event emitter to the server constructor for the server to listen to and act - // on changes. Before this, however, it's probably necessary to ensure each server gets - // _only_ the config it needs, not the entire config object. - // Further: it might be possible to use Object.observe for this functionality. - // TODO: what happens if this is run concurrently? I.e. if it is called twice in rapid - // succession. This question probably needs to be asked of the reconfigure message on every - // server. - // Note that it should be possible to reconfigure ports on a running server by reassigning - // servers, e.g. - // this.inboundServer._server = createHttpServer(); - // this.inboundServer._server.listen(newPort); - // If there are conflicts, for example if the new configuration specifies the new inbound - // port to be the same value as the old outbound port, this will require either - // 1. some juggling of HTTP servers, e.g. - // const oldInboundServer = this.inboundServer._server; - // this.inboundServer._server = this.outboundServer._server; - // .. etc. - // 2. some juggling of sockets between servers, if possible - // 3. rearchitecting of the servers, perhaps splitting the .start() method on the servers - // to an .init() and .listen() methods, with the latter optionally taking an HTTP server - // as argument - // This _might_ introduce some confusion/complexity for existing websocket clients, but as - // the event handlers _should_ not be modified this shouldn't be a problem. A careful - // analysis of this will be necessary. - assert(newConf.inbound.port === this.conf.inbound.port - && newConf.outbound.port === this.conf.outbound.port - && newConf.test.port === this.conf.test.port - && newConf.oauthTestServer.listenPort === this.conf.oauthTestServer.listenPort - && newConf.control.mgmtAPIWsPort === this.conf.control.mgmtAPIWsPort, - 'Cannot reconfigure ports on running server'); - const doNothing = () => {}; - const updateLogger = check.notDeepEqual(newConf.logIndent, this.conf.logIndent); + const updateLogger = !_.isEqual(newConf.logIndent, this.conf.logIndent); if (updateLogger) { this.logger = new Logger.Logger({ context: { @@ -159,99 +156,117 @@ class Server extends EventEmitter { stringify: Logger.buildStringify({ space: this.conf.logIndent }), }); } + let oldCache; - const updateCache = ( - updateLogger || - check.notDeepEqual(this.conf.cacheConfig, newConf.cacheConfig) || - check.notDeepEqual(this.conf.enableTestFeatures, newConf.enableTestFeatures) - ); + const updateCache = !_.isEqual(this.conf.cacheUrl, newConf.cacheUrl) + || !_.isEqual(this.conf.enableTestFeatures, newConf.enableTestFeatures); if (updateCache) { oldCache = this.cache; + await this.cache.disconnect(); this.cache = new Cache({ - ...newConf.cacheConfig, + cacheUrl: newConf.cacheUrl, logger: this.logger.push(LOG_ID.CACHE), enableTestFeatures: newConf.enableTestFeatures, }); await this.cache.connect(); } - const confChanged = !check.deepEqual(newConf, this.conf); - // TODO: find better naming than "restart", because that's not really what's happening. - const [restartInboundServer, restartOutboundServer, restartControlClient] = confChanged - ? await Promise.all([ - this.inboundServer.reconfigure(newConf, this.logger.push(LOG_ID.INBOUND), this.cache), - this.outboundServer.reconfigure(newConf, this.logger.push(LOG_ID.OUTBOUND), this.cache, this.metricsClient), - this.controlClient.reconfigure({ - logger: this.logger.push(LOG_ID.CONTROL), - port: newConf.control.mgmtAPIWsPort, - appConfig: newConf - }), - ]) - : [doNothing, doNothing, doNothing]; - const updateOAuthTestServer = ( - updateLogger || check.notDeepEqual(newConf.oauthTestServer, this.conf.oauthTestServer) - ); - const restartOAuthTestServer = updateOAuthTestServer - ? await this.oauthTestServer.reconfigure({ - clientKey: this.conf.oauthTestServer.clientKey, - clientSecret: this.conf.oauthTestServer.clientSecret, - port: this.conf.oauthTestServer.listenPort, - logger: this.logger.push(LOG_ID.OAUTHTEST), - }) - : doNothing; - const updateTestServer = ( - updateLogger || updateCache || check.notDeepEqual(newConf.test.port, this.conf.test.port) - ); - const restartTestServer = updateTestServer - ? await this.testServer.reconfigure({ - port: newConf.test.port, - logger: this.logger.push(LOG_ID.TEST), - cache: this.cache, - }) - : doNothing; - // You may not return an async restart function. Perform any required async activity in the - // reconfigure function and return a sync restart function. See the note at the top of this - // file. - [restartTestServer, restartOAuthTestServer, restartInboundServer, restartOutboundServer, restartControlClient] - .map(f => assert(Promise.resolve(f) !== f, 'Restart functions must be synchronous')); - restartTestServer(); - restartOAuthTestServer(); - restartInboundServer(); - restartOutboundServer(); - restartControlClient(); - this.conf = newConf; - await Promise.all([ - oldCache && oldCache.disconnect(), - ]); - } - async start() { - await this.cache.connect(); + const updateWSO2 = !_.isEqual(this.conf.wso2, newConf.wso2) + || !_.isEqual(this.conf.outbound.tls, newConf.outbound.tls); + if (updateWSO2) { + this.wso2.auth.stop(); + this.wso2.auth = new WSO2Auth({ + ...newConf.wso2.auth, + logger: this.logger, + tlsCreds: newConf.outbound.tls.mutualTLS.enabled && newConf.outbound.tls.creds, + }); + this.wso2.retryWso2AuthFailureTimes = newConf.wso2.requestAuthFailureRetryTimes; + this.wso2.auth.on('error', (msg) => { + this.emit('error', 'WSO2 auth error in InboundApi', msg); + }); + await this.wso2.auth.start(); + } - const startTestServer = this.conf.enableTestFeatures ? this.testServer.start() : null; - const startOauthTestServer = this.conf.oauthTestServer.enabled - ? this.oauthTestServer.start() - : null; + const updateInboundServer = !_.isEqual(this.conf.inbound, newConf.inbound); + if (updateInboundServer) { + await this.inboundServer.stop(); + this.inboundServer = new InboundServer( + newConf, + this.logger.push(LOG_ID.INBOUND), + this.cache, + this.wso2, + ); + this.inboundServer.on('error', (...args) => { + this.logger.push({ args }).log('Unhandled error in Inbound Server'); + this.emit('error', 'Unhandled error in Inbound Server'); + }); + await this.inboundServer.start(); + } - // We only start the control client if we're running within Mojaloop Payment Manager. - // The control server is the Payment Manager Management API Service. - // We only start the client to connect to and listen to the Management API service for - // management protocol messages e.g configuration changes, certificate updates etc. - if (this.conf.pm4mlEnabled) { - this.controlClient = await ControlAgent.Client.Create({ - address: this.conf.control.mgmtAPIWsUrl, - port: this.conf.control.mgmtAPIWsPort, - logger: this.logger.push(LOG_ID.CONTROL), - appConfig: this.conf, + const updateOutboundServer = !_.isEqual(this.conf.outbound, newConf.outbound); + if (updateOutboundServer) { + await this.outboundServer.stop(); + this.outboundServer = new OutboundServer( + newConf, + this.logger.push(LOG_ID.OUTBOUND), + this.cache, + this.metricsClient, + this.wso2, + ); + this.outboundServer.on('error', (...args) => { + this.logger.push({ args }).log('Unhandled error in Outbound Server'); + this.emit('error', 'Unhandled error in Outbound Server'); }); - this.controlClient.on(ControlAgent.EVENT.RECONFIGURE, this.restart.bind(this)); + await this.outboundServer.start(); } + const updateControlClient = !_.isEqual(this.conf.control, newConf.control); + if (updateControlClient) { + await this.controlClient?.stop(); + if (this.conf.pm4mlEnabled) { + const RESTART_INTERVAL_MS = 10000; + this.controlClient = await ControlAgent.Client.Create({ + address: newConf.control.mgmtAPIWsUrl, + port: newConf.control.mgmtAPIWsPort, + logger: this.logger.push(LOG_ID.CONTROL), + appConfig: newConf, + }); + this.controlClient.on(ControlAgent.EVENT.RECONFIGURE, this.restart.bind(this)); + this.controlClient.on('close', () => setTimeout(() => this.restart(_.merge({}, newConf, { control: { stopped: Date.now() } })), RESTART_INTERVAL_MS)); + } + } + + const updateOAuthTestServer = !_.isEqual(newConf.oauthTestServer, this.conf.oauthTestServer); + if (updateOAuthTestServer) { + await this.oauthTestServer?.stop(); + if (this.conf.oauthTestServer.enabled) { + this.oauthTestServer = new OAuthTestServer({ + clientKey: newConf.oauthTestServer.clientKey, + clientSecret: newConf.oauthTestServer.clientSecret, + port: newConf.oauthTestServer.listenPort, + logger: this.logger.push(LOG_ID.OAUTHTEST), + }); + await this.oauthTestServer.start(); + } + } + + const updateTestServer = !_.isEqual(newConf.test.port, this.conf.test.port); + if (updateTestServer) { + await this.testServer?.stop(); + if (this.conf.enableTestFeatures) { + this.testServer = new TestServer({ + port: newConf.test.port, + logger: this.logger.push(LOG_ID.TEST), + cache: this.cache, + }); + await this.testServer.start(); + } + } + + this.conf = newConf; + await Promise.all([ - this.inboundServer.start(), - this.outboundServer.start(), - this.metricsServer.start(), - startTestServer, - startOauthTestServer, + oldCache?.disconnect(), ]); } @@ -259,9 +274,9 @@ class Server extends EventEmitter { return Promise.all([ this.inboundServer.stop(), this.outboundServer.stop(), - this.oauthTestServer.stop(), - this.testServer.stop(), - this.controlClient.stop(), + this.oauthTestServer?.stop(), + this.testServer?.stop(), + this.controlClient?.stop(), this.metricsServer.stop(), ]); } diff --git a/modules/api-svc/src/lib/cache.js b/modules/api-svc/src/lib/cache.js index 14ee52143..23a37714f 100644 --- a/modules/api-svc/src/lib/cache.js +++ b/modules/api-svc/src/lib/cache.js @@ -10,7 +10,6 @@ 'use strict'; -const util = require('util'); const redis = require('redis'); const CONN_ST = { @@ -27,11 +26,12 @@ class Cache { constructor(config) { this._config = config; - if(!config.host || !config.port || !config.logger) { - throw new Error('Cache config requires host, port and logger properties'); + if(!config.cacheUrl || !config.logger) { + throw new Error('Cache config requires cacheUrl and logger properties'); } this._logger = config.logger; + this._url = config.cacheUrl; // a redis connection to handle get, set and publish operations this._client = null; @@ -78,9 +78,6 @@ class Cache { this._inProgressConnection = Promise.all([this._getClient(), this._getClient()]); [this._client, this._subscriptionClient] = await this._inProgressConnection; - // hook up our sub message handler - this._subscriptionClient.on('message', this._onMessage.bind(this)); - if (this._config.enableTestFeatures) { this.setTestMode(true); } @@ -104,7 +101,7 @@ class Cache { this._logger .push({ 'notify-keyspace-events': mode }) .log('Configuring Redis to emit keyevent events'); - this._client.config('SET', 'notify-keyspace-events', mode); + await this._client.configSet('notify-keyspace-events', mode); } async disconnect() { @@ -124,8 +121,8 @@ class Cache { } this._connectionState = CONN_ST.DISCONNECTING; this._inProgressDisconnection = Promise.all([ - new Promise(resolve => this._client.quit(resolve)), - new Promise(resolve => this._subscriptionClient.quit(resolve)) + this._client.quit(), + this._subscriptionClient.quit() ]); this._client = null; this._subscriptionClient = null; @@ -143,30 +140,36 @@ class Cache { * @returns {Promise} - Promise that resolves with an integer callback Id to submit in unsubscribe request */ async subscribe(channel, callback) { - return new Promise((resolve, reject) => { - this._subscriptionClient.subscribe(channel, (err) => { - if(err) { - this._logger.log(`Error subscribing to channel ${channel}: ${err.stack || util.inspect(err)}`); - return reject(err); - } - - this._logger.log(`Subscribed to cache pub/sub channel ${channel}`); - - if(!this._callbacks[channel]) { - // if this is the first subscriber for this channel we init the hashmap - this._callbacks[channel] = {}; + // get an id for this callback + const id = this._callbackId++; + + if(!this._callbacks[channel]) { + // if this is the first subscriber for this channel we init the hashmap + this._callbacks[channel] = { [id]: callback }; + await this._subscriptionClient.subscribe(channel, (msg) => { + // we have some callbacks to make + for (const [id, cb] of Object.entries(this._callbacks[channel])) { + this._logger.log(`Cache message received on channel ${channel}. Making callback with id ${id}`); + + // call the callback with the channel name, message and callbackId... + // ...(which is useful for unsubscribe) + try { + cb(channel, msg, id); + } catch (err) { + this._logger + .push({ callbackId: id, err }) + .log('Unhandled error in cache subscription handler'); + } } + }); + } else { + this._callbacks[channel][id] = callback; + } - // get an id for this callback - const id = this._callbackId++; - - // store the callback against the channel/id - this._callbacks[channel][id] = callback; + // store the callback against the channel/id + this._logger.log(`Subscribed to cache pub/sub channel ${channel}`); - // return the id we gave the callback - return resolve(id); - }); - }); + return id; } @@ -177,88 +180,59 @@ class Cache { * @param callbackId {integer} - id of the callback to remove */ async unsubscribe(channel, callbackId) { - return new Promise((resolve, reject) => { - if(this._callbacks[channel] && this._callbacks[channel][callbackId]) { - delete this._callbacks[channel][callbackId]; - this._logger.log(`Cache unsubscribed callbackId ${callbackId} from channel ${channel}`); - - if(Object.keys(this._callbacks[channel]).length < 1) { - //no more callbacks for this channel - delete this._callbacks[channel]; - } - - return resolve(); + if(this._callbacks[channel] && this._callbacks[channel][callbackId]) { + delete this._callbacks[channel][callbackId]; + this._logger.log(`Cache unsubscribed callbackId ${callbackId} from channel ${channel}`); + + if(Object.keys(this._callbacks[channel]).length < 1) { + //no more callbacks for this channel + delete this._callbacks[channel]; + await this._subscriptionClient.unsubscribe(channel); } - + } else { // we should not be asked to unsubscribe from a subscription we do not have. Raise this as a promise // rejection so it can be spotted. It may indiate a logic bug somewhere else this._logger.log(`Cache not subscribed to channel ${channel} for callbackId ${callbackId}`); - return reject(new Error(`Channel ${channel} does not have a callback with id ${callbackId} subscribed`)); - }); - } - - - /** - * Handler for published messages - */ - async _onMessage(channel, msg) { - if(this._callbacks[channel]) { - // we have some callbacks to make - Object.keys(this._callbacks[channel]).forEach(k => { - this._logger.log(`Cache message received on channel ${channel}. Making callback with id ${k}`); - - // call the callback with the channel name, message and callbackId... - // ...(which is useful for unsubscribe) - try { - this._callbacks[channel][k](channel, msg, k); - } catch (err) { - this._logger - .push({ callbackId: k, err }) - .log('Unhandled error in cache subscription handler'); - } - }); + throw new Error(`Channel ${channel} does not have a callback with id ${callbackId} subscribed`); } } - /** * Returns a new redis client * * @returns {object} - a connected REDIS client * */ async _getClient() { - return new Promise((resolve, reject) => { - const client = redis.createClient(this._config); + const client = redis.createClient({ url: this._url }); - client.on('error', (err) => { - this._logger.push({ err }).log('Error from REDIS client getting subscriber'); - return reject(err); - }); + client.on('error', (err) => { + this._logger.push({ err }).log('Error from REDIS client getting subscriber'); + }); - client.on('reconnecting', (err) => { - this._logger.push({ err }).log('REDIS client Reconnecting'); - return reject(err); - }); + client.on('reconnecting', (err) => { + this._logger.push({ err }).log('REDIS client Reconnecting'); + }); - client.on('subscribe', (channel, count) => { - this._logger.push({ channel, count }).log('REDIS client subscribe'); - // On a subscribe event, ensure that testFeatures are enabled. - // This is required here in the advent of a disconnect/reconnect event. Redis client will re-subscribe all subscriptions, but previously enabledTestFeatures will be lost. - // Handling this on the on subscribe event will ensure its always configured. - if (this._config.enableTestFeatures) { - this.setTestMode(true); - } - }); + client.on('subscribe', (channel, count) => { + this._logger.push({ channel, count }).log('REDIS client subscribe'); + // On a subscribe event, ensure that testFeatures are enabled. + // This is required here in the advent of a disconnect/reconnect event. Redis client will re-subscribe all subscriptions, but previously enabledTestFeatures will be lost. + // Handling this on the on subscribe event will ensure its always configured. + if (this._config.enableTestFeatures) { + this.setTestMode(true); + } + }); - client.on('connect', () => { - this._logger.log(`REDIS client connected at: ${this._config.host}:${this._config.port}`); - }); + client.on('connect', () => { + this._logger.log(`REDIS client connected at: ${this._url}`); + }); - client.on('ready', () => { - this._logger.log(`Connected to REDIS at: ${this._config.host}:${this._config.port}`); - return resolve(client); - }); + client.on('ready', () => { + this._logger.log(`Connected to REDIS at: ${this._url}`); }); + await client.connect(); + + return client; } @@ -270,23 +244,11 @@ class Cache { * @returns {Promise} - Promise that will resolve with redis replies or reject with an error */ async publish(channelName, value) { - return new Promise((resolve, reject) => { - if(typeof(value) !== 'string') { - // ALWAYS publish string values - value = JSON.stringify(value); - } - - // note that we publish on the non-SUBSCRIBE connection - this._client.publish(channelName, value, (err, replies) => { - if(err) { - this._logger.push({ channelName, err }).log(`Error publishing to channel ${channelName}`); - return reject(err); - } - - this._logger.push({ channelName, value }).log(`Published to channel ${channelName}`); - return resolve(replies); - }); - }); + if(typeof(value) !== 'string') { + // ALWAYS publish string values + value = JSON.stringify(value); + } + await this._client.publish(channelName, value); } @@ -297,22 +259,11 @@ class Cache { * @param value {stirng} - cache value */ async set(key, value) { - return new Promise((resolve, reject) => { - //if we are given an object, turn it into a string - if(typeof(value) !== 'string') { - value = JSON.stringify(value); - } - - this._client.set(key, value, (err, replies) => { - if(err) { - this._logger.push({ key, value, err }).log(`Error setting cache key: ${key}`); - return reject(err); - } - - this._logger.push({ key, value, replies }).log(`Set cache key: ${key}`); - return resolve(replies); - }); - }); + //if we are given an object, turn it into a string + if(typeof(value) !== 'string') { + value = JSON.stringify(value); + } + await this._client.set(key, value); } /** @@ -322,22 +273,11 @@ class Cache { * @param value {string} - cache value */ async add(key, value) { - return new Promise((resolve, reject) => { - //if we are given an object, turn it into a string - if(typeof(value) !== 'string') { - value = JSON.stringify(value); - } - - this._client.sadd(key, value, (err, replies) => { - if(err) { - this._logger.push({ key, value, err }).log(`Error setting cache key: ${key}`); - return reject(err); - } - - this._logger.push({ key, value, replies }).log(`Add cache key: ${key}`); - return resolve(replies); - }); - }); + //if we are given an object, turn it into a string + if(typeof(value) !== 'string') { + value = JSON.stringify(value); + } + await this._client.sAdd(key, value); } /** @@ -346,28 +286,7 @@ class Cache { * @param key {string} - cache key */ async members(key) { - return new Promise((resolve, reject) => { - this._client.smembers(key, (err, value) => { - if(err) { - this._logger.push({ key, err }).log(`Error getting cache key: ${key}`); - return reject(err); - } - - this._logger.push({ key, value }).log(`Got cache key: ${key}`); - - if(typeof(value) === 'string') { - try { - value = JSON.parse(value); - } - catch(err) { - this._logger.push({ err }).log('Error parsing JSON cache value'); - return reject(err); - } - } - - return resolve(value); - }); - }); + return this._client.sMembers(key); } /** @@ -376,28 +295,16 @@ class Cache { * @param key {string} - cache key */ async get(key) { - return new Promise((resolve, reject) => { - this._client.get(key, (err, value) => { - if(err) { - this._logger.push({ key, err }).log(`Error getting cache key: ${key}`); - return reject(err); - } - - this._logger.push({ key, value }).log(`Got cache key: ${key}`); - - if(typeof(value) === 'string') { - try { - value = JSON.parse(value); - } - catch(err) { - this._logger.push({ err }).log('Error parsing JSON cache value'); - return reject(err); - } - } - - return resolve(value); - }); - }); + let value = await this._client.get(key); + if(typeof(value) === 'string') { + try { + value = JSON.parse(value); + } + catch(err) { + this._logger.push({ err }).log('Error parsing JSON cache value'); + } + } + return value; } } diff --git a/modules/api-svc/src/lib/metrics.js b/modules/api-svc/src/lib/metrics.js index f8c99354c..3b8743c58 100644 --- a/modules/api-svc/src/lib/metrics.js +++ b/modules/api-svc/src/lib/metrics.js @@ -131,10 +131,8 @@ class MetricsServer { result.use(koaBody()); result.use(async ctx => { - this._logger.log('Metrics request received'); - ctx.response.set('Content-Type', this._prometheusRegister.contentType); - ctx.response.body = this._prometheusRegister.metrics(); + ctx.response.body = await this._prometheusRegister.metrics(); }); return result; diff --git a/modules/api-svc/src/lib/model/AccountsModel.js b/modules/api-svc/src/lib/model/AccountsModel.js index 6f73db582..4f2ccac6a 100644 --- a/modules/api-svc/src/lib/model/AccountsModel.js +++ b/modules/api-svc/src/lib/model/AccountsModel.js @@ -16,10 +16,7 @@ const StateMachine = require('javascript-state-machine'); const { MojaloopRequests, Errors } = require('@mojaloop/sdk-standard-components'); const { BackendError } = require('./common'); -const stateEnum = { - 'ERROR_OCCURRED': 'ERROR_OCCURRED', - 'COMPLETED': 'COMPLETED', -}; +const { SDKStateEnum } = require('./common'); /** @@ -283,11 +280,11 @@ class AccountsModel { switch(this._data.currentState) { case 'succeeded': - resp.currentState = stateEnum.COMPLETED; + resp.currentState = SDKStateEnum.COMPLETED; break; case 'errored': - resp.currentState = stateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; default: @@ -295,7 +292,7 @@ class AccountsModel { `Account model response being returned from an unexpected state: ${this._data.currentState}. ` + 'Returning ERROR_OCCURRED state' ); - resp.currentState = stateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; } return resp; diff --git a/modules/api-svc/src/lib/model/Async2SyncModel.js b/modules/api-svc/src/lib/model/Async2SyncModel.js index 366062a07..f79e018e3 100644 --- a/modules/api-svc/src/lib/model/Async2SyncModel.js +++ b/modules/api-svc/src/lib/model/Async2SyncModel.js @@ -12,6 +12,7 @@ const util = require('util'); const PSM = require('./common').PersistentStateMachine; +const { SDKStateEnum } = require('./common'); const MojaloopRequests = require('@mojaloop/sdk-standard-components').MojaloopRequests; const deferredJob = require('./lib').deferredJob; @@ -123,9 +124,9 @@ function generate({ } const mapCurrentState = { - start: 'WAITING_FOR_ACTION', - succeeded: 'COMPLETED', - errored: 'ERROR_OCCURRED' + start: SDKStateEnum.WAITING_FOR_ACTION, + succeeded: SDKStateEnum.COMPLETED, + errored: SDKStateEnum.ERROR_OCCURRED }; /** diff --git a/modules/api-svc/src/lib/model/InboundTransfersModel.js b/modules/api-svc/src/lib/model/InboundTransfersModel.js index da7c27f9e..1d620a78e 100644 --- a/modules/api-svc/src/lib/model/InboundTransfersModel.js +++ b/modules/api-svc/src/lib/model/InboundTransfersModel.js @@ -22,7 +22,9 @@ const { Errors, } = require('@mojaloop/sdk-standard-components'); const shared = require('./lib/shared'); -const { TransferStateEnum } = require('./common'); +const { SDKStateEnum } = require('./common'); +const FSPIOPTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.TransferState; +const FSPIOPBulkTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.BulkTransferState; /** * Models the operations required for performing inbound transfers @@ -74,7 +76,7 @@ class InboundTransfersModel { updateStateWithError(err) { this.data.lastError = err; - this.data.currentState = TransferStateEnum.ERROR_OCCURRED; + this.data.currentState = SDKStateEnum.ERROR_OCCURRED; return this._save(); } @@ -188,7 +190,7 @@ class InboundTransfersModel { headers: request.headers, body: request.body }, - currentState: TransferStateEnum.QUOTE_REQUEST_RECEIVED, + currentState: SDKStateEnum.QUOTE_REQUEST_RECEIVED, initiatedTimestamp: new Date().toISOString(), }; @@ -237,7 +239,7 @@ class InboundTransfersModel { headers: res.originalRequest.headers, body: res.originalRequest.body, }; - this.data.currentState = TransferStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE; + this.data.currentState = SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE; await this._save(); return res; } @@ -342,7 +344,7 @@ class InboundTransfersModel { // persist our state so we have a record if we crash during processing the prepare this.data.prepare = request; - this.data.currentState = TransferStateEnum.PREPARE_RECEIVED; + this.data.currentState = SDKStateEnum.PREPARE_RECEIVED; await this._save(); // Calculate or retrieve fulfilment and condition @@ -389,9 +391,9 @@ class InboundTransfersModel { // create a mojaloop transfer fulfil response const mojaloopResponse = { - completedTimestamp: new Date(), - transferState: this._reserveNotification ? 'RESERVED' : 'COMMITTED', - fulfilment: fulfilment, + completedTimestamp: response.completedTimestamp || new Date(), + transferState: response.transferState || (this._reserveNotification ? FSPIOPTransferStateEnum.RESERVED : FSPIOPTransferStateEnum.COMMITTED), + fulfilment: response.fulfilment || fulfilment, ...response.extensionList && { extensionList: { extension: response.extensionList, @@ -406,7 +408,7 @@ class InboundTransfersModel { headers: res.originalRequest.headers, body: res.originalRequest.body, }; - this.data.currentState = this._reserveNotification ? TransferStateEnum.RESERVED : TransferStateEnum.COMPLETED; + this.data.currentState = response.transferState || (this._reserveNotification ? SDKStateEnum.RESERVED : SDKStateEnum.COMPLETED); await this._save(); return res; } catch(err) { @@ -649,7 +651,7 @@ class InboundTransfersModel { if (individualTransferErrors.length) { // TODO: Verify and align with actual schema for bulk transfers error endpoint const mojaloopErrorResponse = { - bulkTransferState: 'REJECTED', + bulkTransferState: FSPIOPBulkTransferStateEnum.REJECTED, // eslint-disable-next-line no-unused-vars individualTransferResults: individualTransferErrors.map(({ transferId, transferError }) => ({ transferId, @@ -679,7 +681,7 @@ class InboundTransfersModel { // create a mojaloop transfer fulfil response const mojaloopResponse = { completedTimestamp: new Date(), - bulkTransferState: 'COMMITTED', + bulkTransferState: FSPIOPBulkTransferStateEnum.COMPLETED, }; if (response.individualTransferResults && response.individualTransferResults.length) { @@ -784,14 +786,18 @@ class InboundTransfersModel { // tag the final notification body on to the state this.data.finalNotification = body; - if(body.transferState === 'COMMITTED') { + if(body.transferState === FSPIOPTransferStateEnum.COMMITTED) { // if the transfer was successful in the switch, set the overall transfer state to COMPLETED - this.data.currentState = TransferStateEnum.COMPLETED; + this.data.currentState = SDKStateEnum.COMPLETED; } + else if(body.transferState === FSPIOPTransferStateEnum.ABORTED) { + // if the transfer was ABORTED in the switch, set the overall transfer state to ABORTED + this.data.currentState = SDKStateEnum.ABORTED; + } else { // if the final notification has anything other than COMMITTED as the final state, set an error // in the transfer state. - this.data.currentState == TransferStateEnum.ERROR_OCCURED; + this.data.currentState = SDKStateEnum.ERROR_OCCURED; this.data.lastError = 'Final notification state not COMMITTED'; } @@ -800,7 +806,7 @@ class InboundTransfersModel { const res = await this._backendRequests.putTransfersNotification(this.data, transferId); return res; } catch (err) { - this._logger.push({ err }).log('Error notifying backend of final transfer state'); + this._logger.push({ err }).log(`Error notifying backend of final transfer state equal to: ${body.transferState}`); } } @@ -841,7 +847,7 @@ class InboundTransfersModel { originalError: err.stack || util.inspect(err), mojaloopError: mojaloopError, }; - this.data.currentState = TransferStateEnum.ERROR_OCCURRED; + this.data.currentState = SDKStateEnum.ERROR_OCCURRED; await this._save(); } return mojaloopError; diff --git a/modules/api-svc/src/lib/model/OutboundBulkQuotesModel.js b/modules/api-svc/src/lib/model/OutboundBulkQuotesModel.js index 950219193..725dbc8d9 100644 --- a/modules/api-svc/src/lib/model/OutboundBulkQuotesModel.js +++ b/modules/api-svc/src/lib/model/OutboundBulkQuotesModel.js @@ -17,10 +17,7 @@ const { MojaloopRequests } = require('@mojaloop/sdk-standard-components'); const shared = require('./lib/shared'); const { BackendError } = require('./common'); -const stateEnum = { - 'ERROR_OCCURRED': 'ERROR_OCCURRED', - 'COMPLETED': 'COMPLETED', -}; +const { SDKStateEnum } = require('./common'); /** @@ -381,16 +378,16 @@ class OutboundBulkQuotesModel { switch(this.data.currentState) { case 'succeeded': - resp.currentState = stateEnum.COMPLETED; + resp.currentState = SDKStateEnum.COMPLETED; break; case 'errored': - resp.currentState = stateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; default: this._logger.log(`Bulk quote model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`); - resp.currentState = stateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; } diff --git a/modules/api-svc/src/lib/model/OutboundBulkTransfersModel.js b/modules/api-svc/src/lib/model/OutboundBulkTransfersModel.js index e79997563..151c50ab3 100644 --- a/modules/api-svc/src/lib/model/OutboundBulkTransfersModel.js +++ b/modules/api-svc/src/lib/model/OutboundBulkTransfersModel.js @@ -16,10 +16,7 @@ const StateMachine = require('javascript-state-machine'); const { MojaloopRequests } = require('@mojaloop/sdk-standard-components'); const { BackendError } = require('./common'); -const stateEnum = { - 'ERROR_OCCURRED': 'ERROR_OCCURRED', - 'COMPLETED': 'COMPLETED', -}; +const { SDKStateEnum } = require('./common'); /** * Models the state machine and operations required for performing an outbound bulk transfer @@ -373,16 +370,16 @@ class OutboundBulkTransfersModel { switch(this.data.currentState) { case 'succeeded': - resp.currentState = stateEnum.COMPLETED; + resp.currentState = SDKStateEnum.COMPLETED; break; case 'errored': - resp.currentState = stateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; default: this._logger.log(`Bulk transfer model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`); - resp.currentState = stateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; } diff --git a/modules/api-svc/src/lib/model/OutboundRequestToPayModel.js b/modules/api-svc/src/lib/model/OutboundRequestToPayModel.js index 0ad13e1f9..617e6591a 100644 --- a/modules/api-svc/src/lib/model/OutboundRequestToPayModel.js +++ b/modules/api-svc/src/lib/model/OutboundRequestToPayModel.js @@ -17,12 +17,7 @@ const { MojaloopRequests } = require('@mojaloop/sdk-standard-components'); const { BackendError } = require('./common'); const PartiesModel = require('./PartiesModel'); -const transferStateEnum = { - 'WAITING_FOR_PARTY_ACCEPTANCE': 'WAITING_FOR_PARTY_ACCEPTANCE', - 'WAITING_FOR_QUOTE_ACCEPTANCE': 'WAITING_FOR_QUOTE_ACCEPTANCE', - 'ERROR_OCCURRED': 'ERROR_OCCURRED', - 'COMPLETED': 'COMPLETED', -}; +const { SDKStateEnum } = require('./common'); class OutboundRequestToPayModel { @@ -480,20 +475,20 @@ class OutboundRequestToPayModel { switch(this.data.currentState) { case 'payeeResolved': - resp.currentState = transferStateEnum.WAITING_FOR_PARTY_ACCEPTANCE; + resp.currentState = SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE; break; case 'succeeded': - resp.currentState = transferStateEnum.COMPLETED; + resp.currentState = SDKStateEnum.COMPLETED; break; case 'errored': - resp.currentState = transferStateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; default: this._logger.log(`Transaction Request model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`); - resp.currentState = transferStateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; } diff --git a/modules/api-svc/src/lib/model/OutboundRequestToPayTransferModel.js b/modules/api-svc/src/lib/model/OutboundRequestToPayTransferModel.js index 17505f7cb..f9890bc26 100644 --- a/modules/api-svc/src/lib/model/OutboundRequestToPayTransferModel.js +++ b/modules/api-svc/src/lib/model/OutboundRequestToPayTransferModel.js @@ -18,13 +18,7 @@ const shared = require('./lib/shared'); const { BackendError } = require('./common'); const PartiesModel = require('./PartiesModel'); -const requestToPayTransferStateEnum = { - 'WAITING_FOR_QUOTE_ACCEPTANCE': 'WAITING_FOR_QUOTE_ACCEPTANCE', - 'WAITING_FOR_OTP_ACCEPTANCE': 'WAITING_FOR_OTP_ACCEPTANCE', - 'ERROR_OCCURRED': 'ERROR_OCCURRED', - 'COMPLETED': 'COMPLETED', -}; - +const { SDKStateEnum } = require('./common'); /** * Models the state machine and operations required for performing an outbound transfer @@ -826,24 +820,24 @@ class OutboundRequestToPayTransferModel { switch(this.data.currentState) { case 'quoteReceived': - resp.currentState = requestToPayTransferStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE; + resp.currentState = SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE; break; case 'otpReceived': - resp.currentState = requestToPayTransferStateEnum.WAITING_FOR_OTP_ACCEPTANCE; + resp.currentState = SDKStateEnum.WAITING_FOR_OTP_ACCEPTANCE; break; case 'succeeded': - resp.currentState = requestToPayTransferStateEnum.COMPLETED; + resp.currentState = SDKStateEnum.COMPLETED; break; case 'errored': - resp.currentState = requestToPayTransferStateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; default: this._logger.log(`Transfer model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`); - resp.currentState = requestToPayTransferStateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; } diff --git a/modules/api-svc/src/lib/model/OutboundTransfersModel.js b/modules/api-svc/src/lib/model/OutboundTransfersModel.js index 607c640af..7ab3b4bb7 100644 --- a/modules/api-svc/src/lib/model/OutboundTransfersModel.js +++ b/modules/api-svc/src/lib/model/OutboundTransfersModel.js @@ -15,7 +15,8 @@ const { uuid } = require('uuidv4'); const StateMachine = require('javascript-state-machine'); const { Ilp, MojaloopRequests } = require('@mojaloop/sdk-standard-components'); const shared = require('./lib/shared'); -const { BackendError, TransferStateEnum } = require('./common'); +const { BackendError, SDKStateEnum } = require('./common'); +const FSPIOPTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.TransferState; const PartiesModel = require('./PartiesModel'); /** @@ -163,7 +164,7 @@ class OutboundTransfersModel { if(!this.data.hasOwnProperty('direction')) { this.data.direction = 'OUTBOUND'; } - if(this.data.skipPartyLookup && typeof(this.data.to.fspId) === undefined) { + if(this.data.skipPartyLookup && !this.data.to.fspId) { throw new Error('fspId of to party must be specific id when skipPartyLookup is truthy'); } @@ -685,7 +686,7 @@ class OutboundTransfersModel { if(this._checkIlp && !this._ilp.validateFulfil(fulfil.body.fulfilment, this.data.quoteResponse.body.condition)) { throw new Error('Invalid fulfilment received from peer DFSP.'); } - if(this._sendFinalNotificationIfRequested && fulfil.body.transferState === 'RESERVED') { + if(this._sendFinalNotificationIfRequested && fulfil.body.transferState === FSPIOPTransferStateEnum.RESERVED) { // we need to send a PATCH notification back to say we have committed the transfer. // Note that this is normally a switch only responsibility but the capability is // implemented here to support testing use cases where the mojaloop-connector is @@ -695,7 +696,7 @@ class OutboundTransfersModel { // we will use the current server time as committed timestamp. const patchNotification = { completedTimestamp: (new Date()).toISOString(), - transferState: 'COMMITTED', + transferState: FSPIOPTransferStateEnum.COMMITTED, }; const res = this._requests.patchTransfers(this.data.transferId, patchNotification, this.data.quoteResponseSource); @@ -885,28 +886,28 @@ class OutboundTransfersModel { switch(this.data.currentState) { case 'payeeResolved': - resp.currentState = TransferStateEnum.WAITING_FOR_PARTY_ACCEPTANCE; + resp.currentState = SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE; break; case 'quoteReceived': - resp.currentState = TransferStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE; + resp.currentState = SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE; break; case 'succeeded': - resp.currentState = TransferStateEnum.COMPLETED; + resp.currentState = SDKStateEnum.COMPLETED; break; case 'aborted': - resp.currentState = TransferStateEnum.ABORTED; + resp.currentState = SDKStateEnum.ABORTED; break; case 'errored': - resp.currentState = TransferStateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; default: this._logger.log(`Transfer model response being returned from an unexpected state: ${this.data.currentState}. Returning ERROR_OCCURRED state`); - resp.currentState = TransferStateEnum.ERROR_OCCURRED; + resp.currentState = SDKStateEnum.ERROR_OCCURRED; break; } diff --git a/modules/api-svc/src/lib/model/common/BackendError.js b/modules/api-svc/src/lib/model/common/BackendError.js index 2fcd76e8f..4b35593ec 100644 --- a/modules/api-svc/src/lib/model/common/BackendError.js +++ b/modules/api-svc/src/lib/model/common/BackendError.js @@ -10,17 +10,6 @@ 'use strict'; -const TransferStateEnum = { - 'WAITING_FOR_PARTY_ACCEPTANCE': 'WAITING_FOR_PARTY_ACCEPTANCE', - 'QUOTE_REQUEST_RECEIVED': 'QUOTE_REQUEST_RECEIVED', - 'WAITING_FOR_QUOTE_ACCEPTANCE': 'WAITING_FOR_QUOTE_ACCEPTANCE', - 'PREPARE_RECEIVED': 'PREPARE_RECEIVED', - 'ERROR_OCCURRED': 'ERROR_OCCURRED', - 'COMPLETED': 'COMPLETED', - 'ABORTED': 'ABORTED', - 'RESERVED': 'RESERVED', -}; - class BackendError extends Error { constructor(msg, httpStatusCode) { super(msg); @@ -45,6 +34,5 @@ class BackendError extends Error { module.exports = { - BackendError, - TransferStateEnum, + BackendError }; diff --git a/modules/api-svc/src/lib/model/common/Enums.js b/modules/api-svc/src/lib/model/common/Enums.js new file mode 100644 index 000000000..8c9f83082 --- /dev/null +++ b/modules/api-svc/src/lib/model/common/Enums.js @@ -0,0 +1,30 @@ + +/************************************************************************** + * (C) Copyright ModusBox Inc. 2019 - All rights reserved. * + * * + * This file is made available under the terms of the license agreement * + * specified in the corresponding source code repository. * + * * + * ORIGINAL AUTHOR: * + * Yevhen Kyriukha - yevhen.kyriukha@modusbox.com * + **************************************************************************/ + +'use strict'; + +// NOTE: Stick all common SDK ENUMS here. SDKStateEnum is the first attempt at consolidating and cleaning up ENUMS in the SDK. + +const SDKStateEnum = { + WAITING_FOR_ACTION: 'WAITING_FOR_ACTION', + WAITING_FOR_PARTY_ACCEPTANCE: 'WAITING_FOR_PARTY_ACCEPTANCE', + QUOTE_REQUEST_RECEIVED: 'QUOTE_REQUEST_RECEIVED', + WAITING_FOR_QUOTE_ACCEPTANCE: 'WAITING_FOR_QUOTE_ACCEPTANCE', + PREPARE_RECEIVED: 'PREPARE_RECEIVED', + ERROR_OCCURRED: 'ERROR_OCCURRED', + COMPLETED: 'COMPLETED', + ABORTED: 'ABORTED', + RESERVED: 'RESERVED', +}; + +module.exports = { + SDKStateEnum, +}; diff --git a/modules/api-svc/src/lib/model/common/index.js b/modules/api-svc/src/lib/model/common/index.js index 2aa968f30..1ec95dcc1 100644 --- a/modules/api-svc/src/lib/model/common/index.js +++ b/modules/api-svc/src/lib/model/common/index.js @@ -9,11 +9,12 @@ **************************************************************************/ 'use strict'; -const { BackendError, TransferStateEnum } = require('./BackendError'); +const { SDKStateEnum } = require('./Enums'); +const { BackendError } = require('./BackendError'); const PersistentStateMachine = require('./PersistentStateMachine'); module.exports = { BackendError, - TransferStateEnum, + SDKStateEnum, PersistentStateMachine }; diff --git a/modules/api-svc/src/lib/router.js b/modules/api-svc/src/lib/router.js index 79521f4f9..ecfbfdf99 100644 --- a/modules/api-svc/src/lib/router.js +++ b/modules/api-svc/src/lib/router.js @@ -21,7 +21,9 @@ module.exports = (handlerMap) => async (ctx, next) => { ctx.response.body = { statusCode: 404, message: 'Not found' }; } else { - ctx.state.logger.push({ handler }).log('Found handler'); + if (!ctx.state.logExcludePaths.includes(ctx.path)) { + ctx.state.logger.push({handler}).log('Found handler'); + } await handler(ctx); } await next(); diff --git a/modules/api-svc/src/lib/validate.js b/modules/api-svc/src/lib/validate.js index d0a1e5ec6..025492b4d 100644 --- a/modules/api-svc/src/lib/validate.js +++ b/modules/api-svc/src/lib/validate.js @@ -125,6 +125,13 @@ const transformApiDoc = apiDoc => ({ }); class Validator { + /** + * @param {{logExcludePaths: string[]}} [opts] + */ + + constructor(opts) { + this.logExcludePaths = opts?.logExcludePaths || []; + } // apiDoc // POJO representing apiDoc API spec. Example: // const v = new Validator(require('./apiDoc.json')); @@ -163,7 +170,9 @@ class Validator { } result.params = Object.assign({}, ...path.match(result.matcher.regex).slice(1).map((m, i) => ({ [result.matcher.params[i]]: m}))); - logger.push({ path, result }).log('Matched path'); + if (!this.logExcludePaths.includes(path)) { + logger.push({path, result}).log('Matched path'); + } return result; } diff --git a/modules/api-svc/test/__mocks__/redis.js b/modules/api-svc/test/__mocks__/redis.js index 5eb864f2d..cbd32d590 100644 --- a/modules/api-svc/test/__mocks__/redis.js +++ b/modules/api-svc/test/__mocks__/redis.js @@ -1,53 +1,78 @@ /************************************************************************** - * (C) Copyright ModusBox Inc. 2019 - All rights reserved. * + * (C) Copyright ModusBox Inc. 2020 - All rights reserved. * * * * This file is made available under the terms of the license agreement * * specified in the corresponding source code repository. * * * * ORIGINAL AUTHOR: * - * James Bush - james.bush@modusbox.com * + * Yevhen Kyriukha - yevhen.kyriukha@modusbox.com * **************************************************************************/ -'use strict'; - const redisMock = require('redis-mock'); +const { promisify } = require('util'); + +const { EventEmitter } = require('events'); + +const events = {}; -// redis-mock currently ignores callback argument, the following class fix this +// redis-mock currently ignores callback arguments, the following class fixes that class RedisClient extends redisMock.RedisClient { - constructor(options, stream, redisMock) { - super(options, stream, redisMock); + constructor(opts) { + super(opts); + events[opts.cacheUrl] = events[opts.cacheUrl] || new EventEmitter(); + this.events = events[opts.cacheUrl]; } - _executeCallback(...args) { - if (typeof args[args.length - 1] === 'function') { - const callback = args[args.length - 1]; - const argList = Array.prototype.slice.call(args, 0, args.length - 1); - callback(null, argList); - } + async subscribe(...args) { + this.events.on(...args); + // return promisify(super.subscribe.bind(this))(...args); } - config(...args) { - this._executeCallback(...args); + async unsubscribe(channel) { + this.events.removeAllListeners(channel); } - subscribe(...args) { - super.subscribe(...args); - this._executeCallback(...args); + async publish(...args) { + process.nextTick(() => this.events.emit(...args)); } - publish(...args) { - super.publish(...args); - this._executeCallback(...args); + set(...args) { + return promisify(super.set.bind(this))(...args); } - set(...args) { - super.set(...args); - this._executeCallback(...args); + get(...args) { + return promisify(super.get.bind(this))(...args); + } + + keys(...args) { + return promisify(super.keys.bind(this))(...args); + } + + end() { + this.events.removeAllListeners(); } -} + connect() {} + async disconnect() { + return this.end(); + } + + async quit() { + return this.end(); + } + + sAdd(...args) { + return promisify(super.sadd.bind(this))(...args); + } + + sMembers(...args) { + return promisify(super.smembers.bind(this))(...args); + } + + configSet() {} +} module.exports = { - createClient: (options = {host: 'localhost', port: 6380}, stream, redisMock) => new RedisClient(options, stream, redisMock), + createClient: (opts) => new RedisClient(opts), }; diff --git a/modules/api-svc/test/config/integration.env b/modules/api-svc/test/config/integration.env index 3b0a81e17..0e9d22089 100644 --- a/modules/api-svc/test/config/integration.env +++ b/modules/api-svc/test/config/integration.env @@ -26,8 +26,8 @@ JWS_SIGN=false JWS_SIGN_PUT_PARTIES=false # Path to JWS signing key (private key of THIS DFSP) -JWS_SIGNING_KEY_PATH=/jwsSigningKey.key -JWS_VERIFICATION_KEYS_DIRECTORY=/jwsVerificationKeys +JWS_SIGNING_KEY_PATH=secrets/jwsSigningKey.key +JWS_VERIFICATION_KEYS_DIRECTORY=secrets/jwsVerificationKeys # Location of certs and key required for TLS # IN_CA_CERT_PATH=./secrets/cacert.pem @@ -43,8 +43,7 @@ JWS_VERIFICATION_KEYS_DIRECTORY=/jwsVerificationKeys LOG_INDENT=0 # REDIS CACHE CONNECTION -CACHE_HOST=redis -CACHE_PORT=6379 +CACHE_URL=redis://redis:6379 CACHE_SHOULD_EXPIRE=false CACHE_EXPIRY_SECONDS=3600 diff --git a/modules/api-svc/test/integration/lib/Outbound/parties.test.js b/modules/api-svc/test/integration/lib/Outbound/parties.test.js index eed8bf9ef..1677b6eb0 100644 --- a/modules/api-svc/test/integration/lib/Outbound/parties.test.js +++ b/modules/api-svc/test/integration/lib/Outbound/parties.test.js @@ -2,6 +2,7 @@ const axios = require('axios'); const env = require('../../testEnv'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); jest.dontMock('redis'); @@ -12,7 +13,7 @@ describe('/parties', () => { const res = await axios.get(getPartiesURI); expect(res.status).toEqual(200); - expect(res.data.currentState).toEqual('COMPLETED'); + expect(res.data.currentState).toEqual(SDKStateEnum.COMPLETED); expect(typeof res.data.party).toEqual('object'); expect(typeof res.data.party.body).toEqual('object'); expect(typeof res.data.party.headers).toEqual('object'); diff --git a/modules/api-svc/test/integration/lib/Outbound/quotes.test.js b/modules/api-svc/test/integration/lib/Outbound/quotes.test.js index 898da31d7..e4ca533ff 100644 --- a/modules/api-svc/test/integration/lib/Outbound/quotes.test.js +++ b/modules/api-svc/test/integration/lib/Outbound/quotes.test.js @@ -4,6 +4,8 @@ const axios = require('axios'); const { uuid } = require('uuidv4'); const env = require('../../testEnv'); const quotesPostRequest = require('./data/quotesPostRequest.json'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); + jest.dontMock('redis'); @@ -28,7 +30,7 @@ describe('/quotes', () => { }); expect(res.status).toEqual(200); - expect(res.data.currentState).toEqual('COMPLETED'); + expect(res.data.currentState).toEqual(SDKStateEnum.COMPLETED); expect(typeof res.data.quotes).toEqual('object'); expect(typeof res.data.quotes.body).toEqual('object'); expect(typeof res.data.quotes.headers).toEqual('object'); diff --git a/modules/api-svc/test/integration/lib/Outbound/simpleTransfers.test.js b/modules/api-svc/test/integration/lib/Outbound/simpleTransfers.test.js index 7edfba57a..b0001e969 100644 --- a/modules/api-svc/test/integration/lib/Outbound/simpleTransfers.test.js +++ b/modules/api-svc/test/integration/lib/Outbound/simpleTransfers.test.js @@ -4,6 +4,7 @@ const axios = require('axios'); const { uuid } = require('uuidv4'); const env = require('../../testEnv'); const transfersPostRequest = require('./data/transfersPostRequest.json'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); jest.dontMock('redis'); @@ -37,7 +38,7 @@ describe('/simpleTransfers', () => { }); expect(res.status).toEqual(200); - expect(res.data.currentState).toEqual('COMPLETED'); + expect(res.data.currentState).toEqual(SDKStateEnum.COMPLETED); expect(typeof res.data.transfer).toEqual('object'); expect(typeof res.data.transfer.body).toEqual('object'); expect(typeof res.data.transfer.headers).toEqual('object'); diff --git a/modules/api-svc/test/integration/lib/cache.test.js b/modules/api-svc/test/integration/lib/cache.test.js index 29ca831b8..3b7524d0c 100644 --- a/modules/api-svc/test/integration/lib/cache.test.js +++ b/modules/api-svc/test/integration/lib/cache.test.js @@ -37,8 +37,7 @@ const { Logger } = require('@mojaloop/sdk-standard-components'); const env = require('../testEnv'); const defaultCacheConfig = { - host: env.redis.host, - port: env.redis.port, + cacheUrl: env.redisUrl, logger: null }; diff --git a/modules/api-svc/test/integration/testEnv.js b/modules/api-svc/test/integration/testEnv.js index 80a75ddb3..451b9169a 100644 --- a/modules/api-svc/test/integration/testEnv.js +++ b/modules/api-svc/test/integration/testEnv.js @@ -1,7 +1,4 @@ module.exports = { OutboundHostURI: 'http://localhost:4001', - redis: { - host: 'localhost', - port: 6379 - } + redisUrl: 'redis://localhost:6379', }; diff --git a/modules/api-svc/test/unit/ControlClient.test.js b/modules/api-svc/test/unit/ControlClient.test.js index a808aceea..9badaa5af 100644 --- a/modules/api-svc/test/unit/ControlClient.test.js +++ b/modules/api-svc/test/unit/ControlClient.test.js @@ -1,14 +1,9 @@ const ControlAgent = require('~/ControlAgent'); const TestControlServer = require('./ControlServer'); -const InboundServer = require('~/InboundServer'); -const OutboundServer = require('~/OutboundServer'); -const TestServer = require('~/TestServer'); -const defaultConfig = require('./data/defaultConfig.json'); const { Logger } = require('@mojaloop/sdk-standard-components'); jest.mock('~/lib/cache'); -const Cache = require('~/lib/cache'); // TODO: // - diff against master to determine what else needs testing @@ -66,48 +61,9 @@ describe('ControlAgent', () => { const newConfigEvent = new Promise( (resolve) => client.on(ControlAgent.EVENT.RECONFIGURE, resolve) ); - await server.broadcastConfigChange(changedConfig); + server.broadcastConfigChange(changedConfig); const newConfEventData = await newConfigEvent; expect(newConfEventData).toEqual(changedConfig); }); }); }); - -describe('Server reconfigure methods', () => { - let conf, logger, cache; - - const isPromise = (o) => Promise.resolve(o) === o; - - beforeEach(() => { - conf = JSON.parse(JSON.stringify(defaultConfig)); - logger = new Logger.Logger({ stringify: () => '' }); - cache = new Cache({ ...conf.cacheConfig, logger: logger.push({ component: 'cache' }) }); - }); - - test('InboundServer reconfigure method returns sync function', async () => { - const server = new InboundServer(conf, logger, cache); - const res = await server.reconfigure(conf, logger, cache); - expect(isPromise(res)).toEqual(false); - }); - - test('OutboundServer reconfigure method returns sync function', async () => { - const server = new OutboundServer(conf, logger, cache); - const res = await server.reconfigure(conf, logger, cache); - expect(isPromise(res)).toEqual(false); - }); - - test('TestServer reconfigure method returns sync function', async () => { - const server = new TestServer({ logger, cache }); - const res = await server.reconfigure({ logger, cache }); - expect(isPromise(res)).toEqual(false); - }); - - test('ControlClient reconfigure method returns sync function', async () => { - const server = new TestControlServer.Server({ logger, appConfig: { ...conf, control: { port: 4005 }}}); - const client = await ControlAgent.Client.Create({ port: 4005, logger, appConfig: {} }); - const res = await client.reconfigure({ logger, port: 4005, appConfig: {} }); - expect(isPromise(res)).toEqual(false); - await client.close(); - await server.close(); - }); -}); diff --git a/modules/api-svc/test/unit/ControlServer.test.js b/modules/api-svc/test/unit/ControlServer.test.js index 9aca70930..158c406ad 100644 --- a/modules/api-svc/test/unit/ControlServer.test.js +++ b/modules/api-svc/test/unit/ControlServer.test.js @@ -1,13 +1,8 @@ const ControlServer = require('~/ControlServer'); -const InboundServer = require('~/InboundServer'); -const OutboundServer = require('~/OutboundServer'); -const TestServer = require('~/TestServer'); -const defaultConfig = require('./data/defaultConfig.json'); const { Logger } = require('@mojaloop/sdk-standard-components'); jest.mock('~/lib/cache'); -const Cache = require('~/lib/cache'); // TODO: // - diff against master to determine what else needs testing @@ -67,60 +62,5 @@ describe('ControlServer', () => { const newConfEventData = await newConfigEvent; expect(newConfEventData).toEqual(changedConfig); }); - - it('sends new config to clients when instructed', async () => { - const client2 = await ControlServer.Client.Create({ - address: 'localhost', - port: server.address().port, - logger - }); - const changedConfig = { ...appConfig, some: 'thing' }; - await client.send(ControlServer.build.CONFIGURATION.PATCH(appConfig, changedConfig)); - const restart = server.reconfigure({ appConfig: changedConfig }); - restart(); - await server.notifyClientsOfCurrentConfig(); - const [notification, notification2] = - await Promise.all([client.receive(), client2.receive()]); - const expected = ControlServer.build.CONFIGURATION.NOTIFY(changedConfig, notification.id); - expect(JSON.stringify(notification)).toEqual(expected); - expect(JSON.stringify(notification2)).toEqual(expected); - }); - }); -}); - -describe('Server reconfigure methods', () => { - let conf, logger, cache; - - const isPromise = (o) => Promise.resolve(o) === o; - - beforeEach(() => { - conf = JSON.parse(JSON.stringify(defaultConfig)); - logger = new Logger.Logger({ stringify: () => '' }); - cache = new Cache({ ...conf.cacheConfig, logger: logger.push({ component: 'cache' }) }); - }); - - test('InboundServer reconfigure method returns sync function', async () => { - const server = new InboundServer(conf, logger, cache); - const res = await server.reconfigure(conf, logger, cache); - expect(isPromise(res)).toEqual(false); - }); - - test('OutboundServer reconfigure method returns sync function', async () => { - const server = new OutboundServer(conf, logger, cache); - const res = await server.reconfigure(conf, logger, cache); - expect(isPromise(res)).toEqual(false); - }); - - test('TestServer reconfigure method returns sync function', async () => { - const server = new TestServer({ logger, cache }); - const res = await server.reconfigure({ logger, cache }); - expect(isPromise(res)).toEqual(false); - }); - - test('ControlServer reconfigure method returns sync function', async () => { - const server = new ControlServer.Server({ logger, appConfig: {} }); - const res = await server.reconfigure({ logger, appConfig: {} }); - expect(isPromise(res)).toEqual(false); - await server.close(); }); }); diff --git a/modules/api-svc/test/unit/ControlServer/index.js b/modules/api-svc/test/unit/ControlServer/index.js index 870a4ec74..03eaf9f4d 100644 --- a/modules/api-svc/test/unit/ControlServer/index.js +++ b/modules/api-svc/test/unit/ControlServer/index.js @@ -139,7 +139,11 @@ class Server extends ws.Server { // Close the server then wait for all the client sockets to close async stop() { - await new Promise(this.close.bind(this)); + const closing = new Promise(resolve => this.close(resolve)); + for (const client of this.clients) { + client.terminate(); + } + await closing; this._logger.log('Control server shutdown complete'); } @@ -186,9 +190,7 @@ class Server extends ws.Server { * from other modules. */ registerInternalEvents() { - ControlServerEventEmitter.on(INTERNAL_EVENTS.SERVER.BROADCAST_CONFIG_CHANGE, (params) => { - this.broadcastConfigChange(params); - }); + ControlServerEventEmitter.on(INTERNAL_EVENTS.SERVER.BROADCAST_CONFIG_CHANGE, (params) => this.broadcastConfigChange(params)); } /** @@ -196,28 +198,22 @@ class Server extends ws.Server { * * @param {object} params Updated configuration */ - async broadcastConfigChange(updatedConfig) { + broadcastConfigChange(updatedConfig) { const updateConfMsg = build.CONFIGURATION.PATCH({}, updatedConfig, generateSlug(4)); - const errorLogger = (socket, message) => (err) => - this._logger - .push({ message, ip: this._clientData.get(socket).ip, err }) - .log('Error sending JWS keys notification to client'); - return await this.broadcast(updateConfMsg, errorLogger); + this.broadcast(updateConfMsg); } /** - * Broadcasts a protocol message to all connected clients. - * - * @param {string} msg - * @param {object} errorLogger - */ - async broadcast(msg, errorLogger) { - const sendToAllClients = (msg, errorLogger) => Promise.all( - [...this.clients.values()].map((socket) => - (new Promise((resolve) => socket.send(msg, resolve))).catch(errorLogger(socket, msg)) - ) - ); - return await sendToAllClients(msg, errorLogger); + * Broadcasts a protocol message to all connected clients. + * + * @param {string} msg + */ + broadcast(msg) { + this.clients.forEach((client) => { + if (client.readyState === ws.WebSocket.OPEN) { + client.send(msg); + } + }); } } diff --git a/modules/api-svc/test/unit/InboundServer.test.js b/modules/api-svc/test/unit/InboundServer.test.js index bf52d1659..4729ebbf5 100644 --- a/modules/api-svc/test/unit/InboundServer.test.js +++ b/modules/api-svc/test/unit/InboundServer.test.js @@ -45,7 +45,7 @@ describe('Inbound Server', () => { serverConfig.validateInboundJws = validateInboundJws; serverConfig.validateInboundPutPartiesJws = validateInboundPutPartiesJws; const logger = new Logger.Logger({ stringify: () => '' }); - const cache = new Cache({ ...serverConfig.cacheConfig, logger: logger.push({ component: 'cache' }) }); + const cache = new Cache({ cacheUrl: serverConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); const svr = new InboundServer(serverConfig, logger, cache); await svr.start(); await supertest(svr._server) @@ -61,7 +61,7 @@ describe('Inbound Server', () => { async function testPartiesHeaderValidation(contentType, expectedStatusCode, expectedBody = null) { const logger = new Logger.Logger({ stringify: () => '' }); - const cache = new Cache({ ...serverConfig.cacheConfig, logger: logger.push({ component: 'cache' }) }); + const cache = new Cache({ cacheUrl: serverConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); const svr = new InboundServer(serverConfig, logger, cache); await svr.start(); const result = await supertest(svr._server) @@ -141,7 +141,7 @@ describe('Inbound Server', () => { serverConfig.validateInboundJws = validateInboundJws; serverConfig.validateInboundPutPartiesJws = validateInboundPutPartiesJws; const logger = new Logger.Logger({ stringify: () => '' }); - const cache = new Cache({ ...serverConfig.cacheConfig, logger: logger.push({ component: 'cache' }) }); + const cache = new Cache({ cacheUrl: serverConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); const svr = new InboundServer(serverConfig, logger, cache); await svr.start(); await supertest(svr._server) @@ -158,7 +158,7 @@ describe('Inbound Server', () => { async function testQuotesHeaderValidation(contentType, expectedStatusCode, expectedBody = null) { const logger = new Logger.Logger({ stringify: () => '' }); - const cache = new Cache({ ...serverConfig.cacheConfig, logger: logger.push({ component: 'cache' }) }); + const cache = new Cache({ cacheUrl: serverConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); const svr = new InboundServer(serverConfig, logger, cache); await svr.start(); const result = await supertest(svr._server) @@ -232,7 +232,7 @@ describe('Inbound Server', () => { serverConfig.validateInboundJws = validateInboundJws; serverConfig.validateInboundPutPartiesJws = validateInboundPutPartiesJws; const logger = new Logger.Logger({ stringify: () => '' }); - const cache = new Cache({ ...serverConfig.cacheConfig, logger: logger.push({ component: 'cache' }) }); + const cache = new Cache({ cacheUrl: serverConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); const svr = new InboundServer(serverConfig, logger, cache); await svr.start(); await supertest(svr._server) @@ -249,7 +249,7 @@ describe('Inbound Server', () => { async function testParticipantsHeaderValidation(contentType, expectedStatusCode, expectedBody = null) { const logger = new Logger.Logger({ stringify: () => '' }); - const cache = new Cache({ ...serverConfig.cacheConfig, logger: logger.push({ component: 'cache' }) }); + const cache = new Cache({ cacheUrl: serverConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); const svr = new InboundServer(serverConfig, logger, cache); await svr.start(); const result = await supertest(svr._server) @@ -336,7 +336,7 @@ describe('Inbound Server', () => { async function testTlsServer(enableTls) { defConfig.inbound.tls.mutualTLS.enabled = enableTls; const logger = new Logger.Logger({ stringify: () => '' }); - const cache = new Cache({ ...defConfig.cacheConfig, logger: logger.push({ component: 'cache' }) }); + const cache = new Cache({ cacheUrl: defConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); const server = new InboundServer(defConfig, logger, cache); await server.start(); if (enableTls) { @@ -369,7 +369,7 @@ describe('Inbound Server', () => { fs.writeFileSync(mockFilePath, 'foo-key'); serverConfig.jwsVerificationKeysDirectory = keysDir; const logger = new Logger.Logger({ stringify: () => '' }); - const cache = new Cache({ ...serverConfig.cacheConfig, logger: logger.push({ component: 'cache' }) }); + const cache = new Cache({ cacheUrl: serverConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); svr = new InboundServer(serverConfig, logger, cache); await svr.start(); }); diff --git a/modules/api-svc/test/unit/TestServer.test.js b/modules/api-svc/test/unit/TestServer.test.js index ddcc61fb0..39c344d66 100644 --- a/modules/api-svc/test/unit/TestServer.test.js +++ b/modules/api-svc/test/unit/TestServer.test.js @@ -50,7 +50,7 @@ describe('Test Server', () => { ...JSON.parse(JSON.stringify(defaultConfig)), enableTestFeatures: true, }; - cache = new Cache({ ...serverConfig.cacheConfig, logger: logger.push({ component: 'cache' }), enableTestFeatures: true }); + cache = new Cache({ cacheUrl: serverConfig.cacheUrl, logger: logger.push({ component: 'cache' }), enableTestFeatures: true }); testServer = new TestServer({ logger, cache }); await testServer.start(); diff --git a/modules/api-svc/test/unit/api/accounts/accounts.test.js b/modules/api-svc/test/unit/api/accounts/accounts.test.js index 77109ee57..7588b9dcd 100644 --- a/modules/api-svc/test/unit/api/accounts/accounts.test.js +++ b/modules/api-svc/test/unit/api/accounts/accounts.test.js @@ -35,7 +35,7 @@ describe('Outbound Accounts API', () => { beforeAll(async () => { validatorsInfo = await createValidators(); - redisClient = redis.createClient(); + redisClient = redis.createClient(defaultConfig); }); beforeEach(async () => { @@ -52,7 +52,7 @@ describe('Outbound Accounts API', () => { }); afterAll(async () => { - redisClient.end(); + // redisClient.end(); }); describe('POST /accounts', () => { diff --git a/modules/api-svc/test/unit/api/transfers/transfers.test.js b/modules/api-svc/test/unit/api/transfers/transfers.test.js index 2ca4e2c83..0a121938e 100644 --- a/modules/api-svc/test/unit/api/transfers/transfers.test.js +++ b/modules/api-svc/test/unit/api/transfers/transfers.test.js @@ -42,7 +42,7 @@ describe('Outbound Transfers API', () => { beforeAll(async () => { validatorsInfo = await createValidators(); - redisClient = redis.createClient(); + redisClient = redis.createClient({ cacheUrl: 'redis://dummy:1234' }); }); beforeEach(async () => { diff --git a/modules/api-svc/test/unit/api/utils.js b/modules/api-svc/test/unit/api/utils.js index 229066a1b..f1737ce97 100644 --- a/modules/api-svc/test/unit/api/utils.js +++ b/modules/api-svc/test/unit/api/utils.js @@ -7,7 +7,7 @@ const Validate = require('~/lib/validate'); const InboundServer = require('~/InboundServer'); const OutboundServer = require('~/OutboundServer'); const { MetricsClient } = require('~/lib/metrics'); -const { Logger } = require('@mojaloop/sdk-standard-components'); +const { Logger, WSO2Auth } = require('@mojaloop/sdk-standard-components'); const Cache = require('~/lib/cache'); /** @@ -43,18 +43,26 @@ const createTestServers = async (config) => { const logger = new Logger.Logger({ stringify: () => '' }); const defConfig = JSON.parse(JSON.stringify(config)); const cache = new Cache({ - ...defConfig.cacheConfig, + cacheUrl: defConfig.cacheUrl, logger: logger.push({ component: 'cache' }) }); await cache.connect(); defConfig.requestProcessingTimeoutSeconds = 2; const metricsClient = new MetricsClient(); metricsClient._prometheusRegister.clear(); - const serverOutbound = new OutboundServer(defConfig, logger, cache, metricsClient); + const wso2 = { + auth: new WSO2Auth({ + ...defConfig.wso2.auth, + logger, + tlsCreds: defConfig.outbound.tls.mutualTLS.enabled && defConfig.outbound.tls.creds, + }), + retryWso2AuthFailureTimes: defConfig.wso2.requestAuthFailureRetryTimes, + }; + const serverOutbound = new OutboundServer(defConfig, logger, cache, metricsClient, wso2); await serverOutbound.start(); const reqOutbound = supertest(serverOutbound._server); - const serverInbound = new InboundServer(defConfig, logger, cache); + const serverInbound = new InboundServer(defConfig, logger, cache, wso2); await serverInbound.start(); const reqInbound = supertest(serverInbound._server); diff --git a/modules/api-svc/test/unit/config.test.js b/modules/api-svc/test/unit/config.test.js index f978b0bc2..1ab3085e0 100644 --- a/modules/api-svc/test/unit/config.test.js +++ b/modules/api-svc/test/unit/config.test.js @@ -26,8 +26,7 @@ describe('config', () => { env = { ...process.env }; process.env.PEER_ENDPOINT = '172.17.0.3:4000'; process.env.BACKEND_ENDPOINT = '172.17.0.5:4000'; - process.env.CACHE_HOST = '172.17.0.2'; - process.env.CACHE_PORT = '6379'; + process.env.CACHE_URL = 'redis://172.17.0.2:6379'; process.env.MGMT_API_WS_URL = '0.0.0.0'; certDir = fs.mkdtempSync(path.join(os.tmpdir(), 'jest-')); }); diff --git a/modules/api-svc/test/unit/data/defaultConfig.json b/modules/api-svc/test/unit/data/defaultConfig.json index 78ef70ad5..80159bdea 100644 --- a/modules/api-svc/test/unit/data/defaultConfig.json +++ b/modules/api-svc/test/unit/data/defaultConfig.json @@ -49,12 +49,8 @@ "jwsSignPutParties": false, "jwsSigningKey": "/jwsSigningKey.key", "jwsVerificationKeysDirectory": null, - "cacheConfig": { - "host": "localhost", - "port": 6379 - }, + "cacheUrl": "redis://localhost:6379", "enableTestFeatures": false, - "testingDisableWSO2AuthStart": true, "oauthTestServer": { "enabled": false, "listenPort": 6000 diff --git a/modules/api-svc/test/unit/inboundApi/handlers.test.js b/modules/api-svc/test/unit/inboundApi/handlers.test.js index 2ee98efa3..89558162d 100644 --- a/modules/api-svc/test/unit/inboundApi/handlers.test.js +++ b/modules/api-svc/test/unit/inboundApi/handlers.test.js @@ -22,6 +22,8 @@ const mockArguments = require('./data/mockArguments'); const mockTransactionRequestData = require('./data/mockTransactionRequest'); const { Logger } = require('@mojaloop/sdk-standard-components'); +const FSPIOPTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.TransferState; + describe('Inbound API handlers:', () => { let mockArgs; let mockTransactionRequest; @@ -549,7 +551,7 @@ describe('Inbound API handlers:', () => { }, body: { - transferState: 'COMMITTED', + transferState: FSPIOPTransferStateEnum.COMMITTED, completedTimestamp: '2020-08-18T09:39:33.552Z' } }, diff --git a/modules/api-svc/test/unit/index.test.js b/modules/api-svc/test/unit/index.test.js index 6f86d2035..6ddf33848 100644 --- a/modules/api-svc/test/unit/index.test.js +++ b/modules/api-svc/test/unit/index.test.js @@ -17,15 +17,13 @@ jest.mock('dotenv', () => ({ const promClient = require('prom-client'); const defaultConfig = require('./data/defaultConfig.json'); const { Logger } = require('@mojaloop/sdk-standard-components'); -const { MetricsClient } = require('~/lib/metrics'); const TestControlServer = require('./ControlServer'); process.env.PEER_ENDPOINT = '172.17.0.3:4000'; process.env.BACKEND_ENDPOINT = '172.17.0.5:4000'; -process.env.CACHE_HOST = '172.17.0.2'; -process.env.CACHE_PORT = '6379'; +process.env.CACHE_URL = 'redis://172.17.0.2:6379'; process.env.MGMT_API_WS_URL = '0.0.0.0'; const index = require('~/index.js'); @@ -35,24 +33,6 @@ describe('index.js', () => { promClient.register.clear(); }); - test('WSO2 error events in OutboundServer propagate to top-level server', () => { - const logger = new Logger.Logger({ stringify: () => '' }); - const svr = new index.Server(defaultConfig, logger); - const cb = jest.fn(); - svr.on('error', cb); - svr.outboundServer._api._wso2.auth.emit('error', 'msg'); - expect(cb).toHaveBeenCalledTimes(1); - }); - - test('WSO2 error events in InboundServer propagate to top-level server', () => { - const logger = new Logger.Logger({ stringify: () => '' }); - const svr = new index.Server(defaultConfig, logger); - const cb = jest.fn(); - svr.on('error', cb); - svr.inboundServer._api._wso2.auth.emit('error', 'msg'); - expect(cb).toHaveBeenCalledTimes(1); - }); - test('Exports expected modules', () => { expect(typeof(index.Server)).toBe('function'); expect(typeof(index.InboundServerMiddleware)).toBe('object'); @@ -77,6 +57,7 @@ describe('Server', () => { conf.control.port = conf.control.mgmtAPIWsPort; controlServer = new TestControlServer.Server({ logger, appConfig: conf }); server = new index.Server(conf, logger); + server.restart = jest.fn(); await server.start(); }); @@ -95,53 +76,13 @@ describe('Server', () => { }); it('reconfigures and restarts constituent servers when triggered by control client', async () => { - const [restartInbound, restartOutbound, restartControl, restartOAuthTest, restartTest] = - Array.from({ length: 5 }).map(() => jest.fn()); - server.inboundServer.reconfigure = jest.fn(() => restartInbound); - server.outboundServer.reconfigure = jest.fn(() => restartOutbound); - server.testServer.reconfigure = jest.fn(() => restartTest); - server.oauthTestServer.reconfigure = jest.fn(() => restartOAuthTest); - server.controlClient.reconfigure = jest.fn(() => restartControl); - - await controlServer.broadcastConfigChange(newConf); + controlServer.broadcastConfigChange(newConf); // We wait for the servers to get restarted await new Promise((wait) => setTimeout(wait, 1000)); - expect(server.inboundServer.reconfigure).toHaveBeenCalledTimes(1); - expect(server.inboundServer.reconfigure).toHaveBeenCalledWith( - newConf, expect.any(Logger.Logger), expect.any(index.Cache) - ); - expect(server.outboundServer.reconfigure).toHaveBeenCalledTimes(1); - const metricsClient = new MetricsClient(); - expect(server.outboundServer.reconfigure).toHaveBeenCalledWith( - newConf, expect.any(Logger.Logger), expect.any(index.Cache), metricsClient - ); - expect(server.controlClient.reconfigure).toHaveBeenCalledTimes(1); - expect(server.controlClient.reconfigure).toHaveBeenCalledWith({ - logger: expect.any(Logger.Logger), - port: newConf.control.port, - appConfig: newConf - }); - expect(server.testServer.reconfigure).toHaveBeenCalledTimes(1); - expect(server.testServer.reconfigure).toHaveBeenCalledWith({ - logger: expect.any(Logger.Logger), - cache: expect.any(index.Cache), - port: newConf.test.port - }); - expect(server.oauthTestServer.reconfigure).toHaveBeenCalledTimes(1); - expect(server.oauthTestServer.reconfigure).toHaveBeenCalledWith({ - logger: expect.any(Logger.Logger), - clientKey: newConf.oauthTestServer.clientKey, - clientSecret: newConf.oauthTestServer.clientSecret, - port: newConf.oauthTestServer.listenPort, - }); - - expect(restartInbound).toHaveBeenCalledTimes(1); - expect(restartOutbound).toHaveBeenCalledTimes(1); - expect(restartTest).toHaveBeenCalledTimes(1); - expect(restartOAuthTest).toHaveBeenCalledTimes(1); - expect(restartControl).toHaveBeenCalledTimes(1); + expect(server.restart).toHaveBeenCalledTimes(1); + expect(server.restart).toHaveBeenCalledWith(newConf); }); }); }); diff --git a/modules/api-svc/test/unit/lib/cache.test.js b/modules/api-svc/test/unit/lib/cache.test.js index 62c1a95b6..ac799077f 100644 --- a/modules/api-svc/test/unit/lib/cache.test.js +++ b/modules/api-svc/test/unit/lib/cache.test.js @@ -18,9 +18,8 @@ const { Logger } = require('@mojaloop/sdk-standard-components'); const createCache = async() => { const logger = new Logger.Logger({ context: { app: 'model-unit-tests-cache' }, stringify: () => '' }); const cache = new Cache({ - host: 'dummyhost', - port: 1234, - logger, + cacheUrl: 'redis://dummy:1234', + logger, }); await cache.connect(); return cache; @@ -75,11 +74,11 @@ describe('Cache', () => { expect(cbId1).toBe(0); // now we have subscribed, inject a message. - cache.publish(chan1, msg1); + return cache.publish(chan1, msg1); }); }); - // create a second promise that only gets resoled if the second subscription gets the + // create a second promise that only gets resolved if the second subscription gets the // correct message const cb2Promise = new Promise((resolve) => { const mockCb2 = jest.fn((cn, msg) => { @@ -99,7 +98,7 @@ describe('Cache', () => { expect(cbId2).toBe(1); // now we have subscribed, inject a message. - cache.publish(chan2, msg2); + return cache.publish(chan2, msg2); }); }); diff --git a/modules/api-svc/test/unit/lib/model/AccountsModel.test.js b/modules/api-svc/test/unit/lib/model/AccountsModel.test.js index 48d7eae99..96df14412 100644 --- a/modules/api-svc/test/unit/lib/model/AccountsModel.test.js +++ b/modules/api-svc/test/unit/lib/model/AccountsModel.test.js @@ -19,6 +19,7 @@ const { AccountsModel } = require('~/lib/model'); const StateMachine = require('javascript-state-machine'); const { MojaloopRequests, Logger } = require('@mojaloop/sdk-standard-components'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); const defaultConfig = require('./data/defaultConfig'); const transferRequest = require('./data/transferRequest'); @@ -83,7 +84,7 @@ describe('AccountsModel', () => { (Math.floor(count / MAX_ITEMS_PER_REQUEST) + ((count % MAX_ITEMS_PER_REQUEST) ? 1 : 0)); expect(MojaloopRequests.__postParticipants).toHaveBeenCalledTimes(expectedRequestsCount); - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); } @@ -93,10 +94,9 @@ describe('AccountsModel', () => { beforeEach(async () => { cache = new Cache({ - host: 'dummycachehost', - port: 1234, - logger, - }); + cacheUrl: 'redis://dummy:1234', + logger, + }); await cache.connect(); }); diff --git a/modules/api-svc/test/unit/lib/model/InboundTransfersModel.test.js b/modules/api-svc/test/unit/lib/model/InboundTransfersModel.test.js index 9e6cdc691..65928e04b 100644 --- a/modules/api-svc/test/unit/lib/model/InboundTransfersModel.test.js +++ b/modules/api-svc/test/unit/lib/model/InboundTransfersModel.test.js @@ -28,6 +28,12 @@ const getTransfersMojaloopResponse = require('./data/getTransfersMojaloopRespons const getBulkTransfersBackendResponse = require('./data/getBulkTransfersBackendResponse'); const getBulkTransfersMojaloopResponse = require('./data/getBulkTransfersMojaloopResponse'); const notificationToPayee = require('./data/notificationToPayee'); +const notificationAbortedToPayee = require('./data/notificationAbortedToPayee'); +const notificationReservedToPayee = require('./data/notificationReservedToPayee'); + +const { SDKStateEnum } = require('../../../../src/lib/model/common'); +const FSPIOPTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.TransferState; +const FSPIOPBulkTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.BulkTransferState; describe('inboundModel', () => { let config; @@ -63,8 +69,7 @@ describe('inboundModel', () => { })); cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -132,8 +137,7 @@ describe('inboundModel', () => { BackendRequests.__postBulkQuotes = jest.fn().mockReturnValue(Promise.resolve(mockArgs.internalBulkQuoteResponse)); cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -189,8 +193,7 @@ describe('inboundModel', () => { BackendRequests.__postTransactionRequests = jest.fn().mockReturnValue(Promise.resolve(mockTxnReqArgs.internalTransactionRequestResponse)); cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -226,8 +229,7 @@ describe('inboundModel', () => { BackendRequests.__getOTP = jest.fn().mockReturnValue(Promise.resolve(mockArgs.internalGetOTPResponse)); cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -268,8 +270,7 @@ describe('inboundModel', () => { })); cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -327,7 +328,7 @@ describe('inboundModel', () => { const call = MojaloopRequests.__putTransfers.mock.calls[0]; expect(call[0]).toEqual(TRANSFER_ID); expect(call[1]).toEqual(getTransfersMojaloopResponse); - expect(call[1].transferState).toEqual('COMMITTED'); + expect(call[1].transferState).toEqual(FSPIOPTransferStateEnum.COMMITTED); }); test('getTransfer should not return fulfillment from payer', async () => { @@ -348,7 +349,7 @@ describe('inboundModel', () => { const call = MojaloopRequests.__putTransfers.mock.calls[0]; expect(call[0]).toEqual(TRANSFER_ID); expect(call[1]).toEqual({...getTransfersMojaloopResponse, fulfilment: undefined}); - expect(call[1].transferState).toEqual('COMMITTED'); + expect(call[1].transferState).toEqual(FSPIOPTransferStateEnum.COMMITTED); }); test('getTransfer should return not found error', async () => { @@ -547,8 +548,7 @@ describe('inboundModel', () => { BackendRequests.__postBulkTransfers = jest.fn().mockReturnValue(Promise.resolve({})); cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -605,7 +605,7 @@ describe('inboundModel', () => { const call = MojaloopRequests.__putBulkTransfers.mock.calls[0]; expect(call[0]).toEqual(BULK_TRANSFER_ID); expect(call[1]).toEqual(getBulkTransfersMojaloopResponse); - expect(call[1].bulkTransferState).toEqual('COMMITTED'); + expect(call[1].bulkTransferState).toEqual(FSPIOPBulkTransferStateEnum.COMPLETED); }); test('getBulkTransfer should not return fulfillment from payer', async () => { @@ -625,7 +625,7 @@ describe('inboundModel', () => { const call = MojaloopRequests.__putBulkTransfers.mock.calls[0]; expect(call[0]).toEqual(BULK_TRANSFER_ID); - expect(call[1].bulkTransferState).toEqual('COMMITTED'); + expect(call[1].bulkTransferState).toEqual(FSPIOPBulkTransferStateEnum.COMPLETED); const expectedResponse = {...getBulkTransfersMojaloopResponse}; expectedResponse.individualTransferResults[0].fulfilment = undefined; expect(call[1]).toMatchObject(expectedResponse); @@ -727,8 +727,7 @@ describe('inboundModel', () => { beforeEach(async () => { cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -743,7 +742,29 @@ describe('inboundModel', () => { const notif = JSON.parse(JSON.stringify(notificationToPayee)); const expectedRequest = { - currentState: 'COMPLETED', + currentState: SDKStateEnum.COMPLETED, + finalNotification: notif.data, + }; + + const model = new Model({ + ...config, + cache, + logger, + }); + + await model.sendNotificationToPayee(notif.data, transferId); + expect(BackendRequests.__putTransfersNotification).toHaveBeenCalledTimes(1); + const call = BackendRequests.__putTransfersNotification.mock.calls[0]; + expect(call[0]).toEqual(expectedRequest); + expect(call[1]).toEqual(transferId); + }); + + test('sends ABORTED notification to fsp backend', async () => { + BackendRequests.__putTransfersNotification = jest.fn().mockReturnValue(Promise.resolve({})); + const notif = JSON.parse(JSON.stringify(notificationAbortedToPayee)); + + const expectedRequest = { + currentState: SDKStateEnum.ABORTED, finalNotification: notif.data, }; @@ -759,14 +780,36 @@ describe('inboundModel', () => { expect(call[0]).toEqual(expectedRequest); expect(call[1]).toEqual(transferId); }); + + test('sends RESERVED notification to fsp backend', async () => { + BackendRequests.__putTransfersNotification = jest.fn().mockReturnValue(Promise.resolve({})); + const notif = JSON.parse(JSON.stringify(notificationReservedToPayee)); + + const expectedRequest = { + finalNotification: notif.data, + lastError: 'Final notification state not COMMITTED', + }; + + const model = new Model({ + ...config, + cache, + logger, + }); + + await model.sendNotificationToPayee(notif.data, transferId); + expect(BackendRequests.__putTransfersNotification).toHaveBeenCalledTimes(1); + const call = BackendRequests.__putTransfersNotification.mock.calls[0]; + expect(call[0]).toEqual(expectedRequest); + expect(call[1]).toEqual(transferId); + }); + }); describe('error handling:', () => { let cache; beforeEach(async () => { cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); diff --git a/modules/api-svc/test/unit/lib/model/OutboundBulkQuotesModel.test.js b/modules/api-svc/test/unit/lib/model/OutboundBulkQuotesModel.test.js index 67e333d18..bb621b891 100644 --- a/modules/api-svc/test/unit/lib/model/OutboundBulkQuotesModel.test.js +++ b/modules/api-svc/test/unit/lib/model/OutboundBulkQuotesModel.test.js @@ -20,6 +20,8 @@ const Model = require('~/lib/model').OutboundBulkQuotesModel; const { MojaloopRequests, Logger } = require('@mojaloop/sdk-standard-components'); const StateMachine = require('javascript-state-machine'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); + const defaultConfig = require('./data/defaultConfig'); const bulkQuoteRequest = require('./data/bulkQuoteRequest'); const bulkQuoteResponseTemplate = require('./data/bulkQuoteResponse'); @@ -74,7 +76,7 @@ describe('OutboundBulkQuotesModel', () => { await expect(model.run()).rejects.toThrowError(expectError); } else { const result = await model.run(); - await expect(result.currentState).toBe('COMPLETED'); + await expect(result.currentState).toBe(SDKStateEnum.COMPLETED); } } @@ -91,10 +93,9 @@ describe('OutboundBulkQuotesModel', () => { MojaloopRequests.__putBulkQuotesError = jest.fn(() => Promise.resolve()); cache = new Cache({ - host: 'dummycachehost', - port: 1234, - logger, - }); + cacheUrl: 'redis://dummy:1234', + logger, + }); await cache.connect(); }); @@ -140,7 +141,7 @@ describe('OutboundBulkQuotesModel', () => { expect(MojaloopRequests.__getBulkQuotes).toHaveBeenCalledTimes(1); // check we stopped at succeeded state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -175,7 +176,7 @@ describe('OutboundBulkQuotesModel', () => { expect(MojaloopRequests.__postBulkQuotes).toHaveBeenCalledTimes(1); // check we stopped at 'succeeded' state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); diff --git a/modules/api-svc/test/unit/lib/model/OutboundBulkTransfersModel.test.js b/modules/api-svc/test/unit/lib/model/OutboundBulkTransfersModel.test.js index 80d10ab02..ce0ce9f50 100644 --- a/modules/api-svc/test/unit/lib/model/OutboundBulkTransfersModel.test.js +++ b/modules/api-svc/test/unit/lib/model/OutboundBulkTransfersModel.test.js @@ -19,6 +19,7 @@ const Model = require('~/lib/model').OutboundBulkTransfersModel; const { MojaloopRequests, Logger } = require('@mojaloop/sdk-standard-components'); const StateMachine = require('javascript-state-machine'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); const defaultConfig = require('./data/defaultConfig'); const bulkTransferRequest = require('./data/bulkTransferRequest'); @@ -70,7 +71,7 @@ describe('outboundBulkTransferModel', () => { await expect(model.run()).rejects.toThrowError(expectError); } else { const result = await model.run(); - await expect(result.currentState).toBe('COMPLETED'); + await expect(result.currentState).toBe(SDKStateEnum.COMPLETED); } } @@ -83,8 +84,7 @@ describe('outboundBulkTransferModel', () => { MojaloopRequests.__postBulkTransfers = jest.fn(() => Promise.resolve()); cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -137,7 +137,7 @@ describe('outboundBulkTransferModel', () => { expect(MojaloopRequests.__postBulkTransfers).toHaveBeenCalledTimes(1); // check we stopped at succeeded state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -169,7 +169,7 @@ describe('outboundBulkTransferModel', () => { expect(MojaloopRequests.__getBulkTransfers).toHaveBeenCalledTimes(1); // check we stopped at succeeded state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); diff --git a/modules/api-svc/test/unit/lib/model/OutboundRequestToPayModel.test.js b/modules/api-svc/test/unit/lib/model/OutboundRequestToPayModel.test.js index 9b4d50138..48dfe0a3e 100644 --- a/modules/api-svc/test/unit/lib/model/OutboundRequestToPayModel.test.js +++ b/modules/api-svc/test/unit/lib/model/OutboundRequestToPayModel.test.js @@ -20,6 +20,7 @@ const PartiesModel = require('~/lib/model').PartiesModel; const { MojaloopRequests, Logger } = require('@mojaloop/sdk-standard-components'); const StateMachine = require('javascript-state-machine'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); const defaultConfig = require('./data/defaultConfig'); const requestToPayRequest = require('./data/requestToPayRequest'); @@ -71,10 +72,9 @@ describe('outboundModel', () => { MojaloopRequests.__postTransactionRequests = jest.fn(() => Promise.resolve()); cache = new Cache({ - host: 'dummycachehost', - port: 1234, - logger, - }); + cacheUrl: 'redis://dummy:1234', + logger, + }); await cache.connect(); }); @@ -125,7 +125,7 @@ describe('outboundModel', () => { expect(MojaloopRequests.__postTransactionRequests).toHaveBeenCalledTimes(1); // check we stopped at payeeResolved state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(result.requestToPayState).toBe('RECEIVED'); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -158,7 +158,7 @@ describe('outboundModel', () => { const result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); }); diff --git a/modules/api-svc/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js b/modules/api-svc/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js index dcb4b3df5..9a7a1ad49 100644 --- a/modules/api-svc/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js +++ b/modules/api-svc/test/unit/lib/model/OutboundRequestToPayTransferModel.test.js @@ -19,6 +19,7 @@ const Model = require('~/lib/model').OutboundRequestToPayTransferModel; const { MojaloopRequests, Logger } = require('@mojaloop/sdk-standard-components'); const StateMachine = require('javascript-state-machine'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); const defaultConfig = require('./data/defaultConfig'); const requestToPayTransferRequest = require('./data/requestToPayTransferRequest'); @@ -71,10 +72,9 @@ describe('outboundRequestToPayTransferModel', () => { MojaloopRequests.__postTransfers = jest.fn(() => Promise.resolve()); cache = new Cache({ - host: 'dummycachehost', - port: 1234, - logger, - }); + cacheUrl: 'redis://dummy:1234', + logger, + }); await cache.connect(); }); @@ -155,7 +155,7 @@ describe('outboundRequestToPayTransferModel', () => { expect(MojaloopRequests.__postTransfers).toHaveBeenCalledTimes(1); // check we stopped at payeeResolved state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -184,7 +184,7 @@ describe('outboundRequestToPayTransferModel', () => { // let result = await resultPromise; // // check we stopped at quoteReceived state - // expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + // expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); // expect(StateMachine.__instance.state).toBe('quoteReceived'); // const requestToPayTransactionId = requestToPayTransferRequest.requestToPayTransactionId; @@ -236,7 +236,7 @@ describe('outboundRequestToPayTransferModel', () => { // result = await resultPromise; // // check we stopped at quoteReceived state - // expect(result.currentState).toBe('COMPLETED'); + // expect(result.currentState).toBe(SDKStateEnum.COMPLETED); // expect(StateMachine.__instance.state).toBe('succeeded'); // }); diff --git a/modules/api-svc/test/unit/lib/model/OutboundTransfersModel.test.js b/modules/api-svc/test/unit/lib/model/OutboundTransfersModel.test.js index 8986554d5..c101cb11f 100644 --- a/modules/api-svc/test/unit/lib/model/OutboundTransfersModel.test.js +++ b/modules/api-svc/test/unit/lib/model/OutboundTransfersModel.test.js @@ -28,6 +28,9 @@ const payeeParty = require('./data/payeeParty'); const quoteResponseTemplate = require('./data/quoteResponse'); const transferFulfil = require('./data/transferFulfil'); +const { SDKStateEnum } = require('../../../../src/lib/model/common'); +const FSPIOPTransferStateEnum = require('@mojaloop/central-services-shared').Enum.Transfers.TransferState; + const genPartyId = (party) => { const { partyIdType, partyIdentifier, partySubIdOrType } = party.body.party.partyIdInfo; return PartiesModel.channelName({ @@ -134,7 +137,7 @@ describe('outboundModel', () => { await expect(model.run()).rejects.toThrowError(expectError); } else { const result = await model.run(); - await expect(result.currentState).toBe('COMPLETED'); + await expect(result.currentState).toBe(SDKStateEnum.COMPLETED); } } @@ -163,8 +166,7 @@ describe('outboundModel', () => { } })); cache = new Cache({ - host: 'dummycachehost', - port: 1234, + cacheUrl: 'redis://dummy:1234', logger, }); await cache.connect(); @@ -251,7 +253,7 @@ describe('outboundModel', () => { expect(MojaloopRequests.__patchTransfers).toHaveBeenCalledTimes(0); // check we stopped at payeeResolved state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -276,7 +278,7 @@ describe('outboundModel', () => { return Promise.resolve(dummyRequestsModuleResponse); }); const pb = JSON.parse(JSON.stringify(transferFulfil)); - pb.data.body.transferState = 'RESERVED'; + pb.data.body.transferState = FSPIOPTransferStateEnum.RESERVED; MojaloopRequests.__postTransfers = jest.fn((postTransfersBody, destFspId) => { //ensure that the `MojaloopRequests.postTransfers` method has been called with the correct arguments // set as the destination FSPID, picked up from the header's value `fspiop-source` @@ -308,13 +310,13 @@ describe('outboundModel', () => { expect(MojaloopRequests.__postTransfers).toHaveBeenCalledTimes(1); expect(MojaloopRequests.__patchTransfers).toHaveBeenCalledTimes(1); expect(MojaloopRequests.__patchTransfers.mock.calls[0][0]).toEqual(model.data.transferId); - expect(MojaloopRequests.__patchTransfers.mock.calls[0][1].transferState).toEqual('COMMITTED'); + expect(MojaloopRequests.__patchTransfers.mock.calls[0][1].transferState).toEqual(FSPIOPTransferStateEnum.COMMITTED); expect(MojaloopRequests.__patchTransfers.mock.calls[0][1].completedTimestamp).not.toBeUndefined(); expect(MojaloopRequests.__patchTransfers.mock.calls[0][2]).toEqual(quoteResponse.data.headers['fspiop-source']); // check we stopped at payeeResolved state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -397,7 +399,7 @@ describe('outboundModel', () => { expect(MojaloopRequests.__patchTransfers).toHaveBeenCalledTimes(0); // check we stopped at payeeResolved state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -430,7 +432,7 @@ describe('outboundModel', () => { expect(MojaloopRequests.__getTransfers).toHaveBeenCalledTimes(1); // check we stopped at payeeResolved state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -459,7 +461,7 @@ describe('outboundModel', () => { const result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); }); @@ -491,7 +493,7 @@ describe('outboundModel', () => { const result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); // check getParties mojaloop requests method was called with the correct arguments @@ -522,7 +524,7 @@ describe('outboundModel', () => { // wait for the model to reach a terminal state const result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); expect(result.to[0].fspId).toEqual('FirstFspId'); expect(result.to[1].fspId).toEqual('SecondFspId'); @@ -553,7 +555,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); const transferId = result.transferId; @@ -580,7 +582,7 @@ describe('outboundModel', () => { result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); }); @@ -614,7 +616,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); expect(result.amount).toEqual(initialAmount); @@ -649,7 +651,7 @@ describe('outboundModel', () => { result = await resultPromise; // check we stopped at quoteReceived state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); // check the accept party key got merged to the state @@ -693,7 +695,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); expect(result.amount).toEqual(initialAmount); @@ -743,7 +745,7 @@ describe('outboundModel', () => { result = await resultPromise; // check we stopped at quoteReceived state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); // check the accept party key got merged to the state @@ -786,7 +788,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); expect(result.amount).toEqual(initialAmount); @@ -822,7 +824,7 @@ describe('outboundModel', () => { result = await resultPromise; // check we stopped at quoteReceived state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); // check the accept party key got merged to the state @@ -869,7 +871,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at quoteReceived state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); }); @@ -898,7 +900,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); const transferId = result.transferId; @@ -920,7 +922,7 @@ describe('outboundModel', () => { result = await model.run({ resume: { acceptParty: false } }); // check we stopped at quoteReceived state - expect(result.currentState).toBe('ABORTED'); + expect(result.currentState).toBe(SDKStateEnum.ABORTED); expect(result.abortedReason).toBe('Payee rejected by backend'); expect(StateMachine.__instance.state).toBe('aborted'); }); @@ -950,7 +952,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); const transferId = result.transferId; @@ -978,13 +980,13 @@ describe('outboundModel', () => { result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); // now run the model again. this should trigger abort as the quote was not accepted result = await model.run({ acceptQuote: false }); - expect(result.currentState).toBe('ABORTED'); + expect(result.currentState).toBe(SDKStateEnum.ABORTED); expect(result.abortedReason).toBe('Quote rejected by backend'); expect(StateMachine.__instance.state).toBe('aborted'); }); @@ -1040,7 +1042,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); const transferId = result.transferId; @@ -1068,20 +1070,20 @@ describe('outboundModel', () => { result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); // now run the model again. this should trigger abort as the quote was not accepted result = await model.run({ acceptQuote: false }); - expect(result.currentState).toBe('ABORTED'); + expect(result.currentState).toBe(SDKStateEnum.ABORTED); expect(result.abortedReason).toBe('Quote rejected by backend'); expect(StateMachine.__instance.state).toBe('aborted'); // now run the model again. this should get the same result as previous one result = await model.run({ acceptQuote: false }); - expect(result.currentState).toBe('ABORTED'); + expect(result.currentState).toBe(SDKStateEnum.ABORTED); expect(result.abortedReason).toBe('Quote rejected by backend'); expect(StateMachine.__instance.state).toBe('aborted'); }); @@ -1111,7 +1113,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('WAITING_FOR_PARTY_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_PARTY_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('payeeResolved'); const transferId = result.transferId; @@ -1139,7 +1141,7 @@ describe('outboundModel', () => { result = await resultPromise; // check we stopped at quoteReceived state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); // load a new model from the saved state @@ -1165,7 +1167,7 @@ describe('outboundModel', () => { result = await resultPromise; // check we stopped at quoteReceived state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -1217,7 +1219,7 @@ describe('outboundModel', () => { const result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -1269,7 +1271,7 @@ describe('outboundModel', () => { const result = await resultPromise; // check we stopped at payeeResolved state - expect(result.currentState).toBe('COMPLETED'); + expect(result.currentState).toBe(SDKStateEnum.COMPLETED); expect(StateMachine.__instance.state).toBe('succeeded'); }); @@ -1526,7 +1528,7 @@ describe('outboundModel', () => { testTlsServer(false)); test('Outbound transfers model should record metrics', async () => { - const metrics = metricsClient._prometheusRegister.metrics(); + const metrics = await metricsClient._prometheusRegister.metrics(); expect(metrics).toBeTruthy(); expect(metrics).toEqual(expect.stringContaining('mojaloop_connector_outbound_party_lookup_request_count')); @@ -1570,7 +1572,7 @@ describe('outboundModel', () => { let result = await resultPromise; // check we stopped at quoteReceived state - expect(result.currentState).toBe('WAITING_FOR_QUOTE_ACCEPTANCE'); + expect(result.currentState).toBe(SDKStateEnum.WAITING_FOR_QUOTE_ACCEPTANCE); expect(StateMachine.__instance.state).toBe('quoteReceived'); }); diff --git a/modules/api-svc/test/unit/lib/model/PartiesModel.test.js b/modules/api-svc/test/unit/lib/model/PartiesModel.test.js index ff5b7ce91..6b6e018a2 100644 --- a/modules/api-svc/test/unit/lib/model/PartiesModel.test.js +++ b/modules/api-svc/test/unit/lib/model/PartiesModel.test.js @@ -16,6 +16,7 @@ jest.mock('@mojaloop/sdk-standard-components'); const { uuid } = require('uuidv4'); const Model = require('~/lib/model').PartiesModel; const PSM = require('~/lib/model/common').PersistentStateMachine; +const { SDKStateEnum } = require('~/lib/model/common'); const { MojaloopRequests } = require('@mojaloop/sdk-standard-components'); const defaultConfig = require('./data/defaultConfig'); const mockLogger = require('../../mockLogger'); @@ -403,7 +404,7 @@ describe('PartiesModel', () => { expect(model.context.data.currentState).toEqual('errored'); expect(err.requestActionState).toEqual( { ...data, - currentState: 'ERROR_OCCURRED', + currentState: SDKStateEnum.ERROR_OCCURRED, }); } }); diff --git a/modules/api-svc/test/unit/lib/model/QuotesModel.test.js b/modules/api-svc/test/unit/lib/model/QuotesModel.test.js index 328eb696f..cd99930ad 100644 --- a/modules/api-svc/test/unit/lib/model/QuotesModel.test.js +++ b/modules/api-svc/test/unit/lib/model/QuotesModel.test.js @@ -16,6 +16,7 @@ jest.mock('@mojaloop/sdk-standard-components'); const { uuid } = require('uuidv4'); const Model = require('~/lib/model').QuotesModel; const PSM = require('~/lib/model/common').PersistentStateMachine; +const { SDKStateEnum } = require('~/lib/model/common'); const { MojaloopRequests } = require('@mojaloop/sdk-standard-components'); const defaultConfig = require('./data/defaultConfig'); const mockLogger = require('../../mockLogger'); @@ -381,7 +382,7 @@ describe('QuotesModel', () => { expect(model.context.data.currentState).toEqual('errored'); expect(err.requestActionState).toEqual( { ...data, - currentState: 'ERROR_OCCURRED', + currentState: SDKStateEnum.ERROR_OCCURRED, }); } }); diff --git a/modules/api-svc/test/unit/lib/model/TransfersModel.test.js b/modules/api-svc/test/unit/lib/model/TransfersModel.test.js index 9203a0de1..263d4ea79 100644 --- a/modules/api-svc/test/unit/lib/model/TransfersModel.test.js +++ b/modules/api-svc/test/unit/lib/model/TransfersModel.test.js @@ -16,6 +16,7 @@ jest.mock('@mojaloop/sdk-standard-components'); const { uuid } = require('uuidv4'); const Model = require('~/lib/model').TransfersModel; const PSM = require('~/lib/model/common').PersistentStateMachine; +const { SDKStateEnum } = require('~/lib/model/common'); const { MojaloopRequests } = require('@mojaloop/sdk-standard-components'); const defaultConfig = require('./data/defaultConfig'); const mockLogger = require('../../mockLogger'); @@ -386,7 +387,7 @@ describe('TransfersModel', () => { expect(model.context.data.currentState).toEqual('errored'); expect(err.requestActionState).toEqual( { ...data, - currentState: 'ERROR_OCCURRED', + currentState: SDKStateEnum.ERROR_OCCURRED, }); } }); diff --git a/modules/api-svc/test/unit/lib/model/common/PersistentStateMachine.test.js b/modules/api-svc/test/unit/lib/model/common/PersistentStateMachine.test.js index cd4d522fd..9d187c75a 100644 --- a/modules/api-svc/test/unit/lib/model/common/PersistentStateMachine.test.js +++ b/modules/api-svc/test/unit/lib/model/common/PersistentStateMachine.test.js @@ -72,10 +72,9 @@ describe('PersistentStateMachine', () => { data = { the: 'data' }; cache = new Cache({ - host: 'dummycachehost', - port: 1234, - logger, - }); + cacheUrl: 'redis://dummy:1234', + logger, + }); // mock cache set & get cache.get = jest.fn(async () => data); cache.set = jest.fn(async () => 'cache set replies'); diff --git a/modules/api-svc/test/unit/lib/model/data/defaultConfig.json b/modules/api-svc/test/unit/lib/model/data/defaultConfig.json index 2b2e1bc99..7ec677686 100644 --- a/modules/api-svc/test/unit/lib/model/data/defaultConfig.json +++ b/modules/api-svc/test/unit/lib/model/data/defaultConfig.json @@ -38,10 +38,7 @@ "jwsSignPutParties": false, "jwsSigningKey": "/jwsSigningKey.key", "jwsVerificationKeysDirectory": null, - "cacheConfig": { - "host": "localhost", - "port": 6379 - }, + "cacheUrl": "redis://localhost:6379", "enableTestFeatures": false, "oauthTestServer": { "enabled": false, diff --git a/modules/api-svc/test/unit/lib/model/data/getBulkTransfersBackendResponse.json b/modules/api-svc/test/unit/lib/model/data/getBulkTransfersBackendResponse.json index d644eabe0..3f1a18e9f 100644 --- a/modules/api-svc/test/unit/lib/model/data/getBulkTransfersBackendResponse.json +++ b/modules/api-svc/test/unit/lib/model/data/getBulkTransfersBackendResponse.json @@ -26,7 +26,7 @@ } ] }, - "bulkTransferState": "COMMITTED", + "bulkTransferState": "COMPLETED", "timestamp": "2019-11-15T14:16:09.663", "note": "test payment", "extensions": [ diff --git a/modules/api-svc/test/unit/lib/model/data/getBulkTransfersMojaloopResponse.json b/modules/api-svc/test/unit/lib/model/data/getBulkTransfersMojaloopResponse.json index e7e58fa98..ea783de58 100644 --- a/modules/api-svc/test/unit/lib/model/data/getBulkTransfersMojaloopResponse.json +++ b/modules/api-svc/test/unit/lib/model/data/getBulkTransfersMojaloopResponse.json @@ -12,7 +12,7 @@ } ] }, - "bulkTransferState": "COMMITTED", + "bulkTransferState": "COMPLETED", "individualTransferResults": [ { "transferId": "fake-transfer-id", diff --git a/modules/api-svc/test/unit/lib/model/data/notificationAbortedToPayee.json b/modules/api-svc/test/unit/lib/model/data/notificationAbortedToPayee.json new file mode 100644 index 000000000..523f65d8c --- /dev/null +++ b/modules/api-svc/test/unit/lib/model/data/notificationAbortedToPayee.json @@ -0,0 +1,10 @@ +{ + "type": "notificationToPayee", + "headers": { + "fspiop-source": "SWITCH" + }, + "data": { + "completedTimestamp": "2017-11-15T14:16:09.663+01:00", + "transferState": "ABORTED" + } +} diff --git a/modules/api-svc/test/unit/lib/model/data/notificationReservedToPayee.json b/modules/api-svc/test/unit/lib/model/data/notificationReservedToPayee.json new file mode 100644 index 000000000..6a8d50899 --- /dev/null +++ b/modules/api-svc/test/unit/lib/model/data/notificationReservedToPayee.json @@ -0,0 +1,10 @@ +{ + "type": "notificationToPayee", + "headers": { + "fspiop-source": "SWITCH" + }, + "data": { + "completedTimestamp": "2017-11-15T14:16:09.663+01:00", + "transferState": "RESERVED" + } +} diff --git a/package.json b/package.json index 450b1f184..16a3125d7 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "test:coverage": "yarn workspaces foreach --parallel -v run test:coverage", "test:coverage-check": "yarn workspaces foreach --parallel -v run test:coverage-check", "test:integration": "yarn workspaces foreach --parallel -v run test:integration", - "audit:check": "yarn dlx audit-ci@^6 --config ./audit-ci.jsonc", + "audit:check": "yarn dlx audit-ci --config ./audit-ci.jsonc", "dep:check": "yarn workspaces foreach --parallel -v run dep:check", "dep:update": "yarn workspaces foreach --parallel -v run dep:update" }, @@ -44,6 +44,7 @@ "@types/node-cache": "^4.2.5", "@typescript-eslint/eslint-plugin": "^5.22.0", "@typescript-eslint/parser": "^5.22.0", + "audit-ci": "^6.3.0", "eslint": "^8.14.0", "husky": "^7.0.4", "jest": "^27.3.1", diff --git a/yarn.lock b/yarn.lock index ad144fd5a..9aa4c0d54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,7 +26,7 @@ __metadata: languageName: node linkType: hard -"@apidevtools/json-schema-ref-parser@npm:9.0.9, @apidevtools/json-schema-ref-parser@npm:^9.0.7": +"@apidevtools/json-schema-ref-parser@npm:9.0.9, @apidevtools/json-schema-ref-parser@npm:^9.0.7, @apidevtools/json-schema-ref-parser@npm:^9.0.9": version: 9.0.9 resolution: "@apidevtools/json-schema-ref-parser@npm:9.0.9" dependencies: @@ -83,15 +83,6 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:7.12.11": - version: 7.12.11 - resolution: "@babel/code-frame@npm:7.12.11" - dependencies: - "@babel/highlight": ^7.10.4 - checksum: 3963eff3ebfb0e091c7e6f99596ef4b258683e4ba8a134e4e95f77afe85be5c931e184fff6435fb4885d12eba04a5e25532f7fbc292ca13b48e7da943474e2f3 - languageName: node - linkType: hard - "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" @@ -108,7 +99,14 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.15.5, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": +"@babel/compat-data@npm:^7.18.8": + version: 7.18.8 + resolution: "@babel/compat-data@npm:7.18.8" + checksum: 3096aafad74936477ebdd039bcf342fba84eb3100e608f3360850fb63e1efa1c66037c4824f814d62f439ab47d25164439343a6e92e9b4357024fdf571505eb9 + languageName: node + linkType: hard + +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": version: 7.18.6 resolution: "@babel/core@npm:7.18.6" dependencies: @@ -131,6 +129,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.18.6": + version: 7.18.9 + resolution: "@babel/core@npm:7.18.9" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.18.9 + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-module-transforms": ^7.18.9 + "@babel/helpers": ^7.18.9 + "@babel/parser": ^7.18.9 + "@babel/template": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 64b9088b03fdf659b334864ef93bed85d60c17b27fcbd72970f8eb9e0d3266ffa5a1926960f648f2db36b0bafec615f947ea5117d200599a0661b9f0a9cdf323 + languageName: node + linkType: hard + "@babel/generator@npm:^7.18.6, @babel/generator@npm:^7.7.2": version: 7.18.7 resolution: "@babel/generator@npm:7.18.7" @@ -142,6 +163,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/generator@npm:7.18.9" + dependencies: + "@babel/types": ^7.18.9 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 1c271e0c6f33e59f7845d88a1b0b9b0dce88164e80dec9274a716efa54c260e405e9462b160843e73f45382bf5b24d8e160e0121207e480c29b30e2ed0eb16d4 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -175,6 +207,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-compilation-targets@npm:7.18.9" + dependencies: + "@babel/compat-data": ^7.18.8 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2a9d71e124e098a9f45de4527ddd1982349d231827d341e00da9dfb967e260ecc7662c8b62abee4a010fb34d5f07a8d2155c974e0bc1928144cee5644910621d + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-create-class-features-plugin@npm:7.18.6" @@ -229,6 +275,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-environment-visitor@npm:7.18.9" + checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" @@ -248,6 +301,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-function-name@npm:7.18.9" + dependencies: + "@babel/template": ^7.18.6 + "@babel/types": ^7.18.9 + checksum: d04c44e0272f887c0c868651be7fc3c5690531bea10936f00d4cca3f6d5db65e76dfb49e8d553c42ae1fe1eba61ccce9f3d93ba2df50a66408c8d4c3cc61cf0c + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -266,6 +329,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" + dependencies: + "@babel/types": ^7.18.9 + checksum: fcf8184e3b55051c4286b2cbedf0eccc781d0f3c9b5cbaba582eca19bf0e8d87806cdb7efc8554fcb969ceaf2b187d5ea748d40022d06ec7739fbb18c1b19a7a + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" @@ -291,6 +363,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-module-transforms@npm:7.18.9" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.18.6 + "@babel/template": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: af08c60ea239ff3d40eda542fceaab69de17e713f131e80ead08c975ba7a47dd55d439cb48cfb14ae7ec96704a10c989ff5a5240e52a39101cb44a49467ce058 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -307,6 +395,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-plugin-utils@npm:7.18.9" + checksum: ebae876cd60f1fe238c7210986093845fa5c4cad5feeda843ea4d780bf068256717650376d3af2a5e760f2ed6a35c065ae144f99c47da3e54aa6cba99d8804e0 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.6" @@ -334,6 +429,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-replace-supers@npm:7.18.9" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: 2de8b29cc4bfa4e241da2de16abd5571709f6eb394206dc16e3a7816976d1691635dd4bc930881e9d798f44b48a5f1849dc7f51a62946f3e8270452be1ec5352 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-simple-access@npm:7.18.6" @@ -343,12 +451,12 @@ __metadata: languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.6" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.9" dependencies: - "@babel/types": ^7.18.6 - checksum: 069750f9690b2995617c42be4b7848a4490cd30f1edc72401d9d2ae362bc186d395b7d8c1e171c1b6c09751642ab1bba578cccf8c0dfc82b4541f8627965aea7 + "@babel/types": ^7.18.9 + checksum: 6e93ccd10248293082606a4b3e30eed32c6f796d378f6b662796c88f462f348aa368aadeb48eb410cfcc8250db93b2d6627c2e55662530f08fc25397e588d68a languageName: node linkType: hard @@ -398,7 +506,18 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.18.6": +"@babel/helpers@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helpers@npm:7.18.9" + dependencies: + "@babel/template": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: d0bd8255d36bfc65dc52ce75f7fea778c70287da2d64981db4c84fbdf9581409ecbd6433deff1c81da3a5acf26d7e4c364b3a4445efacf88f4f48e77c5b34d8d + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" dependencies: @@ -418,6 +537,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/parser@npm:7.18.9" + bin: + parser: ./bin/babel-parser.js + checksum: 81a966b334e3ef397e883c64026265a5ae0ad435a86f52a84f60a5ee1efc0738c1f42c55e0dc5f191cc6a83ba0c61350433eee417bf1dff160ca5f3cfde244c6 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -429,16 +557,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.18.6" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.6 - "@babel/plugin-proposal-optional-chaining": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + "@babel/plugin-proposal-optional-chaining": ^7.18.9 peerDependencies: "@babel/core": ^7.13.0 - checksum: 0f0057cd12e98e297fd952c9cfdbffe5e34813f1b302e941fc212ca2a7b183ec2a227a1c49e104bbda528a4da6be03dbfb6e0d275d9572fb16b6ac5cda09fcd7 + checksum: 93abb5cb179a13db171bfc2cdf79489598f43c50cc174f97a2b7bb1d44d24ade7109665a20cf4e317ad6c1c730f036f06478f7c7e789b4240be1abdb60d6452f languageName: node linkType: hard @@ -493,15 +621,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-export-namespace-from@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.18.6" +"@babel/plugin-proposal-export-namespace-from@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/plugin-syntax-export-namespace-from": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3227307e1155e8434825c02fb2e4e91e590aeb629ce6ce23e4fe869d0018a144c4674bf98863e1bb6d4e4a6f831e686ae43f46a87894e4286e31e6492a5571eb + checksum: 84ff22bacc5d30918a849bfb7e0e90ae4c5b8d8b65f2ac881803d1cf9068dffbe53bd657b0e4bc4c20b4db301b1c85f1e74183cf29a0dd31e964bd4e97c363ef languageName: node linkType: hard @@ -517,15 +645,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.18.6" +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4fe0a0d6739da6b1929f5015846e1de3b72d7dd07c665975ca795850ad7d048f8a0756c057a4cd1d71080384ad6283c30fcc239393da6848eabc38e38d3206c5 + checksum: dd87fa4a48c6408c5e85dbd6405a65cc8fe909e3090030df46df90df64cdf3e74007381a58ed87608778ee597eff7395d215274009bb3f5d8964b2db5557754f languageName: node linkType: hard @@ -553,18 +681,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.6" +"@babel/plugin-proposal-object-rest-spread@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.9" dependencies: - "@babel/compat-data": ^7.18.6 - "@babel/helper-compilation-targets": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/compat-data": ^7.18.8 + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.18.6 + "@babel/plugin-transform-parameters": ^7.18.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9b7516bad285a8706beb5e619cf505364bfbe79e219ae86d2139b32010d238d146301c1424488926a57f6d729556e21cfccab29f28c26ecd0dda05e53d7160b1 + checksum: 66b9bae741d46edf1c96776d26dfe5d335981e57164ec2450583e3d20dfaa08a5137ffebb897e443913207789f9816bfec4ae845f38762c0196a60949eaffdba languageName: node linkType: hard @@ -580,16 +708,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.6" +"@babel/plugin-proposal-optional-chaining@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 "@babel/plugin-syntax-optional-chaining": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9c3bf80cfb41ee53a2a5d0f316ef5d125bb0d400ede1ee1a68a9b7dfc998036cca20c3901cb5c9e24fdd9f08c0056030e042f4637bc9bbc36b682384b38e2d96 + checksum: f2db40e26172f07c50b635cb61e1f36165de3ba868fcf608d967642f0d044b7c6beb0e7ecf17cbd421144b99e1eae7ad6031ded92925343bb0ed1d08707b514f languageName: node linkType: hard @@ -864,54 +992,54 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-block-scoping@npm:7.18.6" +"@babel/plugin-transform-block-scoping@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-block-scoping@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b117a005a9d5aedacc4a899a4d504b7f46e4c1e852b62d34a7f1cb06caecb1f69507b6a07d0ba6c6241ddd8f470bc6f483513d87637e49f6c508aadf23cf391a + checksum: f8064ea431eb7aa349dc5b6be87a650f912b48cd65afde917e8644f6f840d7f9d2ce4795f2aa3955aa5b23a73d4ad38abd03386ae109b4b8702b746c6d35bda3 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-classes@npm:7.18.6" +"@babel/plugin-transform-classes@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-classes@npm:7.18.9" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.6 - "@babel/helper-function-name": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-replace-supers": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 661e37037912a25a77fe8bef7e9d480c24ff4ba4000a3137243b098c86cf5ddc970af66c5c245f828c7dcfafc24e80d260f31274e2f2d6dce49a0964a7648a0c + checksum: d7e953c0cf32af64e75db1277d2556c04635f32691ef462436897840be6f8021d4f85ee96134cb796a12dda549cf53346fedf96b671885f881bc4037c9d120ad languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-computed-properties@npm:7.18.6" +"@babel/plugin-transform-computed-properties@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 686d7b9d03192959684de11ddf9c616ecfb314b199e9191f2ebbbfe0e0c9d6a3a5245668cde620e949e5891ca9a9d90a224fbf605dfb94d05b81aff127c5ae60 + checksum: a6bfbea207827d77592628973c0e8cc3319db636506bdc6e81e21582de2e767890e6975b382d0511e9ec3773b9f43691185df90832883bbf9251f688d27fbc1d languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-destructuring@npm:7.18.6" +"@babel/plugin-transform-destructuring@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 256573bd2712e292784befb82fcb88b070c16b4d129469ea886885d8fbafdbb072c9fcf7f82039d2c61b05f2005db34e5068b2a6e813941c41ce709249f357c1 + checksum: 1a9b85dff67fd248fa8a2488ef59df3eb4dd4ca6007ff7db9f780c7873630a13bc16cfb2ad8f4c4ca966e42978410d1e4b306545941fe62769f2683f34973acd languageName: node linkType: hard @@ -927,14 +1055,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.6" +"@babel/plugin-transform-duplicate-keys@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c21797ae06e84e3d1502b1214279215e4dcb2e181198bfb9b1644e65ca0288441d3d70a9ea745f687095e9226b9a4a62b9e53fb944c8924b9591ce4e0039b042 + checksum: 220bf4a9fec5c4d4a7b1de38810350260e8ea08481bf78332a464a21256a95f0df8cd56025f346238f09b04f8e86d4158fafc9f4af57abaef31637e3b58bd4fe languageName: node linkType: hard @@ -950,38 +1078,38 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-for-of@npm:7.18.6" +"@babel/plugin-transform-for-of@npm:^7.18.8": + version: 7.18.8 + resolution: "@babel/plugin-transform-for-of@npm:7.18.8" dependencies: "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: fd92e18d6cd90063c4d5c7562d8b6ed1c7bd6c13a9451966ebfcc5f0f5645f306de615207322eafd06e297ea2339e28ba664e3ed276759dde8e14fbdce4cf108 + checksum: ca64c623cf0c7a80ab6f07ebd3e6e4ade95e2ae806696f70b43eafe6394fa8ce21f2b1ffdd15df2067f7363d2ecfe26472a97c6c774403d2163fa05f50c98f17 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-function-name@npm:7.18.6" +"@babel/plugin-transform-function-name@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-function-name@npm:7.18.9" dependencies: - "@babel/helper-compilation-targets": ^7.18.6 - "@babel/helper-function-name": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-function-name": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d15d36f52d11a1b6dde3cfc0975eb9c030d66207875a722860bc0637f7515f94107b35320306967faaaa896523097e8f5c3dd6982d926f52016525ceaa9e3e42 + checksum: 62dd9c6cdc9714704efe15545e782ee52d74dc73916bf954b4d3bee088fb0ec9e3c8f52e751252433656c09f744b27b757fc06ed99bcde28e8a21600a1d8e597 languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-literals@npm:7.18.6" +"@babel/plugin-transform-literals@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-literals@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 859e2405d51931c8c0ea39890c0bcf6c7c01793fe99409844fe122e4c342528f87cd13b8210dd2873ecf5c643149b310c4bc5eb9a4c45928de142063ab04b2b8 + checksum: 3458dd2f1a47ac51d9d607aa18f3d321cbfa8560a985199185bed5a906bb0c61ba85575d386460bac9aed43fdd98940041fae5a67dff286f6f967707cff489f8 languageName: node linkType: hard @@ -1023,18 +1151,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.6" +"@babel/plugin-transform-modules-systemjs@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.9" dependencies: "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-module-transforms": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/helper-validator-identifier": ^7.18.6 babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 69e476477fe4c18a5975aa683684b2db76c76013d2387110ffc7b221071ec611cd3961b68631bdae7a57cb5cc0decdbb07119ef168e9dcdae9ba803a7b352ab0 + checksum: 6122d9901ed5dc56d9db843efc9249fe20d769a11989bbbf5a806ed4f086def949185198aa767888481babf70fc52b6b3e297a991e2b02b4f34ffb03d998d1e3 languageName: node linkType: hard @@ -1085,14 +1213,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-parameters@npm:7.18.6" +"@babel/plugin-transform-parameters@npm:^7.18.8": + version: 7.18.8 + resolution: "@babel/plugin-transform-parameters@npm:7.18.8" dependencies: "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 35bfdf5b2e7f4c10b68aff317b6d47cc5b2261b85158f427696e1ce17f3da466a098ad4e57dc3deb4e7b349994313cfe459d42ecd5f4028989bcc710e62ed709 + checksum: 2b5863300da60face8a250d91da16294333bd5626e9721b13a3ba2078bd2a5a190e32c6e7a1323d5f547f579aeb2804ff49a62a55fcad2b1d099e55a55b788ea languageName: node linkType: hard @@ -1141,15 +1269,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-spread@npm:7.18.6" +"@babel/plugin-transform-spread@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-spread@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 996b139ed68503700184f709dc996f285be285282d1780227185b622d9642f5bd60996fcfe910ed0495834f1935df805e7abb36b4b587222264c61020ba4485b + checksum: 59489dd6212bd21debdf77746d9fa02dfe36f7062dc08742b8841d04312a26ea37bc0d71c71a6e37c3ab81dce744faa7f23fa94b0915593458f6adc35c087766 languageName: node linkType: hard @@ -1164,25 +1292,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-template-literals@npm:7.18.6" +"@babel/plugin-transform-template-literals@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6ec354415f92850c927dd3ad90e337df8ee1aeb4cdb2c643208bc8652be91f647c137846586b14bc2b2d7ec408c2b74af2d154ba0972a4fe8b559f8c3e07a3aa + checksum: 3d2fcd79b7c345917f69b92a85bdc3ddd68ce2c87dc70c7d61a8373546ccd1f5cb8adc8540b49dfba08e1b82bb7b3bbe23a19efdb2b9c994db2db42906ca9fb2 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.18.6" +"@babel/plugin-transform-typeof-symbol@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.18.9" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b018ac3275958ed74caa2fdb900873bc61907e0cb8b70197ecd2f0e98611119d7a5831761bd14710882c94903e220e6338dd2e7346eca678c788b30457080a7e + checksum: e754e0d8b8a028c52e10c148088606e3f7a9942c57bd648fc0438e5b4868db73c386a5ed47ab6d6f0594aae29ee5ffc2ffc0f7ebee7fae560a066d6dea811cd4 languageName: node linkType: hard @@ -1209,28 +1337,28 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.15.6": - version: 7.18.6 - resolution: "@babel/preset-env@npm:7.18.6" +"@babel/preset-env@npm:^7.18.6": + version: 7.18.9 + resolution: "@babel/preset-env@npm:7.18.9" dependencies: - "@babel/compat-data": ^7.18.6 - "@babel/helper-compilation-targets": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/compat-data": ^7.18.8 + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/helper-validator-option": ^7.18.6 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.6 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 "@babel/plugin-proposal-async-generator-functions": ^7.18.6 "@babel/plugin-proposal-class-properties": ^7.18.6 "@babel/plugin-proposal-class-static-block": ^7.18.6 "@babel/plugin-proposal-dynamic-import": ^7.18.6 - "@babel/plugin-proposal-export-namespace-from": ^7.18.6 + "@babel/plugin-proposal-export-namespace-from": ^7.18.9 "@babel/plugin-proposal-json-strings": ^7.18.6 - "@babel/plugin-proposal-logical-assignment-operators": ^7.18.6 + "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.18.6 + "@babel/plugin-proposal-object-rest-spread": ^7.18.9 "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 - "@babel/plugin-proposal-optional-chaining": ^7.18.6 + "@babel/plugin-proposal-optional-chaining": ^7.18.9 "@babel/plugin-proposal-private-methods": ^7.18.6 "@babel/plugin-proposal-private-property-in-object": ^7.18.6 "@babel/plugin-proposal-unicode-property-regex": ^7.18.6 @@ -1252,37 +1380,37 @@ __metadata: "@babel/plugin-transform-arrow-functions": ^7.18.6 "@babel/plugin-transform-async-to-generator": ^7.18.6 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.18.6 - "@babel/plugin-transform-classes": ^7.18.6 - "@babel/plugin-transform-computed-properties": ^7.18.6 - "@babel/plugin-transform-destructuring": ^7.18.6 + "@babel/plugin-transform-block-scoping": ^7.18.9 + "@babel/plugin-transform-classes": ^7.18.9 + "@babel/plugin-transform-computed-properties": ^7.18.9 + "@babel/plugin-transform-destructuring": ^7.18.9 "@babel/plugin-transform-dotall-regex": ^7.18.6 - "@babel/plugin-transform-duplicate-keys": ^7.18.6 + "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 - "@babel/plugin-transform-for-of": ^7.18.6 - "@babel/plugin-transform-function-name": ^7.18.6 - "@babel/plugin-transform-literals": ^7.18.6 + "@babel/plugin-transform-for-of": ^7.18.8 + "@babel/plugin-transform-function-name": ^7.18.9 + "@babel/plugin-transform-literals": ^7.18.9 "@babel/plugin-transform-member-expression-literals": ^7.18.6 "@babel/plugin-transform-modules-amd": ^7.18.6 "@babel/plugin-transform-modules-commonjs": ^7.18.6 - "@babel/plugin-transform-modules-systemjs": ^7.18.6 + "@babel/plugin-transform-modules-systemjs": ^7.18.9 "@babel/plugin-transform-modules-umd": ^7.18.6 "@babel/plugin-transform-named-capturing-groups-regex": ^7.18.6 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.18.6 + "@babel/plugin-transform-parameters": ^7.18.8 "@babel/plugin-transform-property-literals": ^7.18.6 "@babel/plugin-transform-regenerator": ^7.18.6 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.18.6 + "@babel/plugin-transform-spread": ^7.18.9 "@babel/plugin-transform-sticky-regex": ^7.18.6 - "@babel/plugin-transform-template-literals": ^7.18.6 - "@babel/plugin-transform-typeof-symbol": ^7.18.6 + "@babel/plugin-transform-template-literals": ^7.18.9 + "@babel/plugin-transform-typeof-symbol": ^7.18.9 "@babel/plugin-transform-unicode-escapes": ^7.18.6 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.18.6 + "@babel/types": ^7.18.9 babel-plugin-polyfill-corejs2: ^0.3.1 babel-plugin-polyfill-corejs3: ^0.5.2 babel-plugin-polyfill-regenerator: ^0.3.1 @@ -1290,7 +1418,7 @@ __metadata: semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 0598ff98b69116e289174d89d976f27eff54d9d7f9f95a1feadf743c18021cd9785ddf2439de9af360f5625450816e4bc3b76ddd0c20ecc64e8802f943f07302 + checksum: 311002b9255d1aa261afe712ab73a93687652437804e2f44e6cc55438f8b199463f53bb2b8e0912b0034f208a42eee664a9e126a6061ca504a792ede97dd027e languageName: node linkType: hard @@ -1347,6 +1475,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/traverse@npm:7.18.9" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.18.9 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.18.9 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.18.9 + "@babel/types": ^7.18.9 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 0445a51952ea1664a5719d9b1f8bf04be6f1933bcf54915fecc544c844a5dad2ac56f3b555723bbf741ef680d7fd64f6a5d69cfd08d518a4089c79a734270162 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.18.7 resolution: "@babel/types@npm:7.18.7" @@ -1357,6 +1503,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/types@npm:7.18.9" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + to-fast-properties: ^2.0.0 + checksum: f0e0147267895fd8a5b82133e711ce7ce99941f3ce63647e0e3b00656a7afe48a8aa48edbae27543b701794d2b29a562a08f51f88f41df401abce7c3acc5e13a + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1382,23 +1538,6 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^0.4.3": - version: 0.4.3 - resolution: "@eslint/eslintrc@npm:0.4.3" - dependencies: - ajv: ^6.12.4 - debug: ^4.1.1 - espree: ^7.3.0 - globals: ^13.9.0 - ignore: ^4.0.6 - import-fresh: ^3.2.1 - js-yaml: ^3.13.1 - minimatch: ^3.0.4 - strip-json-comments: ^3.1.1 - checksum: 03a7704150b868c318aab6a94d87a33d30dc2ec579d27374575014f06237ba1370ae11178db772f985ef680d469dc237e7b16a1c5d8edaaeb8c3733e7a95a6d3 - languageName: node - linkType: hard - "@eslint/eslintrc@npm:^1.3.0": version: 1.3.0 resolution: "@eslint/eslintrc@npm:1.3.0" @@ -1423,7 +1562,7 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": +"@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 @@ -1536,17 +1675,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.5.0": - version: 0.5.0 - resolution: "@humanwhocodes/config-array@npm:0.5.0" - dependencies: - "@humanwhocodes/object-schema": ^1.2.0 - debug: ^4.1.1 - minimatch: ^3.0.4 - checksum: 44ee6a9f05d93dd9d5935a006b17572328ba9caff8002442f601736cbda79c580cc0f5a49ce9eb88fbacc5c3a6b62098357c2e95326cd17bb9f1a6c61d6e95e7 - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.9.2": version: 0.9.5 resolution: "@humanwhocodes/config-array@npm:0.9.5" @@ -1558,7 +1686,7 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.0, @humanwhocodes/object-schema@npm:^1.2.1": +"@humanwhocodes/object-schema@npm:^1.2.1": version: 1.2.1 resolution: "@humanwhocodes/object-schema@npm:1.2.1" checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 @@ -1620,6 +1748,20 @@ __metadata: languageName: node linkType: hard +"@jest/console@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/console@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + slash: ^3.0.0 + checksum: fe50d98d26d02ce2901c76dff4bd5429a33c13affb692c9ebf8a578ca2f38a5dd854363d40d6c394f215150791fd1f692afd8e730a4178dda24107c8dfd9750a + languageName: node + linkType: hard + "@jest/core@npm:^27.5.1": version: 27.5.1 resolution: "@jest/core@npm:27.5.1" @@ -1703,6 +1845,48 @@ __metadata: languageName: node linkType: hard +"@jest/core@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/core@npm:28.1.3" + dependencies: + "@jest/console": ^28.1.3 + "@jest/reporters": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^28.1.3 + jest-config: ^28.1.3 + jest-haste-map: ^28.1.3 + jest-message-util: ^28.1.3 + jest-regex-util: ^28.0.2 + jest-resolve: ^28.1.3 + jest-resolve-dependencies: ^28.1.3 + jest-runner: ^28.1.3 + jest-runtime: ^28.1.3 + jest-snapshot: ^28.1.3 + jest-util: ^28.1.3 + jest-validate: ^28.1.3 + jest-watcher: ^28.1.3 + micromatch: ^4.0.4 + pretty-format: ^28.1.3 + rimraf: ^3.0.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: cb79f34bafc4637e7130df12257f5b29075892a2be2c7f45c6d4c0420853e80b5dae11016e652530eb234f4c44c00910cdca3c2cd86275721860725073f7d9b4 + languageName: node + linkType: hard + "@jest/environment@npm:^27.5.1": version: 27.5.1 resolution: "@jest/environment@npm:27.5.1" @@ -1727,6 +1911,18 @@ __metadata: languageName: node linkType: hard +"@jest/environment@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/environment@npm:28.1.3" + dependencies: + "@jest/fake-timers": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + jest-mock: ^28.1.3 + checksum: 14c496b84aef951df33128cea68988e9de43b2e9d62be9f9c4308d4ac307fa345642813679f80d0a4cedeb900cf6f0b6bb2b92ce089528e8721f72295fdc727f + languageName: node + linkType: hard + "@jest/expect-utils@npm:^28.1.1": version: 28.1.1 resolution: "@jest/expect-utils@npm:28.1.1" @@ -1736,6 +1932,15 @@ __metadata: languageName: node linkType: hard +"@jest/expect-utils@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/expect-utils@npm:28.1.3" + dependencies: + jest-get-type: ^28.0.2 + checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 + languageName: node + linkType: hard + "@jest/expect@npm:^28.1.2": version: 28.1.2 resolution: "@jest/expect@npm:28.1.2" @@ -1746,6 +1951,16 @@ __metadata: languageName: node linkType: hard +"@jest/expect@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/expect@npm:28.1.3" + dependencies: + expect: ^28.1.3 + jest-snapshot: ^28.1.3 + checksum: 4197f6fdddc33dc45ba4e838f992fc61839c421d7aed0dfe665ef9c2f172bb1df8a8cac9cecee272b40e744a326da521d5e182709fe82a0b936055bfffa3b473 + languageName: node + linkType: hard + "@jest/fake-timers@npm:^27.5.1": version: 27.5.1 resolution: "@jest/fake-timers@npm:27.5.1" @@ -1774,6 +1989,20 @@ __metadata: languageName: node linkType: hard +"@jest/fake-timers@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/fake-timers@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@sinonjs/fake-timers": ^9.1.2 + "@types/node": "*" + jest-message-util: ^28.1.3 + jest-mock: ^28.1.3 + jest-util: ^28.1.3 + checksum: cec14d5b14913a54dce64a62912c5456235f5d90b509ceae19c727565073114dae1aaf960ac6be96b3eb94789a3a758b96b72c8fca7e49a6ccac415fbc0321e1 + languageName: node + linkType: hard + "@jest/globals@npm:^27.5.1": version: 27.5.1 resolution: "@jest/globals@npm:27.5.1" @@ -1796,6 +2025,17 @@ __metadata: languageName: node linkType: hard +"@jest/globals@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/globals@npm:28.1.3" + dependencies: + "@jest/environment": ^28.1.3 + "@jest/expect": ^28.1.3 + "@jest/types": ^28.1.3 + checksum: 3504bb23de629d466c6f2b6b75d2e1c1b10caccbbcfb7eaa82d22cc37711c8e364c243929581184846605c023b475ea6c42c2e3ea5994429a988d8d527af32cd + languageName: node + linkType: hard + "@jest/reporters@npm:^27.5.1": version: 27.5.1 resolution: "@jest/reporters@npm:27.5.1" @@ -1872,6 +2112,44 @@ __metadata: languageName: node linkType: hard +"@jest/reporters@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/reporters@npm:28.1.3" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + "@jridgewell/trace-mapping": ^0.3.13 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^5.1.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + jest-worker: ^28.1.3 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + terminal-link: ^2.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: a7440887ce837922cbeaa64c3232eb48aae02aa9123f29fc4280ad3e1afe4b35dcba171ba1d5fd219037c396c5152d9c2d102cff1798dd5ae3bd33ac4759ae0a + languageName: node + linkType: hard + "@jest/schemas@npm:^28.0.2": version: 28.0.2 resolution: "@jest/schemas@npm:28.0.2" @@ -1881,6 +2159,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/schemas@npm:28.1.3" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de + languageName: node + linkType: hard + "@jest/source-map@npm:^27.5.1": version: 27.5.1 resolution: "@jest/source-map@npm:27.5.1" @@ -1927,6 +2214,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-result@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/test-result@npm:28.1.3" + dependencies: + "@jest/console": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 957a5dd2fd2e84aabe86698f93c0825e96128ccaa23abf548b159a9b08ac74e4bde7acf4bec48479243dbdb27e4ea1b68c171846d21fb64855c6b55cead9ef27 + languageName: node + linkType: hard + "@jest/test-sequencer@npm:^27.5.1": version: 27.5.1 resolution: "@jest/test-sequencer@npm:27.5.1" @@ -1951,6 +2250,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-sequencer@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/test-sequencer@npm:28.1.3" + dependencies: + "@jest/test-result": ^28.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.3 + slash: ^3.0.0 + checksum: 13f8905e6d1ec8286694146f7be3cf90eff801bbdea5e5c403e6881444bb390ed15494c7b9948aa94bd7e9c9a851e0d3002ed6e7371d048b478596e5b23df953 + languageName: node + linkType: hard + "@jest/transform@npm:^27.5.1": version: 27.5.1 resolution: "@jest/transform@npm:27.5.1" @@ -1997,15 +2308,38 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^27.5.1": - version: 27.5.1 - resolution: "@jest/types@npm:27.5.1" +"@jest/transform@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/transform@npm:28.1.3" dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^16.0.0 - chalk: ^4.0.0 + "@babel/core": ^7.11.6 + "@jest/types": ^28.1.3 + "@jridgewell/trace-mapping": ^0.3.13 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^1.4.0 + fast-json-stable-stringify: ^2.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.3 + jest-regex-util: ^28.0.2 + jest-util: ^28.1.3 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.1 + checksum: dadf618936e0aa84342f07f532801d5bed43cdf95d1417b929e4f8782c872cff1adc84096d5a287a796d0039a2691c06d8450cce5a713a8b52fbb9f872a1e760 + languageName: node + linkType: hard + +"@jest/types@npm:^27.5.1": + version: 27.5.1 + resolution: "@jest/types@npm:27.5.1" + dependencies: + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^16.0.0 + chalk: ^4.0.0 checksum: d1f43cc946d87543ddd79d49547aab2399481d34025d5c5f2025d3d99c573e1d9832fa83cef25e9d9b07a8583500229d15bbb07b8e233d127d911d133e2f14b1 languageName: node linkType: hard @@ -2024,6 +2358,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^28.1.3": + version: 28.1.3 + resolution: "@jest/types@npm:28.1.3" + dependencies: + "@jest/schemas": ^28.1.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.1.0": version: 0.1.1 resolution: "@jridgewell/gen-mapping@npm:0.1.1" @@ -2083,7 +2431,7 @@ __metadata: languageName: node linkType: hard -"@koa/cors@npm:^3.1.0": +"@koa/cors@npm:^3.3.0": version: 3.3.0 resolution: "@koa/cors@npm:3.3.0" dependencies: @@ -2092,13 +2440,6 @@ __metadata: languageName: node linkType: hard -"@korzio/djv-draft-04@npm:^2.0.1": - version: 2.0.1 - resolution: "@korzio/djv-draft-04@npm:2.0.1" - checksum: 1564f8210f51e7bb0ea05146e7ccc5c05dff1cb840a50af6689f78ca87a2576e738199e986428c23f8fdc664eff0148747645b913fd3c4f928b8e00d3865f8e6 - languageName: node - linkType: hard - "@mapbox/node-pre-gyp@npm:^1.0.4": version: 1.0.9 resolution: "@mapbox/node-pre-gyp@npm:1.0.9" @@ -2118,29 +2459,34 @@ __metadata: languageName: node linkType: hard -"@mojaloop/api-snippets@npm:^13.0.9": - version: 13.0.11 - resolution: "@mojaloop/api-snippets@npm:13.0.11" +"@mojaloop/api-snippets@npm:^14.0.0": + version: 14.1.0 + resolution: "@mojaloop/api-snippets@npm:14.1.0" dependencies: - commander: ^2.19.0 - jest-ts-auto-mock: ^2.0.0 - js-yaml: ^3.14.1 - json-refs: ^3.0.12 - openapi-types: ^7.0.1 - openapi-typescript: ^2.4.2 - ts-auto-mock: ^3.3.0 - ttypescript: ^1.5.12 - checksum: c1bd749a4c6aa4b0b69d155fa5681a29baeee235b1ce0e0f6abf2b234b5e3955c59d6493e487f571bc1e4fd1554730adb709df43129a2ca0af54462457fe102c + "@apidevtools/json-schema-ref-parser": ^9.0.9 + commander: ^9.3.0 + jest-ts-auto-mock: ^2.1.0 + js-yaml: ^4.1.0 + json-refs: ^3.0.15 + openapi-types: ^12.0.0 + openapi-typescript: ^5.4.1 + ts-auto-mock: ^3.6.2 + ttypescript: ^1.5.13 + checksum: e1b5efbff328b9614dfc1f77723616c33c73ae54460e02cb808de41253f2456c08c2b3e88f9847fa95f5e699c2846efb7624d32b018765a45ba97f7ee2fac739 languageName: node linkType: hard -"@mojaloop/central-services-error-handling@npm:^12.0.3": - version: 12.0.3 - resolution: "@mojaloop/central-services-error-handling@npm:12.0.3" +"@mojaloop/central-services-error-handling@npm:^12.0.4": + version: 12.0.4 + resolution: "@mojaloop/central-services-error-handling@npm:12.0.4" dependencies: - "@mojaloop/sdk-standard-components": 17.0.2 lodash: 4.17.21 - checksum: aac5b0b6e227b1ed9ee2867720f7096ac084c0d49fec2d622d414a9d4749541edc268ad6457b57ef7dd8c5156e785671d8fe762e0792ede1e74a6cb96a5a95b9 + peerDependencies: + "@mojaloop/sdk-standard-components": 17.x.x + peerDependenciesMeta: + "@mojaloop/sdk-standard-components": + optional: false + checksum: 7e3deef2f56b343b63a64f38cb48639165fe413b254c3d2d6ae97d2e3155ead73f58ecf83e876a6c3d98dd584b0324d7073d02b948c3b10097e1242a9e6796ad languageName: node linkType: hard @@ -2241,57 +2587,55 @@ __metadata: version: 0.0.0-use.local resolution: "@mojaloop/sdk-scheme-adapter-api-svc@workspace:modules/api-svc" dependencies: - "@babel/core": ^7.15.5 - "@babel/preset-env": ^7.15.6 - "@koa/cors": ^3.1.0 - "@mojaloop/api-snippets": ^13.0.9 - "@mojaloop/central-services-error-handling": ^12.0.3 + "@babel/core": ^7.18.6 + "@babel/preset-env": ^7.18.6 + "@koa/cors": ^3.3.0 + "@mojaloop/api-snippets": ^14.0.0 + "@mojaloop/central-services-error-handling": ^12.0.4 "@mojaloop/central-services-logger": ^11.0.1 "@mojaloop/central-services-metrics": ^12.0.5 "@mojaloop/central-services-shared": 17.0.2 "@mojaloop/event-sdk": ^11.0.2 - "@mojaloop/sdk-standard-components": ^17.0.1 - "@redocly/openapi-cli": ^1.0.0-beta.59 - "@types/jest": ^27.0.1 + "@mojaloop/sdk-standard-components": ^17.1.1 + "@redocly/openapi-cli": ^1.0.0-beta.94 + "@types/jest": ^28.1.4 ajv: 8.11.0 - ajv-keywords: ^5.1.0 - axios: ^0.21.4 - babel-jest: ^27.2.0 + axios: ^0.27.2 + babel-jest: ^28.1.2 co-body: ^6.1.0 - dotenv: ^10.0.0 - env-var: ^7.0.1 - eslint: ^7.32.0 - eslint-config-airbnb-base: ^14.2.1 - eslint-plugin-import: ^2.24.2 - eslint-plugin-jest: ^24.4.0 - express: ^4.17.2 + dotenv: ^16.0.1 + env-var: ^7.1.1 + eslint: ^8.19.0 + eslint-config-airbnb-base: ^15.0.0 + eslint-plugin-import: ^2.26.0 + eslint-plugin-jest: ^26.5.3 + express: ^4.18.1 fast-json-patch: ^3.1.1 javascript-state-machine: ^3.1.0 - jest: ^27.2.0 - jest-junit: ^12.2.0 + jest: ^28.1.2 + jest-junit: ^14.0.0 js-yaml: ^4.1.0 json-schema-ref-parser: ^9.0.9 - koa: ^2.13.1 - koa-body: ^4.2.0 + koa: ^2.13.4 + koa-body: ^5.0.0 lodash: ^4.17.21 module-alias: ^2.2.2 - nock: ^13.1.3 - npm-audit-resolver: ^3.0.0-0 - npm-check-updates: ^11.8.5 + nock: ^13.2.8 + npm-check-updates: ^15.2.6 oauth2-server: ^4.0.0-dev.2 - openapi-jsonschema-parameters: ^9.3.0 - openapi-response-validator: ^9.3.0 - openapi-typescript: ^4.0.2 - prom-client: ^12.0.0 + openapi-jsonschema-parameters: ^12.0.0 + openapi-response-validator: ^12.0.0 + openapi-typescript: ^5.4.1 + prom-client: ^14.0.1 promise-timeout: ^1.3.0 random-word-slugs: ^0.1.6 - redis: ^3.1.2 + redis: ^4.2.0 redis-mock: ^0.56.3 - standard-version: ^9.3.1 - supertest: ^6.1.6 + standard-version: ^9.5.0 + supertest: ^6.2.4 swagger-cli: ^4.0.4 - uuidv4: ^6.2.12 - ws: ^7.5.5 + uuidv4: ^6.2.13 + ws: ^8.8.0 languageName: unknown linkType: soft @@ -2368,6 +2712,7 @@ __metadata: "@types/node-cache": ^4.2.5 "@typescript-eslint/eslint-plugin": ^5.22.0 "@typescript-eslint/parser": ^5.22.0 + audit-ci: ^6.3.0 eslint: ^8.14.0 husky: ^7.0.4 jest: ^27.3.1 @@ -2379,29 +2724,16 @@ __metadata: languageName: unknown linkType: soft -"@mojaloop/sdk-standard-components@npm:17.0.2": - version: 17.0.2 - resolution: "@mojaloop/sdk-standard-components@npm:17.0.2" +"@mojaloop/sdk-standard-components@npm:^17.1.1": + version: 17.1.1 + resolution: "@mojaloop/sdk-standard-components@npm:17.1.1" dependencies: base64url: 3.0.1 fast-safe-stringify: ^2.1.1 ilp-packet: 2.2.0 jsonwebtoken: 8.5.1 jws: 4.0.0 - checksum: 15507303c23a60652f9773ddeb32a25e29191b5d98d0a8ffacaf5c370531a623ade13f08c7673126ddfcf44be6240a705fc6228f0771f8ef73b57edda08aca14 - languageName: node - linkType: hard - -"@mojaloop/sdk-standard-components@npm:^17.0.1": - version: 17.0.4 - resolution: "@mojaloop/sdk-standard-components@npm:17.0.4" - dependencies: - base64url: 3.0.1 - fast-safe-stringify: ^2.1.1 - ilp-packet: 2.2.0 - jsonwebtoken: 8.5.1 - jws: 4.0.0 - checksum: 146fec5a4dfc6a2a13687bc67b204b64a16c83828411d80e21fde7b04d7d1c7df78fb6d8e88d8b98965fe64904bc9be07e87f971b5c3df4f4593373d6ddc2457 + checksum: cf36828bc3635f88a0b18b0d6af49c22e67f87f2e27355db7d54a9b5fe639c59139f6bd5925394507ed0977bebb8f69d3359e60a7bd925b09ef27fbc2d994365 languageName: node linkType: hard @@ -2432,16 +2764,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/fs@npm:^1.0.0": - version: 1.1.1 - resolution: "@npmcli/fs@npm:1.1.1" - dependencies: - "@gar/promisify": ^1.0.1 - semver: ^7.3.5 - checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 - languageName: node - linkType: hard - "@npmcli/fs@npm:^2.1.0": version: 2.1.0 resolution: "@npmcli/fs@npm:2.1.0" @@ -2452,22 +2774,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/git@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/git@npm:2.1.0" - dependencies: - "@npmcli/promise-spawn": ^1.3.2 - lru-cache: ^6.0.0 - mkdirp: ^1.0.4 - npm-pick-manifest: ^6.1.1 - promise-inflight: ^1.0.1 - promise-retry: ^2.0.1 - semver: ^7.3.5 - which: ^2.0.2 - checksum: 1f89752df7b836f378b8828423c6ae344fe59399915b9460acded19686e2d0626246251a3cd4cc411ed21c1be6fe7f0c2195c17f392e88748581262ee806dc33 - languageName: node - linkType: hard - "@npmcli/git@npm:^3.0.0": version: 3.0.1 resolution: "@npmcli/git@npm:3.0.1" @@ -2485,7 +2791,7 @@ __metadata: languageName: node linkType: hard -"@npmcli/installed-package-contents@npm:^1.0.6, @npmcli/installed-package-contents@npm:^1.0.7": +"@npmcli/installed-package-contents@npm:^1.0.7": version: 1.0.7 resolution: "@npmcli/installed-package-contents@npm:1.0.7" dependencies: @@ -2497,16 +2803,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/move-file@npm:^1.0.1": - version: 1.1.2 - resolution: "@npmcli/move-file@npm:1.1.2" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7 - languageName: node - linkType: hard - "@npmcli/move-file@npm:^2.0.0": version: 2.0.0 resolution: "@npmcli/move-file@npm:2.0.0" @@ -2517,13 +2813,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/node-gyp@npm:^1.0.2": - version: 1.0.3 - resolution: "@npmcli/node-gyp@npm:1.0.3" - checksum: 496d5eef2e90e34bb07e96adbcbbce3dba5370ae87e8c46ff5b28570848f35470c8e008b8f69e50863632783e0a9190e6f55b2e4b049c537142821153942d26a - languageName: node - linkType: hard - "@npmcli/node-gyp@npm:^2.0.0": version: 2.0.0 resolution: "@npmcli/node-gyp@npm:2.0.0" @@ -2531,15 +2820,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/promise-spawn@npm:^1.2.0, @npmcli/promise-spawn@npm:^1.3.2": - version: 1.3.2 - resolution: "@npmcli/promise-spawn@npm:1.3.2" - dependencies: - infer-owner: ^1.0.4 - checksum: 543b7c1e26230499b4100b10d45efa35b1077e8f25595050f34930ca3310abe9524f7387279fe4330139e0f28a0207595245503439276fd4b686cca2b6503080 - languageName: node - linkType: hard - "@npmcli/promise-spawn@npm:^3.0.0": version: 3.0.0 resolution: "@npmcli/promise-spawn@npm:3.0.0" @@ -2549,18 +2829,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/run-script@npm:^1.8.2": - version: 1.8.6 - resolution: "@npmcli/run-script@npm:1.8.6" - dependencies: - "@npmcli/node-gyp": ^1.0.2 - "@npmcli/promise-spawn": ^1.3.2 - node-gyp: ^7.1.0 - read-package-json-fast: ^2.0.1 - checksum: 41924e7925452ac8e78d78bef5d65b3d58f86eea4481a453e11e3a9099504bfbfcf1f65d7f75d92170b846fa347d05424e58e617fb9c17b3efd87db599a0f46e - languageName: node - linkType: hard - "@npmcli/run-script@npm:^4.1.0": version: 4.1.5 resolution: "@npmcli/run-script@npm:4.1.5" @@ -2574,6 +2842,25 @@ __metadata: languageName: node linkType: hard +"@pnpm/network.ca-file@npm:^1.0.1": + version: 1.0.1 + resolution: "@pnpm/network.ca-file@npm:1.0.1" + dependencies: + graceful-fs: 4.2.10 + checksum: c847d8618725b037427616ce5e8edc305ffe94759b8bb3862431d72a79011beac2d8a097796678a2369a747e490f4e19833347a2e1b4f641e2da29238f8c5535 + languageName: node + linkType: hard + +"@pnpm/npm-conf@npm:^1.0.4": + version: 1.0.4 + resolution: "@pnpm/npm-conf@npm:1.0.4" + dependencies: + "@pnpm/network.ca-file": ^1.0.1 + config-chain: ^1.1.11 + checksum: f94afa48ce88688f0d9f923c8a9b3c290b25a8046bfd618d2ce1244e1f66c8b448f80a42fed0f1fe8a3001d320f5beefeebe752131498bfa521ebb1e339137ec + languageName: node + linkType: hard + "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -2647,6 +2934,62 @@ __metadata: languageName: node linkType: hard +"@redis/bloom@npm:1.0.2": + version: 1.0.2 + resolution: "@redis/bloom@npm:1.0.2" + peerDependencies: + "@redis/client": ^1.0.0 + checksum: 4872e7e5e4ff03d63349ca88d3164d487f62805651ada91924de2592995993401c98a01cb93bff8d71e9a2e54985b2485b6cb0e084a7e8b1283e2ebb8bc4b833 + languageName: node + linkType: hard + +"@redis/client@npm:1.2.0": + version: 1.2.0 + resolution: "@redis/client@npm:1.2.0" + dependencies: + cluster-key-slot: 1.1.0 + generic-pool: 3.8.2 + yallist: 4.0.0 + checksum: 098a550a6728d9d3babb432a1c32f1678cbda5ad7fa3d59316fc334be42ef05d778fc4cf2e3d873a34817447870a5fc0486e62793698a279404b3b086ba7422e + languageName: node + linkType: hard + +"@redis/graph@npm:1.0.1": + version: 1.0.1 + resolution: "@redis/graph@npm:1.0.1" + peerDependencies: + "@redis/client": ^1.0.0 + checksum: 72e485efa416bdff10420f6e13c9cb4e1e5c70752e5172717adf62fc1d4d9ba12e708229fd87876f3a93270ff74c4bcd4d916987438dc36a94f7f12c9785fa44 + languageName: node + linkType: hard + +"@redis/json@npm:1.0.3": + version: 1.0.3 + resolution: "@redis/json@npm:1.0.3" + peerDependencies: + "@redis/client": ^1.0.0 + checksum: 26a7003c2fbacfa5998671e3a301cb2285432bf90f237adedcf76c0be0d379528e6710d469a8ea93c04bbd22951f9c2f41d460dbd79e85856f199248c4a250d5 + languageName: node + linkType: hard + +"@redis/search@npm:1.0.6": + version: 1.0.6 + resolution: "@redis/search@npm:1.0.6" + peerDependencies: + "@redis/client": ^1.0.0 + checksum: 5c776143520b11ae2e49a05e7fe3df514a01460f2be90759b15e4f097bf4a985784c48c2184ac2c275ced3ec5a0c77b208a4d46a50161d1ad6025e3ab2990aa7 + languageName: node + linkType: hard + +"@redis/time-series@npm:1.0.3": + version: 1.0.3 + resolution: "@redis/time-series@npm:1.0.3" + peerDependencies: + "@redis/client": ^1.0.0 + checksum: 4d11518185dd15f31c5b4a433902e53a3ebc24614a0221080ab12abf4f6fc60b3db00a71a83de7b4b10f11077de611dc1c273274573646d63481d40ca246f82d + languageName: node + linkType: hard + "@redocly/ajv@npm:^8.6.4": version: 8.6.4 resolution: "@redocly/ajv@npm:8.6.4" @@ -2659,7 +3002,7 @@ __metadata: languageName: node linkType: hard -"@redocly/openapi-cli@npm:^1.0.0-beta.59": +"@redocly/openapi-cli@npm:^1.0.0-beta.94": version: 1.0.0-beta.94 resolution: "@redocly/openapi-cli@npm:1.0.0-beta.94" dependencies: @@ -2705,6 +3048,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.20 + resolution: "@sinclair/typebox@npm:0.24.20" + checksum: bb2e95ab60236ebbcaf3c0735b01a8ce6bea068bb1214a8016f8fea7bc2027d69b08437998425d93a3ac38ded3dbe8c64e218e635c09282cb3dd5d5a64269076 + languageName: node + linkType: hard + "@sindresorhus/is@npm:^0.14.0": version: 0.14.0 resolution: "@sindresorhus/is@npm:0.14.0" @@ -2712,6 +3062,13 @@ __metadata: languageName: node linkType: hard +"@sindresorhus/is@npm:^4.6.0": + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.3 resolution: "@sinonjs/commons@npm:1.8.3" @@ -2748,6 +3105,15 @@ __metadata: languageName: node linkType: hard +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" + dependencies: + defer-to-connect: ^2.0.1 + checksum: fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 + languageName: node + linkType: hard + "@tootallnate/once@npm:1": version: 1.1.2 resolution: "@tootallnate/once@npm:1.1.2" @@ -2813,6 +3179,18 @@ __metadata: languageName: node linkType: hard +"@types/cacheable-request@npm:^6.0.2": + version: 6.0.2 + resolution: "@types/cacheable-request@npm:6.0.2" + dependencies: + "@types/http-cache-semantics": "*" + "@types/keyv": "*" + "@types/node": "*" + "@types/responselike": "*" + checksum: 667d25808dbf46fe104d6f029e0281ff56058d50c7c1b9182774b3e38bb9c1124f56e4c367ba54f92dbde2d1cc573f26eb0e9748710b2822bc0fd1e5498859c6 + languageName: node + linkType: hard + "@types/find-cache-dir@npm:^3.2.1": version: 3.2.1 resolution: "@types/find-cache-dir@npm:3.2.1" @@ -2820,12 +3198,12 @@ __metadata: languageName: node linkType: hard -"@types/formidable@npm:^1.0.31": - version: 1.2.5 - resolution: "@types/formidable@npm:1.2.5" +"@types/formidable@npm:^2.0.4": + version: 2.0.5 + resolution: "@types/formidable@npm:2.0.5" dependencies: "@types/node": "*" - checksum: 2e4eea700f5bf392e98df1c2fc9afa1666204097cbdf69b826b7e13292ce194bcd77e3babcf6e41c184e9ab55d80c1a1461d369118c576dcc7cfaafc09fcf775 + checksum: 2de9a08a539309229f0d15074dc9587b7e1316f29da1092ef2eb1e7c9f10ce4b02f1a0b7da5fe21391a5946c9fe5d2be7bfabd5bc6b93005acda22bcc424a456 languageName: node linkType: hard @@ -2857,6 +3235,13 @@ __metadata: languageName: node linkType: hard +"@types/http-cache-semantics@npm:*": + version: 4.0.1 + resolution: "@types/http-cache-semantics@npm:4.0.1" + checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9 + languageName: node + linkType: hard + "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.4 resolution: "@types/istanbul-lib-coverage@npm:2.0.4" @@ -2882,7 +3267,7 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^27.0.1, @types/jest@npm:^27.0.3": +"@types/jest@npm:^27.0.3": version: 27.5.2 resolution: "@types/jest@npm:27.5.2" dependencies: @@ -2892,6 +3277,23 @@ __metadata: languageName: node linkType: hard +"@types/jest@npm:^28.1.4": + version: 28.1.6 + resolution: "@types/jest@npm:28.1.6" + dependencies: + jest-matcher-utils: ^28.0.0 + pretty-format: ^28.0.0 + checksum: f2ba5fbefc8f44d1c16ee19d8d2811bca75754a2846e222287f2788d96062801c568215e6b81eb532a48e8cb2a7282729da1d4f6fb496831da8269c5abaad4c5 + languageName: node + linkType: hard + +"@types/json-buffer@npm:~3.0.0": + version: 3.0.0 + resolution: "@types/json-buffer@npm:3.0.0" + checksum: 6b0a371dd603f0eec9d00874574bae195382570e832560dadf2193ee0d1062b8e0694bbae9798bc758632361c227b1e3b19e3bd914043b498640470a2da38b77 + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.6, @types/json-schema@npm:^7.0.7, @types/json-schema@npm:^7.0.9": version: 7.0.11 resolution: "@types/json-schema@npm:7.0.11" @@ -2906,7 +3308,7 @@ __metadata: languageName: node linkType: hard -"@types/keyv@npm:^3.1.1": +"@types/keyv@npm:*, @types/keyv@npm:^3.1.1": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" dependencies: @@ -2961,13 +3363,20 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=13.7.0": +"@types/node@npm:*": version: 18.0.0 resolution: "@types/node@npm:18.0.0" checksum: aab2b325727a2599f6d25ebe0dedf58c40fb66a51ce4ca9c0226ceb70fcda2d3afccdca29db5942eb48b158ee8585a274a1e3750c718bbd5399d7f41d62dfdcc languageName: node linkType: hard +"@types/node@npm:>=13.7.0": + version: 18.0.6 + resolution: "@types/node@npm:18.0.6" + checksum: 780f8885a6b6eb12f4c0246617747fdc37a451931b3c01ce8148d356c0903b705dcb16cc6a914de63d48b0dc1b002c7a3dfae681f580e1761aa551d3cd996813 + languageName: node + linkType: hard + "@types/node@npm:^14.11.8": version: 14.18.21 resolution: "@types/node@npm:14.18.21" @@ -3003,7 +3412,7 @@ __metadata: languageName: node linkType: hard -"@types/responselike@npm:^1.0.0": +"@types/responselike@npm:*, @types/responselike@npm:^1.0.0": version: 1.0.0 resolution: "@types/responselike@npm:1.0.0" dependencies: @@ -3088,22 +3497,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/experimental-utils@npm:^4.0.1": - version: 4.33.0 - resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" - dependencies: - "@types/json-schema": ^7.0.7 - "@typescript-eslint/scope-manager": 4.33.0 - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/typescript-estree": 4.33.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 - peerDependencies: - eslint: "*" - checksum: f859800ada0884f92db6856f24efcb1d073ac9883ddc2b1aa9339f392215487895bed8447ebce3741e8141bb32e545244abef62b73193ba9a8a0527c523aabae - languageName: node - linkType: hard - "@typescript-eslint/parser@npm:^5.22.0": version: 5.30.0 resolution: "@typescript-eslint/parser@npm:5.30.0" @@ -3121,16 +3514,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/scope-manager@npm:4.33.0" - dependencies: - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/visitor-keys": 4.33.0 - checksum: 9a25fb7ba7c725ea7227a24d315b0f6aacbad002e2549a049edf723c1d3615c22f5c301f0d7d615b377f2cdf2f3519d97e79af0c459de6ef8d2aaf0906dff13e - languageName: node - linkType: hard - "@typescript-eslint/scope-manager@npm:5.30.0": version: 5.30.0 resolution: "@typescript-eslint/scope-manager@npm:5.30.0" @@ -3141,6 +3524,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.30.6": + version: 5.30.6 + resolution: "@typescript-eslint/scope-manager@npm:5.30.6" + dependencies: + "@typescript-eslint/types": 5.30.6 + "@typescript-eslint/visitor-keys": 5.30.6 + checksum: 454c32339869694a400c6e3e4e44729da3c02359cb086c1e9315e2aeb93af3a6e1c87d274f9eb0066a081f99e4ffda3a036565d17c78dd8649d19f18199419c6 + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:5.30.0": version: 5.30.0 resolution: "@typescript-eslint/type-utils@npm:5.30.0" @@ -3157,13 +3550,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/types@npm:4.33.0" - checksum: 3baae1ca35872421b4eb60f5d3f3f32dc1d513f2ae0a67dee28c7d159fd7a43ed0d11a8a5a0f0c2d38507ffa036fc7c511cb0f18a5e8ac524b3ebde77390ec53 - languageName: node - linkType: hard - "@typescript-eslint/types@npm:5.30.0": version: 5.30.0 resolution: "@typescript-eslint/types@npm:5.30.0" @@ -3171,21 +3557,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" - dependencies: - "@typescript-eslint/types": 4.33.0 - "@typescript-eslint/visitor-keys": 4.33.0 - debug: ^4.3.1 - globby: ^11.0.3 - is-glob: ^4.0.1 - semver: ^7.3.5 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 2566984390c76bd95f43240057215c068c69769e406e27aba41e9f21fd300074d6772e4983fa58fe61e80eb5550af1548d2e31e80550d92ba1d051bb00fe6f5c +"@typescript-eslint/types@npm:5.30.6": + version: 5.30.6 + resolution: "@typescript-eslint/types@npm:5.30.6" + checksum: 47c621dae5929d5b39b2b27c6f2ecb8daab1da22566867443873c0681322019f99e205629910bfe04e64077349aec05c84e0d4571f189619b609f4173a9d0f36 languageName: node linkType: hard @@ -3207,6 +3582,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.30.6": + version: 5.30.6 + resolution: "@typescript-eslint/typescript-estree@npm:5.30.6" + dependencies: + "@typescript-eslint/types": 5.30.6 + "@typescript-eslint/visitor-keys": 5.30.6 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 5621c03f1a6ca8866d91014cd30b53a37f9c4d664eb97bc2740294bcbf7efc0178e8699def752b86c97472e7b1b0cd9b6c0d9aa07a04decfe78bd16c21f93c4b + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.30.0": version: 5.30.0 resolution: "@typescript-eslint/utils@npm:5.30.0" @@ -3223,13 +3616,19 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:4.33.0": - version: 4.33.0 - resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" +"@typescript-eslint/utils@npm:^5.10.0": + version: 5.30.6 + resolution: "@typescript-eslint/utils@npm:5.30.6" dependencies: - "@typescript-eslint/types": 4.33.0 - eslint-visitor-keys: ^2.0.0 - checksum: 59953e474ad4610c1aa23b2b1a964445e2c6201521da6367752f37939d854352bbfced5c04ea539274065e012b1337ba3ffa49c2647a240a4e87155378ba9873 + "@types/json-schema": ^7.0.9 + "@typescript-eslint/scope-manager": 5.30.6 + "@typescript-eslint/types": 5.30.6 + "@typescript-eslint/typescript-estree": 5.30.6 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: fc6f9ccf558d658cbeaa85c63bc1853385630c9522c8ae42524b652a6b3c69689fba67a49d79ce1fae2b4ec9c45e5aa9b791ac027d205edef27984d088ed1c3a languageName: node linkType: hard @@ -3243,6 +3642,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.30.6": + version: 5.30.6 + resolution: "@typescript-eslint/visitor-keys@npm:5.30.6" + dependencies: + "@typescript-eslint/types": 5.30.6 + eslint-visitor-keys: ^3.3.0 + checksum: e4ec0541d685d211274724c9f1887b6cdd03c7fc4fbdd1ea74c18311c3a5a9a2d4c676448ea714687ca13cc881ec5c73605de75fbf38f302ba8ea86d2b77897f + languageName: node + linkType: hard + "@yarnpkg/lockfile@npm:^1.1.0": version: 1.1.0 resolution: "@yarnpkg/lockfile@npm:1.1.0" @@ -3250,7 +3659,7 @@ __metadata: languageName: node linkType: hard -"JSONStream@npm:^1.0.4": +"JSONStream@npm:^1.0.4, JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" dependencies: @@ -3296,7 +3705,7 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": +"acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -3312,7 +3721,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.1.1, acorn@npm:^7.4.0": +"acorn@npm:^7.1.1": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -3346,7 +3755,7 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.2.1": +"agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" dependencies: @@ -3393,18 +3802,7 @@ __metadata: languageName: node linkType: hard -"ajv-keywords@npm:^5.1.0": - version: 5.1.0 - resolution: "ajv-keywords@npm:5.1.0" - dependencies: - fast-deep-equal: ^3.1.3 - peerDependencies: - ajv: ^8.8.2 - checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 - languageName: node - linkType: hard - -"ajv@npm:8.11.0, ajv@npm:^8.0.0, ajv@npm:^8.0.1, ajv@npm:^8.1.0, ajv@npm:^8.4.0, ajv@npm:^8.6.2, ajv@npm:^8.6.3": +"ajv@npm:8.11.0, ajv@npm:^8.0.0, ajv@npm:^8.1.0, ajv@npm:^8.4.0, ajv@npm:^8.6.2, ajv@npm:^8.6.3": version: 8.11.0 resolution: "ajv@npm:8.11.0" dependencies: @@ -3451,7 +3849,7 @@ __metadata: languageName: node linkType: hard -"ansi-align@npm:^3.0.0": +"ansi-align@npm:^3.0.0, ansi-align@npm:^3.0.1": version: 3.0.1 resolution: "ansi-align@npm:3.0.1" dependencies: @@ -3460,13 +3858,6 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e - languageName: node - linkType: hard - "ansi-escapes@npm:^4.2.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" @@ -3490,13 +3881,6 @@ __metadata: languageName: node linkType: hard -"ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 - languageName: node - linkType: hard - "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -3504,6 +3888,13 @@ __metadata: languageName: node linkType: hard +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + "ansi-styles@npm:^2.2.1": version: 2.2.1 resolution: "ansi-styles@npm:2.2.1" @@ -3536,6 +3927,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^6.1.0": + version: 6.1.0 + resolution: "ansi-styles@npm:6.1.0" + checksum: 7a7f8528c07a9d20c3a92bccd2b6bc3bb4d26e5cb775c02826921477377bd495d615d61f710d56216344b6238d1d11ef2b0348e146c5b128715578bfb3217229 + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.2 resolution: "anymatch@npm:3.1.2" @@ -3546,13 +3944,6 @@ __metadata: languageName: node linkType: hard -"aproba@npm:^1.0.3": - version: 1.2.0 - resolution: "aproba@npm:1.2.0" - checksum: 0fca141966559d195072ed047658b6e6c4fe92428c385dd38e288eacfc55807e7b4989322f030faff32c0f46bb0bc10f1e0ac32ec22d25315a1e5bbc0ebb76dc - languageName: node - linkType: hard - "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -3580,16 +3971,6 @@ __metadata: languageName: node linkType: hard -"are-we-there-yet@npm:~1.1.2": - version: 1.1.7 - resolution: "are-we-there-yet@npm:1.1.7" - dependencies: - delegates: ^1.0.0 - readable-stream: ^2.0.6 - checksum: 70d251719c969b2745bfe5ddf3ebaefa846a636e90a6d5212573676af5d6670e15457761d4725731e19cbebdce42c4ab0cbedf23ab047f2a08274985aa10a3c7 - languageName: node - linkType: hard - "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -3683,15 +4064,6 @@ __metadata: languageName: node linkType: hard -"asn1@npm:~0.2.3": - version: 0.2.6 - resolution: "asn1@npm:0.2.6" - dependencies: - safer-buffer: ~2.1.0 - checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d - languageName: node - linkType: hard - "assert-node-version@npm:^1.0.3": version: 1.0.3 resolution: "assert-node-version@npm:1.0.3" @@ -3702,20 +4074,6 @@ __metadata: languageName: node linkType: hard -"assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": - version: 1.0.0 - resolution: "assert-plus@npm:1.0.0" - checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 - languageName: node - linkType: hard - -"astral-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "astral-regex@npm:2.0.0" - checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 - languageName: node - linkType: hard - "async@npm:^2.6.2": version: 2.6.4 resolution: "async@npm:2.6.4" @@ -3739,32 +4097,25 @@ __metadata: languageName: node linkType: hard -"audit-resolve-core@npm:^3.0.0-3": - version: 3.0.0-3 - resolution: "audit-resolve-core@npm:3.0.0-3" +"audit-ci@npm:^6.3.0": + version: 6.3.0 + resolution: "audit-ci@npm:6.3.0" dependencies: - debug: ^4.3.1 - djv: ^2.1.4 - yargs-parser: ^21.0.0 - checksum: ce96fadf72b0cbe542421511b8702469ab87a8d7a4e4a981dfd0b1ff7874c0f2ad40878f05c985b2049b8f46bbf46a2496af4265dbc72b7ab4b3c54be1916a01 - languageName: node - linkType: hard - -"aws-sign2@npm:~0.7.0": - version: 0.7.0 - resolution: "aws-sign2@npm:0.7.0" - checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 - languageName: node - linkType: hard - -"aws4@npm:^1.8.0": - version: 1.11.0 - resolution: "aws4@npm:1.11.0" - checksum: 5a00d045fd0385926d20ebebcfba5ec79d4482fe706f63c27b324d489a04c68edb0db99ed991e19eda09cb8c97dc2452059a34d97545cebf591d7a2b5a10999f + JSONStream: ^1.3.5 + cross-spawn: ^7.0.3 + escape-string-regexp: ^4.0.0 + event-stream: 4.0.1 + jju: ^1.4.0 + readline-transform: 1.0.0 + semver: ^7.0.0 + yargs: ^17.0.0 + bin: + audit-ci: dist/bin.js + checksum: f781bc37e5a7f3b24d47759f2f85618f7aa0ad2bf4221c02ff434805ef641a90dab845a7857d088baec335c36339af162f1a807e89174cf7a7b43cbf549b9412 languageName: node linkType: hard -"axios@npm:0.27.2": +"axios@npm:0.27.2, axios@npm:^0.27.2": version: 0.27.2 resolution: "axios@npm:0.27.2" dependencies: @@ -3774,16 +4125,7 @@ __metadata: languageName: node linkType: hard -"axios@npm:^0.21.4": - version: 0.21.4 - resolution: "axios@npm:0.21.4" - dependencies: - follow-redirects: ^1.14.0 - checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c - languageName: node - linkType: hard - -"babel-jest@npm:^27.2.0, babel-jest@npm:^27.5.1": +"babel-jest@npm:^27.5.1": version: 27.5.1 resolution: "babel-jest@npm:27.5.1" dependencies: @@ -3801,20 +4143,37 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^28.1.2": - version: 28.1.2 - resolution: "babel-jest@npm:28.1.2" +"babel-jest@npm:^28.1.2": + version: 28.1.2 + resolution: "babel-jest@npm:28.1.2" + dependencies: + "@jest/transform": ^28.1.2 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^28.1.1 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 1aa605ef4dfae3a557fbed8b9d1ba1c2678ba910d0ff3931fad8dc2a150a8ef220a456a86f3b441f5cd4f97f973c2f721fc74ea6a26432766c5ab501a967f8c8 + languageName: node + linkType: hard + +"babel-jest@npm:^28.1.3": + version: 28.1.3 + resolution: "babel-jest@npm:28.1.3" dependencies: - "@jest/transform": ^28.1.2 + "@jest/transform": ^28.1.3 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^28.1.1 + babel-preset-jest: ^28.1.3 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 1aa605ef4dfae3a557fbed8b9d1ba1c2678ba910d0ff3931fad8dc2a150a8ef220a456a86f3b441f5cd4f97f973c2f721fc74ea6a26432766c5ab501a967f8c8 + checksum: 57ccd2296e1839687b5df2fd138c3d00717e0369e385254b012ccd4ee70e75f5d5c8e6cfcdf92d155015b468cfebb847b38e69bb5805d8aaf730e20575127cc6 languageName: node linkType: hard @@ -3864,6 +4223,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-jest-hoist@npm:^28.1.3": + version: 28.1.3 + resolution: "babel-plugin-jest-hoist@npm:28.1.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 648d89f9d80f6450ce7e50d0c32eb91b7f26269b47c3e37aaf2e0f2f66a980978345bd6b8c9b8c3aa6a8252ad2bc2c9fb50630e9895622c9a0972af5f70ed20e + languageName: node + linkType: hard + "babel-plugin-polyfill-corejs2@npm:^0.3.1": version: 0.3.1 resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" @@ -3946,6 +4317,18 @@ __metadata: languageName: node linkType: hard +"babel-preset-jest@npm:^28.1.3": + version: 28.1.3 + resolution: "babel-preset-jest@npm:28.1.3" + dependencies: + babel-plugin-jest-hoist: ^28.1.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -4001,15 +4384,6 @@ __metadata: languageName: node linkType: hard -"bcrypt-pbkdf@npm:^1.0.0": - version: 1.0.2 - resolution: "bcrypt-pbkdf@npm:1.0.2" - dependencies: - tweetnacl: ^0.14.3 - checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 - languageName: node - linkType: hard - "better-ajv-errors@npm:^0.6.1, better-ajv-errors@npm:^0.6.7": version: 0.6.7 resolution: "better-ajv-errors@npm:0.6.7" @@ -4105,6 +4479,22 @@ __metadata: languageName: node linkType: hard +"boxen@npm:^7.0.0": + version: 7.0.0 + resolution: "boxen@npm:7.0.0" + dependencies: + ansi-align: ^3.0.1 + camelcase: ^7.0.0 + chalk: ^5.0.1 + cli-boxes: ^3.0.0 + string-width: ^5.1.2 + type-fest: ^2.13.0 + widest-line: ^4.0.1 + wrap-ansi: ^8.0.1 + checksum: b917cf7a168ef3149635a8c02d5c9717d66182348bd27038d85328ad12655151e3324db0f2815253846c33e5f0ddf28b6cd52d56a12b9f88617b7f8f722b946a + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -4193,13 +4583,6 @@ __metadata: languageName: node linkType: hard -"builtins@npm:^1.0.3": - version: 1.0.3 - resolution: "builtins@npm:1.0.3" - checksum: 47ce94f7eee0e644969da1f1a28e5f29bd2e48b25b2bbb61164c345881086e29464ccb1fb88dbc155ea26e8b1f5fc8a923b26c8c1ed0935b67b644d410674513 - languageName: node - linkType: hard - "builtins@npm:^5.0.0": version: 5.0.1 resolution: "builtins@npm:5.0.1" @@ -4232,32 +4615,6 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^15.0.5, cacache@npm:^15.2.0": - version: 15.3.0 - resolution: "cacache@npm:15.3.0" - dependencies: - "@npmcli/fs": ^1.0.0 - "@npmcli/move-file": ^1.0.1 - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - glob: ^7.1.4 - infer-owner: ^1.0.4 - lru-cache: ^6.0.0 - minipass: ^3.1.1 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.2 - mkdirp: ^1.0.3 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.0.2 - unique-filename: ^1.1.1 - checksum: a07327c27a4152c04eb0a831c63c00390d90f94d51bb80624a66f4e14a6b6360bbf02a84421267bd4d00ca73ac9773287d8d7169e8d2eafe378d2ce140579db8 - languageName: node - linkType: hard - "cacache@npm:^16.0.0, cacache@npm:^16.1.0": version: 16.1.1 resolution: "cacache@npm:16.1.1" @@ -4294,6 +4651,13 @@ __metadata: languageName: node linkType: hard +"cacheable-lookup@npm:^6.0.4": + version: 6.0.4 + resolution: "cacheable-lookup@npm:6.0.4" + checksum: 7aea70f5ea081aed12bf54fc165b9f80b580b0d210c85d55cc8fed2beaa9027fd321c1939c65dad945fe9eb207cea45442e01a48b5aa57542e125b716f022b6d + languageName: node + linkType: hard + "cacheable-request@npm:^6.0.0": version: 6.1.0 resolution: "cacheable-request@npm:6.1.0" @@ -4309,6 +4673,21 @@ __metadata: languageName: node linkType: hard +"cacheable-request@npm:^7.0.2": + version: 7.0.2 + resolution: "cacheable-request@npm:7.0.2" + dependencies: + clone-response: ^1.0.2 + get-stream: ^5.1.0 + http-cache-semantics: ^4.0.0 + keyv: ^4.0.0 + lowercase-keys: ^2.0.0 + normalize-url: ^6.0.1 + responselike: ^2.0.0 + checksum: 6152813982945a5c9989cb457a6c499f12edcc7ade323d2fbfd759abc860bdbd1306e08096916bb413c3c47e812f8e4c0a0cc1e112c8ce94381a960f115bc77f + languageName: node + linkType: hard + "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": version: 1.0.2 resolution: "call-bind@npm:1.0.2" @@ -4365,13 +4744,20 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.0.0, camelcase@npm:^6.2.0": +"camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d languageName: node linkType: hard +"camelcase@npm:^7.0.0": + version: 7.0.0 + resolution: "camelcase@npm:7.0.0" + checksum: 162d59607b3b46e910af151348d5e40af579048a5d07f3c06370b096ca0d42ba4a88bd92cf4e3482645ba1ffdd6f744d8273c1b9594e493fc10883d54adf7cbe + languageName: node + linkType: hard + "caniuse-lite@npm:^1.0.30001359": version: 1.0.30001361 resolution: "caniuse-lite@npm:1.0.30001361" @@ -4379,13 +4765,6 @@ __metadata: languageName: node linkType: hard -"caseless@npm:~0.12.0": - version: 0.12.0 - resolution: "caseless@npm:0.12.0" - checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 - languageName: node - linkType: hard - "center-align@npm:^0.1.1": version: 0.1.3 resolution: "center-align@npm:0.1.3" @@ -4541,7 +4920,14 @@ __metadata: languageName: node linkType: hard -"cli-table@npm:^0.3.11, cli-table@npm:^0.3.6": +"cli-boxes@npm:^3.0.0": + version: 3.0.0 + resolution: "cli-boxes@npm:3.0.0" + checksum: 637d84419d293a9eac40a1c8c96a2859e7d98b24a1a317788e13c8f441be052fc899480c6acab3acc82eaf1bccda6b7542d7cdcf5c9c3cc39227175dc098d5b2 + languageName: node + linkType: hard + +"cli-table@npm:^0.3.11": version: 0.3.11 resolution: "cli-table@npm:0.3.11" dependencies: @@ -4621,6 +5007,13 @@ __metadata: languageName: node linkType: hard +"cluster-key-slot@npm:1.1.0": + version: 1.1.0 + resolution: "cluster-key-slot@npm:1.1.0" + checksum: fc953c75209b1ef9088081bab4e40a0b2586491c974ab93460569c014515ca5a2e31c043f185285e177007162fc353d07836d98f570c171dbe055775430e495b + languageName: node + linkType: hard + "co-bluebird@npm:^1.1.0": version: 1.1.0 resolution: "co-bluebird@npm:1.1.0" @@ -4789,7 +5182,7 @@ __metadata: languageName: node linkType: hard -"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": +"combined-stream@npm:^1.0.8": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: @@ -4798,20 +5191,13 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.11.0, commander@npm:^2.19.0, commander@npm:^2.9.0": +"commander@npm:^2.11.0, commander@npm:^2.9.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e languageName: node linkType: hard -"commander@npm:^6.2.1": - version: 6.2.1 - resolution: "commander@npm:6.2.1" - checksum: d7090410c0de6bc5c67d3ca41c41760d6d268f3c799e530aafb73b7437d1826bbf0d2a3edac33f8b57cc9887b4a986dce307fa5557e109be40eadb7c43b21742 - languageName: node - linkType: hard - "commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" @@ -4857,6 +5243,16 @@ __metadata: languageName: node linkType: hard +"compress-brotli@npm:^1.3.8": + version: 1.3.8 + resolution: "compress-brotli@npm:1.3.8" + dependencies: + "@types/json-buffer": ~3.0.0 + json-buffer: ~3.0.1 + checksum: de7589d692d40eb362f6c91070b5e51bc10b05a89eabb4a7c76c1aa21b625756f8c101c6999e4df0c4dc6199c5ca2e1353573bfdcca5615810f27485394162a5 + languageName: node + linkType: hard + "compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -4900,6 +5296,16 @@ __metadata: languageName: node linkType: hard +"config-chain@npm:^1.1.11": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: ^1.3.4 + proto-list: ~1.2.1 + checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab + languageName: node + linkType: hard + "configstore@npm:^5.0.1": version: 5.0.1 resolution: "configstore@npm:5.0.1" @@ -4914,6 +5320,19 @@ __metadata: languageName: node linkType: hard +"configstore@npm:^6.0.0": + version: 6.0.0 + resolution: "configstore@npm:6.0.0" + dependencies: + dot-prop: ^6.0.1 + graceful-fs: ^4.2.6 + unique-string: ^3.0.0 + write-file-atomic: ^3.0.3 + xdg-basedir: ^5.0.1 + checksum: 81995351c10bc04c58507f17748477aeac6f47465109d20e3534cebc881d22e927cfd29e73dd852c46c55f62c2b7be4cd1fe6eb3a93ba51f7f9813c218f9bae0 + languageName: node + linkType: hard + "confusing-browser-globals@npm:^1.0.10": version: 1.0.11 resolution: "confusing-browser-globals@npm:1.0.11" @@ -4921,7 +5340,7 @@ __metadata: languageName: node linkType: hard -"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0, console-control-strings@npm:~1.1.0": +"console-control-strings@npm:^1.0.0, console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed @@ -5211,13 +5630,6 @@ __metadata: languageName: node linkType: hard -"core-util-is@npm:1.0.2": - version: 1.0.2 - resolution: "core-util-is@npm:1.0.2" - checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -5267,6 +5679,15 @@ __metadata: languageName: node linkType: hard +"crypto-random-string@npm:^4.0.0": + version: 4.0.0 + resolution: "crypto-random-string@npm:4.0.0" + dependencies: + type-fest: ^1.0.1 + checksum: 91f148f27bcc8582798f0fb3e75a09d9174557f39c3c40a89dd1bd70fb5a14a02548245aa26fa7d663c426ac5026f4729841231c84f9e30e8c8ece5e38656741 + languageName: node + linkType: hard + "css-select@npm:^5.1.0": version: 5.1.0 resolution: "css-select@npm:5.1.0" @@ -5317,15 +5738,6 @@ __metadata: languageName: node linkType: hard -"dashdash@npm:^1.12.0": - version: 1.14.1 - resolution: "dashdash@npm:1.14.1" - dependencies: - assert-plus: ^1.0.0 - checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 - languageName: node - linkType: hard - "data-urls@npm:^2.0.0": version: 2.0.0 resolution: "data-urls@npm:2.0.0" @@ -5353,7 +5765,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -5391,13 +5803,6 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^4.0.0": - version: 4.0.0 - resolution: "decamelize@npm:4.0.0" - checksum: b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 - languageName: node - linkType: hard - "decimal.js@npm:^10.2.1": version: 10.3.1 resolution: "decimal.js@npm:10.3.1" @@ -5414,6 +5819,15 @@ __metadata: languageName: node linkType: hard +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: ^3.1.0 + checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 + languageName: node + linkType: hard + "dedent@npm:^0.7.0": version: 0.7.0 resolution: "dedent@npm:0.7.0" @@ -5449,13 +5863,6 @@ __metadata: languageName: node linkType: hard -"default-shell@npm:^1.0.1": - version: 1.0.1 - resolution: "default-shell@npm:1.0.1" - checksum: 23083c987d12e480334a44dedc82c8ba42864093a76c76a860ad878fb385aea2515662edc9a40e3ed6965b5613f5ee8e58bfe96170b34cd1fb961c2f3ad56cf6 - languageName: node - linkType: hard - "defer-to-connect@npm:^1.0.1": version: 1.1.3 resolution: "defer-to-connect@npm:1.1.3" @@ -5463,6 +5870,13 @@ __metadata: languageName: node linkType: hard +"defer-to-connect@npm:^2.0.1": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b + languageName: node + linkType: hard + "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": version: 1.1.4 resolution: "define-properties@npm:1.1.4" @@ -5487,13 +5901,6 @@ __metadata: languageName: node linkType: hard -"denque@npm:^1.5.0": - version: 1.5.1 - resolution: "denque@npm:1.5.1" - checksum: 4375ad19d5cea99f90effa82a8cecdaa10f4eb261fbcd7e47cd753ff2737f037aac8f7f4e031cc77f3966314c491c86a0d3b20c128aeee57f791b4662c45108e - languageName: node - linkType: hard - "depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -5569,18 +5976,6 @@ __metadata: languageName: node linkType: hard -"djv@npm:^2.1.4": - version: 2.1.4 - resolution: "djv@npm:2.1.4" - dependencies: - "@korzio/djv-draft-04": ^2.0.1 - dependenciesMeta: - "@korzio/djv-draft-04": - optional: true - checksum: e8cf77aa05631cb382ac71e068d51c672a849b5cf13714010ae8de18862dbec6e06eed50f6f02263d45c21ce3523d704aace4dec7b5ba881ff2093c9187856cd - languageName: node - linkType: hard - "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -5695,6 +6090,15 @@ __metadata: languageName: node linkType: hard +"dot-prop@npm:^6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" + dependencies: + is-obj: ^2.0.0 + checksum: 0f47600a4b93e1dc37261da4e6909652c008832a5d3684b5bf9a9a0d3f4c67ea949a86dceed9b72f5733ed8e8e6383cc5958df3bbd0799ee317fd181f2ece700 + languageName: node + linkType: hard + "dot@npm:^1.1.3": version: 1.1.3 resolution: "dot@npm:1.1.3" @@ -5704,20 +6108,13 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:16.0.1": +"dotenv@npm:16.0.1, dotenv@npm:^16.0.1": version: 16.0.1 resolution: "dotenv@npm:16.0.1" checksum: f459ffce07b977b7f15d8cc4ee69cdff77d4dd8c5dc8c85d2d485ee84655352c2415f9dd09d42b5b5985ced3be186130871b34e2f3e2569ebc72fbc2e8096792 languageName: node linkType: hard -"dotenv@npm:^10.0.0": - version: 10.0.0 - resolution: "dotenv@npm:10.0.0" - checksum: f412c5fe8c24fbe313d302d2500e247ba8a1946492db405a4de4d30dd0eb186a88a43f13c958c5a7de303938949c4231c56994f97d05c4bc1f22478d631b4005 - languageName: node - linkType: hard - "dotgitignore@npm:^2.1.0": version: 2.1.0 resolution: "dotgitignore@npm:2.1.0" @@ -5749,13 +6146,10 @@ __metadata: languageName: node linkType: hard -"ecc-jsbn@npm:~0.1.1": - version: 0.1.2 - resolution: "ecc-jsbn@npm:0.1.2" - dependencies: - jsbn: ~0.1.0 - safer-buffer: ^2.1.0 - checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed languageName: node linkType: hard @@ -5810,6 +6204,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + "enabled@npm:2.0.x": version: 2.0.0 resolution: "enabled@npm:2.0.0" @@ -5824,7 +6225,7 @@ __metadata: languageName: node linkType: hard -"encoding@npm:^0.1.12, encoding@npm:^0.1.13": +"encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: @@ -5842,15 +6243,6 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.5": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" - dependencies: - ansi-colors: ^4.1.1 - checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 - languageName: node - linkType: hard - "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -5879,7 +6271,7 @@ __metadata: languageName: node linkType: hard -"env-var@npm:7.1.1, env-var@npm:^7.0.1": +"env-var@npm:7.1.1, env-var@npm:^7.1.1": version: 7.1.1 resolution: "env-var@npm:7.1.1" checksum: 3392870deeb7241590cdf80214642ac2193dbdf10fa31af22dfb01d5d4a22b0f04798874020975fa7d1ef9ed685618f1cf06085b997f92f7f3f85f27ea658d4d @@ -5988,6 +6380,13 @@ __metadata: languageName: node linkType: hard +"escape-goat@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-goat@npm:4.0.0" + checksum: 7034e0025eec7b751074b837f10312c5b768493265bdad046347c0aadbc1e652776f7e5df94766473fecb5d3681169cc188fe9ccc1e22be53318c18be1671cc0 + languageName: node + linkType: hard + "escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" @@ -6035,17 +6434,18 @@ __metadata: languageName: node linkType: hard -"eslint-config-airbnb-base@npm:^14.2.1": - version: 14.2.1 - resolution: "eslint-config-airbnb-base@npm:14.2.1" +"eslint-config-airbnb-base@npm:^15.0.0": + version: 15.0.0 + resolution: "eslint-config-airbnb-base@npm:15.0.0" dependencies: confusing-browser-globals: ^1.0.10 object.assign: ^4.1.2 - object.entries: ^1.1.2 + object.entries: ^1.1.5 + semver: ^6.3.0 peerDependencies: - eslint: ^5.16.0 || ^6.8.0 || ^7.2.0 - eslint-plugin-import: ^2.22.1 - checksum: 858bea748a3c8685b52fcf2488e6a0b964022f8387f4ee1e69cb707d4fda2a409f09eb8eea658bcd83fae3519967d10208ba7576dd3d3202b8cf0b9d1a6e21eb + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + checksum: 38626bad2ce2859fccac86b30cd2b86c9b7d8d71d458331860861dc05290a5b198bded2f4fb89efcb9046ec48f8ab4c4fb00365ba8916f27b172671da28b93ea languageName: node linkType: hard @@ -6069,7 +6469,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.24.2": +"eslint-plugin-import@npm:^2.26.0": version: 2.26.0 resolution: "eslint-plugin-import@npm:2.26.0" dependencies: @@ -6092,18 +6492,20 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^24.4.0": - version: 24.7.0 - resolution: "eslint-plugin-jest@npm:24.7.0" +"eslint-plugin-jest@npm:^26.5.3": + version: 26.6.0 + resolution: "eslint-plugin-jest@npm:26.6.0" dependencies: - "@typescript-eslint/experimental-utils": ^4.0.1 + "@typescript-eslint/utils": ^5.10.0 peerDependencies: - "@typescript-eslint/eslint-plugin": ">= 4" - eslint: ">=5" + "@typescript-eslint/eslint-plugin": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true - checksum: a4056582825ab3359d2e0e3aae50518f6f867d1cfb3240496605247d3ff9c84b4164f1a7e1f7087d5a2eae1343d738ada1ba74c422b13ad20b737601dc47ae08 + jest: + optional: true + checksum: 5dd60820d5618175e7203b077788476a6f697316b53d77c4bb7037b32073f3d5d539a72dec910eb3f8eedc97c3b28600ba35c5d3bf8c687ade765bb2d0dc77d2 languageName: node linkType: hard @@ -6127,15 +6529,6 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^2.1.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" - dependencies: - eslint-visitor-keys: ^1.1.0 - checksum: 27500938f348da42100d9e6ad03ae29b3de19ba757ae1a7f4a087bdcf83ac60949bbb54286492ca61fac1f5f3ac8692dd21537ce6214240bf95ad0122f24d71d - languageName: node - linkType: hard - "eslint-utils@npm:^3.0.0": version: 3.0.0 resolution: "eslint-utils@npm:3.0.0" @@ -6147,13 +6540,6 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^1.1.0, eslint-visitor-keys@npm:^1.3.0": - version: 1.3.0 - resolution: "eslint-visitor-keys@npm:1.3.0" - checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^2.0.0": version: 2.1.0 resolution: "eslint-visitor-keys@npm:2.1.0" @@ -6168,59 +6554,54 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^7.32.0": - version: 7.32.0 - resolution: "eslint@npm:7.32.0" +"eslint@npm:^8.14.0, eslint@npm:^8.17.0": + version: 8.18.0 + resolution: "eslint@npm:8.18.0" dependencies: - "@babel/code-frame": 7.12.11 - "@eslint/eslintrc": ^0.4.3 - "@humanwhocodes/config-array": ^0.5.0 + "@eslint/eslintrc": ^1.3.0 + "@humanwhocodes/config-array": ^0.9.2 ajv: ^6.10.0 chalk: ^4.0.0 cross-spawn: ^7.0.2 - debug: ^4.0.1 + debug: ^4.3.2 doctrine: ^3.0.0 - enquirer: ^2.3.5 escape-string-regexp: ^4.0.0 - eslint-scope: ^5.1.1 - eslint-utils: ^2.1.0 - eslint-visitor-keys: ^2.0.0 - espree: ^7.3.1 + eslint-scope: ^7.1.1 + eslint-utils: ^3.0.0 + eslint-visitor-keys: ^3.3.0 + espree: ^9.3.2 esquery: ^1.4.0 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 functional-red-black-tree: ^1.0.1 - glob-parent: ^5.1.2 - globals: ^13.6.0 - ignore: ^4.0.6 + glob-parent: ^6.0.1 + globals: ^13.15.0 + ignore: ^5.2.0 import-fresh: ^3.0.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 - js-yaml: ^3.13.1 + js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 lodash.merge: ^4.6.2 - minimatch: ^3.0.4 + minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.1 - progress: ^2.0.0 - regexpp: ^3.1.0 - semver: ^7.2.1 - strip-ansi: ^6.0.0 + regexpp: ^3.2.0 + strip-ansi: ^6.0.1 strip-json-comments: ^3.1.0 - table: ^6.0.9 text-table: ^0.2.0 v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: cc85af9985a3a11085c011f3d27abe8111006d34cc274291b3c4d7bea51a4e2ff6135780249becd919ba7f6d6d1ecc38a6b73dacb6a7be08d38453b344dc8d37 + checksum: d9b4b7488a9cee97608343cbb5ac652d3f316436f95ef0800cd9497c1c6f877b655a3275817989c02f1ff0d5dfd1959c5092af9251c7e3fcf60659da37752a10 languageName: node linkType: hard -"eslint@npm:^8.14.0, eslint@npm:^8.17.0": - version: 8.18.0 - resolution: "eslint@npm:8.18.0" +"eslint@npm:^8.19.0": + version: 8.20.0 + resolution: "eslint@npm:8.20.0" dependencies: "@eslint/eslintrc": ^1.3.0 "@humanwhocodes/config-array": ^0.9.2 @@ -6259,18 +6640,7 @@ __metadata: v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: d9b4b7488a9cee97608343cbb5ac652d3f316436f95ef0800cd9497c1c6f877b655a3275817989c02f1ff0d5dfd1959c5092af9251c7e3fcf60659da37752a10 - languageName: node - linkType: hard - -"espree@npm:^7.3.0, espree@npm:^7.3.1": - version: 7.3.1 - resolution: "espree@npm:7.3.1" - dependencies: - acorn: ^7.4.0 - acorn-jsx: ^5.3.1 - eslint-visitor-keys: ^1.3.0 - checksum: aa9b50dcce883449af2e23bc2b8d9abb77118f96f4cb313935d6b220f77137eaef7724a83c3f6243b96bc0e4ab14766198e60818caad99f9519ae5a336a39b45 + checksum: a31adf390d71d916925586bc8467b48f620e93dd0416bc1e897d99265af88b48d4eba3985b5ff4653ae5cc46311a360d373574002277e159bb38a4363abf9228 languageName: node linkType: hard @@ -6435,6 +6805,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^28.1.3": + version: 28.1.3 + resolution: "expect@npm:28.1.3" + dependencies: + "@jest/expect-utils": ^28.1.3 + jest-get-type: ^28.0.2 + jest-matcher-utils: ^28.1.3 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d + languageName: node + linkType: hard + "expected-node-version@npm:^1.0.0": version: 1.0.2 resolution: "expected-node-version@npm:1.0.2" @@ -6442,7 +6825,7 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.15.5, express@npm:^4.17.2": +"express@npm:^4.15.5, express@npm:^4.18.1": version: 4.18.1 resolution: "express@npm:4.18.1" dependencies: @@ -6490,13 +6873,6 @@ __metadata: languageName: node linkType: hard -"extend@npm:~3.0.2": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 - languageName: node - linkType: hard - "extensible-error@npm:^1.0.2": version: 1.0.2 resolution: "extensible-error@npm:1.0.2" @@ -6504,20 +6880,6 @@ __metadata: languageName: node linkType: hard -"extsprintf@npm:1.3.0": - version: 1.3.0 - resolution: "extsprintf@npm:1.3.0" - checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 - languageName: node - linkType: hard - -"extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 - languageName: node - linkType: hard - "fast-deep-equal@npm:^1.0.0": version: 1.1.0 resolution: "fast-deep-equal@npm:1.1.0" @@ -6723,15 +7085,6 @@ __metadata: languageName: node linkType: hard -"flat@npm:^5.0.2": - version: 5.0.2 - resolution: "flat@npm:5.0.2" - bin: - flat: cli.js - checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d - languageName: node - linkType: hard - "flatted@npm:^3.1.0": version: 3.2.6 resolution: "flatted@npm:3.2.6" @@ -6746,7 +7099,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.9": +"follow-redirects@npm:^1.14.9": version: 1.15.1 resolution: "follow-redirects@npm:1.15.1" peerDependenciesMeta: @@ -6763,10 +7116,10 @@ __metadata: languageName: node linkType: hard -"forever-agent@npm:~0.6.1": - version: 0.6.1 - resolution: "forever-agent@npm:0.6.1" - checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8 +"form-data-encoder@npm:1.7.1": + version: 1.7.1 + resolution: "form-data-encoder@npm:1.7.1" + checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 languageName: node linkType: hard @@ -6803,24 +7156,6 @@ __metadata: languageName: node linkType: hard -"form-data@npm:~2.3.2": - version: 2.3.3 - resolution: "form-data@npm:2.3.3" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.6 - mime-types: ^2.1.12 - checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3 - languageName: node - linkType: hard - -"formidable@npm:^1.1.1": - version: 1.2.6 - resolution: "formidable@npm:1.2.6" - checksum: 2b68ed07ba88302b9c63f8eda94f19a460cef6017bfda48348f09f41d2a36660c9353137991618e0e4c3db115b41e4b8f6fa63bc973b7a7c91dec66acdd02a56 - languageName: node - linkType: hard - "formidable@npm:^2.0.1": version: 2.0.1 resolution: "formidable@npm:2.0.1" @@ -6992,19 +7327,10 @@ __metadata: languageName: node linkType: hard -"gauge@npm:~2.7.3": - version: 2.7.4 - resolution: "gauge@npm:2.7.4" - dependencies: - aproba: ^1.0.3 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.0 - object-assign: ^4.1.0 - signal-exit: ^3.0.0 - string-width: ^1.0.1 - strip-ansi: ^3.0.1 - wide-align: ^1.1.0 - checksum: a89b53cee65579b46832e050b5f3a79a832cc422c190de79c6b8e2e15296ab92faddde6ddf2d376875cbba2b043efa99b9e1ed8124e7365f61b04e3cee9d40ee +"generic-pool@npm:3.8.2": + version: 3.8.2 + resolution: "generic-pool@npm:3.8.2" + checksum: f549077d90265e5e4d32a2410205b357ec61cf73d17861f1013637984390e09fe7bf537129a2c6ed30ae57662a57c8d54194f80046408d3349836330f422dbde languageName: node linkType: hard @@ -7093,7 +7419,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0": +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad @@ -7102,20 +7428,11 @@ __metadata: "get-symbol-description@npm:^1.0.0": version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 - languageName: node - linkType: hard - -"getpass@npm:^0.1.1": - version: 0.1.7 - resolution: "getpass@npm:0.1.7" + resolution: "get-symbol-description@npm:1.0.0" dependencies: - assert-plus: ^1.0.0 - checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 languageName: node linkType: hard @@ -7237,7 +7554,7 @@ __metadata: languageName: node linkType: hard -"globals@npm:^13.15.0, globals@npm:^13.6.0, globals@npm:^13.9.0": +"globals@npm:^13.15.0": version: 13.15.0 resolution: "globals@npm:13.15.0" dependencies: @@ -7253,7 +7570,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.3, globby@npm:^11.0.4, globby@npm:^11.1.0": +"globby@npm:^11.0.4, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -7287,6 +7604,27 @@ __metadata: languageName: node linkType: hard +"got@npm:^12.1.0": + version: 12.1.0 + resolution: "got@npm:12.1.0" + dependencies: + "@sindresorhus/is": ^4.6.0 + "@szmarczak/http-timer": ^5.0.1 + "@types/cacheable-request": ^6.0.2 + "@types/responselike": ^1.0.0 + cacheable-lookup: ^6.0.4 + cacheable-request: ^7.0.2 + decompress-response: ^6.0.0 + form-data-encoder: 1.7.1 + get-stream: ^6.0.1 + http2-wrapper: ^2.1.10 + lowercase-keys: ^3.0.0 + p-cancelable: ^3.0.0 + responselike: ^2.0.0 + checksum: 1cc9af6ca511338a7f1bbb0943999e6ac324ea3c7d826066c02e530b4ac41147b1a4cadad21b28c3938de82185ac99c33d64a3a4560c6e0b0b125191ba6ee619 + languageName: node + linkType: hard + "got@npm:^9.6.0": version: 9.6.0 resolution: "got@npm:9.6.0" @@ -7306,7 +7644,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.3, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:4.2.10, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -7368,7 +7706,7 @@ __metadata: languageName: node linkType: hard -"har-validator@npm:^5.0.0, har-validator@npm:~5.1.3": +"har-validator@npm:^5.0.0": version: 5.1.5 resolution: "har-validator@npm:5.1.5" dependencies: @@ -7440,7 +7778,7 @@ __metadata: languageName: node linkType: hard -"has-unicode@npm:^2.0.0, has-unicode@npm:^2.0.1": +"has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 @@ -7454,6 +7792,13 @@ __metadata: languageName: node linkType: hard +"has-yarn@npm:^3.0.0": + version: 3.0.0 + resolution: "has-yarn@npm:3.0.0" + checksum: b9e14e78e0a37bc070550c862b201534287bc10e62a86ec9c1f455ffb082db42817ce9aed914bd73f1d589bbf268520e194629ff2f62ff6b98a482c4bd2dcbfb + languageName: node + linkType: hard + "has@npm:^1.0.3": version: 1.0.3 resolution: "has@npm:1.0.3" @@ -7491,16 +7836,7 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^3.0.8": - version: 3.0.8 - resolution: "hosted-git-info@npm:3.0.8" - dependencies: - lru-cache: ^6.0.0 - checksum: 5af7a69581acb84206a7b8e009f4680c36396814e92c8a83973dfb3b87e44e44d1f7b8eaf3e4a953686482770ecb78406a4ce4666bfdfe447762434127871d8d - languageName: node - linkType: hard - -"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1, hosted-git-info@npm:^4.0.2": +"hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": version: 4.1.0 resolution: "hosted-git-info@npm:4.1.0" dependencies: @@ -7623,17 +7959,6 @@ __metadata: languageName: node linkType: hard -"http-signature@npm:~1.2.0": - version: 1.2.0 - resolution: "http-signature@npm:1.2.0" - dependencies: - assert-plus: ^1.0.0 - jsprim: ^1.2.2 - sshpk: ^1.7.0 - checksum: 3324598712266a9683585bb84a75dec4fd550567d5e0dd4a0fff6ff3f74348793404d3eeac4918fa0902c810eeee1a86419e4a2e92a164132dfe6b26743fb47c - languageName: node - linkType: hard - "http2-client@npm:^1.2.5": version: 1.3.5 resolution: "http2-client@npm:1.3.5" @@ -7641,6 +7966,16 @@ __metadata: languageName: node linkType: hard +"http2-wrapper@npm:^2.1.10": + version: 2.1.11 + resolution: "http2-wrapper@npm:2.1.11" + dependencies: + quick-lru: ^5.1.1 + resolve-alpn: ^1.2.0 + checksum: 5da05aa2c77226ac9cc82c616383f59c8f31b79897b02ecbe44b09714be1fca1f21bb184e672a669ca2830eefea4edac5f07e71c00cb5a8c5afec8e5a20cfaf7 + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -7723,15 +8058,6 @@ __metadata: languageName: node linkType: hard -"ignore-walk@npm:^3.0.3": - version: 3.0.4 - resolution: "ignore-walk@npm:3.0.4" - dependencies: - minimatch: ^3.0.4 - checksum: 9e9c5ef6c3e0ed7ef5d797991abb554dbb7e60d5fedf6cf05c7129819689eba2b462f625c6e3561e0fc79841904eb829565513eeeab1b44f4fbec4d3146b1a8d - languageName: node - linkType: hard - "ignore-walk@npm:^5.0.1": version: 5.0.1 resolution: "ignore-walk@npm:5.0.1" @@ -7741,13 +8067,6 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^4.0.6": - version: 4.0.6 - resolution: "ignore@npm:4.0.6" - checksum: 248f82e50a430906f9ee7f35e1158e3ec4c3971451dd9f99c9bc1548261b4db2b99709f60ac6c6cac9333494384176cc4cc9b07acbe42d52ac6a09cad734d800 - languageName: node - linkType: hard - "ignore@npm:^5.2.0": version: 5.2.0 resolution: "ignore@npm:5.2.0" @@ -7791,6 +8110,13 @@ __metadata: languageName: node linkType: hard +"import-lazy@npm:^4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: 22f5e51702134aef78890156738454f620e5fe7044b204ebc057c614888a1dd6fdf2ede0fdcca44d5c173fd64f65c985f19a51775b06967ef58cc3d26898df07 + languageName: node + linkType: hard + "import-local@npm:^3.0.2": version: 3.1.0 resolution: "import-local@npm:3.1.0" @@ -7855,7 +8181,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.2, ini@npm:^1.3.5, ini@npm:~1.3.0": +"ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 @@ -7968,6 +8294,17 @@ __metadata: languageName: node linkType: hard +"is-ci@npm:^3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" + dependencies: + ci-info: ^3.2.0 + bin: + is-ci: bin.js + checksum: 192c66dc7826d58f803ecae624860dccf1899fc1f3ac5505284c0a5cf5f889046ffeb958fa651e5725d5705c5bcb14f055b79150ea5fcad7456a9569de60260e + languageName: node + linkType: hard + "is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": version: 2.9.0 resolution: "is-core-module@npm:2.9.0" @@ -8086,6 +8423,13 @@ __metadata: languageName: node linkType: hard +"is-npm@npm:^6.0.0": + version: 6.0.0 + resolution: "is-npm@npm:6.0.0" + checksum: fafe1ddc772345f5460514891bb8014376904ccdbddd59eee7525c9adcc08d426933f28b087bef3e17524da7ebf35c03ef484ff3b6ba9d5fecd8c6e6a7d4bf11 + languageName: node + linkType: hard + "is-number-object@npm:^1.0.4": version: 1.0.7 resolution: "is-number-object@npm:1.0.7" @@ -8123,20 +8467,13 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^1.1, is-plain-obj@npm:^1.1.0": +"is-plain-obj@npm:^1.1.0": version: 1.1.0 resolution: "is-plain-obj@npm:1.1.0" checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 languageName: node linkType: hard -"is-plain-obj@npm:^2.1.0": - version: 2.1.0 - resolution: "is-plain-obj@npm:2.1.0" - checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa - languageName: node - linkType: hard - "is-potential-custom-element-name@npm:^1.0.1": version: 1.0.1 resolution: "is-potential-custom-element-name@npm:1.0.1" @@ -8211,7 +8548,7 @@ __metadata: languageName: node linkType: hard -"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": +"is-typedarray@npm:^1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 @@ -8248,6 +8585,13 @@ __metadata: languageName: node linkType: hard +"is-yarn-global@npm:^0.4.0": + version: 0.4.0 + resolution: "is-yarn-global@npm:0.4.0" + checksum: a5fcf09c3a426af7d9d7d5d48cfe203fbe132961e00f0e8a818a9a1a1f49423af907422905088522380de782d8c2ab787222d8fcc53b011c2b22bacb5087c6c2 + languageName: node + linkType: hard + "isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" @@ -8262,13 +8606,6 @@ __metadata: languageName: node linkType: hard -"isstream@npm:~0.1.2": - version: 0.1.2 - resolution: "isstream@npm:0.1.2" - checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963 - languageName: node - linkType: hard - "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" @@ -8349,6 +8686,16 @@ __metadata: languageName: node linkType: hard +"jest-changed-files@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-changed-files@npm:28.1.3" + dependencies: + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: c78af14a68b9b19101623ae7fde15a2488f9b3dbe8cca12a05c4a223bc9bfd3bf41ee06830f20fb560c52434435d6153c9cc6cf450b1f7b03e5e7f96a953a6a6 + languageName: node + linkType: hard + "jest-circus@npm:^27.5.1": version: 27.5.1 resolution: "jest-circus@npm:27.5.1" @@ -8403,6 +8750,33 @@ __metadata: languageName: node linkType: hard +"jest-circus@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-circus@npm:28.1.3" + dependencies: + "@jest/environment": ^28.1.3 + "@jest/expect": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^28.1.3 + jest-matcher-utils: ^28.1.3 + jest-message-util: ^28.1.3 + jest-runtime: ^28.1.3 + jest-snapshot: ^28.1.3 + jest-util: ^28.1.3 + p-limit: ^3.1.0 + pretty-format: ^28.1.3 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: b635e60a9c92adaefc3f24def8eba691e7c2fdcf6c9fa640cddf2eb8c8b26ee62eab73ebb88798fd7c52a74c1495a984e39b748429b610426f02e9d3d56e09b2 + languageName: node + linkType: hard + "jest-cli@npm:^27.5.1": version: 27.5.1 resolution: "jest-cli@npm:27.5.1" @@ -8457,6 +8831,33 @@ __metadata: languageName: node linkType: hard +"jest-cli@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-cli@npm:28.1.3" + dependencies: + "@jest/core": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/types": ^28.1.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + import-local: ^3.0.2 + jest-config: ^28.1.3 + jest-util: ^28.1.3 + jest-validate: ^28.1.3 + prompts: ^2.0.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: fb424576bf38346318daddee3fcc597cd78cb8dda1759d09c529d8ba1a748f2765c17b00671072a838826e59465a810ff8a232bc6ba2395c131bf3504425a363 + languageName: node + linkType: hard + "jest-config@npm:^27.5.1": version: 27.5.1 resolution: "jest-config@npm:27.5.1" @@ -8532,6 +8933,44 @@ __metadata: languageName: node linkType: hard +"jest-config@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-config@npm:28.1.3" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^28.1.3 + "@jest/types": ^28.1.3 + babel-jest: ^28.1.3 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^28.1.3 + jest-environment-node: ^28.1.3 + jest-get-type: ^28.0.2 + jest-regex-util: ^28.0.2 + jest-resolve: ^28.1.3 + jest-runner: ^28.1.3 + jest-util: ^28.1.3 + jest-validate: ^28.1.3 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^28.1.3 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: ddabffd3a3a8cb6c2f58f06cdf3535157dbf8c70bcde3e5c3de7bee6a8d617840ffc8cffb0083e38c6814f2a08c225ca19f58898efaf4f351af94679f22ce6bc + languageName: node + linkType: hard + "jest-diff@npm:^27.5.1": version: 27.5.1 resolution: "jest-diff@npm:27.5.1" @@ -8556,6 +8995,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-diff@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^28.1.1 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 + languageName: node + linkType: hard + "jest-docblock@npm:^27.5.1": version: 27.5.1 resolution: "jest-docblock@npm:27.5.1" @@ -8600,6 +9051,19 @@ __metadata: languageName: node linkType: hard +"jest-each@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-each@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + chalk: ^4.0.0 + jest-get-type: ^28.0.2 + jest-util: ^28.1.3 + pretty-format: ^28.1.3 + checksum: 5c5b8ccb1484e58b027bea682cfa020a45e5bf5379cc7c23bdec972576c1dc3c3bf03df2b78416cefc1a58859dd33b7cf5fff54c370bc3c0f14a3e509eb87282 + languageName: node + linkType: hard + "jest-environment-jsdom@npm:^27.5.1": version: 27.5.1 resolution: "jest-environment-jsdom@npm:27.5.1" @@ -8643,6 +9107,20 @@ __metadata: languageName: node linkType: hard +"jest-environment-node@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-environment-node@npm:28.1.3" + dependencies: + "@jest/environment": ^28.1.3 + "@jest/fake-timers": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + jest-mock: ^28.1.3 + jest-util: ^28.1.3 + checksum: 1048fe306a6a8b0880a4c66278ebb57479f29c12cff89aab3aa79ab77a8859cf17ab8aa9919fd21c329a7db90e35581b43664e694ad453d5b04e00f3c6420469 + languageName: node + linkType: hard + "jest-get-type@npm:^27.5.1": version: 27.5.1 resolution: "jest-get-type@npm:27.5.1" @@ -8704,6 +9182,29 @@ __metadata: languageName: node linkType: hard +"jest-haste-map@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-haste-map@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^28.0.2 + jest-util: ^28.1.3 + jest-worker: ^28.1.3 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: d05fdc108645fc2b39fcd4001952cc7a8cb550e93494e98c1e9ab1fc542686f6ac67177c132e564cf94fe8f81503f3f8db8b825b9b713dc8c5748aec63ba4688 + languageName: node + linkType: hard + "jest-jasmine2@npm:^27.5.1": version: 27.5.1 resolution: "jest-jasmine2@npm:27.5.1" @@ -8729,15 +9230,15 @@ __metadata: languageName: node linkType: hard -"jest-junit@npm:^12.2.0": - version: 12.3.0 - resolution: "jest-junit@npm:12.3.0" +"jest-junit@npm:^14.0.0": + version: 14.0.0 + resolution: "jest-junit@npm:14.0.0" dependencies: mkdirp: ^1.0.4 - strip-ansi: ^5.2.0 + strip-ansi: ^6.0.1 uuid: ^8.3.2 xml: ^1.0.1 - checksum: b1527eecba967b5f4f021117a14cb5c7cf6b5d99cd0efb50078198ec22a751afde0559db3fd9ff5485959d238787109277fdc8c591d566e270ae742748443407 + checksum: 89d6755f895360be9440d0feacc1a7da9adf23fa9a58746f6f80946cd55d91ba3d32314698615090682684d8315518a166fe46a60cdbd16b38e0c5c8d6418e55 languageName: node linkType: hard @@ -8761,6 +9262,16 @@ __metadata: languageName: node linkType: hard +"jest-leak-detector@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-leak-detector@npm:28.1.3" + dependencies: + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: 2e976a4880cf9af11f53a19f6a3820e0f90b635a900737a5427fc42e337d5628ba446dcd7c020ecea3806cf92bc0bbf6982ed62a9cd84e5a13d8751aa30fbbb7 + languageName: node + linkType: hard + "jest-matcher-utils@npm:^27.0.0, jest-matcher-utils@npm:^27.5.1": version: 27.5.1 resolution: "jest-matcher-utils@npm:27.5.1" @@ -8773,6 +9284,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^28.0.0, jest-matcher-utils@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-matcher-utils@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + jest-diff: ^28.1.3 + jest-get-type: ^28.0.2 + pretty-format: ^28.1.3 + checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf + languageName: node + linkType: hard + "jest-matcher-utils@npm:^28.1.1": version: 28.1.1 resolution: "jest-matcher-utils@npm:28.1.1" @@ -8819,6 +9342,23 @@ __metadata: languageName: node linkType: hard +"jest-message-util@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-message-util@npm:28.1.3" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^28.1.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^28.1.3 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 + languageName: node + linkType: hard + "jest-mock@npm:^27.5.1": version: 27.5.1 resolution: "jest-mock@npm:27.5.1" @@ -8839,6 +9379,16 @@ __metadata: languageName: node linkType: hard +"jest-mock@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-mock@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@types/node": "*" + checksum: a573bf8e5f12f4c29c661266c31b5c6b69a28d3195b83049983bce025b2b1a0152351567e89e63b102ef817034c2a3aa97eda4e776f3bae2aee54c5765573aa7 + languageName: node + linkType: hard + "jest-pnp-resolver@npm:^1.2.2": version: 1.2.2 resolution: "jest-pnp-resolver@npm:1.2.2" @@ -8886,6 +9436,16 @@ __metadata: languageName: node linkType: hard +"jest-resolve-dependencies@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-resolve-dependencies@npm:28.1.3" + dependencies: + jest-regex-util: ^28.0.2 + jest-snapshot: ^28.1.3 + checksum: 4eea9ec33aefc1c71dc5956391efbcc7be76bda986b366ab3931d99c5f7ed01c9ebd7520e405ea2c76e1bb2c7ce504be6eca2b9831df16564d1e625500f3bfe7 + languageName: node + linkType: hard + "jest-resolve@npm:^27.5.1": version: 27.5.1 resolution: "jest-resolve@npm:27.5.1" @@ -8921,6 +9481,23 @@ __metadata: languageName: node linkType: hard +"jest-resolve@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-resolve@npm:28.1.3" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.3 + jest-pnp-resolver: ^1.2.2 + jest-util: ^28.1.3 + jest-validate: ^28.1.3 + resolve: ^1.20.0 + resolve.exports: ^1.1.0 + slash: ^3.0.0 + checksum: df61a490c93f4f4cf52135e43d6a4fcacb07b0b7d4acc6319e9289529c1d14f2d8e1638e095dbf96f156834802755e38db68caca69dba21a3261ee711d4426b6 + languageName: node + linkType: hard + "jest-runner@npm:^27.5.1": version: 27.5.1 resolution: "jest-runner@npm:27.5.1" @@ -8979,6 +9556,35 @@ __metadata: languageName: node linkType: hard +"jest-runner@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-runner@npm:28.1.3" + dependencies: + "@jest/console": ^28.1.3 + "@jest/environment": ^28.1.3 + "@jest/test-result": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.10.2 + graceful-fs: ^4.2.9 + jest-docblock: ^28.1.1 + jest-environment-node: ^28.1.3 + jest-haste-map: ^28.1.3 + jest-leak-detector: ^28.1.3 + jest-message-util: ^28.1.3 + jest-resolve: ^28.1.3 + jest-runtime: ^28.1.3 + jest-util: ^28.1.3 + jest-watcher: ^28.1.3 + jest-worker: ^28.1.3 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 32405cd970fa6b11e039192dae699fd1bcc6f61f67d50605af81d193f24dd4373b25f5fcc1c571a028ec1b02174e8a4b6d0d608772063fb06f08a5105693533b + languageName: node + linkType: hard + "jest-runtime@npm:^27.5.1": version: 27.5.1 resolution: "jest-runtime@npm:27.5.1" @@ -9039,6 +9645,36 @@ __metadata: languageName: node linkType: hard +"jest-runtime@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-runtime@npm:28.1.3" + dependencies: + "@jest/environment": ^28.1.3 + "@jest/fake-timers": ^28.1.3 + "@jest/globals": ^28.1.3 + "@jest/source-map": ^28.1.2 + "@jest/test-result": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + execa: ^5.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^28.1.3 + jest-message-util: ^28.1.3 + jest-mock: ^28.1.3 + jest-regex-util: ^28.0.2 + jest-resolve: ^28.1.3 + jest-snapshot: ^28.1.3 + jest-util: ^28.1.3 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: b17c40af858e74dafa4f515ef3711c1e9ef3d4ad7d74534ee0745422534bc04fd166d4eceb62a3aa7dc951505d6f6d2a81d16e90bebb032be409ec0500974a36 + languageName: node + linkType: hard + "jest-serializer@npm:^27.5.1": version: 27.5.1 resolution: "jest-serializer@npm:27.5.1" @@ -9110,7 +9746,38 @@ __metadata: languageName: node linkType: hard -"jest-ts-auto-mock@npm:^2.0.0": +"jest-snapshot@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-snapshot@npm:28.1.3" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/traverse": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^28.1.3 + "@jest/transform": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/babel__traverse": ^7.0.6 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^28.1.3 + graceful-fs: ^4.2.9 + jest-diff: ^28.1.3 + jest-get-type: ^28.0.2 + jest-haste-map: ^28.1.3 + jest-matcher-utils: ^28.1.3 + jest-message-util: ^28.1.3 + jest-util: ^28.1.3 + natural-compare: ^1.4.0 + pretty-format: ^28.1.3 + semver: ^7.3.5 + checksum: 2a46a5493f1fb50b0a236a21f25045e7f46a244f9f3ae37ef4fbcd40249d0d68bb20c950ce77439e4e2cac985b05c3061c90b34739bf6069913a1199c8c716e1 + languageName: node + linkType: hard + +"jest-ts-auto-mock@npm:^2.1.0": version: 2.1.0 resolution: "jest-ts-auto-mock@npm:2.1.0" peerDependencies: @@ -9147,6 +9814,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-util@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 + languageName: node + linkType: hard + "jest-validate@npm:^27.5.1": version: 27.5.1 resolution: "jest-validate@npm:27.5.1" @@ -9175,6 +9856,20 @@ __metadata: languageName: node linkType: hard +"jest-validate@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-validate@npm:28.1.3" + dependencies: + "@jest/types": ^28.1.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^28.0.2 + leven: ^3.1.0 + pretty-format: ^28.1.3 + checksum: 95e0513b3803c3372a145cda86edbdb33d9dfeaa18818176f2d581e821548ceac9a179f065b6d4671a941de211354efd67f1fff8789a4fb89962565c85f646db + languageName: node + linkType: hard + "jest-watcher@npm:^27.5.1": version: 27.5.1 resolution: "jest-watcher@npm:27.5.1" @@ -9206,6 +9901,22 @@ __metadata: languageName: node linkType: hard +"jest-watcher@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-watcher@npm:28.1.3" + dependencies: + "@jest/test-result": ^28.1.3 + "@jest/types": ^28.1.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.10.2 + jest-util: ^28.1.3 + string-length: ^4.0.1 + checksum: 8f6d674a4865e7df251f71544f1b51f06fd36b5a3a61f2ac81aeb81fa2a196be354fba51d0f97911c88f67cd254583b3a22ee124bf2c5b6ee2fadec27356c207 + languageName: node + linkType: hard + "jest-worker@npm:^27.5.1": version: 27.5.1 resolution: "jest-worker@npm:27.5.1" @@ -9228,7 +9939,18 @@ __metadata: languageName: node linkType: hard -"jest@npm:^27.2.0, jest@npm:^27.3.1": +"jest-worker@npm:^28.1.3": + version: 28.1.3 + resolution: "jest-worker@npm:28.1.3" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca + languageName: node + linkType: hard + +"jest@npm:^27.3.1": version: 27.5.1 resolution: "jest@npm:27.5.1" dependencies: @@ -9265,6 +9987,25 @@ __metadata: languageName: node linkType: hard +"jest@npm:^28.1.2": + version: 28.1.3 + resolution: "jest@npm:28.1.3" + dependencies: + "@jest/core": ^28.1.3 + "@jest/types": ^28.1.3 + import-local: ^3.0.2 + jest-cli: ^28.1.3 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: b9dcb542eb7c16261c281cdc2bf37155dbb3f1205bae0b567f05051db362c85ddd4b765f126591efb88f6d298eb10336d0aa6c7d5373b4d53f918137a9a70182 + languageName: node + linkType: hard + "jgexml@npm:latest": version: 0.4.4 resolution: "jgexml@npm:0.4.4" @@ -9276,7 +10017,7 @@ __metadata: languageName: node linkType: hard -"jju@npm:^1.1.0": +"jju@npm:^1.1.0, jju@npm:^1.4.0": version: 1.4.0 resolution: "jju@npm:1.4.0" checksum: 3790481bd2b7827dd6336e6e3dc2dcc6d425679ba7ebde7b679f61dceb4457ea0cda330972494de608571f4973c6dfb5f70fab6f3c5037dbab19ac449a60424f @@ -9297,7 +10038,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0, js-yaml@npm:^3.14.1": +"js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -9320,13 +10061,6 @@ __metadata: languageName: node linkType: hard -"jsbn@npm:~0.1.0": - version: 0.1.1 - resolution: "jsbn@npm:0.1.1" - checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 - languageName: node - linkType: hard - "jsdom@npm:^16.6.0": version: 16.7.0 resolution: "jsdom@npm:16.7.0" @@ -9392,6 +10126,13 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1, json-buffer@npm:~3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + "json-parse-better-errors@npm:^1.0.1": version: 1.0.2 resolution: "json-parse-better-errors@npm:1.0.2" @@ -9424,7 +10165,7 @@ __metadata: languageName: node linkType: hard -"json-refs@npm:^3.0.12": +"json-refs@npm:^3.0.15": version: 3.0.15 resolution: "json-refs@npm:3.0.15" dependencies: @@ -9472,13 +10213,6 @@ __metadata: languageName: node linkType: hard -"json-schema@npm:0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 - languageName: node - linkType: hard - "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -9486,7 +10220,7 @@ __metadata: languageName: node linkType: hard -"json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": +"json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee @@ -9575,18 +10309,6 @@ __metadata: languageName: node linkType: hard -"jsprim@npm:^1.2.2": - version: 1.4.2 - resolution: "jsprim@npm:1.4.2" - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - checksum: 2ad1b9fdcccae8b3d580fa6ced25de930eaa1ad154db21bbf8478a4d30bbbec7925b5f5ff29b933fba9412b16a17bd484a8da4fdb3663b5e27af95dd693bab2a - languageName: node - linkType: hard - "jwa@npm:^1.4.1": version: 1.4.1 resolution: "jwa@npm:1.4.1" @@ -9647,6 +10369,16 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.0.0": + version: 4.3.3 + resolution: "keyv@npm:4.3.3" + dependencies: + compress-brotli: ^1.3.8 + json-buffer: 3.0.1 + checksum: bcc946eeec3407fb3b42d831ce985357162113c5f07a8c45c12ede39704ba2d99be4c3dded76d2d2d2a2366627e42440bdde24393216164156928399949c12a1 + languageName: node + linkType: hard + "kind-of@npm:^3.0.2": version: 3.2.2 resolution: "kind-of@npm:3.2.2" @@ -9670,21 +10402,21 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^4.1.3, kleur@npm:^4.1.4": +"kleur@npm:^4.0.1": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 languageName: node linkType: hard -"koa-body@npm:^4.2.0": - version: 4.2.0 - resolution: "koa-body@npm:4.2.0" +"koa-body@npm:^5.0.0": + version: 5.0.0 + resolution: "koa-body@npm:5.0.0" dependencies: - "@types/formidable": ^1.0.31 + "@types/formidable": ^2.0.4 co-body: ^5.1.1 - formidable: ^1.1.1 - checksum: 8da5eb00eb43345d9976b830df5973e2eb4d33a6b58735576284b20069a37ce84b34c8b60b18fdbff5e59aadfd6f7a9a03632a1c0c53aa3c84a07dfffd888af9 + formidable: ^2.0.1 + checksum: 2fed59a8b91ff107f276e398dbe78cf258f71e7c743946fe9197c0b6b5d3da9ea6516c68a3d13513c32669ccd43971c66d5e80ab0d2932ad1f9aaef627f8f868 languageName: node linkType: hard @@ -9705,7 +10437,7 @@ __metadata: languageName: node linkType: hard -"koa@npm:^2.13.1": +"koa@npm:^2.13.4": version: 2.13.4 resolution: "koa@npm:2.13.4" dependencies: @@ -9752,6 +10484,15 @@ __metadata: languageName: node linkType: hard +"latest-version@npm:^7.0.0": + version: 7.0.0 + resolution: "latest-version@npm:7.0.0" + dependencies: + package-json: ^8.1.0 + checksum: 1f0deba00d5a34394cce4463c938811f51bbb539b131674f4bb2062c63f2cc3b80bccd56ecade3bd5932d04a34cf0a5a8a2ccc4ec9e5e6b285a9a7b3e27d0d66 + languageName: node + linkType: hard + "lazy-cache@npm:^1.0.3": version: 1.0.4 resolution: "lazy-cache@npm:1.0.4" @@ -9995,13 +10736,6 @@ __metadata: languageName: node linkType: hard -"lodash.truncate@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.truncate@npm:4.4.2" - checksum: b463d8a382cfb5f0e71c504dcb6f807a7bd379ff1ea216669aa42c52fc28c54e404bfbd96791aa09e6df0de2c1d7b8f1b7f4b1a61f324d38fe98bc535aeee4f5 - languageName: node - linkType: hard - "lodash@npm:4.17.21, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21, lodash@npm:^4.7.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -10057,6 +10791,13 @@ __metadata: languageName: node linkType: hard +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: 67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5 + languageName: node + linkType: hard + "lru-cache@npm:^4.0.1": version: 4.1.5 resolution: "lru-cache@npm:4.1.5" @@ -10123,30 +10864,6 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^9.0.1": - version: 9.1.0 - resolution: "make-fetch-happen@npm:9.1.0" - dependencies: - agentkeepalive: ^4.1.3 - cacache: ^15.2.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^6.0.0 - minipass: ^3.1.3 - minipass-collect: ^1.0.2 - minipass-fetch: ^1.3.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.2 - promise-retry: ^2.0.1 - socks-proxy-agent: ^6.0.0 - ssri: ^8.0.0 - checksum: 0eb371c85fdd0b1584fcfdf3dc3c62395761b3c14658be02620c310305a9a7ecf1617a5e6fb30c1d081c5c8aaf177fa133ee225024313afabb7aa6a10f1e3d04 - languageName: node - linkType: hard - "makeerror@npm:1.0.12": version: 1.0.12 resolution: "makeerror@npm:1.0.12" @@ -10275,26 +10992,6 @@ __metadata: languageName: node linkType: hard -"meow@npm:^9.0.0": - version: 9.0.0 - resolution: "meow@npm:9.0.0" - dependencies: - "@types/minimist": ^1.2.0 - camelcase-keys: ^6.2.2 - decamelize: ^1.2.0 - decamelize-keys: ^1.1.0 - hard-rejection: ^2.1.0 - minimist-options: 4.1.0 - normalize-package-data: ^3.0.0 - read-pkg-up: ^7.0.1 - redent: ^3.0.0 - trim-newlines: ^3.0.0 - type-fest: ^0.18.0 - yargs-parser: ^20.2.3 - checksum: 99799c47247f4daeee178e3124f6ef6f84bde2ba3f37652865d5d8f8b8adcf9eedfc551dd043e2455cd8206545fd848e269c0c5ab6b594680a0ad4d3617c9639 - languageName: node - linkType: hard - "merge-descriptors@npm:1.0.1": version: 1.0.1 resolution: "merge-descriptors@npm:1.0.1" @@ -10302,15 +10999,6 @@ __metadata: languageName: node linkType: hard -"merge-options@npm:~1.0.1": - version: 1.0.1 - resolution: "merge-options@npm:1.0.1" - dependencies: - is-plain-obj: ^1.1 - checksum: 7e3d5d658879038cdc225107205dacd68fd8e22cf4f54fb37fd9e0687f7eb9efd7f0f2163577675325a3a72c9df0566e23911d0d8a2448ca8f83eee5199dd990 - languageName: node - linkType: hard - "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -10349,7 +11037,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.18, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -10367,7 +11055,7 @@ __metadata: languageName: node linkType: hard -"mime@npm:2.6.0, mime@npm:^2.5.0": +"mime@npm:2.6.0": version: 2.6.0 resolution: "mime@npm:2.6.0" bin: @@ -10399,6 +11087,13 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 + languageName: node + linkType: hard + "min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" @@ -10451,21 +11146,6 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^1.3.0, minipass-fetch@npm:^1.3.2": - version: 1.4.1 - resolution: "minipass-fetch@npm:1.4.1" - dependencies: - encoding: ^0.1.12 - minipass: ^3.1.0 - minipass-sized: ^1.0.3 - minizlib: ^2.0.0 - dependenciesMeta: - encoding: - optional: true - checksum: ec93697bdb62129c4e6c0104138e681e30efef8c15d9429dd172f776f83898471bc76521b539ff913248cc2aa6d2b37b652c993504a51cc53282563640f29216 - languageName: node - linkType: hard - "minipass-fetch@npm:^2.0.3": version: 2.1.0 resolution: "minipass-fetch@npm:2.1.0" @@ -10500,7 +11180,7 @@ __metadata: languageName: node linkType: hard -"minipass-pipeline@npm:^1.2.2, minipass-pipeline@npm:^1.2.4": +"minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: @@ -10518,7 +11198,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": +"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": version: 3.3.4 resolution: "minipass@npm:3.3.4" dependencies: @@ -10527,7 +11207,7 @@ __metadata: languageName: node linkType: hard -"minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: @@ -10626,13 +11306,6 @@ __metadata: languageName: node linkType: hard -"mute-stream@npm:~0.0.4": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 - languageName: node - linkType: hard - "nan@npm:^2.13.2": version: 2.16.0 resolution: "nan@npm:2.16.0" @@ -10656,7 +11329,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:0.6.3, negotiator@npm:^0.6.2, negotiator@npm:^0.6.3": +"negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 @@ -10688,7 +11361,7 @@ __metadata: languageName: node linkType: hard -"nock@npm:^13.1.3": +"nock@npm:^13.2.8": version: 13.2.8 resolution: "nock@npm:13.2.8" dependencies: @@ -10718,7 +11391,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.0.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.6, node-fetch@npm:^2.6.7": +"node-fetch@npm:^2.0.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" dependencies: @@ -10732,26 +11405,6 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^7.1.0": - version: 7.1.2 - resolution: "node-gyp@npm:7.1.2" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.3 - nopt: ^5.0.0 - npmlog: ^4.1.2 - request: ^2.88.2 - rimraf: ^3.0.2 - semver: ^7.3.2 - tar: ^6.0.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 08582720f28f9a9bb64bc9cbe2f58b159c0258326a9c898e4e95d2f2d8002f44602338111ebf980e5aa47a3421e071525b758923b76855d780fab8cc03279ae0 - languageName: node - linkType: hard - "node-gyp@npm:^9.0.0, node-gyp@npm:latest": version: 9.0.0 resolution: "node-gyp@npm:9.0.0" @@ -10856,23 +11509,10 @@ __metadata: languageName: node linkType: hard -"npm-audit-resolver@npm:^3.0.0-0": - version: 3.0.0-7 - resolution: "npm-audit-resolver@npm:3.0.0-7" - dependencies: - audit-resolve-core: ^3.0.0-3 - chalk: ^2.4.2 - concat-stream: ^2.0.0 - djv: ^2.1.4 - jsonlines: ^0.1.1 - read: ^1.0.7 - spawn-shell: ^2.1.0 - yargs-parser: ^18.1.3 - yargs-unparser: ^2.0.0 - bin: - check-audit: check.js - resolve-audit: resolve.js - checksum: f9e8777036e5bee7f157dce1e1de861c291b7993d2874c32e5c5c27f60e7d8123a4f951d1b61f286f6eb689c7fa89800b5ba9a129d5ef7acb4d9134373eb25bd +"normalize-url@npm:^6.0.1": + version: 6.1.0 + resolution: "normalize-url@npm:6.1.0" + checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 languageName: node linkType: hard @@ -10885,52 +11525,54 @@ __metadata: languageName: node linkType: hard -"npm-check-updates@npm:^11.8.5": - version: 11.8.5 - resolution: "npm-check-updates@npm:11.8.5" +"npm-check-updates@npm:^12.5.11": + version: 12.5.12 + resolution: "npm-check-updates@npm:12.5.12" dependencies: chalk: ^4.1.2 cint: ^8.2.1 - cli-table: ^0.3.6 - commander: ^6.2.1 + cli-table: ^0.3.11 + commander: ^9.1.0 fast-memoize: ^2.5.2 find-up: 5.0.0 fp-and-or: ^0.1.3 get-stdin: ^8.0.0 globby: ^11.0.4 - hosted-git-info: ^4.0.2 + hosted-git-info: ^5.0.0 json-parse-helpfulerror: ^1.0.3 jsonlines: ^0.1.1 libnpmconfig: ^1.2.1 lodash: ^4.17.21 - minimatch: ^3.0.4 + minimatch: ^5.0.1 p-map: ^4.0.0 - pacote: ^11.3.5 + pacote: ^13.0.5 parse-github-url: ^1.0.2 progress: ^2.0.3 - prompts: ^2.4.1 - rc-config-loader: ^4.0.0 + prompts: ^2.4.2 + rc-config-loader: ^4.1.0 remote-git-tags: ^3.0.0 rimraf: ^3.0.2 semver: ^7.3.5 semver-utils: ^1.1.4 + source-map-support: ^0.5.21 spawn-please: ^1.0.0 update-notifier: ^5.1.0 + yaml: ^1.10.2 bin: - ncu: bin/cli.js - npm-check-updates: bin/cli.js - checksum: c1709754c6f43e22856f7af16d5eadfd2b3773360d34700249a200214d055173d0dbb13fcd039cb7d5b49a8ef651f93abad2faab82aa85a4b2378fd262c74197 + ncu: build/src/bin/cli.js + npm-check-updates: build/src/bin/cli.js + checksum: ddfc300de5e02a788c467729a76c99aa1c8d138bf9a44b0c48913f999e8995214722982052f6d75b672c0f54f706b1575998b513783825e61a52e669c90ca4dd languageName: node linkType: hard -"npm-check-updates@npm:^12.5.11": - version: 12.5.12 - resolution: "npm-check-updates@npm:12.5.12" +"npm-check-updates@npm:^13.1.2": + version: 13.1.5 + resolution: "npm-check-updates@npm:13.1.5" dependencies: chalk: ^4.1.2 cint: ^8.2.1 cli-table: ^0.3.11 - commander: ^9.1.0 + commander: ^9.3.0 fast-memoize: ^2.5.2 find-up: 5.0.0 fp-and-or: ^0.1.3 @@ -10939,36 +11581,34 @@ __metadata: hosted-git-info: ^5.0.0 json-parse-helpfulerror: ^1.0.3 jsonlines: ^0.1.1 - libnpmconfig: ^1.2.1 lodash: ^4.17.21 - minimatch: ^5.0.1 + minimatch: ^5.1.0 p-map: ^4.0.0 - pacote: ^13.0.5 + pacote: ^13.5.0 parse-github-url: ^1.0.2 progress: ^2.0.3 prompts: ^2.4.2 rc-config-loader: ^4.1.0 remote-git-tags: ^3.0.0 rimraf: ^3.0.2 - semver: ^7.3.5 + semver: ^7.3.7 semver-utils: ^1.1.4 source-map-support: ^0.5.21 spawn-please: ^1.0.0 update-notifier: ^5.1.0 - yaml: ^1.10.2 + yaml: ^2.1.1 bin: ncu: build/src/bin/cli.js npm-check-updates: build/src/bin/cli.js - checksum: ddfc300de5e02a788c467729a76c99aa1c8d138bf9a44b0c48913f999e8995214722982052f6d75b672c0f54f706b1575998b513783825e61a52e669c90ca4dd + checksum: b1f1c50e3716198d5eac9204e74185433768d98f8d0959358ad12b296eea3b38f15120573a1d356e26ab9a6ab68edb8684dec571c3c5fd60efe675a73b620f16 languageName: node linkType: hard -"npm-check-updates@npm:^13.1.2": - version: 13.1.5 - resolution: "npm-check-updates@npm:13.1.5" +"npm-check-updates@npm:^15.2.6": + version: 15.3.4 + resolution: "npm-check-updates@npm:15.3.4" dependencies: - chalk: ^4.1.2 - cint: ^8.2.1 + chalk: ^5.0.1 cli-table: ^0.3.11 commander: ^9.3.0 fast-memoize: ^2.5.2 @@ -10982,10 +11622,10 @@ __metadata: lodash: ^4.17.21 minimatch: ^5.1.0 p-map: ^4.0.0 - pacote: ^13.5.0 + pacote: ^13.6.1 parse-github-url: ^1.0.2 progress: ^2.0.3 - prompts: ^2.4.2 + prompts-ncu: ^2.5.1 rc-config-loader: ^4.1.0 remote-git-tags: ^3.0.0 rimraf: ^3.0.2 @@ -10993,21 +11633,12 @@ __metadata: semver-utils: ^1.1.4 source-map-support: ^0.5.21 spawn-please: ^1.0.0 - update-notifier: ^5.1.0 + update-notifier: ^6.0.2 yaml: ^2.1.1 bin: ncu: build/src/bin/cli.js npm-check-updates: build/src/bin/cli.js - checksum: b1f1c50e3716198d5eac9204e74185433768d98f8d0959358ad12b296eea3b38f15120573a1d356e26ab9a6ab68edb8684dec571c3c5fd60efe675a73b620f16 - languageName: node - linkType: hard - -"npm-install-checks@npm:^4.0.0": - version: 4.0.0 - resolution: "npm-install-checks@npm:4.0.0" - dependencies: - semver: ^7.1.1 - checksum: 8308ff48e61e0863d7f148f62543e1f6c832525a7d8002ea742d5e478efa8b29bf65a87f9fb82786e15232e4b3d0362b126c45afdceed4c051c0d3c227dd0ace + checksum: 14c414684f5dcae508640071e54aa75a863446816f449ef34f4031033c4eb19ad873f02e6f9c1bf4047e557cbee64852913dfa2a44c652129f08b2e62133a044 languageName: node linkType: hard @@ -11027,17 +11658,6 @@ __metadata: languageName: node linkType: hard -"npm-package-arg@npm:^8.0.0, npm-package-arg@npm:^8.0.1, npm-package-arg@npm:^8.1.2": - version: 8.1.5 - resolution: "npm-package-arg@npm:8.1.5" - dependencies: - hosted-git-info: ^4.0.1 - semver: ^7.3.4 - validate-npm-package-name: ^3.0.0 - checksum: ae76afbcebb4ea8d0b849b8b18ed1b0491030fb04a0af5d75f1b8390cc50bec186ced9fbe60f47d939eab630c7c0db0919d879ac56a87d3782267dfe8eec60d3 - languageName: node - linkType: hard - "npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": version: 9.1.0 resolution: "npm-package-arg@npm:9.1.0" @@ -11050,20 +11670,6 @@ __metadata: languageName: node linkType: hard -"npm-packlist@npm:^2.1.4": - version: 2.2.2 - resolution: "npm-packlist@npm:2.2.2" - dependencies: - glob: ^7.1.6 - ignore-walk: ^3.0.3 - npm-bundled: ^1.1.1 - npm-normalize-package-bin: ^1.0.1 - bin: - npm-packlist: bin/index.js - checksum: 799ce94b077e4dc366a9a5bcc5f006669263bb1a48d6948161aed915fd2f11dea8a7cf516a63fc78e5df059915591dade5928f0738baadc99a8ab4685d8b58c3 - languageName: node - linkType: hard - "npm-packlist@npm:^5.1.0": version: 5.1.1 resolution: "npm-packlist@npm:5.1.1" @@ -11078,18 +11684,6 @@ __metadata: languageName: node linkType: hard -"npm-pick-manifest@npm:^6.0.0, npm-pick-manifest@npm:^6.1.1": - version: 6.1.1 - resolution: "npm-pick-manifest@npm:6.1.1" - dependencies: - npm-install-checks: ^4.0.0 - npm-normalize-package-bin: ^1.0.1 - npm-package-arg: ^8.1.2 - semver: ^7.3.4 - checksum: 7a7b9475ae95cf903d37471229efbd12a829a9a7a1020ba36e75768aaa35da4c3a087fde3f06070baf81ec6b2ea2b660f022a1172644e6e7188199d7c1d2954b - languageName: node - linkType: hard - "npm-pick-manifest@npm:^7.0.0": version: 7.0.1 resolution: "npm-pick-manifest@npm:7.0.1" @@ -11102,20 +11696,6 @@ __metadata: languageName: node linkType: hard -"npm-registry-fetch@npm:^11.0.0": - version: 11.0.0 - resolution: "npm-registry-fetch@npm:11.0.0" - dependencies: - make-fetch-happen: ^9.0.1 - minipass: ^3.1.3 - minipass-fetch: ^1.3.0 - minipass-json-stream: ^1.0.1 - minizlib: ^2.0.0 - npm-package-arg: ^8.0.0 - checksum: dda149cd86f8ee73db1b0a0302fbf59983ef03ad180051caa9aad1de9f1e099aaa77adcda3ca2c3bd9d98958e9e6593bd56ee21d3f660746b0a65fafbf5ae161 - languageName: node - linkType: hard - "npm-registry-fetch@npm:^13.0.1": version: 13.1.1 resolution: "npm-registry-fetch@npm:13.1.1" @@ -11131,7 +11711,7 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^2.0.0, npm-run-path@npm:^2.0.2": +"npm-run-path@npm:^2.0.0": version: 2.0.2 resolution: "npm-run-path@npm:2.0.2" dependencies: @@ -11149,18 +11729,6 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^4.1.2": - version: 4.1.2 - resolution: "npmlog@npm:4.1.2" - dependencies: - are-we-there-yet: ~1.1.2 - console-control-strings: ~1.1.0 - gauge: ~2.7.3 - set-blocking: ~2.0.0 - checksum: edbda9f95ec20957a892de1839afc6fb735054c3accf6fbefe767bac9a639fd5cea2baeac6bd2bcd50a85cb54924d57d9886c81c7fbc2332c2ddd19227504192 - languageName: node - linkType: hard - "npmlog@npm:^5.0.1": version: 5.0.1 resolution: "npmlog@npm:5.0.1" @@ -11268,13 +11836,6 @@ __metadata: languageName: node linkType: hard -"oauth-sign@npm:~0.9.0": - version: 0.9.0 - resolution: "oauth-sign@npm:0.9.0" - checksum: 8f5497a127967866a3c67094c21efd295e46013a94e6e828573c62220e9af568cc1d2d04b16865ba583e430510fa168baf821ea78f355146d8ed7e350fc44c64 - languageName: node - linkType: hard - "oauth2-server@npm:^4.0.0-dev.2": version: 4.0.0-dev.3 resolution: "oauth2-server@npm:4.0.0-dev.3" @@ -11289,7 +11850,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -11322,7 +11883,7 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.2": +"object.entries@npm:^1.1.5": version: 1.1.5 resolution: "object.entries@npm:1.1.5" dependencies: @@ -11418,22 +11979,22 @@ __metadata: languageName: node linkType: hard -"openapi-jsonschema-parameters@npm:^9.3.0": - version: 9.3.1 - resolution: "openapi-jsonschema-parameters@npm:9.3.1" +"openapi-jsonschema-parameters@npm:^12.0.0": + version: 12.0.0 + resolution: "openapi-jsonschema-parameters@npm:12.0.0" dependencies: - openapi-types: ^9.3.1 - checksum: 444375085c25381e36e580950095efdc8811224787e44882301c3dc1d26528015feebed28beead91fe7e325465b475940324e1de87b0ee4b40b3fade16aedd1d + openapi-types: ^12.0.0 + checksum: 4065543bd0173e308fbd3aefa3db5cf8b44c3bbd157fc5e6ab7ec7a9825423934620718a42459a091c0867fc762cd48402cafd020ce7cd512fc57704df165d20 languageName: node linkType: hard -"openapi-response-validator@npm:^9.3.0": - version: 9.3.1 - resolution: "openapi-response-validator@npm:9.3.1" +"openapi-response-validator@npm:^12.0.0": + version: 12.0.0 + resolution: "openapi-response-validator@npm:12.0.0" dependencies: ajv: ^8.4.0 - openapi-types: ^9.3.1 - checksum: 50cadb21f9bc33b74a3b192d376f590e7f92b4d3ed70fca9a78ffc69fd5afd7831c29bd233284627d61a482e0bd4ebab0edd759f02f3f0828d5ee1c4c3695fe9 + openapi-types: ^12.0.0 + checksum: de56671daaa6b9cf41d3e3c0caf7d2e6ce6bc31b5a9e4414874abd4133e8002a2b7ab72db05ce8c65da8022ab1e6524be9e458cf76bc43cb0d6179adc1513257 languageName: node linkType: hard @@ -11466,50 +12027,26 @@ __metadata: languageName: node linkType: hard -"openapi-types@npm:^7.0.1": - version: 7.2.3 - resolution: "openapi-types@npm:7.2.3" - checksum: 164d060a06b78e1e4fbdae393897bb2ff8c9dd5bcf3d0ef6f09da6e1e9283c12ee577ce25ec7cf5558d29e5788b4f323b9781f1bb1c192ea78b56b3380f0dbe6 - languageName: node - linkType: hard - -"openapi-types@npm:^9.3.1": - version: 9.3.1 - resolution: "openapi-types@npm:9.3.1" - checksum: 44b7132b159666877b1659dcfb48ea34d45222dd96a14626d57830401dfad801d2cba5dc9e88471faa4f1c2f7670d814601d91e156d6a05ecccc60c65660ebbc - languageName: node - linkType: hard - -"openapi-typescript@npm:^2.4.2": - version: 2.5.0 - resolution: "openapi-typescript@npm:2.5.0" - dependencies: - js-yaml: ^4.0.0 - kleur: ^4.1.3 - meow: ^9.0.0 - prettier: ^2.2.1 - bin: - openapi-typescript: bin/cli.js - checksum: d1bee3e7ecffe5eb73908b7883c03949ee8c73241b3297e4356517b4adefb6a725363eb23592c975aa53ccf4e4a5c3a86ed563a45a056dc0f2b1a08342710d7d +"openapi-types@npm:^12.0.0": + version: 12.0.0 + resolution: "openapi-types@npm:12.0.0" + checksum: 8d22cb3727e892ad8f9782210360627f6cde92a53c229407d897f0252543a937aed59bfd7a4bee291b50547d7a4e836290ee35eaebc3978c873c601de9ace5b6 languageName: node linkType: hard -"openapi-typescript@npm:^4.0.2": - version: 4.5.0 - resolution: "openapi-typescript@npm:4.5.0" +"openapi-typescript@npm:^5.4.1": + version: 5.4.1 + resolution: "openapi-typescript@npm:5.4.1" dependencies: - hosted-git-info: ^3.0.8 js-yaml: ^4.1.0 - kleur: ^4.1.4 - meow: ^9.0.0 mime: ^3.0.0 - node-fetch: ^2.6.6 - prettier: ^2.5.1 - slash: ^3.0.0 + prettier: ^2.6.2 tiny-glob: ^0.2.9 + undici: ^5.4.0 + yargs-parser: ^21.0.1 bin: openapi-typescript: bin/cli.js - checksum: fc166f53fc3a5fb09a1f33a917b86e36de580d253a5305e0a8747367efb2ccee57dec17abf5ec0c71a93441d1d7ca0df6e7c2bb6ac907538840d577658dad4e8 + checksum: ab0e7613a478fcfa675887e50ff00fd6403ad6313357944408c11b420c08bbfa2bb58bff66c4e9a8c5670c79fe1a8d2f4ee85beceb004e72c529a97019b57c20 languageName: node linkType: hard @@ -11584,6 +12121,13 @@ __metadata: languageName: node linkType: hard +"p-cancelable@npm:^3.0.0": + version: 3.0.0 + resolution: "p-cancelable@npm:3.0.0" + checksum: 2b5ae34218f9c2cf7a7c18e5d9a726ef9b165ef07e6c959f6738371509e747334b5f78f3bcdeb03d8a12dcb978faf641fd87eb21486ed7d36fb823b8ddef3219 + languageName: node + linkType: hard + "p-defer@npm:^1.0.0": version: 1.0.0 resolution: "p-defer@npm:1.0.0" @@ -11623,7 +12167,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.2": +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -11721,36 +12265,19 @@ __metadata: languageName: node linkType: hard -"pacote@npm:^11.3.5": - version: 11.3.5 - resolution: "pacote@npm:11.3.5" - dependencies: - "@npmcli/git": ^2.1.0 - "@npmcli/installed-package-contents": ^1.0.6 - "@npmcli/promise-spawn": ^1.2.0 - "@npmcli/run-script": ^1.8.2 - cacache: ^15.0.5 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - infer-owner: ^1.0.4 - minipass: ^3.1.3 - mkdirp: ^1.0.3 - npm-package-arg: ^8.0.1 - npm-packlist: ^2.1.4 - npm-pick-manifest: ^6.0.0 - npm-registry-fetch: ^11.0.0 - promise-retry: ^2.0.1 - read-package-json-fast: ^2.0.1 - rimraf: ^3.0.2 - ssri: ^8.0.1 - tar: ^6.1.0 - bin: - pacote: lib/bin.js - checksum: 4fae0b1429be77e69972402dad24775999c92198dadc20f1f7a418f24e268e8bf85faaffc3f778d94c21348645f99bb65ef519fb82776902b556eef934afd932 - languageName: node - linkType: hard - -"pacote@npm:^13.0.5, pacote@npm:^13.5.0": +"package-json@npm:^8.1.0": + version: 8.1.0 + resolution: "package-json@npm:8.1.0" + dependencies: + got: ^12.1.0 + registry-auth-token: ^5.0.1 + registry-url: ^6.0.0 + semver: ^7.3.7 + checksum: 28c16ef0296915533c3dec9ce579fd6ea8ac62df0cd0b4b44e65a45506fda781cf1d1fd4a083fe90af3e041a9514b6be30562d85689da450986aff43dc856cc7 + languageName: node + linkType: hard + +"pacote@npm:^13.0.5, pacote@npm:^13.5.0, pacote@npm:^13.6.1": version: 13.6.1 resolution: "pacote@npm:13.6.1" dependencies: @@ -11959,13 +12486,6 @@ __metadata: languageName: node linkType: hard -"performance-now@npm:^2.1.0": - version: 2.1.0 - resolution: "performance-now@npm:2.1.0" - checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 - languageName: node - linkType: hard - "picocolors@npm:^0.2.1": version: 0.2.1 resolution: "picocolors@npm:0.2.1" @@ -12107,7 +12627,7 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^2.2.1, prettier@npm:^2.5.1": +"prettier@npm:^2.6.2": version: 2.7.1 resolution: "prettier@npm:2.7.1" bin: @@ -12127,6 +12647,18 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.3": + version: 28.1.3 + resolution: "pretty-format@npm:28.1.3" + dependencies: + "@jest/schemas": ^28.1.3 + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f + languageName: node + linkType: hard + "pretty-format@npm:^28.1.1": version: 28.1.1 resolution: "pretty-format@npm:28.1.1" @@ -12153,14 +12685,14 @@ __metadata: languageName: node linkType: hard -"progress@npm:^2.0.0, progress@npm:^2.0.3": +"progress@npm:^2.0.3": version: 2.0.3 resolution: "progress@npm:2.0.3" checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7 languageName: node linkType: hard -"prom-client@npm:14.0.1": +"prom-client@npm:14.0.1, prom-client@npm:^14.0.1": version: 14.0.1 resolution: "prom-client@npm:14.0.1" dependencies: @@ -12169,15 +12701,6 @@ __metadata: languageName: node linkType: hard -"prom-client@npm:^12.0.0": - version: 12.0.0 - resolution: "prom-client@npm:12.0.0" - dependencies: - tdigest: ^0.1.1 - checksum: 22e0bff493b8cfe9da3bc02b662aedbee09dcf779d58c920e77d8b9214a092fdbc0352d9d1091940347030477db64b5cd666ac59f11deae6533064999b25ff32 - languageName: node - linkType: hard - "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -12213,7 +12736,17 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.0.1, prompts@npm:^2.4.1, prompts@npm:^2.4.2": +"prompts-ncu@npm:^2.5.1": + version: 2.5.1 + resolution: "prompts-ncu@npm:2.5.1" + dependencies: + kleur: ^4.0.1 + sisteransi: ^1.0.5 + checksum: e8b64793053382c46dbdfe482e4523e83cb3770faa453abc37652752a12e612c87f43bb2b8bb1f4962db644bc448c350777d506d61bd18e5a3e3a2aa3d0c3695 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1, prompts@npm:^2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -12230,6 +12763,13 @@ __metadata: languageName: node linkType: hard +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 + languageName: node + linkType: hard + "protobufjs@npm:6.11.2": version: 6.11.2 resolution: "protobufjs@npm:6.11.2" @@ -12309,7 +12849,7 @@ __metadata: languageName: node linkType: hard -"psl@npm:^1.1.28, psl@npm:^1.1.33": +"psl@npm:^1.1.33": version: 1.8.0 resolution: "psl@npm:1.8.0" checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 @@ -12342,6 +12882,15 @@ __metadata: languageName: node linkType: hard +"pupa@npm:^3.1.0": + version: 3.1.0 + resolution: "pupa@npm:3.1.0" + dependencies: + escape-goat: ^4.0.0 + checksum: 0e4f4ab6bbdce600fa6d23b1833f1af57b2641246ff4cbe10f9d66e4e5479b0de2864a88d5bd629eef59524eda3c6680726acd7f3f873d9ed46b7f095d0bb5f6 + languageName: node + linkType: hard + "q@npm:^1.5.1": version: 1.5.1 resolution: "q@npm:1.5.1" @@ -12374,13 +12923,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 - languageName: node - linkType: hard - "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -12395,6 +12937,13 @@ __metadata: languageName: node linkType: hard +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed + languageName: node + linkType: hard + "random-poly-fill@npm:^1.0.1": version: 1.0.1 resolution: "random-poly-fill@npm:1.0.1" @@ -12437,7 +12986,7 @@ __metadata: languageName: node linkType: hard -"rc-config-loader@npm:^4.0.0, rc-config-loader@npm:^4.1.0": +"rc-config-loader@npm:^4.1.0": version: 4.1.0 resolution: "rc-config-loader@npm:4.1.0" dependencies: @@ -12477,7 +13026,7 @@ __metadata: languageName: node linkType: hard -"read-package-json-fast@npm:^2.0.1, read-package-json-fast@npm:^2.0.3": +"read-package-json-fast@npm:^2.0.3": version: 2.0.3 resolution: "read-package-json-fast@npm:2.0.3" dependencies: @@ -12543,15 +13092,6 @@ __metadata: languageName: node linkType: hard -"read@npm:^1.0.7": - version: 1.0.7 - resolution: "read@npm:1.0.7" - dependencies: - mute-stream: ~0.0.4 - checksum: 2777c254e5732cac96f5d0a1c0f6b836c89ae23d8febd405b206f6f24d5de1873420f1a0795e0e3721066650d19adf802c7882c4027143ee0acf942a4f34f97b - languageName: node - linkType: hard - "readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.0 resolution: "readable-stream@npm:3.6.0" @@ -12563,7 +13103,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.6, readable-stream@npm:~2.3.6": +"readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -12587,6 +13127,13 @@ __metadata: languageName: node linkType: hard +"readline-transform@npm:1.0.0": + version: 1.0.0 + resolution: "readline-transform@npm:1.0.0" + checksum: 0d2d130cc9a853dc4089c22ee3807de721133b49e2a07d129827ab6a5ffc93202e70e0fb090b1a08b70d74e901ee8f48ad728feccad26bfbd223a8b6b87dac65 + languageName: node + linkType: hard + "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -12597,20 +13144,6 @@ __metadata: languageName: node linkType: hard -"redis-commands@npm:^1.7.0": - version: 1.7.0 - resolution: "redis-commands@npm:1.7.0" - checksum: d1ff7fbcb5e54768c77f731f1d49679d2a62c3899522c28addb4e2e5813aea8bcac3f22519d71d330224c3f2937f935dfc3d8dc65e90db0f5fe22dc2c1515aa7 - languageName: node - linkType: hard - -"redis-errors@npm:^1.0.0, redis-errors@npm:^1.2.0": - version: 1.2.0 - resolution: "redis-errors@npm:1.2.0" - checksum: f28ac2692113f6f9c222670735aa58aeae413464fd58ccf3fce3f700cae7262606300840c802c64f2b53f19f65993da24dc918afc277e9e33ac1ff09edb394f4 - languageName: node - linkType: hard - "redis-mock@npm:^0.56.3": version: 0.56.3 resolution: "redis-mock@npm:0.56.3" @@ -12618,24 +13151,17 @@ __metadata: languageName: node linkType: hard -"redis-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "redis-parser@npm:3.0.0" - dependencies: - redis-errors: ^1.0.0 - checksum: 89290ae530332f2ae37577647fa18208d10308a1a6ba750b9d9a093e7398f5e5253f19855b64c98757f7129cccce958e4af2573fdc33bad41405f87f1943459a - languageName: node - linkType: hard - -"redis@npm:^3.1.2": - version: 3.1.2 - resolution: "redis@npm:3.1.2" +"redis@npm:^4.2.0": + version: 4.2.0 + resolution: "redis@npm:4.2.0" dependencies: - denque: ^1.5.0 - redis-commands: ^1.7.0 - redis-errors: ^1.2.0 - redis-parser: ^3.0.0 - checksum: baec42198626b22d2dfc063b6a6f30394daee994c21f380e58ecf91c3edee333c4e32907c30f082fe66d2177695f7b2567902eef399ecb22da3e199ea6363a30 + "@redis/bloom": 1.0.2 + "@redis/client": 1.2.0 + "@redis/graph": 1.0.1 + "@redis/json": 1.0.3 + "@redis/search": 1.0.6 + "@redis/time-series": 1.0.3 + checksum: 6c35b56c6b685e82973c5698c5736c07ccbc59f3bc18d8de61e45ead2df4b8fc82062e5618452f4d3f8c23f02ff8c0b847c8d6a681f909c403a0fb96adcc2b98 languageName: node linkType: hard @@ -12689,7 +13215,7 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.1.0, regexpp@npm:^3.2.0": +"regexpp@npm:^3.2.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 @@ -12719,6 +13245,15 @@ __metadata: languageName: node linkType: hard +"registry-auth-token@npm:^5.0.1": + version: 5.0.1 + resolution: "registry-auth-token@npm:5.0.1" + dependencies: + "@pnpm/npm-conf": ^1.0.4 + checksum: abd3a3b14aee445398d09efc3b67be57fbf1b1e93b61443b45196055d2372f3814e6942a56ecd5a5385ab8e26c2078e0b3f6d346689c49b82f7e5049940e4b03 + languageName: node + linkType: hard + "registry-url@npm:^5.0.0": version: 5.1.0 resolution: "registry-url@npm:5.1.0" @@ -12728,6 +13263,15 @@ __metadata: languageName: node linkType: hard +"registry-url@npm:^6.0.0": + version: 6.0.1 + resolution: "registry-url@npm:6.0.1" + dependencies: + rc: 1.2.8 + checksum: 33712aa1b489aab7aba2191c1cdadfdd71f5bf166d4792d81744a6be332c160bd7d9273af8269d8a01284b9562f14a5b31b7abcf7ad9306c44887ecff51c89ab + languageName: node + linkType: hard + "regjsgen@npm:^0.6.0": version: 0.6.0 resolution: "regjsgen@npm:0.6.0" @@ -12760,34 +13304,6 @@ __metadata: languageName: node linkType: hard -"request@npm:^2.88.2": - version: 2.88.2 - resolution: "request@npm:2.88.2" - dependencies: - aws-sign2: ~0.7.0 - aws4: ^1.8.0 - caseless: ~0.12.0 - combined-stream: ~1.0.6 - extend: ~3.0.2 - forever-agent: ~0.6.1 - form-data: ~2.3.2 - har-validator: ~5.1.3 - http-signature: ~1.2.0 - is-typedarray: ~1.0.0 - isstream: ~0.1.2 - json-stringify-safe: ~5.0.1 - mime-types: ~2.1.19 - oauth-sign: ~0.9.0 - performance-now: ^2.1.0 - qs: ~6.5.2 - safe-buffer: ^5.1.2 - tough-cookie: ~2.5.0 - tunnel-agent: ^0.6.0 - uuid: ^3.3.2 - checksum: 4e112c087f6eabe7327869da2417e9d28fcd0910419edd2eb17b6acfc4bfa1dad61954525949c228705805882d8a98a86a0ea12d7f739c01ee92af7062996983 - languageName: node - linkType: hard - "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -12816,6 +13332,13 @@ __metadata: languageName: node linkType: hard +"resolve-alpn@npm:^1.2.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -12881,6 +13404,15 @@ __metadata: languageName: node linkType: hard +"responselike@npm:^2.0.0": + version: 2.0.1 + resolution: "responselike@npm:2.0.1" + dependencies: + lowercase-keys: ^2.0.0 + checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -12931,7 +13463,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -12945,7 +13477,7 @@ __metadata: languageName: node linkType: hard -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 @@ -12982,6 +13514,15 @@ __metadata: languageName: node linkType: hard +"semver-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "semver-diff@npm:4.0.0" + dependencies: + semver: ^7.3.5 + checksum: 4a958d6f76c7e7858268e1e2cf936712542441c9e003e561b574167279eee0a9bd55cc7eae1bfb31d3e7ad06a9fc370e7dd412fcfefec8c0daf1ce5aea623559 + languageName: node + linkType: hard + "semver-utils@npm:^1.1.4": version: 1.1.4 resolution: "semver-utils@npm:1.1.4" @@ -13007,7 +13548,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.x, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": +"semver@npm:7.x, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7": version: 7.3.7 resolution: "semver@npm:7.3.7" dependencies: @@ -13069,7 +13610,7 @@ __metadata: languageName: node linkType: hard -"set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": +"set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 @@ -13258,17 +13799,6 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "slice-ansi@npm:4.0.0" - dependencies: - ansi-styles: ^4.0.0 - astral-regex: ^2.0.0 - is-fullwidth-code-point: ^3.0.0 - checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 - languageName: node - linkType: hard - "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -13276,17 +13806,6 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:^6.0.0": - version: 6.2.1 - resolution: "socks-proxy-agent@npm:6.2.1" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 9ca089d489e5ee84af06741135c4b0d2022977dad27ac8d649478a114cdce87849e8d82b7c22b51501a4116e231241592946fc7fae0afc93b65030ee57084f58 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -13363,17 +13882,6 @@ __metadata: languageName: node linkType: hard -"spawn-shell@npm:^2.1.0": - version: 2.1.0 - resolution: "spawn-shell@npm:2.1.0" - dependencies: - default-shell: ^1.0.1 - merge-options: ~1.0.1 - npm-run-path: ^2.0.2 - checksum: b16149096dd79c71a6f1a6bd0d62eabf2a7cc41f61ad4a961ae63fd8f4544c884c3e26ca9f985c79f0577b5069de9c26335f4d354ca107253ce4ae8533397d60 - languageName: node - linkType: hard - "spdx-correct@npm:^3.0.0": version: 3.1.1 resolution: "spdx-correct@npm:3.1.1" @@ -13442,36 +13950,6 @@ __metadata: languageName: node linkType: hard -"sshpk@npm:^1.7.0": - version: 1.17.0 - resolution: "sshpk@npm:1.17.0" - dependencies: - asn1: ~0.2.3 - assert-plus: ^1.0.0 - bcrypt-pbkdf: ^1.0.0 - dashdash: ^1.12.0 - ecc-jsbn: ~0.1.1 - getpass: ^0.1.1 - jsbn: ~0.1.0 - safer-buffer: ^2.0.2 - tweetnacl: ~0.14.0 - bin: - sshpk-conv: bin/sshpk-conv - sshpk-sign: bin/sshpk-sign - sshpk-verify: bin/sshpk-verify - checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 - languageName: node - linkType: hard - -"ssri@npm:^8.0.0, ssri@npm:^8.0.1": - version: 8.0.1 - resolution: "ssri@npm:8.0.1" - dependencies: - minipass: ^3.1.1 - checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36 - languageName: node - linkType: hard - "ssri@npm:^9.0.0": version: 9.0.1 resolution: "ssri@npm:9.0.1" @@ -13497,7 +13975,7 @@ __metadata: languageName: node linkType: hard -"standard-version@npm:^9.3.1": +"standard-version@npm:^9.5.0": version: 9.5.0 resolution: "standard-version@npm:9.5.0" dependencies: @@ -13596,6 +14074,17 @@ __metadata: languageName: node linkType: hard +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + "string.prototype.trimend@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimend@npm:1.0.5" @@ -13672,15 +14161,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^5.2.0": - version: 5.2.0 - resolution: "strip-ansi@npm:5.2.0" - dependencies: - ansi-regex: ^4.1.0 - checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 - languageName: node - linkType: hard - "strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -13690,6 +14170,15 @@ __metadata: languageName: node linkType: hard +"strip-ansi@npm:^7.0.1": + version: 7.0.1 + resolution: "strip-ansi@npm:7.0.1" + dependencies: + ansi-regex: ^6.0.1 + checksum: 257f78fa433520e7f9897722731d78599cb3fce29ff26a20a5e12ba4957463b50a01136f37c43707f4951817a75e90820174853d6ccc240997adc5df8f966039 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -13741,9 +14230,9 @@ __metadata: languageName: node linkType: hard -"superagent@npm:^7.1.3": - version: 7.1.5 - resolution: "superagent@npm:7.1.5" +"superagent@npm:^7.1.6": + version: 7.1.6 + resolution: "superagent@npm:7.1.6" dependencies: component-emitter: ^1.3.0 cookiejar: ^2.1.3 @@ -13752,17 +14241,17 @@ __metadata: form-data: ^4.0.0 formidable: ^2.0.1 methods: ^1.1.2 - mime: ^2.5.0 + mime: 2.6.0 qs: ^6.10.3 readable-stream: ^3.6.0 semver: ^7.3.7 - checksum: 4782ca099b18a0933705f93ac4678290bcfcd5e57ca1286dd4f733c7fbb554ca0c7cc1c97261254dc29623ac258aa64fc40aaa18da960cbe759085efa3e4b8f6 + checksum: b73316836003219f1a4886a6d77dd28551a6784c30e871009fb7bad699fae772b20370d39d2ccb5a543c9335ce12b43a76b959a3ca983f1d6365cb4b5682c08f languageName: node linkType: hard -"superagent@npm:^7.1.6": - version: 7.1.6 - resolution: "superagent@npm:7.1.6" +"superagent@npm:^8.0.0": + version: 8.0.0 + resolution: "superagent@npm:8.0.0" dependencies: component-emitter: ^1.3.0 cookiejar: ^2.1.3 @@ -13775,17 +14264,17 @@ __metadata: qs: ^6.10.3 readable-stream: ^3.6.0 semver: ^7.3.7 - checksum: b73316836003219f1a4886a6d77dd28551a6784c30e871009fb7bad699fae772b20370d39d2ccb5a543c9335ce12b43a76b959a3ca983f1d6365cb4b5682c08f + checksum: 14343e59327eafd85fa230acb876017079d5efcecc72a56566abc0f965220bb460af2e070dddecd9e2856410b2d2b318d81d9cc1d342aa5922da93c29a295dd7 languageName: node linkType: hard -"supertest@npm:^6.1.6": - version: 6.2.3 - resolution: "supertest@npm:6.2.3" +"supertest@npm:^6.2.4": + version: 6.2.4 + resolution: "supertest@npm:6.2.4" dependencies: methods: ^1.1.2 - superagent: ^7.1.3 - checksum: c1bed86c31723a4bc461153a58176fd80d675deb7d23ab7bd170213040673b35c38e3cbeab9a4eb8a325cf736176c08c6f6522e42f0293314f183e192a6681fa + superagent: ^8.0.0 + checksum: f2ddc4f3ba467a5c4036dd4aad41351e4b60eb13c39ecf5233ccd2ebb425504073b2b7036c973a70c7047f5c6bc1b9fef096b7bbff114d357cbe80654441db23 languageName: node linkType: hard @@ -13900,20 +14389,7 @@ __metadata: languageName: node linkType: hard -"table@npm:^6.0.9": - version: 6.8.0 - resolution: "table@npm:6.8.0" - dependencies: - ajv: ^8.0.1 - lodash.truncate: ^4.4.2 - slice-ansi: ^4.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - checksum: 5b07fe462ee03d2e1fac02cbb578efd2e0b55ac07e3d3db2e950aa9570ade5a4a2b8d3c15e9f25c89e4e50b646bc4269934601ee1eef4ca7968ad31960977690 - languageName: node - linkType: hard - -"tar@npm:^6.0.2, tar@npm:^6.1.0, tar@npm:^6.1.11, tar@npm:^6.1.2": +"tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.11 resolution: "tar@npm:6.1.11" dependencies: @@ -14076,16 +14552,6 @@ __metadata: languageName: node linkType: hard -"tough-cookie@npm:~2.5.0": - version: 2.5.0 - resolution: "tough-cookie@npm:2.5.0" - dependencies: - psl: ^1.1.28 - punycode: ^2.1.1 - checksum: 16a8cd090224dd176eee23837cbe7573ca0fa297d7e468ab5e1c02d49a4e9a97bb05fef11320605eac516f91d54c57838a25864e8680e27b069a5231d8264977 - languageName: node - linkType: hard - "tr46@npm:^2.1.0": version: 2.1.0 resolution: "tr46@npm:2.1.0" @@ -14125,7 +14591,7 @@ __metadata: languageName: node linkType: hard -"ts-auto-mock@npm:^3.3.0": +"ts-auto-mock@npm:^3.6.2": version: 3.6.2 resolution: "ts-auto-mock@npm:3.6.2" dependencies: @@ -14245,7 +14711,7 @@ __metadata: languageName: node linkType: hard -"ttypescript@npm:^1.5.12": +"ttypescript@npm:^1.5.13": version: 1.5.13 resolution: "ttypescript@npm:1.5.13" dependencies: @@ -14260,22 +14726,6 @@ __metadata: languageName: node linkType: hard -"tunnel-agent@npm:^0.6.0": - version: 0.6.0 - resolution: "tunnel-agent@npm:0.6.0" - dependencies: - safe-buffer: ^5.0.1 - checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 - languageName: node - linkType: hard - -"tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": - version: 0.14.5 - resolution: "tweetnacl@npm:0.14.5" - checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 - languageName: node - linkType: hard - "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -14336,6 +14786,20 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^1.0.1": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 + languageName: node + linkType: hard + +"type-fest@npm:^2.13.0": + version: 2.16.0 + resolution: "type-fest@npm:2.16.0" + checksum: 897fc5f6833de5ade5c4841d034bdfb6aaa168f24f725354ad13320b2a463b9df03a7a664b836b4c3bc7d9f92b22a25c26fe24668a35caf3b7a9ea5fcb847b8d + languageName: node + linkType: hard + "type-is@npm:1.6.18, type-is@npm:^1.6.14, type-is@npm:^1.6.16, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -14433,6 +14897,13 @@ __metadata: languageName: node linkType: hard +"undici@npm:^5.4.0": + version: 5.8.0 + resolution: "undici@npm:5.8.0" + checksum: 7b486ad064da00628d3906e140b86223023cd3494c811da8d7aa1375c2392fe6a6ac421af236c056fd3d3136bba3a91b99e0505dde071dd946070946eb0718b8 + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -14491,6 +14962,15 @@ __metadata: languageName: node linkType: hard +"unique-string@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-string@npm:3.0.0" + dependencies: + crypto-random-string: ^4.0.0 + checksum: 1a1e2e7d02eab1bb10f720475da735e1990c8a5ff34edd1a3b6bc31590cb4210b7a1233d779360cc622ce11c211e43afa1628dd658f35d3e6a89964b622940df + languageName: node + linkType: hard + "universalify@npm:^0.1.2": version: 0.1.2 resolution: "universalify@npm:0.1.2" @@ -14548,6 +15028,28 @@ __metadata: languageName: node linkType: hard +"update-notifier@npm:^6.0.2": + version: 6.0.2 + resolution: "update-notifier@npm:6.0.2" + dependencies: + boxen: ^7.0.0 + chalk: ^5.0.1 + configstore: ^6.0.0 + has-yarn: ^3.0.0 + import-lazy: ^4.0.0 + is-ci: ^3.0.1 + is-installed-globally: ^0.4.0 + is-npm: ^6.0.0 + is-yarn-global: ^0.4.0 + latest-version: ^7.0.0 + pupa: ^3.1.0 + semver: ^7.3.7 + semver-diff: ^4.0.0 + xdg-basedir: ^5.1.0 + checksum: 4bae7b3eca7b2068b6b87dde88c9dad24831fa913a5b83ecb39a7e4702c93e8b05fd9bcac5f1a005178f6e5dc859e0b3817ddda833d2a7ab92c6485e078b3cc8 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -14603,16 +15105,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.3.2": - version: 3.4.0 - resolution: "uuid@npm:3.4.0" - bin: - uuid: ./bin/uuid - checksum: 58de2feed61c59060b40f8203c0e4ed7fd6f99d42534a499f1741218a1dd0c129f4aa1de797bcf822c8ea5da7e4137aa3673431a96dae729047f7aca7b27866f - languageName: node - linkType: hard - -"uuidv4@npm:^6.2.12": +"uuidv4@npm:^6.2.13": version: 6.2.13 resolution: "uuidv4@npm:6.2.13" dependencies: @@ -14661,15 +15154,6 @@ __metadata: languageName: node linkType: hard -"validate-npm-package-name@npm:^3.0.0": - version: 3.0.0 - resolution: "validate-npm-package-name@npm:3.0.0" - dependencies: - builtins: ^1.0.3 - checksum: ce4c68207abfb22c05eedb09ff97adbcedc80304a235a0844f5344f1fd5086aa80e4dbec5684d6094e26e35065277b765c1caef68bcea66b9056761eddb22967 - languageName: node - linkType: hard - "validate-npm-package-name@npm:^4.0.0": version: 4.0.0 resolution: "validate-npm-package-name@npm:4.0.0" @@ -14686,17 +15170,6 @@ __metadata: languageName: node linkType: hard -"verror@npm:1.10.0": - version: 1.10.0 - resolution: "verror@npm:1.10.0" - dependencies: - assert-plus: ^1.0.0 - core-util-is: 1.0.2 - extsprintf: ^1.2.0 - checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea - languageName: node - linkType: hard - "w3c-hr-time@npm:^1.0.2": version: 1.0.2 resolution: "w3c-hr-time@npm:1.0.2" @@ -14851,7 +15324,7 @@ __metadata: languageName: node linkType: hard -"wide-align@npm:^1.1.0, wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": +"wide-align@npm:^1.1.2, wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" dependencies: @@ -14869,6 +15342,15 @@ __metadata: languageName: node linkType: hard +"widest-line@npm:^4.0.1": + version: 4.0.1 + resolution: "widest-line@npm:4.0.1" + dependencies: + string-width: ^5.0.1 + checksum: 64c48cf27171221be5f86fc54b94dd29879165bdff1a7aa92dde723d9a8c99fb108312768a5d62c8c2b80b701fa27bbd36a1ddc58367585cd45c0db7920a0cba + languageName: node + linkType: hard + "window-size@npm:0.1.0": version: 0.1.0 resolution: "window-size@npm:0.1.0" @@ -14985,6 +15467,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^8.0.1": + version: 8.0.1 + resolution: "wrap-ansi@npm:8.0.1" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 5d7816e64f75544e466d58a736cb96ca47abad4ad57f48765b9735ba5601221013a37f436662340ca159208b011121e4e030de5a17180c76202e35157195a71e + languageName: node + linkType: hard + "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" @@ -14992,7 +15485,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^3.0.0": +"write-file-atomic@npm:^3.0.0, write-file-atomic@npm:^3.0.3": version: 3.0.3 resolution: "write-file-atomic@npm:3.0.3" dependencies: @@ -15014,7 +15507,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.4.2, ws@npm:^7.4.6, ws@npm:^7.5.5": +"ws@npm:^7.4.2, ws@npm:^7.4.6": version: 7.5.8 resolution: "ws@npm:7.5.8" peerDependencies: @@ -15029,6 +15522,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.8.0": + version: 8.8.1 + resolution: "ws@npm:8.8.1" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 2152cf862cae0693f3775bc688a6afb2e989d19d626d215e70f5fcd8eb55b1c3b0d3a6a4052905ec320e2d7734e20aeedbf9744496d62f15a26ad79cf4cf7dae + languageName: node + linkType: hard + "xdg-basedir@npm:^4.0.0": version: 4.0.0 resolution: "xdg-basedir@npm:4.0.0" @@ -15036,6 +15544,13 @@ __metadata: languageName: node linkType: hard +"xdg-basedir@npm:^5.0.1, xdg-basedir@npm:^5.1.0": + version: 5.1.0 + resolution: "xdg-basedir@npm:5.1.0" + checksum: b60e8a2c663ccb1dac77c2d913f3b96de48dafbfa083657171d3d50e10820b8a04bb4edfe9f00808c8c20e5f5355e1927bea9029f03136e29265cb98291e1fea + languageName: node + linkType: hard + "xml-name-validator@npm:^3.0.0": version: 3.0.0 resolution: "xml-name-validator@npm:3.0.0" @@ -15085,6 +15600,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:4.0.0, yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + "yallist@npm:^2.1.2": version: 2.1.2 resolution: "yallist@npm:2.1.2" @@ -15092,13 +15614,6 @@ __metadata: languageName: node linkType: hard -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - "yaml-ast-parser@npm:0.0.43": version: 0.0.43 resolution: "yaml-ast-parser@npm:0.0.43" @@ -15144,7 +15659,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^18.1.2, yargs-parser@npm:^18.1.3": +"yargs-parser@npm:^18.1.2": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" dependencies: @@ -15161,18 +15676,6 @@ __metadata: languageName: node linkType: hard -"yargs-unparser@npm:^2.0.0": - version: 2.0.0 - resolution: "yargs-unparser@npm:2.0.0" - dependencies: - camelcase: ^6.0.0 - decamelize: ^4.0.0 - flat: ^5.0.2 - is-plain-obj: ^2.1.0 - checksum: 68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 - languageName: node - linkType: hard - "yargs@npm:17.0.1": version: 17.0.1 resolution: "yargs@npm:17.0.1" @@ -15242,7 +15745,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.1, yargs@npm:^17.3.1": +"yargs@npm:^17.0.0, yargs@npm:^17.0.1, yargs@npm:^17.3.1": version: 17.5.1 resolution: "yargs@npm:17.5.1" dependencies: