From 4b800202fb98d9e76f8aa2ab4e80d8d0458bd321 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Thu, 22 Jun 2023 22:26:23 -0400 Subject: [PATCH 001/189] git app with probot --- secret-engine/.dockerignore | 12 + secret-engine/.env.example | 9 + secret-engine/.gitignore | 7 + secret-engine/CODE_OF_CONDUCT.md | 73 + secret-engine/CONTRIBUTING.md | 39 + secret-engine/Dockerfile | 8 + secret-engine/LICENSE | 15 + secret-engine/README.md | 33 + secret-engine/app.yml | 134 + secret-engine/fileContents.txt | 15 + secret-engine/jest.config.js | 9 + secret-engine/package-lock.json | 11654 ++++++++++++++++ secret-engine/package.json | 34 + secret-engine/src/index.ts | 151 + .../test/fixtures/issues.opened.json | 18 + secret-engine/test/fixtures/mock-cert.pem | 27 + secret-engine/test/index.test.ts | 74 + secret-engine/tsconfig.json | 70 + 18 files changed, 12382 insertions(+) create mode 100644 secret-engine/.dockerignore create mode 100644 secret-engine/.env.example create mode 100644 secret-engine/.gitignore create mode 100644 secret-engine/CODE_OF_CONDUCT.md create mode 100644 secret-engine/CONTRIBUTING.md create mode 100644 secret-engine/Dockerfile create mode 100644 secret-engine/LICENSE create mode 100644 secret-engine/README.md create mode 100644 secret-engine/app.yml create mode 100644 secret-engine/fileContents.txt create mode 100644 secret-engine/jest.config.js create mode 100644 secret-engine/package-lock.json create mode 100644 secret-engine/package.json create mode 100644 secret-engine/src/index.ts create mode 100644 secret-engine/test/fixtures/issues.opened.json create mode 100644 secret-engine/test/fixtures/mock-cert.pem create mode 100644 secret-engine/test/index.test.ts create mode 100644 secret-engine/tsconfig.json diff --git a/secret-engine/.dockerignore b/secret-engine/.dockerignore new file mode 100644 index 000000000..c961acb50 --- /dev/null +++ b/secret-engine/.dockerignore @@ -0,0 +1,12 @@ +**/node_modules/ +**/.git +**/README.md +**/LICENSE +**/.vscode +**/npm-debug.log +**/coverage +**/.env +**/.editorconfig +**/dist +**/*.pem +Dockerfile diff --git a/secret-engine/.env.example b/secret-engine/.env.example new file mode 100644 index 000000000..6e106aa9d --- /dev/null +++ b/secret-engine/.env.example @@ -0,0 +1,9 @@ +# The ID of your GitHub App +APP_ID= +WEBHOOK_SECRET=development + +# Use `trace` to get verbose logging or `info` to show less +LOG_LEVEL=debug + +# Go to https://smee.io/new set this to the URL that you are redirected to. +WEBHOOK_PROXY_URL= diff --git a/secret-engine/.gitignore b/secret-engine/.gitignore new file mode 100644 index 000000000..b3d906d52 --- /dev/null +++ b/secret-engine/.gitignore @@ -0,0 +1,7 @@ +node_modules +npm-debug.log +*.pem +!mock-cert.pem +.env +coverage +lib diff --git a/secret-engine/CODE_OF_CONDUCT.md b/secret-engine/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..203ff8f13 --- /dev/null +++ b/secret-engine/CODE_OF_CONDUCT.md @@ -0,0 +1,73 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +education, socio-economic status, nationality, personal appearance, race, +religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at . All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org diff --git a/secret-engine/CONTRIBUTING.md b/secret-engine/CONTRIBUTING.md new file mode 100644 index 000000000..f6ebb8125 --- /dev/null +++ b/secret-engine/CONTRIBUTING.md @@ -0,0 +1,39 @@ +## Contributing + +[fork]: /fork +[pr]: /compare +[code-of-conduct]: CODE_OF_CONDUCT.md + +Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. + +Please note that this project is released with a [Contributor Code of Conduct][code-of-conduct]. By participating in this project you agree to abide by its terms. + +## Issues and PRs + +If you have suggestions for how this project could be improved, or want to report a bug, open an issue! We'd love all and any contributions. If you have questions, too, we'd love to hear them. + +We'd also love PRs. If you're thinking of a large PR, we advise opening up an issue first to talk about it, though! Look at the links below if you're not sure how to open a PR. + +## Submitting a pull request + +1. [Fork][fork] and clone the repository. +1. Configure and install the dependencies: `npm install`. +1. Make sure the tests pass on your machine: `npm test`, note: these tests also apply the linter, so there's no need to lint separately. +1. Create a new branch: `git checkout -b my-branch-name`. +1. Make your change, add tests, and make sure the tests still pass. +1. Push to your fork and [submit a pull request][pr]. +1. Pat your self on the back and wait for your pull request to be reviewed and merged. + +Here are a few things you can do that will increase the likelihood of your pull request being accepted: + +- Write and update tests. +- Keep your changes as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests. +- Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). + +Work in Progress pull requests are also welcome to get feedback early on, or if there is something blocked you. + +## Resources + +- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) +- [Using Pull Requests](https://help.github.com/articles/about-pull-requests/) +- [GitHub Help](https://help.github.com) diff --git a/secret-engine/Dockerfile b/secret-engine/Dockerfile new file mode 100644 index 000000000..c1cd23e10 --- /dev/null +++ b/secret-engine/Dockerfile @@ -0,0 +1,8 @@ +FROM node:18-slim +WORKDIR /usr/src/app +COPY package.json package-lock.json ./ +RUN npm ci --production +RUN npm cache clean --force +ENV NODE_ENV="production" +COPY . . +CMD [ "npm", "start" ] diff --git a/secret-engine/LICENSE b/secret-engine/LICENSE new file mode 100644 index 000000000..929df0bac --- /dev/null +++ b/secret-engine/LICENSE @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2023, Maidul Islam + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/secret-engine/README.md b/secret-engine/README.md new file mode 100644 index 000000000..f70e2afd0 --- /dev/null +++ b/secret-engine/README.md @@ -0,0 +1,33 @@ +# secret-engine + +> A GitHub App built with [Probot](https://github.com/probot/probot) that Infisical secret engine + +## Setup + +```sh +# Install dependencies +npm install + +# Run the bot +npm start +``` + +## Docker + +```sh +# 1. Build container +docker build -t secret-engine . + +# 2. Start container +docker run -e APP_ID= -e PRIVATE_KEY= secret-engine +``` + +## Contributing + +If you have suggestions for how secret-engine could be improved, or want to report a bug, open an issue! We'd love all and any contributions. + +For more, check out the [Contributing Guide](CONTRIBUTING.md). + +## License + +[ISC](LICENSE) © 2023 Maidul Islam diff --git a/secret-engine/app.yml b/secret-engine/app.yml new file mode 100644 index 000000000..baea2801a --- /dev/null +++ b/secret-engine/app.yml @@ -0,0 +1,134 @@ +# This is a GitHub App Manifest. These settings will be used by default when +# initially configuring your GitHub App. +# +# NOTE: changing this file will not update your GitHub App settings. +# You must visit github.com/settings/apps/your-app-name to edit them. +# +# Read more about configuring your GitHub App: +# https://probot.github.io/docs/development/#configuring-a-github-app +# +# Read more about GitHub App Manifests: +# https://developer.github.com/apps/building-github-apps/creating-github-apps-from-a-manifest/ + +# The list of events the GitHub App subscribes to. +# Uncomment the event names below to enable them. +default_events: + # - check_run + # - check_suite + # - commit_comment + # - create + # - delete + # - deployment + # - deployment_status + # - fork + # - gollum + # - issue_comment + - issues + - push +# - label +# - milestone +# - member +# - membership +# - org_block +# - organization +# - page_build +# - project +# - project_card +# - project_column +# - public +# - pull_request +# - pull_request_review +# - pull_request_review_comment +# - release +# - repository +# - repository_import +# - status +# - team +# - team_add +# - watch + +# The set of permissions needed by the GitHub App. The format of the object uses +# the permission name for the key (for example, issues) and the access type for +# the value (for example, write). +# Valid values are `read`, `write`, and `none` +default_permissions: + # Repository creation, deletion, settings, teams, and collaborators. + # https://developer.github.com/v3/apps/permissions/#permission-on-administration + # administration: read + + # Checks on code. + # https://developer.github.com/v3/apps/permissions/#permission-on-checks + checks: write + + # Repository contents, commits, branches, downloads, releases, and merges. + # https://developer.github.com/v3/apps/permissions/#permission-on-contents + contents: read + + # Deployments and deployment statuses. + # https://developer.github.com/v3/apps/permissions/#permission-on-deployments + # deployments: read + + # Issues and related comments, assignees, labels, and milestones. + # https://developer.github.com/v3/apps/permissions/#permission-on-issues + issues: write + + # Search repositories, list collaborators, and access repository metadata. + # https://developer.github.com/v3/apps/permissions/#metadata-permissions + metadata: read + + # Retrieve Pages statuses, configuration, and builds, as well as create new builds. + # https://developer.github.com/v3/apps/permissions/#permission-on-pages + # pages: read + + # Pull requests and related comments, assignees, labels, milestones, and merges. + # https://developer.github.com/v3/apps/permissions/#permission-on-pull-requests + pull_requests: write + + # Manage the post-receive hooks for a repository. + # https://developer.github.com/v3/apps/permissions/#permission-on-repository-hooks + # repository_hooks: read + + # Manage repository projects, columns, and cards. + # https://developer.github.com/v3/apps/permissions/#permission-on-repository-projects + # repository_projects: read + + # Retrieve security vulnerability alerts. + # https://developer.github.com/v4/object/repositoryvulnerabilityalert/ + # vulnerability_alerts: read + + # Commit statuses. + # https://developer.github.com/v3/apps/permissions/#permission-on-statuses + # statuses: read + + # Organization members and teams. + # https://developer.github.com/v3/apps/permissions/#permission-on-members + # members: read + + # View and manage users blocked by the organization. + # https://developer.github.com/v3/apps/permissions/#permission-on-organization-user-blocking + # organization_user_blocking: read + + # Manage organization projects, columns, and cards. + # https://developer.github.com/v3/apps/permissions/#permission-on-organization-projects + # organization_projects: read + + # Manage team discussions and related comments. + # https://developer.github.com/v3/apps/permissions/#permission-on-team-discussions + # team_discussions: read + + # Manage the post-receive hooks for an organization. + # https://developer.github.com/v3/apps/permissions/#permission-on-organization-hooks + # organization_hooks: read + + # Get notified of, and update, content references. + # https://developer.github.com/v3/apps/permissions/ + # organization_administration: read +# The name of the GitHub App. Defaults to the name specified in package.json +name: Infisical Radar +# The homepage of your GitHub App. +url: https://infisical.com/radar +# A description of the GitHub App. +description: A description of my awesome app +# Set to true when your GitHub App is available to the public or false when it is only accessible to the owner of the app. +# Default: true +# public: false diff --git a/secret-engine/fileContents.txt b/secret-engine/fileContents.txt new file mode 100644 index 000000000..415b5537d --- /dev/null +++ b/secret-engine/fileContents.txt @@ -0,0 +1,15 @@ +# New-folder +Our small pizza is 10 inches and serves 1—3 people.fOr you can orderffwef a larger pizza size and sfwefweplit the toppings so that everyone dines happy. +ddfdfdfd +Our small pizza is 10 inches and serves 1—3 people.fOr you can orderffwef a larger pizza size and sfwefweplit the toppings so that everyone dines happy. +Our small pizz + +cc +ss123 + +JWT_AUTH_SECRET=4be6ba5602e0fa0ac6ac05c3cd4d247f + +export CLOUDSMITH_API_KEY=f5cf077b879c2ab46a49c6f1ec4199e6fba0fc0b +1234abc + +ssd diff --git a/secret-engine/jest.config.js b/secret-engine/jest.config.js new file mode 100644 index 000000000..9ee81b0f3 --- /dev/null +++ b/secret-engine/jest.config.js @@ -0,0 +1,9 @@ +module.exports = { + roots: ["/src/", "/test/"], + transform: { + "^.+\\.tsx?$": "ts-jest", + }, + testRegex: "(/__tests__/.*|\\.(test|spec))\\.[tj]sx?$", + moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], + testEnvironment: "node", +}; diff --git a/secret-engine/package-lock.json b/secret-engine/package-lock.json new file mode 100644 index 000000000..dfaeb146a --- /dev/null +++ b/secret-engine/package-lock.json @@ -0,0 +1,11654 @@ +{ + "name": "secret-engine", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "secret-engine", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "probot": "^12.2.4" + }, + "devDependencies": { + "@types/jest": "^29.0.0", + "@types/node": "^18.0.0", + "jest": "^29.0.0", + "nock": "^13.0.5", + "smee-client": "^1.2.2", + "ts-jest": "^29.0.0", + "typescript": "^4.1.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@hapi/bourne": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.1.0.tgz", + "integrity": "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@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": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/jest-config": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@jest/environment": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "dev": true, + "dependencies": { + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@jridgewell/trace-mapping": "^0.3.15", + "@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": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.5.0", + "@jridgewell/trace-mapping": "^0.3.15", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@octokit/auth-app": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.13.tgz", + "integrity": "sha512-NBQkmR/Zsc+8fWcVIFrwDgNXS7f4XDrkd9LHdi9DPQw1NdGHLviLzRO2ZBwTtepnwHXW5VTrVU9eFGijMUqllg==", + "dependencies": { + "@octokit/auth-oauth-app": "^5.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "deprecation": "^2.3.1", + "lru-cache": "^9.0.0", + "universal-github-app-jwt": "^1.1.1", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-app/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/auth-app/node_modules/lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/@octokit/auth-oauth-app": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.6.tgz", + "integrity": "sha512-SxyfIBfeFcWd9Z/m1xa4LENTQ3l1y6Nrg31k2Dcb1jS5ov7pmwMJZ6OGX8q3K9slRgVpeAjNA1ipOAMHkieqyw==", + "dependencies": { + "@octokit/auth-oauth-device": "^4.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "@types/btoa-lite": "^1.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/auth-oauth-device": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.5.tgz", + "integrity": "sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ==", + "dependencies": { + "@octokit/oauth-methods": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/auth-oauth-user": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.2.tgz", + "integrity": "sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg==", + "dependencies": { + "@octokit/auth-oauth-device": "^4.0.0", + "@octokit/oauth-methods": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/auth-token/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/auth-token/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/auth-unauthenticated": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.5.tgz", + "integrity": "sha512-yH2GPFcjrTvDWPwJWWCh0tPPtTL5SMgivgKPA+6v/XmYN6hGQkAto8JtZibSKOpf8ipmeYhLNWQ2UgW0GYILCw==", + "dependencies": { + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/auth-unauthenticated/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/graphql/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/oauth-authorization-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", + "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/oauth-methods": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.6.tgz", + "integrity": "sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw==", + "dependencies": { + "@octokit/oauth-authorization-url": "^5.0.0", + "@octokit/request": "^6.2.3", + "@octokit/request-error": "^3.0.3", + "@octokit/types": "^9.0.0", + "btoa-lite": "^1.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "dependencies": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "dependencies": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "node_modules/@octokit/plugin-enterprise-compatibility": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-compatibility/-/plugin-enterprise-compatibility-1.3.0.tgz", + "integrity": "sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ==", + "dependencies": { + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/plugin-enterprise-compatibility/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/plugin-enterprise-compatibility/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", + "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "dependencies": { + "@octokit/types": "^6.40.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "dependencies": { + "@octokit/types": "^6.39.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", + "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", + "dependencies": { + "@octokit/types": "^6.0.3", + "bottleneck": "^2.15.3" + } + }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz", + "integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==", + "dependencies": { + "@octokit/types": "^6.0.1", + "bottleneck": "^2.15.3" + }, + "peerDependencies": { + "@octokit/core": "^3.5.0" + } + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/plugin-throttling/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/request-error/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "dependencies": { + "@octokit/openapi-types": "^12.11.0" + } + }, + "node_modules/@octokit/types": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.2.1.tgz", + "integrity": "sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==", + "dependencies": { + "@octokit/openapi-types": "^14.0.0" + } + }, + "node_modules/@octokit/webhooks": { + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.26.0.tgz", + "integrity": "sha512-foZlsgrTDwAmD5j2Czn6ji10lbWjGDVsUxTIydjG9KTkAWKJrFapXJgO5SbGxRwfPd3OJdhK3nA2YPqVhxLXqA==", + "dependencies": { + "@octokit/request-error": "^2.0.2", + "@octokit/webhooks-methods": "^2.0.0", + "@octokit/webhooks-types": "5.8.0", + "aggregate-error": "^3.1.0" + } + }, + "node_modules/@octokit/webhooks-methods": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz", + "integrity": "sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig==" + }, + "node_modules/@octokit/webhooks-types": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.8.0.tgz", + "integrity": "sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw==" + }, + "node_modules/@probot/get-private-key": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@probot/get-private-key/-/get-private-key-1.1.1.tgz", + "integrity": "sha512-hOmBNSAhSZc6PaNkTvj6CO9R5J67ODJ+w5XQlDW9w/6mtcpHWK4L+PZcW0YwVM7PpetLZjN6rsKQIR9yqIaWlA==", + "dependencies": { + "@types/is-base64": "^1.1.0", + "is-base64": "^1.1.0" + } + }, + "node_modules/@probot/octokit-plugin-config": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@probot/octokit-plugin-config/-/octokit-plugin-config-1.1.6.tgz", + "integrity": "sha512-L29wmnFvilzSfWn9tUgItxdLv0LJh2ICjma3FmLr80Spu3wZ9nHyRrKMo9R5/K2m7VuWmgoKnkgRt2zPzAQBEQ==", + "dependencies": { + "@types/js-yaml": "^4.0.5", + "js-yaml": "^4.1.0" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@probot/octokit-plugin-config/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/@probot/octokit-plugin-config/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@probot/pino": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@probot/pino/-/pino-2.3.5.tgz", + "integrity": "sha512-IiyiNZonMw1dHC4EAdD55y5owV733d9Gll/IKsrLikB7EJ54+eMCOtL/qo+OmgWN9XV3NTDfziEQF2og/OBKog==", + "dependencies": { + "@sentry/node": "^6.0.0", + "pino-pretty": "^6.0.0", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "split2": "^4.0.0" + }, + "bin": { + "pino-probot": "cli.js" + } + }, + "node_modules/@sentry/core": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", + "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", + "dependencies": { + "@sentry/hub": "6.19.7", + "@sentry/minimal": "6.19.7", + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", + "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", + "dependencies": { + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", + "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", + "dependencies": { + "@sentry/hub": "6.19.7", + "@sentry/types": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", + "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==", + "dependencies": { + "@sentry/core": "6.19.7", + "@sentry/hub": "6.19.7", + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/types": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", + "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", + "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", + "dependencies": { + "@sentry/types": "6.19.7", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ioredis": { + "version": "4.28.10", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.10.tgz", + "integrity": "sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/is-base64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/is-base64/-/is-base64-1.1.1.tgz", + "integrity": "sha512-JgnGhP+MeSHEQmvxcobcwPEP4Ew56voiq9/0hmP/41lyQ/3gBw/ZCIRy2v+QkEOdeCl58lRcrf6+Y6WMlJGETA==" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.2.tgz", + "integrity": "sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==" + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "node_modules/@types/node": { + "version": "18.16.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", + "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==" + }, + "node_modules/@types/pino": { + "version": "6.3.12", + "resolved": "https://registry.npmjs.org/@types/pino/-/pino-6.3.12.tgz", + "integrity": "sha512-dsLRTq8/4UtVSpJgl9aeqHvbh6pzdmjYD3C092SYgLD2TyoCqHpTJk6vp8DvCTGGc7iowZ2MoiYiVUUCcu7muw==", + "dependencies": { + "@types/node": "*", + "@types/pino-pretty": "*", + "@types/pino-std-serializers": "*", + "sonic-boom": "^2.1.0" + } + }, + "node_modules/@types/pino-http": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@types/pino-http/-/pino-http-5.8.1.tgz", + "integrity": "sha512-A9MW6VCnx5ii7s+Fs5aFIw+aSZcBCpsZ/atpxamu8tTsvWFacxSf2Hrn1Ohn1jkVRB/LiPGOapRXcFawDBnDnA==", + "dependencies": { + "@types/pino": "6.3" + } + }, + "node_modules/@types/pino-pretty": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/pino-pretty/-/pino-pretty-5.0.0.tgz", + "integrity": "sha512-N1uzqSzioqz8R3AkDbSJwcfDWeI3YMPNapSQQhnB2ISU4NYgUIcAh+hYT5ygqBM+klX4htpEhXMmoJv3J7GrdA==", + "deprecated": "This is a stub types definition. pino-pretty provides its own type definitions, so you do not need this installed.", + "dependencies": { + "pino-pretty": "*" + } + }, + "node_modules/@types/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-gXfUZx2xIBbFYozGms53fT0nvkacx/+62c8iTxrEqH5PkIGAQvDbXg2774VWOycMPbqn5YJBQ3BMsg4Li3dWbg==", + "deprecated": "This is a stub types definition. pino-std-serializers provides its own type definitions, so you do not need this installed.", + "dependencies": { + "pino-std-serializers": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/args": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", + "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", + "dependencies": { + "camelcase": "5.0.0", + "chalk": "2.4.2", + "leven": "2.1.0", + "mri": "1.1.4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/args/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/args/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/args/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/args/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/args/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/babel-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.5.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "engines": { + "node": "*" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.435", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.435.tgz", + "integrity": "sha512-B0CBWVFhvoQCW/XtjRzgrmqcgVWg6RXOEM/dK59+wFV93BFGR6AeNKc4OyhM+T3IhJaOOG8o/V+33Y2mwJWtzw==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-handlebars": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.7.tgz", + "integrity": "sha512-iYeMFpc/hMD+E6FNAZA5fgWeXnXr4rslOSPkeEV6TwdmpJ5lEXuWX0u9vFYs31P2MURctQq2batR09oeNj0LIg==", + "dependencies": { + "glob": "^8.1.0", + "graceful-fs": "^4.2.10", + "handlebars": "^4.7.7" + }, + "engines": { + "node": ">=v12.22.9" + } + }, + "node_modules/express-handlebars/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/express-handlebars/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/express-handlebars/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-redact": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", + "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ioredis": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz", + "integrity": "sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==", + "dependencies": { + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.1", + "denque": "^1.1.0", + "lodash.defaults": "^4.2.0", + "lodash.flatten": "^4.4.0", + "lodash.isarguments": "^3.1.0", + "p-map": "^2.1.0", + "redis-commands": "1.7.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ioredis" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "node_modules/is-base64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-1.1.0.tgz", + "integrity": "sha512-Nlhg7Z2dVC4/PTvIFkgVVNvPHSO2eR/Yd0XzhGiXCXEvWnptXlXa/clQ8aePPiMuxEGcWfzWbGw2Fe3d+Y3v1g==", + "bin": { + "is_base64": "bin/is-base64", + "is-base64": "bin/is-base64" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", + "dev": true, + "dependencies": { + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", + "import-local": "^3.0.2", + "jest-cli": "^29.5.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/jest-config": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", + "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-util": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.5.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.5.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.5.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.5.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsonwebtoken/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "node_modules/lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/mri": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nock": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.1.tgz", + "integrity": "sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/octokit-auth-probot": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/octokit-auth-probot/-/octokit-auth-probot-1.2.9.tgz", + "integrity": "sha512-mMjw6Y760EwJnW2tSVooJK8BMdsG6D40SoCclnefVf/5yWjaNVquEu8NREBVWb60OwbpnMEz4vREXHB5xdMFYQ==", + "dependencies": { + "@octokit/auth-app": "^4.0.2", + "@octokit/auth-token": "^3.0.0", + "@octokit/auth-unauthenticated": "^3.0.0", + "@octokit/types": "^8.0.0" + }, + "peerDependencies": { + "@octokit/core": ">=3.2" + } + }, + "node_modules/octokit-auth-probot/node_modules/@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pino": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", + "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", + "dependencies": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.8", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-http": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-5.8.0.tgz", + "integrity": "sha512-YwXiyRb9y0WCD1P9PcxuJuh3Dc5qmXde/paJE86UGYRdiFOi828hR9iUGmk5gaw6NBT9gLtKANOHFimvh19U5w==", + "dependencies": { + "fast-url-parser": "^1.1.3", + "pino": "^6.13.0", + "pino-std-serializers": "^4.0.0" + } + }, + "node_modules/pino-http/node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" + }, + "node_modules/pino-pretty": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-6.0.0.tgz", + "integrity": "sha512-jyeR2fXXWc68st1DTTM5NhkHlx8p+1fKZMfm84Jwq+jSw08IwAjNaZBZR6ts69hhPOfOjg/NiE1HYW7vBRPL3A==", + "dependencies": { + "@hapi/bourne": "^2.0.0", + "args": "^5.0.1", + "colorette": "^1.3.0", + "dateformat": "^4.5.1", + "fast-safe-stringify": "^2.0.7", + "jmespath": "^0.15.0", + "joycon": "^3.0.0", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "rfdc": "^1.3.0", + "split2": "^3.1.1", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/pino-pretty/node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.1.tgz", + "integrity": "sha512-wHuWB+CvSVb2XqXM0W/WOYUkVSPbiJb9S5fNB7TBhd8s892Xq910bRxwHtC4l71hgztObTjXL6ZheZXFjhDrDQ==" + }, + "node_modules/pino/node_modules/pino-std-serializers": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", + "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" + }, + "node_modules/pino/node_modules/sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dependencies": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/probot": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/probot/-/probot-12.3.1.tgz", + "integrity": "sha512-ECSgycmAC0ILEK6cOa+x3QPufP5JybsuohOFCYr3glQU5SkbmypZJE/Sfio9mxAFHK5LCXveIDsfZCxf6ck4JA==", + "dependencies": { + "@octokit/core": "^3.2.4", + "@octokit/plugin-enterprise-compatibility": "^1.2.8", + "@octokit/plugin-paginate-rest": "^2.6.2", + "@octokit/plugin-rest-endpoint-methods": "^5.0.1", + "@octokit/plugin-retry": "^3.0.6", + "@octokit/plugin-throttling": "^3.3.4", + "@octokit/types": "^8.0.0", + "@octokit/webhooks": "^9.8.4", + "@probot/get-private-key": "^1.1.0", + "@probot/octokit-plugin-config": "^1.0.0", + "@probot/pino": "^2.2.0", + "@types/express": "^4.17.9", + "@types/ioredis": "^4.27.1", + "@types/pino": "^6.3.4", + "@types/pino-http": "^5.0.6", + "commander": "^6.2.0", + "deepmerge": "^4.2.2", + "deprecation": "^2.3.1", + "dotenv": "^8.2.0", + "eventsource": "^2.0.2", + "express": "^4.17.1", + "express-handlebars": "^6.0.3", + "ioredis": "^4.27.8", + "js-yaml": "^3.14.1", + "lru-cache": "^6.0.0", + "octokit-auth-probot": "^1.2.2", + "pino": "^6.7.0", + "pino-http": "^5.3.0", + "pkg-conf": "^3.1.0", + "resolve": "^1.19.0", + "semver": "^7.3.4", + "update-dotenv": "^1.1.1", + "uuid": "^8.3.2" + }, + "bin": { + "probot": "bin/probot.js" + }, + "engines": { + "node": ">=10.21" + } + }, + "node_modules/probot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/probot/node_modules/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/probot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/redis-commands": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", + "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" + }, + "node_modules/redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "dependencies": { + "redis-errors": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smee-client": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/smee-client/-/smee-client-1.2.3.tgz", + "integrity": "sha512-uDrU8u9/Ln7aRXyzGHgVaNUS8onHZZeSwQjCdkMoSL7U85xI+l+Y2NgjibkMJAyXkW7IAbb8rw9RMHIjS6lAwA==", + "dev": true, + "dependencies": { + "commander": "^2.19.0", + "eventsource": "^1.1.0", + "morgan": "^1.9.1", + "superagent": "^7.1.3", + "validator": "^13.7.0" + }, + "bin": { + "smee": "bin/smee.js" + } + }, + "node_modules/smee-client/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/smee-client/node_modules/eventsource": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.2.tgz", + "integrity": "sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.5.tgz", + "integrity": "sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "^2.5.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/superagent/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-jest": { + "version": "29.1.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", + "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/universal-github-app-jwt": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", + "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "dependencies": { + "@types/jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.0" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-dotenv": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-dotenv/-/update-dotenv-1.1.1.tgz", + "integrity": "sha512-3cIC18In/t0X/yH793c00qqxcKD8jVCgNOPif/fGQkFpYMGecM9YAc+kaAKXuZsM2dE9I9wFI7KvAuNX22SGMQ==", + "peerDependencies": { + "dotenv": "*" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/compat-data": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", + "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "dev": true + }, + "@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", + "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", + "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", + "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "dev": true, + "requires": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", + "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "dev": true + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + } + }, + "@babel/traverse": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", + "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", + "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@hapi/bourne": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.1.0.tgz", + "integrity": "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==" + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", + "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", + "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "dev": true, + "requires": { + "@jest/console": "^29.5.0", + "@jest/reporters": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@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": "^29.5.0", + "jest-config": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-resolve-dependencies": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "jest-watcher": "^29.5.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "jest-config": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + } + } + }, + "@jest/environment": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", + "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "dev": true, + "requires": { + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0" + } + }, + "@jest/expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "dev": true, + "requires": { + "expect": "^29.5.0", + "jest-snapshot": "^29.5.0" + } + }, + "@jest/expect-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", + "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3" + } + }, + "@jest/fake-timers": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", + "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + } + }, + "@jest/globals": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", + "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/types": "^29.5.0", + "jest-mock": "^29.5.0" + } + }, + "@jest/reporters": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", + "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@jridgewell/trace-mapping": "^0.3.15", + "@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": "^29.5.0", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + } + }, + "@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.25.16" + } + }, + "@jest/source-map": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", + "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.15", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + } + }, + "@jest/test-result": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", + "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "dev": true, + "requires": { + "@jest/console": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", + "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", + "dev": true, + "requires": { + "@jest/test-result": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "slash": "^3.0.0" + } + }, + "@jest/transform": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", + "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.5.0", + "@jridgewell/trace-mapping": "^0.3.15", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.5.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + } + }, + "@jest/types": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", + "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.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" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } + } + }, + "@octokit/auth-app": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.13.tgz", + "integrity": "sha512-NBQkmR/Zsc+8fWcVIFrwDgNXS7f4XDrkd9LHdi9DPQw1NdGHLviLzRO2ZBwTtepnwHXW5VTrVU9eFGijMUqllg==", + "requires": { + "@octokit/auth-oauth-app": "^5.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "deprecation": "^2.3.1", + "lru-cache": "^9.0.0", + "universal-github-app-jwt": "^1.1.1", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + }, + "lru-cache": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==" + } + } + }, + "@octokit/auth-oauth-app": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.6.tgz", + "integrity": "sha512-SxyfIBfeFcWd9Z/m1xa4LENTQ3l1y6Nrg31k2Dcb1jS5ov7pmwMJZ6OGX8q3K9slRgVpeAjNA1ipOAMHkieqyw==", + "requires": { + "@octokit/auth-oauth-device": "^4.0.0", + "@octokit/auth-oauth-user": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "@types/btoa-lite": "^1.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } + } + }, + "@octokit/auth-oauth-device": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.5.tgz", + "integrity": "sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ==", + "requires": { + "@octokit/oauth-methods": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } + } + }, + "@octokit/auth-oauth-user": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.2.tgz", + "integrity": "sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg==", + "requires": { + "@octokit/auth-oauth-device": "^4.0.0", + "@octokit/oauth-methods": "^2.0.0", + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "btoa-lite": "^1.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } + } + }, + "@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "requires": { + "@octokit/types": "^6.0.3" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/auth-unauthenticated": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.5.tgz", + "integrity": "sha512-yH2GPFcjrTvDWPwJWWCh0tPPtTL5SMgivgKPA+6v/XmYN6hGQkAto8JtZibSKOpf8ipmeYhLNWQ2UgW0GYILCw==", + "requires": { + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } + } + }, + "@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "requires": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "requires": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/oauth-authorization-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", + "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==" + }, + "@octokit/oauth-methods": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.6.tgz", + "integrity": "sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw==", + "requires": { + "@octokit/oauth-authorization-url": "^5.0.0", + "@octokit/request": "^6.2.3", + "@octokit/request-error": "^3.0.3", + "@octokit/types": "^9.0.0", + "btoa-lite": "^1.0.0" + }, + "dependencies": { + "@octokit/endpoint": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", + "requires": { + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/openapi-types": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + }, + "@octokit/request": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", + "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request-error": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", + "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", + "requires": { + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "@octokit/types": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", + "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", + "requires": { + "@octokit/openapi-types": "^18.0.0" + } + } + } + }, + "@octokit/openapi-types": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-14.0.0.tgz", + "integrity": "sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==" + }, + "@octokit/plugin-enterprise-compatibility": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-compatibility/-/plugin-enterprise-compatibility-1.3.0.tgz", + "integrity": "sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ==", + "requires": { + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.0.3" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/plugin-paginate-rest": { + "version": "2.21.3", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", + "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", + "requires": { + "@octokit/types": "^6.40.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "5.16.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", + "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", + "requires": { + "@octokit/types": "^6.39.0", + "deprecation": "^2.3.1" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/plugin-retry": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", + "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", + "requires": { + "@octokit/types": "^6.0.3", + "bottleneck": "^2.15.3" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/plugin-throttling": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz", + "integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==", + "requires": { + "@octokit/types": "^6.0.1", + "bottleneck": "^2.15.3" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "dependencies": { + "@octokit/openapi-types": { + "version": "12.11.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", + "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" + }, + "@octokit/types": { + "version": "6.41.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", + "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", + "requires": { + "@octokit/openapi-types": "^12.11.0" + } + } + } + }, + "@octokit/types": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-8.2.1.tgz", + "integrity": "sha512-8oWMUji8be66q2B9PmEIUyQm00VPDPun07umUWSaCwxmeaquFBro4Hcc3ruVoDo3zkQyZBlRvhIMEYS3pBhanw==", + "requires": { + "@octokit/openapi-types": "^14.0.0" + } + }, + "@octokit/webhooks": { + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.26.0.tgz", + "integrity": "sha512-foZlsgrTDwAmD5j2Czn6ji10lbWjGDVsUxTIydjG9KTkAWKJrFapXJgO5SbGxRwfPd3OJdhK3nA2YPqVhxLXqA==", + "requires": { + "@octokit/request-error": "^2.0.2", + "@octokit/webhooks-methods": "^2.0.0", + "@octokit/webhooks-types": "5.8.0", + "aggregate-error": "^3.1.0" + } + }, + "@octokit/webhooks-methods": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz", + "integrity": "sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig==" + }, + "@octokit/webhooks-types": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.8.0.tgz", + "integrity": "sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw==" + }, + "@probot/get-private-key": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@probot/get-private-key/-/get-private-key-1.1.1.tgz", + "integrity": "sha512-hOmBNSAhSZc6PaNkTvj6CO9R5J67ODJ+w5XQlDW9w/6mtcpHWK4L+PZcW0YwVM7PpetLZjN6rsKQIR9yqIaWlA==", + "requires": { + "@types/is-base64": "^1.1.0", + "is-base64": "^1.1.0" + } + }, + "@probot/octokit-plugin-config": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@probot/octokit-plugin-config/-/octokit-plugin-config-1.1.6.tgz", + "integrity": "sha512-L29wmnFvilzSfWn9tUgItxdLv0LJh2ICjma3FmLr80Spu3wZ9nHyRrKMo9R5/K2m7VuWmgoKnkgRt2zPzAQBEQ==", + "requires": { + "@types/js-yaml": "^4.0.5", + "js-yaml": "^4.1.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@probot/pino": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@probot/pino/-/pino-2.3.5.tgz", + "integrity": "sha512-IiyiNZonMw1dHC4EAdD55y5owV733d9Gll/IKsrLikB7EJ54+eMCOtL/qo+OmgWN9XV3NTDfziEQF2og/OBKog==", + "requires": { + "@sentry/node": "^6.0.0", + "pino-pretty": "^6.0.0", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "split2": "^4.0.0" + } + }, + "@sentry/core": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.19.7.tgz", + "integrity": "sha512-tOfZ/umqB2AcHPGbIrsFLcvApdTm9ggpi/kQZFkej7kMphjT+SGBiQfYtjyg9jcRW+ilAR4JXC9BGKsdEQ+8Vw==", + "requires": { + "@sentry/hub": "6.19.7", + "@sentry/minimal": "6.19.7", + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "tslib": "^1.9.3" + } + }, + "@sentry/hub": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.19.7.tgz", + "integrity": "sha512-y3OtbYFAqKHCWezF0EGGr5lcyI2KbaXW2Ik7Xp8Mu9TxbSTuwTe4rTntwg8ngPjUQU3SUHzgjqVB8qjiGqFXCA==", + "requires": { + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "tslib": "^1.9.3" + } + }, + "@sentry/minimal": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.19.7.tgz", + "integrity": "sha512-wcYmSJOdvk6VAPx8IcmZgN08XTXRwRtB1aOLZm+MVHjIZIhHoBGZJYTVQS/BWjldsamj2cX3YGbGXNunaCfYJQ==", + "requires": { + "@sentry/hub": "6.19.7", + "@sentry/types": "6.19.7", + "tslib": "^1.9.3" + } + }, + "@sentry/node": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.19.7.tgz", + "integrity": "sha512-gtmRC4dAXKODMpHXKfrkfvyBL3cI8y64vEi3fDD046uqYcrWdgoQsffuBbxMAizc6Ez1ia+f0Flue6p15Qaltg==", + "requires": { + "@sentry/core": "6.19.7", + "@sentry/hub": "6.19.7", + "@sentry/types": "6.19.7", + "@sentry/utils": "6.19.7", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.19.7.tgz", + "integrity": "sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==" + }, + "@sentry/utils": { + "version": "6.19.7", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.19.7.tgz", + "integrity": "sha512-z95ECmE3i9pbWoXQrD/7PgkBAzJYR+iXtPuTkpBjDKs86O3mT+PXOT3BAn79w2wkn7/i3vOGD2xVr1uiMl26dA==", + "requires": { + "@sentry/types": "6.19.7", + "tslib": "^1.9.3" + } + }, + "@sinclair/typebox": { + "version": "0.25.24", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", + "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "dev": true + }, + "@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } + }, + "@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "requires": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ioredis": { + "version": "4.28.10", + "resolved": "https://registry.npmjs.org/@types/ioredis/-/ioredis-4.28.10.tgz", + "integrity": "sha512-69LyhUgrXdgcNDv7ogs1qXZomnfOEnSmrmMFqKgt1XMJxmoOSG/u3wYy13yACIfKuMJ8IhKgHafDO3sx19zVQQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/is-base64": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/is-base64/-/is-base64-1.1.1.tgz", + "integrity": "sha512-JgnGhP+MeSHEQmvxcobcwPEP4Ew56voiq9/0hmP/41lyQ/3gBw/ZCIRy2v+QkEOdeCl58lRcrf6+Y6WMlJGETA==" + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "29.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.2.tgz", + "integrity": "sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==", + "dev": true, + "requires": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "@types/js-yaml": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", + "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==" + }, + "@types/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", + "requires": { + "@types/node": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" + }, + "@types/node": { + "version": "18.16.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", + "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==" + }, + "@types/pino": { + "version": "6.3.12", + "resolved": "https://registry.npmjs.org/@types/pino/-/pino-6.3.12.tgz", + "integrity": "sha512-dsLRTq8/4UtVSpJgl9aeqHvbh6pzdmjYD3C092SYgLD2TyoCqHpTJk6vp8DvCTGGc7iowZ2MoiYiVUUCcu7muw==", + "requires": { + "@types/node": "*", + "@types/pino-pretty": "*", + "@types/pino-std-serializers": "*", + "sonic-boom": "^2.1.0" + } + }, + "@types/pino-http": { + "version": "5.8.1", + "resolved": "https://registry.npmjs.org/@types/pino-http/-/pino-http-5.8.1.tgz", + "integrity": "sha512-A9MW6VCnx5ii7s+Fs5aFIw+aSZcBCpsZ/atpxamu8tTsvWFacxSf2Hrn1Ohn1jkVRB/LiPGOapRXcFawDBnDnA==", + "requires": { + "@types/pino": "6.3" + } + }, + "@types/pino-pretty": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/pino-pretty/-/pino-pretty-5.0.0.tgz", + "integrity": "sha512-N1uzqSzioqz8R3AkDbSJwcfDWeI3YMPNapSQQhnB2ISU4NYgUIcAh+hYT5ygqBM+klX4htpEhXMmoJv3J7GrdA==", + "requires": { + "pino-pretty": "*" + } + }, + "@types/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-gXfUZx2xIBbFYozGms53fT0nvkacx/+62c8iTxrEqH5PkIGAQvDbXg2774VWOycMPbqn5YJBQ3BMsg4Li3dWbg==", + "requires": { + "pino-std-serializers": "*" + } + }, + "@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.1.tgz", + "integrity": "sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==", + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "args": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", + "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", + "requires": { + "camelcase": "5.0.0", + "chalk": "2.4.2", + "leven": "2.1.0", + "mri": "1.1.4" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + }, + "babel-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", + "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", + "dev": true, + "requires": { + "@jest/transform": "^29.5.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + } + }, + "bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "requires": { + "fast-json-stable-stringify": "2.x" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001505", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001505.tgz", + "integrity": "sha512-jaAOR5zVtxHfL0NjZyflVTtXm3D3J9P15zSJ7HmQF8dSKGA6tqzQq+0ZI3xkjyQj46I4/M0K2GbMpcAFOcbr3A==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true + }, + "cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "cluster-key-slot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.2.tgz", + "integrity": "sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "denque": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "electron-to-chromium": { + "version": "1.4.435", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.435.tgz", + "integrity": "sha512-B0CBWVFhvoQCW/XtjRzgrmqcgVWg6RXOEM/dK59+wFV93BFGR6AeNKc4OyhM+T3IhJaOOG8o/V+33Y2mwJWtzw==", + "dev": true + }, + "emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true + }, + "expect": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", + "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "dev": true, + "requires": { + "@jest/expect-utils": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0" + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "express-handlebars": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.7.tgz", + "integrity": "sha512-iYeMFpc/hMD+E6FNAZA5fgWeXnXr4rslOSPkeEV6TwdmpJ5lEXuWX0u9vFYs31P2MURctQq2batR09oeNj0LIg==", + "requires": { + "glob": "^8.1.0", + "graceful-fs": "^4.2.10", + "handlebars": "^4.7.7" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-redact": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", + "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==" + }, + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" + }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", + "requires": { + "punycode": "^1.3.2" + } + }, + "fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flatstr": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", + "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "requires": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ioredis": { + "version": "4.28.5", + "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-4.28.5.tgz", + "integrity": "sha512-3GYo0GJtLqgNXj4YhrisLaNNvWSNwSS2wS4OELGfGxH8I69+XfNdnmV1AyN+ZqMh0i7eX+SWjrwFKDBDgfBC1A==", + "requires": { + "cluster-key-slot": "^1.1.0", + "debug": "^4.3.1", + "denque": "^1.1.0", + "lodash.defaults": "^4.2.0", + "lodash.flatten": "^4.4.0", + "lodash.isarguments": "^3.1.0", + "p-map": "^2.1.0", + "redis-commands": "1.7.0", + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0", + "standard-as-callback": "^2.1.0" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-base64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-1.1.0.tgz", + "integrity": "sha512-Nlhg7Z2dVC4/PTvIFkgVVNvPHSO2eR/Yd0XzhGiXCXEvWnptXlXa/clQ8aePPiMuxEGcWfzWbGw2Fe3d+Y3v1g==" + }, + "is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", + "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", + "dev": true, + "requires": { + "@jest/core": "^29.5.0", + "@jest/types": "^29.5.0", + "import-local": "^3.0.2", + "jest-cli": "^29.5.0" + } + }, + "jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "dev": true, + "requires": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + } + }, + "jest-circus": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", + "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/expect": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^0.7.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.5.0", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.5.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-cli": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", + "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", + "dev": true, + "requires": { + "@jest/core": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "dependencies": { + "jest-config": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", + "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.5.0", + "@jest/types": "^29.5.0", + "babel-jest": "^29.5.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.5.0", + "jest-environment-node": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-runner": "^29.5.0", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + } + } + }, + "jest-diff": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", + "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + } + }, + "jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", + "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.5.0", + "pretty-format": "^29.5.0" + } + }, + "jest-environment-node": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", + "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-mock": "^29.5.0", + "jest-util": "^29.5.0" + } + }, + "jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true + }, + "jest-haste-map": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", + "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@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": "^29.4.3", + "jest-util": "^29.5.0", + "jest-worker": "^29.5.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + } + }, + "jest-leak-detector": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", + "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", + "dev": true, + "requires": { + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + } + }, + "jest-matcher-utils": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", + "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.5.0" + } + }, + "jest-message-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", + "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.5.0", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.5.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", + "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "jest-util": "^29.5.0" + } + }, + "jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "dev": true + }, + "jest-resolve": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", + "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.5.0", + "jest-validate": "^29.5.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", + "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", + "dev": true, + "requires": { + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.5.0" + } + }, + "jest-runner": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", + "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "dev": true, + "requires": { + "@jest/console": "^29.5.0", + "@jest/environment": "^29.5.0", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.5.0", + "jest-haste-map": "^29.5.0", + "jest-leak-detector": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-resolve": "^29.5.0", + "jest-runtime": "^29.5.0", + "jest-util": "^29.5.0", + "jest-watcher": "^29.5.0", + "jest-worker": "^29.5.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + } + }, + "jest-runtime": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", + "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "dev": true, + "requires": { + "@jest/environment": "^29.5.0", + "@jest/fake-timers": "^29.5.0", + "@jest/globals": "^29.5.0", + "@jest/source-map": "^29.4.3", + "@jest/test-result": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-mock": "^29.5.0", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.5.0", + "jest-snapshot": "^29.5.0", + "jest-util": "^29.5.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + } + }, + "jest-snapshot": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", + "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "dev": true, + "requires": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/traverse": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.5.0", + "@jest/transform": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/babel__traverse": "^7.0.6", + "@types/prettier": "^2.1.5", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.5.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.5.0", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.5.0", + "jest-message-util": "^29.5.0", + "jest-util": "^29.5.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.5.0", + "semver": "^7.3.5" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "jest-util": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", + "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-validate": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", + "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "dev": true, + "requires": { + "@jest/types": "^29.5.0", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.5.0" + }, + "dependencies": { + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", + "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "dev": true, + "requires": { + "@jest/test-result": "^29.5.0", + "@jest/types": "^29.5.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.5.0", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", + "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "dev": true, + "requires": { + "@types/node": "*", + "jest-util": "^29.5.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w==" + }, + "joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "requires": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==" + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "requires": { + "tmpl": "1.0.5" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "mri": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "nock": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.1.tgz", + "integrity": "sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.21", + "propagate": "^2.0.0" + } + }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + }, + "octokit-auth-probot": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/octokit-auth-probot/-/octokit-auth-probot-1.2.9.tgz", + "integrity": "sha512-mMjw6Y760EwJnW2tSVooJK8BMdsG6D40SoCclnefVf/5yWjaNVquEu8NREBVWb60OwbpnMEz4vREXHB5xdMFYQ==", + "requires": { + "@octokit/auth-app": "^4.0.2", + "@octokit/auth-token": "^3.0.0", + "@octokit/auth-unauthenticated": "^3.0.0", + "@octokit/types": "^8.0.0" + }, + "dependencies": { + "@octokit/auth-token": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==" + } + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pino": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", + "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", + "requires": { + "fast-redact": "^3.0.0", + "fast-safe-stringify": "^2.0.8", + "flatstr": "^1.0.12", + "pino-std-serializers": "^3.1.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "sonic-boom": "^1.0.2" + }, + "dependencies": { + "pino-std-serializers": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", + "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" + }, + "sonic-boom": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", + "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", + "requires": { + "atomic-sleep": "^1.0.0", + "flatstr": "^1.0.12" + } + } + } + }, + "pino-http": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/pino-http/-/pino-http-5.8.0.tgz", + "integrity": "sha512-YwXiyRb9y0WCD1P9PcxuJuh3Dc5qmXde/paJE86UGYRdiFOi828hR9iUGmk5gaw6NBT9gLtKANOHFimvh19U5w==", + "requires": { + "fast-url-parser": "^1.1.3", + "pino": "^6.13.0", + "pino-std-serializers": "^4.0.0" + }, + "dependencies": { + "pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" + } + } + }, + "pino-pretty": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-6.0.0.tgz", + "integrity": "sha512-jyeR2fXXWc68st1DTTM5NhkHlx8p+1fKZMfm84Jwq+jSw08IwAjNaZBZR6ts69hhPOfOjg/NiE1HYW7vBRPL3A==", + "requires": { + "@hapi/bourne": "^2.0.0", + "args": "^5.0.1", + "colorette": "^1.3.0", + "dateformat": "^4.5.1", + "fast-safe-stringify": "^2.0.7", + "jmespath": "^0.15.0", + "joycon": "^3.0.0", + "pump": "^3.0.0", + "readable-stream": "^3.6.0", + "rfdc": "^1.3.0", + "split2": "^3.1.1", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "requires": { + "readable-stream": "^3.0.0" + } + } + } + }, + "pino-std-serializers": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.1.tgz", + "integrity": "sha512-wHuWB+CvSVb2XqXM0W/WOYUkVSPbiJb9S5fNB7TBhd8s892Xq910bRxwHtC4l71hgztObTjXL6ZheZXFjhDrDQ==" + }, + "pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true + }, + "pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "requires": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + } + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pretty-format": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", + "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "dev": true, + "requires": { + "@jest/schemas": "^29.4.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "probot": { + "version": "12.3.1", + "resolved": "https://registry.npmjs.org/probot/-/probot-12.3.1.tgz", + "integrity": "sha512-ECSgycmAC0ILEK6cOa+x3QPufP5JybsuohOFCYr3glQU5SkbmypZJE/Sfio9mxAFHK5LCXveIDsfZCxf6ck4JA==", + "requires": { + "@octokit/core": "^3.2.4", + "@octokit/plugin-enterprise-compatibility": "^1.2.8", + "@octokit/plugin-paginate-rest": "^2.6.2", + "@octokit/plugin-rest-endpoint-methods": "^5.0.1", + "@octokit/plugin-retry": "^3.0.6", + "@octokit/plugin-throttling": "^3.3.4", + "@octokit/types": "^8.0.0", + "@octokit/webhooks": "^9.8.4", + "@probot/get-private-key": "^1.1.0", + "@probot/octokit-plugin-config": "^1.0.0", + "@probot/pino": "^2.2.0", + "@types/express": "^4.17.9", + "@types/ioredis": "^4.27.1", + "@types/pino": "^6.3.4", + "@types/pino-http": "^5.0.6", + "commander": "^6.2.0", + "deepmerge": "^4.2.2", + "deprecation": "^2.3.1", + "dotenv": "^8.2.0", + "eventsource": "^2.0.2", + "express": "^4.17.1", + "express-handlebars": "^6.0.3", + "ioredis": "^4.27.8", + "js-yaml": "^3.14.1", + "lru-cache": "^6.0.0", + "octokit-auth-probot": "^1.2.2", + "pino": "^6.7.0", + "pino-http": "^5.3.0", + "pkg-conf": "^3.1.0", + "resolve": "^1.19.0", + "semver": "^7.3.4", + "update-dotenv": "^1.1.1", + "uuid": "^8.3.2" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, + "process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "redis-commands": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", + "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" + }, + "redis-errors": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", + "integrity": "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==" + }, + "redis-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", + "integrity": "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==", + "requires": { + "redis-errors": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "smee-client": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/smee-client/-/smee-client-1.2.3.tgz", + "integrity": "sha512-uDrU8u9/Ln7aRXyzGHgVaNUS8onHZZeSwQjCdkMoSL7U85xI+l+Y2NgjibkMJAyXkW7IAbb8rw9RMHIjS6lAwA==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "eventsource": "^1.1.0", + "morgan": "^1.9.1", + "superagent": "^7.1.3", + "validator": "^13.7.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "eventsource": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.2.tgz", + "integrity": "sha512-xAH3zWhgO2/3KIniEKYPr8plNSzlGINOUqYj0m0u7AB81iRw8b/3E73W6AuU+6klLbaSFmZnaETQ2lXPfAydrA==", + "dev": true + } + } + }, + "sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "requires": { + "atomic-sleep": "^1.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "standard-as-callback": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", + "integrity": "sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + }, + "superagent": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.5.tgz", + "integrity": "sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==", + "dev": true, + "requires": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "^2.5.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "ts-jest": { + "version": "29.1.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.0.tgz", + "integrity": "sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==", + "dev": true, + "requires": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "7.x", + "yargs-parser": "^21.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true + }, + "universal-github-app-jwt": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", + "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", + "requires": { + "@types/jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "update-dotenv": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-dotenv/-/update-dotenv-1.1.1.tgz", + "integrity": "sha512-3cIC18In/t0X/yH793c00qqxcKD8jVCgNOPif/fGQkFpYMGecM9YAc+kaAKXuZsM2dE9I9wFI7KvAuNX22SGMQ==", + "requires": {} + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "dependencies": { + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + } + } + }, + "validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "requires": { + "makeerror": "1.0.12" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } +} diff --git a/secret-engine/package.json b/secret-engine/package.json new file mode 100644 index 000000000..4e3fe7b38 --- /dev/null +++ b/secret-engine/package.json @@ -0,0 +1,34 @@ +{ + "name": "secret-engine", + "version": "1.0.0", + "private": true, + "description": "Infisical secret engine", + "author": "Maidul Islam", + "license": "ISC", + "homepage": "https://github.com//", + "keywords": [ + "probot", + "github", + "probot-app" + ], + "scripts": { + "build": "tsc", + "start": "npm run build && probot run ./lib/index.js", + "test": "jest" + }, + "dependencies": { + "probot": "^12.2.4" + }, + "devDependencies": { + "@types/jest": "^29.0.0", + "@types/node": "^18.0.0", + "jest": "^29.0.0", + "nock": "^13.0.5", + "smee-client": "^1.2.2", + "ts-jest": "^29.0.0", + "typescript": "^4.1.3" + }, + "engines": { + "node": ">= 10.13.0" + } +} diff --git a/secret-engine/src/index.ts b/secret-engine/src/index.ts new file mode 100644 index 000000000..6a778f306 --- /dev/null +++ b/secret-engine/src/index.ts @@ -0,0 +1,151 @@ +import { Probot } from "probot"; +import { exec } from "child_process"; +import { writeFile, readFile, rm, mkdir, } from "fs"; +import { tmpdir } from "os"; +import { join } from "path" + +// interface CommandResult { +// stdout: string; +// stderr: string; +// } + +type SecretMatch = { + Description: string; + StartLine: number; + EndLine: number; + StartColumn: number; + EndColumn: number; + Match: string; + Secret: string; + File: string; + SymlinkFile: string; + Commit: string; + Entropy: number; + Author: string; + Email: string; + Date: string; + Message: string; + Tags: string[]; + RuleID: string; + Fingerprint: string; +}; + +export = (app: Probot) => { + app.on("pull_request", async (context) => { + // create a check + }) + + app.on("push", async (context) => { + console.log("something was pushed") + const { payload } = context; + const { commits, repository } = payload; + const [owner, repo] = repository.full_name.split('/'); + + const fingerPrints: any = [] + for (const commit of commits) { + for (const filepath of [...commit.added, ...commit.modified]) { + try { + const fileContentsResponse = await context.octokit.repos.getContent({ + owner, + repo, + path: filepath, + }); + + const data: any = fileContentsResponse.data; + const fileContent = Buffer.from(data.content, 'base64').toString(); + + const findings = await scanContentAndGetFindings(`\n${fileContent}`) // to count lines correctly + + for (const finding of findings) { + fingerPrints.push(`${commit.id}:${filepath}:${finding.RuleID}:${finding.StartLine}`) + } + + } catch (error) { + console.error(`Error fetching content for ${filepath}`, error); + } + } + } + + console.log("fingerPrints==>", fingerPrints) + }); +}; + +async function scanContentAndGetFindings(textContent: string): Promise { + const tempFolder = await createTempFolder(); + const filePath = join(tempFolder, "content.txt"); + const findingsPath = join(tempFolder, "findings.json"); + + try { + await writeTextToFile(filePath, textContent); + await runInfisicalScan(filePath, findingsPath); + const findingsData = await readFindingsFile(findingsPath); + return JSON.parse(findingsData); + } finally { + await deleteTempFolder(tempFolder); + } +} + +function createTempFolder(): Promise { + return new Promise((resolve, reject) => { + const tempDir = tmpdir() + const tempFolderName = Math.random().toString(36).substring(2); + const tempFolderPath = join(tempDir, tempFolderName); + + mkdir(tempFolderPath, (err: any) => { + if (err) { + reject(err); + } else { + resolve(tempFolderPath); + } + }); + }); +} + +function writeTextToFile(filePath: string, content: string): Promise { + return new Promise((resolve, reject) => { + writeFile(filePath, content, (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); +} + +function runInfisicalScan(inputPath: string, outputPath: string): Promise { + return new Promise((resolve, reject) => { + const command = `cat "${inputPath}" | infisical scan --exit-code=77 --pipe -r "${outputPath}"`; + exec(command, (error) => { + if (error && error.code != 77) { + reject(error); + } else { + resolve(); + } + }); + }); +} + +function readFindingsFile(filePath: string): Promise { + return new Promise((resolve, reject) => { + readFile(filePath, "utf8", (err, data) => { + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); +} + +function deleteTempFolder(folderPath: string): Promise { + return new Promise((resolve, reject) => { + rm(folderPath, { recursive: true }, (err) => { + if (err) { + reject(err); + } else { + resolve(); + } + }); + }); +} diff --git a/secret-engine/test/fixtures/issues.opened.json b/secret-engine/test/fixtures/issues.opened.json new file mode 100644 index 000000000..e570cd41b --- /dev/null +++ b/secret-engine/test/fixtures/issues.opened.json @@ -0,0 +1,18 @@ +{ + "action": "opened", + "issue": { + "number": 1, + "user": { + "login": "hiimbex" + } + }, + "repository": { + "name": "testing-things", + "owner": { + "login": "hiimbex" + } + }, + "installation": { + "id": 2 + } +} diff --git a/secret-engine/test/fixtures/mock-cert.pem b/secret-engine/test/fixtures/mock-cert.pem new file mode 100644 index 000000000..f2f271c30 --- /dev/null +++ b/secret-engine/test/fixtures/mock-cert.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAli7V49NdZe+XYC1pLaHM0te8kiDmZBJ1u2HJHN8GdbROB6NO +VpC3xK7NxQn6xpvZ9ux20NvcDvGle+DOptZztBH+np6h2jZQ1/kD1yG1eQvVH4th +/9oqHuIjmIfO8lIe4Hyd5Fw5xHkGqVETTGR+0c7kdZIlHmkOregUGtMYZRUi4YG+ +q0w+uFemiHpGKXbeCIAvkq7aIkisEzvPWfSyYdA6WJHpxFk7tD7D8VkzABLVRHCq +AuyqPG39BhGZcGLXx5rGK56kDBJkyTR1t3DkHpwX+JKNG5UYNwOG4LcQj1fteeta +TdkYUMjIyWbanlMYyC+dq7B5fe7el99jXQ1gXwIDAQABAoIBADKfiPOpzKLOtzzx +MbHzB0LO+75aHq7+1faayJrVxqyoYWELuB1P3NIMhknzyjdmU3t7S7WtVqkm5Twz +lBUC1q+NHUHEgRQ4GNokExpSP4SU63sdlaQTmv0cBxmkNarS6ZuMBgDy4XoLvaYX +MSUf/uukDLhg0ehFS3BteVFtdJyllhDdTenF1Nb1rAeN4egt8XLsE5NQDr1szFEG +xH5lb+8EDtzgsGpeIddWR64xP0lDIKSZWst/toYKWiwjaY9uZCfAhvYQ1RsO7L/t +sERmpYgh+rAZUh/Lr98EI8BPSPhzFcSHmtqzzejvC5zrZPHcUimz0CGA3YBiLoJX +V1OrxmECgYEAxkd8gpmVP+LEWB3lqpSvJaXcGkbzcDb9m0OPzHUAJDZtiIIf0UmO +nvL68/mzbCHSj+yFjZeG1rsrAVrOzrfDCuXjAv+JkEtEx0DIevU1u60lGnevOeky +r8Be7pmymFB9/gzQAd5ezIlTv/COgoO986a3h1yfhzrrzbqSiivw308CgYEAwecI +aZZwqH3GifR+0+Z1B48cezA5tC8LZt5yObGzUfxKTWy30d7lxe9N59t0KUVt/QL5 +qVkd7mqGzsUMyxUN2U2HVnFTWfUFMhkn/OnCnayhILs8UlCTD2Xxoy1KbQH/9FIr +xf0pbMNJLXeGfyRt/8H+BzSZKBw9opJBWE4gqfECgYBp9FdvvryHuBkt8UQCRJPX +rWsRy6pY47nf11mnazpZH5Cmqspv3zvMapF6AIxFk0leyYiQolFWvAv+HFV5F6+t +Si1mM8GCDwbA5zh6pEBDewHhw+UqMBh63HSeUhmi1RiOwrAA36CO8i+D2Pt+eQHv +ir52IiPJcs4BUNrv5Q1BdwKBgBHgVNw3LGe8QMOTMOYkRwHNZdjNl2RPOgPf2jQL +d/bFBayhq0jD/fcDmvEXQFxVtFAxKAc+2g2S8J67d/R5Gm/AQAvuIrsWZcY6n38n +pfOXaLt1x5fnKcevpFlg4Y2vM4O416RHNLx8PJDehh3Oo/2CSwMrDDuwbtZAGZok +icphAoGBAI74Tisfn+aeCZMrO8KxaWS5r2CD1KVzddEMRKlJvSKTY+dOCtJ+XKj1 +OsZdcDvDC5GtgcywHsYeOWHldgDWY1S8Z/PUo4eK9qBXYBXp3JEZQ1dqzFdz+Txi +rBn2WsFLsxV9j2/ugm0PqWVBcU2bPUCwvaRu3SOms2teaLwGCkhr +-----END RSA PRIVATE KEY----- diff --git a/secret-engine/test/index.test.ts b/secret-engine/test/index.test.ts new file mode 100644 index 000000000..d3a6e556e --- /dev/null +++ b/secret-engine/test/index.test.ts @@ -0,0 +1,74 @@ +// You can import your modules +// import index from '../src/index' + +import nock from "nock"; +// Requiring our app implementation +import myProbotApp from "../src"; +import { Probot, ProbotOctokit } from "probot"; +// Requiring our fixtures +import payload from "./fixtures/issues.opened.json"; +const issueCreatedBody = { body: "Thanks for opening this issue!" }; +const fs = require("fs"); +const path = require("path"); + +const privateKey = fs.readFileSync( + path.join(__dirname, "fixtures/mock-cert.pem"), + "utf-8" +); + +describe("My Probot app", () => { + let probot: any; + + beforeEach(() => { + nock.disableNetConnect(); + probot = new Probot({ + appId: 123, + privateKey, + // disable request throttling and retries for testing + Octokit: ProbotOctokit.defaults({ + retry: { enabled: false }, + throttle: { enabled: false }, + }), + }); + // Load our app into probot + probot.load(myProbotApp); + }); + + test("creates a comment when an issue is opened", async () => { + const mock = nock("https://api.github.com") + // Test that we correctly return a test token + .post("/app/installations/2/access_tokens") + .reply(200, { + token: "test", + permissions: { + issues: "write", + }, + }) + + // Test that a comment is posted + .post("/repos/hiimbex/testing-things/issues/1/comments", (body: any) => { + expect(body).toMatchObject(issueCreatedBody); + return true; + }) + .reply(200); + + // Receive a webhook event + await probot.receive({ name: "issues", payload }); + + expect(mock.pendingMocks()).toStrictEqual([]); + }); + + afterEach(() => { + nock.cleanAll(); + nock.enableNetConnect(); + }); +}); + +// For more information about testing with Jest see: +// https://facebook.github.io/jest/ + +// For more information about using TypeScript in your tests, Jest recommends: +// https://github.com/kulshekhar/ts-jest + +// For more information about testing with Nock see: +// https://github.com/nock/nock diff --git a/secret-engine/tsconfig.json b/secret-engine/tsconfig.json new file mode 100644 index 000000000..8f4e51379 --- /dev/null +++ b/secret-engine/tsconfig.json @@ -0,0 +1,70 @@ +{ + "compilerOptions": { + /* Basic Options */ + "incremental": true /* Enable incremental compilation */, + "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, + "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, + "lib": [ + "es2015", + "es2017" + ] /* Specify library files to be included in the compilation. */, + "allowJs": true /* Allow javascript files to be compiled. */, + "checkJs": true /* Report errors in .js files. */, + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "sourceMap": true /* Generates corresponding '.map' file. */, + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./lib" /* Redirect output structure to the directory. */, + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./" /* Specify file to store incremental compilation information */, + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + /* Additional Checks */ + "noUnusedLocals": false /* Report errors on unused locals. */, + "noUnusedParameters": false /* Report errors on unused parameters. */, + "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, + "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, + /* Module Resolution Options */ + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + // "baseUrl": "./src" /* Base directory to resolve non-absolute module names. */, + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just type checking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + /* Advanced Options */ + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, + "resolveJsonModule": true, + "pretty": false, + "skipLibCheck": true + }, + "include": [ + "src/" + ], + "compileOnSave": false +} \ No newline at end of file From 079d68c042b2971163e4bd9028aff025a7e1a0e7 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Thu, 22 Jun 2023 22:28:39 -0400 Subject: [PATCH 002/189] remove dummy file content --- secret-engine/fileContents.txt | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 secret-engine/fileContents.txt diff --git a/secret-engine/fileContents.txt b/secret-engine/fileContents.txt deleted file mode 100644 index 415b5537d..000000000 --- a/secret-engine/fileContents.txt +++ /dev/null @@ -1,15 +0,0 @@ -# New-folder -Our small pizza is 10 inches and serves 1—3 people.fOr you can orderffwef a larger pizza size and sfwefweplit the toppings so that everyone dines happy. -ddfdfdfd -Our small pizza is 10 inches and serves 1—3 people.fOr you can orderffwef a larger pizza size and sfwefweplit the toppings so that everyone dines happy. -Our small pizz - -cc -ss123 - -JWT_AUTH_SECRET=4be6ba5602e0fa0ac6ac05c3cd4d247f - -export CLOUDSMITH_API_KEY=f5cf077b879c2ab46a49c6f1ec4199e6fba0fc0b -1234abc - -ssd From dfc88d99f6d997e45fdd3839bb58cf199000dac0 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Wed, 28 Jun 2023 14:28:52 -0700 Subject: [PATCH 003/189] first draft new sidebar --- frontend/src/components/v2/Menu/Menu.tsx | 8 +- frontend/src/components/v2/Tabs/Tabs.tsx | 27 +- frontend/src/layouts/AppLayout/AppLayout.tsx | 109 ++--- frontend/src/pages/org/[id].tsx | 433 +++++++++++++++++++ frontend/tailwind.config.js | 48 +- 5 files changed, 535 insertions(+), 90 deletions(-) create mode 100644 frontend/src/pages/org/[id].tsx diff --git a/frontend/src/components/v2/Menu/Menu.tsx b/frontend/src/components/v2/Menu/Menu.tsx index 632218020..87ef29b5c 100644 --- a/frontend/src/components/v2/Menu/Menu.tsx +++ b/frontend/src/components/v2/Menu/Menu.tsx @@ -48,7 +48,7 @@ export const MenuItem = ({ >
  • ({ > -
    +
    {/* {icon && {icon}} */} {children} diff --git a/frontend/src/components/v2/Tabs/Tabs.tsx b/frontend/src/components/v2/Tabs/Tabs.tsx index e29b5e6a9..cc7e755f6 100644 --- a/frontend/src/components/v2/Tabs/Tabs.tsx +++ b/frontend/src/components/v2/Tabs/Tabs.tsx @@ -72,12 +72,12 @@ export const TabsObject = () => { > Windows - Arch Linux - + */} { @@ -105,10 +105,10 @@ export const TabsObject = () => { .

    - +
    - )} -
    - + ))} +
    + {router.asPath.includes("project") ? { + : + + + + Overview + + + + + + + {t("nav.menu.members")} + + + + + + + Org Setting + + + + }
    -
    - {router.asPath.split("/")[1] === "home" ? ( -
    -
    -

    - -

    - Infisical Guide - progress bar -
    - ) : ( - -
    -

    - -

    - Infisical Guide - progress bar -
    - - )} +
    +
    + + Invite people +
    +
    + + Help & Support +
    diff --git a/frontend/src/pages/org/[id].tsx b/frontend/src/pages/org/[id].tsx new file mode 100644 index 000000000..34029b370 --- /dev/null +++ b/frontend/src/pages/org/[id].tsx @@ -0,0 +1,433 @@ +import { useEffect, useState } from "react"; +import { useTranslation } from "react-i18next"; +import Head from "next/head"; +import Image from "next/image"; +import Link from "next/link"; +import { useRouter } from "next/router"; +import { IconProp } from "@fortawesome/fontawesome-svg-core"; +import { faSlack } from "@fortawesome/free-brands-svg-icons"; +import { faArrowRight, faCheckCircle, faHandPeace, faMagnifyingGlass, faNetworkWired, faPlug, faPlus, faStar, faUserPlus } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import AddProjectMemberDialog from "@app/components/basic/dialog/AddProjectMemberDialog"; +import ProjectUsersTable from "@app/components/basic/table/ProjectUsersTable"; +import guidGenerator from "@app/components/utilities/randomId"; +import { useWorkspace } from "@app/context"; +import { Workspace } from "@app/hooks/api/workspace/types"; + +import onboardingCheck from "~/components/utilities/checks/OnboardingCheck"; +import { TabsObject } from "~/components/v2/Tabs"; + +import { + decryptAssymmetric, + encryptAssymmetric +} from "../../components/utilities/cryptography/crypto"; +import getOrganizationUsers from "../api/organization/GetOrgUsers"; +import getUser from "../api/user/getUser"; +import registerUserAction from "../api/userActions/registerUserAction"; +// import DeleteUserDialog from '@app/components/basic/dialog/DeleteUserDialog'; +import addUserToWorkspace from "../api/workspace/addUserToWorkspace"; +import getWorkspaceUsers from "../api/workspace/getWorkspaceUsers"; +import uploadKeys from "../api/workspace/uploadKeys"; + +interface UserProps { + firstName: string; + lastName: string; + email: string; + _id: string; + publicKey: string; +} + +interface MembershipProps { + deniedPermissions: any[]; + user: UserProps; + inviteEmail: string; + role: string; + status: string; + _id: string; +} + +const features = [{ + "_id": 0, + "name": "Kubernetes Operator", + "description": "Pull secrets into your Kubernetes containers and automatically redeploy upon secret changes." +}] + +type ItemProps = { + text: string; + subText: string; + complete: boolean; + icon: IconProp; + time: string; + userAction?: string; + link?: string; +}; + +const learningItem = ({ + text, + subText, + complete, + icon, + time, + userAction, + link +}: ItemProps): JSX.Element => { + if (link) { + return ( + +
    +
    null} + role="button" + tabIndex={0} + onClick={async () => { + if (userAction && userAction !== "first_time_secrets_pushed") { + await registerUserAction({ + action: userAction + }); + } + }} + className={`group relative flex h-[5.5rem] w-full items-center justify-between overflow-hidden rounded-md border ${complete? "bg-gradient-to-r from-[#0e1f01] to-mineshaft-700 border-mineshaft-900 cursor-default" : "bg-mineshaft-800 hover:bg-mineshaft-700 border-mineshaft-600 shadow-xl cursor-pointer"} duration-200 text-mineshaft-100`} + > +
    + + {complete && ( +
    + +
    + )} +
    +
    {text}
    +
    {subText}
    +
    +
    +
    + {complete ? "Complete!" : `About ${time}`} +
    + {/* {complete &&
    } */} +
    +
    +
    + ); + } + return ( +
    null} + role="button" + tabIndex={0} + onClick={async () => { + if (userAction) { + await registerUserAction({ + action: userAction + }); + } + }} + className="relative my-1.5 flex h-[5.5rem] w-full cursor-pointer items-center justify-between overflow-hidden rounded-md border border-dashed border-bunker-400 bg-bunker-700 py-2 pl-2 pr-6 shadow-xl duration-200 hover:bg-bunker-500" + > +
    + + {complete && ( +
    + +
    + )} +
    +
    {text}
    +
    {subText}
    +
    +
    +
    + {complete ? "Complete!" : `About ${time}`} +
    + {complete &&
    } +
    + ); +}; + +// #TODO: Update all the workspaceIds + +export default function Organization() { + const [isAddOpen, setIsAddOpen] = useState(false); + // let [isDeleteOpen, setIsDeleteOpen] = useState(false); + // let [userIdToBeDeleted, setUserIdToBeDeleted] = useState(false); + const [email, setEmail] = useState(""); + const [personalEmail, setPersonalEmail] = useState(""); + const [searchUsers, setSearchUsers] = useState(""); + + const { t } = useTranslation(); + + const router = useRouter(); + const workspaceId = router.query.id as string; + + const [userList, setUserList] = useState([]); + const [isUserListLoading, setIsUserListLoading] = useState(true); + const [orgUserList, setOrgUserList] = useState([]); + const { workspaces, isLoading: isWorkspaceLoading } = useWorkspace(); + + useEffect(() => { + (async () => { + const user = await getUser(); + setPersonalEmail(user.email); + + // This part quiries the current users of a project + const workspaceUsers = await getWorkspaceUsers({ + workspaceId + }); + const tempUserList = workspaceUsers.map((membership: MembershipProps) => ({ + key: guidGenerator(), + firstName: membership.user?.firstName, + lastName: membership.user?.lastName, + email: membership.user?.email === null ? membership.inviteEmail : membership.user?.email, + role: membership?.role, + status: membership?.status, + userId: membership.user?._id, + membershipId: membership._id, + deniedPermissions: membership.deniedPermissions, + publicKey: membership.user?.publicKey + })); + setUserList(tempUserList); + + setIsUserListLoading(false); + + // This is needed to know wha users from an org (if any), we are able to add to a certain project + const orgUsers = await getOrganizationUsers({ + orgId: String(localStorage.getItem("orgData.id")) + }); + setOrgUserList(orgUsers); + setEmail( + orgUsers + ?.filter((membership: MembershipProps) => membership.status === "accepted") + .map((membership: MembershipProps) => membership.user.email) + .filter( + (usEmail: string) => + !tempUserList?.map((user1: UserProps) => user1.email).includes(usEmail) + )[0] + ); + })(); + }, []); + + const closeAddModal = () => { + setIsAddOpen(false); + }; + + const openAddModal = () => { + setIsAddOpen(true); + }; + + // function closeDeleteModal() { + // setIsDeleteOpen(false); + // } + + // function deleteMembership(userId) { + // deleteUserFromWorkspace(userId, router.query.id) + // } + + // function openDeleteModal() { + // setIsDeleteOpen(true); + // } + + const submitAddModal = async () => { + const result = await addUserToWorkspace(email, workspaceId); + if (result?.invitee && result?.latestKey) { + const PRIVATE_KEY = localStorage.getItem("PRIVATE_KEY") as string; + + // assymmetrically decrypt symmetric key with local private key + const key = decryptAssymmetric({ + ciphertext: result.latestKey.encryptedKey, + nonce: result.latestKey.nonce, + publicKey: result.latestKey.sender.publicKey, + privateKey: PRIVATE_KEY + }); + + const { ciphertext, nonce } = encryptAssymmetric({ + plaintext: key, + publicKey: result.invitee.publicKey, + privateKey: PRIVATE_KEY + }); + + uploadKeys(workspaceId, result.invitee._id, ciphertext, nonce); + } + setEmail(""); + setIsAddOpen(false); + router.rel + oad(); + }; + const [hasUserClickedSlack, setHasUserClickedSlack] = useState(false); + const [hasUserClickedIntro, setHasUserClickedIntro] = useState(false); + const [hasUserStarred, setHasUserStarred] = useState(false); + const [hasUserPushedSecrets, setHasUserPushedSecrets] = useState(false); + const [usersInOrg, setUsersInOrg] = useState(false); + + useEffect(() => { + onboardingCheck({ + setHasUserClickedIntro, + setHasUserClickedSlack, + setHasUserPushedSecrets, + setHasUserStarred, + setUsersInOrg + }); + }, []); + + return userList ? ( +
    + + {t("common.head-title", { title: t("settings.members.title") })} + + +
    +

    Projects

    +
    + {workspaces.map(workspace =>
    +
    {workspace.name}
    +
    {(workspace.environments?.length || 0)} environments
    + +
    Explore
    + +
    )} +
    +
    +
    +

    Onboarding Guide

    + {learningItem({ + text: "Watch a video about Infisical", + subText: "", + complete: hasUserClickedIntro, + icon: faHandPeace, + time: "3 min", + userAction: "intro_cta_clicked", + link: "https://www.youtube.com/watch?v=PK23097-25I" + })} + {learningItem({ + text: "Add your secrets", + subText: "Click to see example secrets, and add your own.", + complete: hasUserPushedSecrets, + icon: faPlus, + time: "1 min", + userAction: "first_time_secrets_pushed", + link: `/dashboard/${router.query.id}` + })} +
    +
    +
    + + {false && ( +
    + +
    + )} +
    +
    Inject secrets locally
    +
    + Replace .env files with a more secure and efficient alternative. +
    +
    +
    +
    + About 2 min +
    +
    + + {false &&
    } +
    + {learningItem({ + text: "Integrate Infisical with your infrastructure", + subText: "Connect Infisical to various 3rd party services and platforms.", + complete: false, + icon: faPlug, + time: "15 min", + link: "https://infisical.com/docs/integrations/overview" + })} + {learningItem({ + text: "Invite your teammates", + subText: "", + complete: usersInOrg, + icon: faUserPlus, + time: "2 min", + link: `/settings/org/${router.query.id}?invite` + })} + {learningItem({ + text: "Join Infisical Slack", + subText: "Have any questions? Ask us!", + complete: hasUserClickedSlack, + icon: faSlack, + time: "1 min", + userAction: "slack_cta_clicked", + link: "https://join.slack.com/t/infisical-users/shared_invite/zt-1wehzfnzn-1aMo5JcGENJiNAC2SD8Jlg" + })} + {/*
    + {workspaces.map(workspace =>
    +
    {workspace.name}
    + +
    Explore
    + +
    )} +
    */} +
    +
    +

    Explore More

    +
    + {features.map(feature =>
    +
    {feature.name}
    +
    {feature.description}
    +
    +
    Setup time: 20 min
    + +
    Learn more
    + +
    +
    )} +
    +
    + membership.status === "accepted") + .map((membership: MembershipProps) => membership.user.email) + .filter( + (orgEmail) => !userList?.map((user1: UserProps) => user1.email).includes(orgEmail) + )} + setEmail={setEmail} + /> + {/* */} + {/*
    +
    + setSearchUsers(e.target.value)} + leftIcon={} + /> +
    +
    +
    +
    */} +
    + ) : ( +
    + loading animation +
    + ); +} + +Organization.requireAuth = true; diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index e8bd3b56b..29811c15a 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -1245,17 +1245,17 @@ module.exports = { colors: { // You can generate your own colors with this tool: https://javisperez.github.io/tailwindcolorshades/ primary: { - 50: '#fcfdf7', - 100: '#f8fcee', - 200: '#eef6d5', - 300: '#e3f1bc', - 400: '#cfe78a', - 500: '#badc58', - 600: '#a7c64f', - 700: '#8ca542', - 800: '#708435', - 900: '#5b6c2b', - DEFAULT: '#badc58' + 50: '#fffff5', + 100: '#fcfce8', + 200: '#f8faca', + 300: '#f4f7ab', + 400: '#ecf26d', + 500: '#e0ed34', + 600: '#c2d62b', + 700: '#97b31d', + 800: '#708f13', + 900: '#4d6b0b', + DEFAULT: '#e0ed34' }, grey: '#0d1117', mineshaft: { @@ -1339,7 +1339,31 @@ module.exports = { 800: '#1c7a44', 900: '#176437', DEFAULT: '#2ecc71' - } + }, + blue: { + 50: '#f2f8ff', + 100: '#e6f1ff', + 200: '#bfdbff', + 300: '#99c5ff', + 400: '#4d9aff', + 500: '#006eff', + 600: '#0063e6', + 700: '#0053bf', + 800: '#004299', + 900: '#00367d' + }, + darkblue: { + 50: '#f2f4f7', + 100: '#e6e8f0', + 200: '#bfc6d9', + 300: '#99a3c3', + 400: '#4d5f95', + 500: '#001a68', + 600: '#00175e', + 700: '#00144e', + 800: '#00103e', + 900: '#000d33' + }, }, keyframes: { type: { From 9f6aa6b13e17b5c075ee558cd45b9c38529bd876 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 4 Jul 2023 10:54:44 -0400 Subject: [PATCH 004/189] add v1 secret scanning --- backend/.eslintrc | 30 +- backend/src/controllers/v1/index.ts | 2 + .../v1/secretScanningController.ts | 89 + backend/src/index.ts | 4 +- .../src/models/gitAppInstallationSession.ts | 34 + .../models/gitAppOrganizationInstallation.ts | 31 + backend/src/models/gitRisks.ts | 148 + backend/src/routes/v1/index.ts | 2 + backend/src/routes/v1/secretScanning.ts | 80 + backend/src/utils/errors.ts | 13 +- docker-compose.dev.yml | 25 + frontend/.eslintrc.js | 4 +- frontend/src/layouts/AppLayout/AppLayout.tsx | 8 + .../createSecretScanningSession.ts | 22 + .../secret-scanning/getInstallationStatus.ts | 22 + .../secret-scanning/getRisksByOrganization.ts | 57 + .../linkGitAppInstallationWithOrganization.ts | 25 + .../api/secret-scanning/updateRiskStatus.ts | 33 + frontend/src/pages/secret-scanning/index.tsx | 156 + nginx/default.dev.conf | 14 + package-lock.json | 3878 ++++++++--------- secret-engine/.eslintrc | 14 + secret-engine/Dockerfile.dev | 13 + secret-engine/package-lock.json | 3011 ++++++++++++- secret-engine/package.json | 11 +- secret-engine/src/index.ts | 92 +- .../models/gitAppOrganizationInstallation.ts | 31 + secret-engine/src/models/gitRisks.ts | 147 + secret-engine/tsconfig.json | 2 +- 29 files changed, 6019 insertions(+), 1979 deletions(-) create mode 100644 backend/src/controllers/v1/secretScanningController.ts create mode 100644 backend/src/models/gitAppInstallationSession.ts create mode 100644 backend/src/models/gitAppOrganizationInstallation.ts create mode 100644 backend/src/models/gitRisks.ts create mode 100644 backend/src/routes/v1/secretScanning.ts create mode 100644 frontend/src/pages/api/secret-scanning/createSecretScanningSession.ts create mode 100644 frontend/src/pages/api/secret-scanning/getInstallationStatus.ts create mode 100644 frontend/src/pages/api/secret-scanning/getRisksByOrganization.ts create mode 100644 frontend/src/pages/api/secret-scanning/linkGitAppInstallationWithOrganization.ts create mode 100644 frontend/src/pages/api/secret-scanning/updateRiskStatus.ts create mode 100644 frontend/src/pages/secret-scanning/index.tsx create mode 100644 secret-engine/.eslintrc create mode 100644 secret-engine/Dockerfile.dev create mode 100644 secret-engine/src/models/gitAppOrganizationInstallation.ts create mode 100644 secret-engine/src/models/gitRisks.ts diff --git a/backend/.eslintrc b/backend/.eslintrc index 64b049ea7..d02882370 100644 --- a/backend/.eslintrc +++ b/backend/.eslintrc @@ -1,6 +1,9 @@ { "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint", "unused-imports"], + "plugins": [ + "@typescript-eslint", + "unused-imports" + ], "extends": [ "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", @@ -8,14 +11,29 @@ ], "rules": { "no-console": 2, - "quotes": ["error", "double", { "avoidEscape": true }], - "comma-dangle": ["error", "only-multiline"], + "quotes": [ + "error", + "double", + { + "avoidEscape": true + } + ], + "comma-dangle": [ + "error", + "only-multiline" + ], "@typescript-eslint/no-unused-vars": "off", "unused-imports/no-unused-imports": "error", + "@typescript-eslint/no-empty-function": "off", "unused-imports/no-unused-vars": [ "warn", - { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" } + { + "vars": "all", + "varsIgnorePattern": "^_", + "args": "after-used", + "argsIgnorePattern": "^_" + } ], - "sort-imports": ["error", { "ignoreDeclarationSort": true }] + "sort-imports": "off" } -} +} \ No newline at end of file diff --git a/backend/src/controllers/v1/index.ts b/backend/src/controllers/v1/index.ts index 9e4a45c8b..488c9c6f2 100644 --- a/backend/src/controllers/v1/index.ts +++ b/backend/src/controllers/v1/index.ts @@ -13,6 +13,7 @@ import * as signupController from "./signupController"; import * as userActionController from "./userActionController"; import * as userController from "./userController"; import * as workspaceController from "./workspaceController"; +import * as secretScanningController from "./secretScanningController"; export { authController, @@ -30,4 +31,5 @@ export { userActionController, userController, workspaceController, + secretScanningController }; diff --git a/backend/src/controllers/v1/secretScanningController.ts b/backend/src/controllers/v1/secretScanningController.ts new file mode 100644 index 000000000..6de6b1483 --- /dev/null +++ b/backend/src/controllers/v1/secretScanningController.ts @@ -0,0 +1,89 @@ +import { Request, Response } from "express"; +import GitAppInstallationSession from "../../models/gitAppInstallationSession"; +import crypto from "crypto"; +import { Types } from "mongoose"; +import { UnauthorizedRequestError } from "../../utils/errors"; +import GitAppOrganizationInstallation from "../../models/gitAppOrganizationInstallation"; +import { MembershipOrg } from "../../models"; +import GitRisks, { STATUS_UNRESOLVED } from "../../models/gitRisks"; + +export const createInstallationSession = async (req: Request, res: Response) => { + const sessionId = crypto.randomBytes(16).toString("hex"); + await GitAppInstallationSession.findByIdAndUpdate( + req.organization, + { + organization: new Types.ObjectId(req.organization), + sessionId: sessionId, + user: new Types.ObjectId(req.user._id) + }, + { upsert: true } + ).lean(); + + res.send({ + sessionId: sessionId + }) +} + +export const linkInstallationToOrganization = async (req: Request, res: Response) => { + const { installationId, sessionId } = req.body + + const installationSession = await GitAppInstallationSession.findOneAndDelete({ sessionId: sessionId }) + if (!installationSession) { + throw UnauthorizedRequestError() + } + + const userMembership = await MembershipOrg.find({ user: req.user._id, organization: installationSession.organization }) + if (!userMembership) { + throw UnauthorizedRequestError() + } + + const installationLink = await GitAppOrganizationInstallation.findOneAndUpdate({ + organizationId: installationSession.organization, + }, { + installationId: installationId, + organizationId: installationSession.organization, + user: installationSession.user + }, { + upsert: true + }).lean() + + res.json(installationLink) +} + +export const getCurrentOrganizationInstallationStatus = async (req: Request, res: Response) => { + const { organizationId } = req.params + try { + const appInstallation = await GitAppOrganizationInstallation.findOne({ organizationId: organizationId }).lean() + if (!appInstallation) { + res.json({ + appInstallationComplete: false + }) + } + + res.json({ + appInstallationComplete: true + }) + } catch { + res.json({ + appInstallationComplete: false + }) + } +} + +export const getRisksForOrganization = async (req: Request, res: Response) => { + const { organizationId } = req.params + const risks = await GitRisks.find({ organization: organizationId, status: STATUS_UNRESOLVED }).lean() + res.json({ + risks: risks + }) +} + +export const updateRisksStatus = async (req: Request, res: Response) => { + const { riskId } = req.params + const { status } = req.body + const risks = await GitRisks.findByIdAndUpdate(riskId, { + sttaus: status + }).lean() + + res.json(risks) +} \ No newline at end of file diff --git a/backend/src/index.ts b/backend/src/index.ts index 826d5ca9c..364317a93 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -34,6 +34,7 @@ import { organization as v1OrganizationRouter, password as v1PasswordRouter, secret as v1SecretRouter, + secretScanning as v1SecretScanningRouter, secretsFolder as v1SecretsFolder, serviceToken as v1ServiceTokenRouter, signup as v1SignupRouter, @@ -42,8 +43,8 @@ import { workspace as v1WorkspaceRouter, } from "./routes/v1"; import { - signup as v2SignupRouter, auth as v2AuthRouter, + signup as v2SignupRouter, users as v2UsersRouter, organizations as v2OrganizationsRouter, workspace as v2WorkspaceRouter, @@ -125,6 +126,7 @@ const main = async () => { app.use("/api/v1/integration", v1IntegrationRouter); app.use("/api/v1/integration-auth", v1IntegrationAuthRouter); app.use("/api/v1/folders", v1SecretsFolder); + app.use("/api/v1/secret-scanning", v1SecretScanningRouter); // v2 routes (improvements) app.use("/api/v2/signup", v2SignupRouter); diff --git a/backend/src/models/gitAppInstallationSession.ts b/backend/src/models/gitAppInstallationSession.ts new file mode 100644 index 000000000..a78629186 --- /dev/null +++ b/backend/src/models/gitAppInstallationSession.ts @@ -0,0 +1,34 @@ +import { Schema, Types, model } from "mongoose"; + +type GitAppInstallationSession = { + id: string; + sessionId: string; + organization: Types.ObjectId; + user: Types.ObjectId; +} + +const gitAppInstallationSession = new Schema({ + id: { + required: true, + type: String, + }, + sessionId: { + type: String, + required: true, + unique: true + }, + organization: { + type: Schema.Types.ObjectId, + required: true, + unique: true + }, + user: { + type: Schema.Types.ObjectId, + ref: "User" + } +}); + + +const GitAppInstallationSession = model("git_app_installation_session", gitAppInstallationSession); + +export default GitAppInstallationSession; diff --git a/backend/src/models/gitAppOrganizationInstallation.ts b/backend/src/models/gitAppOrganizationInstallation.ts new file mode 100644 index 000000000..e742c0cf1 --- /dev/null +++ b/backend/src/models/gitAppOrganizationInstallation.ts @@ -0,0 +1,31 @@ +import { Schema, model } from "mongoose"; + +type Installation = { + installationId: string + organizationId: string + user: Schema.Types.ObjectId +}; + + +const gitAppOrganizationInstallation = new Schema({ + installationId: { + type: String, + required: true, + unique: true + }, + organizationId: { + type: String, + required: true, + unique: true + }, + user: { + type: Schema.Types.ObjectId, + ref: "User", + required: true, + } +}); + + +const GitAppOrganizationInstallation = model("git_app_organization_installation", gitAppOrganizationInstallation); + +export default GitAppOrganizationInstallation; diff --git a/backend/src/models/gitRisks.ts b/backend/src/models/gitRisks.ts new file mode 100644 index 000000000..6262dbf30 --- /dev/null +++ b/backend/src/models/gitRisks.ts @@ -0,0 +1,148 @@ +import { Schema, model } from "mongoose"; + +export const STATUS_RESOLVED_FALSE_POSITIVE = "RESOLVED_FALSE_POSITIVE"; +export const STATUS_RESOLVED_REVOKED = "RESOLVED_REVOKED"; +export const STATUS_RESOLVED_NOT_REVOKED = "RESOLVED_NOT_REVOKED"; +export const STATUS_UNRESOLVED = "UNRESOLVED"; + +export type GitRisks = { + id: string; + description: string; + startLine: string; + endLine: string; + startColumn: string; + endColumn: string; + match: string; + secret: string; + file: string; + symlinkFile: string; + commit: string; + entropy: string; + author: string; + email: string; + date: string; + message: string; + tags: string[]; + ruleID: string; + fingerprint: string; + + isFalsePositive: boolean; // New field for marking risks as false positives + isResolved: boolean; // New field for marking risks as resolved + riskOwner: string | null; // New field for setting a risk owner (nullable string) + installationId: string, + repositoryId: string, + repositoryLink: string + repositoryFullName: string + status: string + pusher: { + name: string, + email: string + }, + organization: Schema.Types.ObjectId, +} + +const gitRisks = new Schema({ + id: { + type: String, + }, + description: { + type: String, + }, + startLine: { + type: String, + }, + endLine: { + type: String, + }, + startColumn: { + type: String, + }, + endColumn: { + type: String, + }, + file: { + type: String, + }, + symlinkFile: { + type: String, + }, + commit: { + type: String, + }, + entropy: { + type: String, + }, + author: { + type: String, + }, + email: { + type: String, + }, + date: { + type: String, + }, + message: { + type: String, + }, + tags: { + type: [String], + }, + ruleID: { + type: String, + }, + fingerprint: { + type: String, + unique: true + }, + isFalsePositive: { + type: Boolean, + default: false + }, + isResolved: { + type: Boolean, + default: false + }, + riskOwner: { + type: String, + default: null + }, + installationId: { + type: String, + require: true + }, + repositoryId: { + type: String + }, + repositoryLink: { + type: String + }, + repositoryFullName: { + type: String + }, + pusher: { + name: { + type: String + }, + email: { + type: String + }, + }, + organization: { + type: Schema.Types.ObjectId, + ref: "Organization", + }, + status: { + type: String, + enum: [ + STATUS_RESOLVED_FALSE_POSITIVE, + STATUS_RESOLVED_REVOKED, + STATUS_RESOLVED_NOT_REVOKED, + STATUS_UNRESOLVED + ], + default: STATUS_UNRESOLVED + } +}, { timestamps: true }); + +const GitRisks = model("GitRisks", gitRisks); + +export default GitRisks; diff --git a/backend/src/routes/v1/index.ts b/backend/src/routes/v1/index.ts index 43c0f672c..a1015c091 100644 --- a/backend/src/routes/v1/index.ts +++ b/backend/src/routes/v1/index.ts @@ -15,6 +15,7 @@ import password from "./password"; import integration from "./integration"; import integrationAuth from "./integrationAuth"; import secretsFolder from "./secretsFolder"; +import secretScanning from "./secretScanning"; export { signup, @@ -34,4 +35,5 @@ export { integration, integrationAuth, secretsFolder, + secretScanning }; diff --git a/backend/src/routes/v1/secretScanning.ts b/backend/src/routes/v1/secretScanning.ts new file mode 100644 index 000000000..a809fe3aa --- /dev/null +++ b/backend/src/routes/v1/secretScanning.ts @@ -0,0 +1,80 @@ +import express from "express"; +const router = express.Router(); +import { + requireAuth, + requireOrganizationAuth, + validateRequest, +} from "../../middleware"; +import { body, param } from "express-validator"; +import { createInstallationSession, getCurrentOrganizationInstallationStatus, getRisksForOrganization, linkInstallationToOrganization, updateRisksStatus } from "../../controllers/v1/secretScanningController"; +import { ACCEPTED, ADMIN, MEMBER, OWNER } from "../../variables"; + +router.post( + "/create-installation-session/organization/:organizationId", + requireAuth({ + acceptedAuthModes: ["jwt"], + }), + param("organizationId").exists().trim(), + requireOrganizationAuth({ + acceptedRoles: [OWNER, ADMIN, MEMBER], + acceptedStatuses: [ACCEPTED], + }), + validateRequest, + createInstallationSession +); + +router.post( + "/link-installation", + requireAuth({ + acceptedAuthModes: ["jwt"], + }), + body("installationId").exists().trim(), + body("sessionId").exists().trim(), + validateRequest, + linkInstallationToOrganization +); + +router.get( + "/installation-status/organization/:organizationId", + requireAuth({ + acceptedAuthModes: ["jwt"], + }), + param("organizationId").exists().trim(), + requireOrganizationAuth({ + acceptedRoles: [OWNER, ADMIN, MEMBER], + acceptedStatuses: [ACCEPTED], + }), + validateRequest, + getCurrentOrganizationInstallationStatus +); + +router.get( + "/organization/:organizationId/risks", + requireAuth({ + acceptedAuthModes: ["jwt"], + }), + param("organizationId").exists().trim(), + requireOrganizationAuth({ + acceptedRoles: [OWNER, ADMIN, MEMBER], + acceptedStatuses: [ACCEPTED], + }), + validateRequest, + getRisksForOrganization +); + +router.post( + "/organization/:organizationId/risks/:riskId/status", + requireAuth({ + acceptedAuthModes: ["jwt"], + }), + param("organizationId").exists().trim(), + param("riskId").exists().trim(), + requireOrganizationAuth({ + acceptedRoles: [OWNER, ADMIN, MEMBER], + acceptedStatuses: [ACCEPTED], + }), + validateRequest, + updateRisksStatus +); + +export default router; \ No newline at end of file diff --git a/backend/src/utils/errors.ts b/backend/src/utils/errors.ts index f99ef27b2..196eefdfe 100644 --- a/backend/src/utils/errors.ts +++ b/backend/src/utils/errors.ts @@ -27,7 +27,7 @@ export const UnauthorizedRequestError = (error?: Partial) = context: error?.context, stack: error?.stack, }); - + export const ForbiddenRequestError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.INFO, statusCode: error?.statusCode ?? 403, @@ -46,6 +46,15 @@ export const BadRequestError = (error?: Partial) => new Req stack: error?.stack, }); +export const ResourceNotFound = (error?: Partial) => new RequestError({ + logLevel: error?.logLevel ?? LogLevel.INFO, + statusCode: error?.statusCode ?? 404, + type: error?.type ?? "resource_not_found", + message: error?.message ?? "The requested resource is not found", + context: error?.context, + stack: error?.stack, +}); + export const InternalServerError = (error?: Partial) => new RequestError({ logLevel: error?.logLevel ?? LogLevel.ERROR, statusCode: error?.statusCode ?? 500, @@ -229,6 +238,6 @@ export const BotNotFoundError = (error?: Partial) => new Re message: error?.message ?? "The requested bot was not found", context: error?.context, stack: error?.stack, -}) +}) //* ----->[MISC ERRORS]<----- diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 8ffa7c3e9..c9646312a 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -58,6 +58,31 @@ services: networks: - infisical-dev + git-app: + container_name: infisical-dev-git-app + restart: unless-stopped + depends_on: + - mongo + - smtp-server + - backend + - frontend + volumes: + - ./secret-engine/src:/app/src/ # mounted whole src to avoid missing reload on new files + ports: + - "3000:3001" + build: + context: ./secret-engine + dockerfile: Dockerfile.dev + command: npm run start + env_file: ./secret-engine/.env + environment: + - NODE_ENV=development + - MONGO_URL=mongodb://root:example@mongo:27017/?authSource=admin + networks: + - infisical-dev + extra_hosts: + - "host.docker.internal:host-gateway" + mongo: image: mongo container_name: infisical-dev-mongo diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index e9cec0e24..692fecd97 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -7,7 +7,8 @@ module.exports = { root: true, env: { browser: true, - es2021: true + es2021: true, + "es6": true }, extends: [ "airbnb", @@ -70,6 +71,7 @@ module.exports = { ], "@typescript-eslint/no-non-null-assertion": "off", "simple-import-sort/exports": "warn", + "@typescript-eslint/no-empty-function": "off", "simple-import-sort/imports": [ "warn", { diff --git a/frontend/src/layouts/AppLayout/AppLayout.tsx b/frontend/src/layouts/AppLayout/AppLayout.tsx index c4f858bfe..94652708a 100644 --- a/frontend/src/layouts/AppLayout/AppLayout.tsx +++ b/frontend/src/layouts/AppLayout/AppLayout.tsx @@ -364,6 +364,14 @@ export const AppLayout = ({ children }: LayoutProps) => { + + + Secret scanning + + + SecurityClient.fetchCall(`/api/v1/secret-scanning/create-installation-session/organization/${organizationId}`, { + method: "POST", + headers: { + "Content-Type": "application/json" + } + }).then(async (res) => { + if (res && res.status === 200) { + return res.json(); + } + console.log("Failed to create integration session"); + console.log("response", res) + return undefined; + }); + +export default createNewIntegrationSession; diff --git a/frontend/src/pages/api/secret-scanning/getInstallationStatus.ts b/frontend/src/pages/api/secret-scanning/getInstallationStatus.ts new file mode 100644 index 000000000..50c1a3ba8 --- /dev/null +++ b/frontend/src/pages/api/secret-scanning/getInstallationStatus.ts @@ -0,0 +1,22 @@ +import SecurityClient from "@app/components/utilities/SecurityClient"; + +/** + * Will create a new integration session and return it for the given org + * @returns + */ +const getInstallationStatus = (organizationId: string) => + SecurityClient.fetchCall(`/api/v1/secret-scanning/installation-status/organization/${organizationId}`, { + method: "GET", + headers: { + "Content-Type": "application/json" + } + }).then(async (res) => { + if (res && res.status === 200) { + return (await res.json()).appInstallationComplete; + } + console.log("Failed to check installation status"); + console.log("response", res) + return undefined; + }); + +export default getInstallationStatus; diff --git a/frontend/src/pages/api/secret-scanning/getRisksByOrganization.ts b/frontend/src/pages/api/secret-scanning/getRisksByOrganization.ts new file mode 100644 index 000000000..3c357e7c6 --- /dev/null +++ b/frontend/src/pages/api/secret-scanning/getRisksByOrganization.ts @@ -0,0 +1,57 @@ +import SecurityClient from "@app/components/utilities/SecurityClient"; + +export type GitRisks = { + id: string; + description: string; + startLine: string; + endLine: string; + startColumn: string; + endColumn: string; + match: string; + secret: string; + file: string; + symlinkFile: string; + commit: string; + entropy: string; + author: string; + email: string; + date: string; + message: string; + tags: string[]; + ruleID: string; + fingerprint: string; + + isFalsePositive: boolean; // New field for marking risks as false positives + isResolved: boolean; // New field for marking risks as resolved + riskOwner: string | null; // New field for setting a risk owner (nullable string) + installationId: string, + repositoryId: string, + repositoryLink: string + repositoryFullName: string + pusher: { + name: string, + email: string + }, + createdAt: string, + organization: string, +} + +/** + * Will create a new integration session and return it for the given org + * @returns + */ +const getRisksByOrganization = (oranizationId: string): Promise => + SecurityClient.fetchCall(`/api/v1/secret-scanning/organization/${oranizationId}/risks`, { + method: "GET", + headers: { + "Content-Type": "application/json" + }, + }).then(async (res) => { + if (res && res.status === 200) { + return (await res.json()).risks; + } + console.log("Failed to fetch risks"); + return undefined; + }); + +export default getRisksByOrganization; diff --git a/frontend/src/pages/api/secret-scanning/linkGitAppInstallationWithOrganization.ts b/frontend/src/pages/api/secret-scanning/linkGitAppInstallationWithOrganization.ts new file mode 100644 index 000000000..5a5e6051a --- /dev/null +++ b/frontend/src/pages/api/secret-scanning/linkGitAppInstallationWithOrganization.ts @@ -0,0 +1,25 @@ +import SecurityClient from "@app/components/utilities/SecurityClient"; + +/** + * Will create a new integration session and return it for the given org + * @returns + */ +const linkGitAppInstallationWithOrganization = (installationId: string, sessionId: string) => + SecurityClient.fetchCall("/api/v1/secret-scanning/link-installation", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + installationId, + sessionId + }) + }).then(async (res) => { + if (res && res.status === 200) { + return res.json(); + } + console.log("Failed to link installation to organization"); + return undefined; + }); + +export default linkGitAppInstallationWithOrganization; diff --git a/frontend/src/pages/api/secret-scanning/updateRiskStatus.ts b/frontend/src/pages/api/secret-scanning/updateRiskStatus.ts new file mode 100644 index 000000000..470385af4 --- /dev/null +++ b/frontend/src/pages/api/secret-scanning/updateRiskStatus.ts @@ -0,0 +1,33 @@ +import SecurityClient from "@app/components/utilities/SecurityClient"; + +export enum RiskStatus { + RESOLVED_FALSE_POSITIVE = "RESOLVED_FALSE_POSITIVE", + RESOLVED_REVOKED = "RESOLVED_REVOKED", + RESOLVED_NOT_REVOKED = "RESOLVED_NOT_REVOKED", + UNRESOLVED = "UNRESOLVED", +} + + + +/** + * Will create a new integration session and return it for the given org + * @returns + */ +const updateRiskStatus = (organizationId: string, riskId: string, status: RiskStatus) => + SecurityClient.fetchCall(`/api/v1/secret-scanning/organization/${organizationId}/risks/${riskId}/status`, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + status + }) + }).then(async (res) => { + if (res && res.status === 200) { + return res.json(); + } + console.log("Failed to link installation to organization"); + return undefined; + }); + +export default updateRiskStatus; diff --git a/frontend/src/pages/secret-scanning/index.tsx b/frontend/src/pages/secret-scanning/index.tsx new file mode 100644 index 000000000..e5ca8ed89 --- /dev/null +++ b/frontend/src/pages/secret-scanning/index.tsx @@ -0,0 +1,156 @@ +import { useEffect, useState } from "react"; +import Head from "next/head"; +import { useRouter } from "next/router" + +import createNewIntegrationSession from "../api/secret-scanning/createSecretScanningSession"; +import getInstallationStatus from "../api/secret-scanning/getInstallationStatus"; +import getRisksByOrganization, { GitRisks } from "../api/secret-scanning/getRisksByOrganization"; +import linkGitAppInstallationWithOrganization from "../api/secret-scanning/linkGitAppInstallationWithOrganization"; +import { RiskStatus } from "../api/secret-scanning/updateRiskStatus"; + +export default function SecretScanning() { + const router = useRouter() + const { state, installationId} = router.query + const [integrationEnabled, setIntegrationStatus] = useState(false) + const [gitRisks, setGitRisks] = useState([]); + const [selectedRiskStatus, setSelectedRiskStatus] = useState(""); + + const handleSelectRiskStatusUpdate = (event: any) => { + setSelectedRiskStatus(event.target.value); + }; + + console.log("selectedRiskStatus===>", selectedRiskStatus) + + useEffect(()=>{ + const fetchRisks = async () =>{ + const risks = await getRisksByOrganization(String(localStorage.getItem("orgData.id"))) + setGitRisks(risks) + } + + const linkInstallation = async () => { + if (typeof state === "string" && typeof installationId === "string"){ + try { + await linkGitAppInstallationWithOrganization(installationId as string, state as string) + console.log("installation verification complete") + }catch (e){ + console.log("app installation is stale, start new session", e) + } + } + } + + const fetchInstallationStatus = async () => { + const status = await getInstallationStatus(String(localStorage.getItem("orgData.id"))) + setIntegrationStatus(status) + } + + fetchInstallationStatus() + linkInstallation() + fetchRisks() + },[state, installationId]) + + const generateNewIntegrationSession = async () => { + const session = await createNewIntegrationSession(String(localStorage.getItem("orgData.id"))) + router.push(`https://github.com/apps/infisical-radar/installations/new?state=${session.sessionId}`) + } + + return ( +
    + + Secret scanning + + + + {/* */} + +
    + {integrationEnabled ? ( + Git app is linked to this organization + ) : ( + + )} +
    + + + + + + + + + + + + + + {gitRisks.map((risk) => { + return ( + + + + + + + + + + ); + })} + +
    + Date + + Secret Type + + View Risk + + Info + + Status + + Action +
    {risk.createdAt}{risk.ruleID} + + View Exposed Secret + + + +
    + {risk.file}
    +
    + {risk.author}
    + {risk.email} +
    +
    + {risk.isResolved ? "Resolved" : "Needs Attention"} + + {risk.isResolved ? "Resolved" : "Needs Attention"} + + +
    + +
    + ); +} diff --git a/nginx/default.dev.conf b/nginx/default.dev.conf index 94c5d7b67..2390602a8 100644 --- a/nginx/default.dev.conf +++ b/nginx/default.dev.conf @@ -13,6 +13,20 @@ server { proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict"; } + + location /git-app-api { + proxy_set_header X-Real-RIP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_set_header Host $http_host; + proxy_set_header X-NginX-Proxy true; + + proxy_pass http://git-app:3000/; + proxy_redirect off; + # proxy_redirect http://localhost:8080/ http://frontend.example.com/; + + proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict"; + } location / { include /etc/nginx/mime.types; diff --git a/package-lock.json b/package-lock.json index cf02a1760..a77f10e02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1941 +1,1941 @@ { - "name": "infisical", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "infisical", - "license": "ISC", - "devDependencies": { - "eslint": "^8.29.0", - "husky": "^8.0.2" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", - "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/husky": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", - "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@eslint/eslintrc": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", - "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - } - }, - "@humanwhocodes/config-array": { - "version": "0.11.7", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", - "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "8.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", - "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.3", - "@humanwhocodes/config-array": "^0.11.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.15.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dev": true, - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globals": { - "version": "13.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", - "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "husky": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", - "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", - "dev": true - }, - "ignore": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", - "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } + "name": "infisical", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "infisical", + "license": "ISC", + "devDependencies": { + "eslint": "^8.29.0", + "husky": "^8.0.2" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", + "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/husky": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", + "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@eslint/eslintrc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz", + "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", + "integrity": "sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.29.0.tgz", + "integrity": "sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.3", + "@humanwhocodes/config-array": "^0.11.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.15.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", + "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.18.0.tgz", + "integrity": "sha512-/mR4KI8Ps2spmoc0Ulu9L7agOF0du1CZNQ3dke8yItYlyKNmGrkONemBbd6V8UTc1Wgcqn21t3WYB7dbRmh6/A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "husky": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.2.tgz", + "integrity": "sha512-Tkv80jtvbnkK3mYWxPZePGFpQ/tT3HNSs/sasF9P2YfkMezDl3ON37YN6jUUI4eTg5LcyVynlb6r4eyvOmspvg==", + "dev": true + }, + "ignore": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.1.tgz", + "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-sdsl": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", + "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + } + } } diff --git a/secret-engine/.eslintrc b/secret-engine/.eslintrc new file mode 100644 index 000000000..d66289aa9 --- /dev/null +++ b/secret-engine/.eslintrc @@ -0,0 +1,14 @@ +{ + "parser": "@typescript-eslint/parser", + "parserOptions": { + "sourceType": "module", + "ecmaVersion": 2020 + }, + "plugins": [ + "@typescript-eslint" + ], + // "extends": [ + // "eslint:recommended", + // "plugin:@typescript-eslint/recommended" + // ] +} \ No newline at end of file diff --git a/secret-engine/Dockerfile.dev b/secret-engine/Dockerfile.dev new file mode 100644 index 000000000..b40ba2365 --- /dev/null +++ b/secret-engine/Dockerfile.dev @@ -0,0 +1,13 @@ +FROM node:18-slim +WORKDIR app/ +COPY package.json package-lock.json ./ +RUN npm ci +RUN npm cache clean --force +COPY . . + +RUN apt-get update && apt-get install -y bash curl && curl -1sLf \ + 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | bash \ + && apt-get update && apt-get install -y infisical=0.8.1 + + +CMD [ "npm", "start" ] diff --git a/secret-engine/package-lock.json b/secret-engine/package-lock.json index dfaeb146a..88d013a6d 100644 --- a/secret-engine/package-lock.json +++ b/secret-engine/package-lock.json @@ -9,13 +9,19 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "probot": "^12.2.4" + "mongoose": "^7.3.1", + "probot": "^12.2.4", + "ts-node": "^10.9.1" }, "devDependencies": { "@types/jest": "^29.0.0", "@types/node": "^18.0.0", + "@typescript-eslint/eslint-plugin": "^5.61.0", + "@typescript-eslint/parser": "^5.61.0", + "eslint": "^8.44.0", "jest": "^29.0.0", "nock": "^13.0.5", + "nodemon": "^2.0.22", "smee-client": "^1.2.2", "ts-jest": "^29.0.0", "typescript": "^4.1.3" @@ -24,6 +30,15 @@ "node": ">= 10.13.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -596,11 +611,165 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@hapi/bourne": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.1.0.tgz", "integrity": "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==" }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -985,7 +1154,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -1002,8 +1170,7 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", @@ -1021,6 +1188,41 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@octokit/auth-app": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.13.tgz", @@ -1881,6 +2083,26 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, "node_modules/@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -2027,6 +2249,12 @@ "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==" }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, "node_modules/@types/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -2098,6 +2326,12 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "node_modules/@types/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", @@ -2122,6 +2356,20 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, "node_modules/@types/yargs": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", @@ -2137,6 +2385,321 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz", + "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/type-utils": "5.61.0", + "@typescript-eslint/utils": "5.61.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz", + "integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/typescript-estree": "5.61.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", + "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz", + "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.61.0", + "@typescript-eslint/utils": "5.61.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", + "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", + "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz", + "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/typescript-estree": "5.61.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", + "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.61.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2149,6 +2712,34 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -2172,6 +2763,22 @@ "node": ">=8" } }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -2224,6 +2831,11 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -2331,6 +2943,15 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -2470,6 +3091,15 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -2586,6 +3216,14 @@ "node-int64": "^0.4.0" } }, + "node_modules/bson": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", + "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==", + "engines": { + "node": ">=14.20.1" + } + }, "node_modules/btoa-lite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", @@ -2685,6 +3323,33 @@ "node": ">=10" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -2851,6 +3516,11 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -2895,6 +3565,12 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -2961,6 +3637,14 @@ "wrappy": "1" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", @@ -2970,6 +3654,30 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dotenv": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", @@ -3062,6 +3770,222 @@ "node": ">=8" } }, + "node_modules/eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -3074,6 +3998,48 @@ "node": ">=4" } }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -3250,12 +4216,40 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "node_modules/fast-redact": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", @@ -3277,6 +4271,15 @@ "punycode": "^1.3.2" } }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -3286,6 +4289,18 @@ "bser": "2.1.1" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3341,11 +4356,30 @@ "node": ">=8" } }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/flatstr": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -3488,6 +4522,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -3497,11 +4543,37 @@ "node": ">=4" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -3626,6 +4698,46 @@ "node": ">=0.10.0" } }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -3701,6 +4813,11 @@ "url": "https://opencollective.com/ioredis" } }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -3723,6 +4840,18 @@ "is-base64": "bin/is-base64" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-core-module": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", @@ -3734,6 +4863,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3752,6 +4890,18 @@ "node": ">=6" } }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3761,6 +4911,15 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -4519,6 +5678,18 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -4601,6 +5772,14 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -4619,6 +5798,19 @@ "node": ">=6" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -4694,6 +5886,12 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", @@ -4726,8 +5924,7 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/makeerror": { "version": "1.0.12", @@ -4746,6 +5943,12 @@ "node": ">= 0.6" } }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -4757,6 +5960,15 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -4837,6 +6049,112 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/mongodb": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.6.0.tgz", + "integrity": "sha512-z8qVs9NfobHJm6uzK56XBZF8XwM9H294iRnB7wNjF0SnY93si5HPziIJn+qqvUR5QOff/4L0gCD6SShdR/GtVQ==", + "dependencies": { + "bson": "^5.3.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "saslprep": "^1.0.3" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.201.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/mongodb-connection-string-url/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mongoose": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.3.1.tgz", + "integrity": "sha512-6289bmSIhvR8xMHsYe2/CuzN7wHK+2RHcK7idDdzniCPC5zix5JH0Hc4k3CmXlr/9zQ2250gUQiUWtvDB0vF1Q==", + "dependencies": { + "bson": "^5.3.0", + "kareem": "2.5.1", + "mongodb": "5.6.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -4880,6 +6198,25 @@ "node": ">= 0.8" } }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/mri": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", @@ -4899,6 +6236,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -4958,6 +6301,88 @@ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, + "node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -5052,6 +6477,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -5110,6 +6552,18 @@ "node": ">=6" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -5167,6 +6621,15 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -5363,6 +6826,15 @@ "node": ">=8" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/pretty-format": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", @@ -5504,6 +6976,12 @@ "node": ">= 0.10" } }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -5548,6 +7026,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", @@ -5594,6 +7092,18 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/redis-commands": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", @@ -5673,11 +7183,59 @@ "node": ">=10" } }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, "node_modules/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5702,6 +7260,18 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -5805,12 +7375,38 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -5826,6 +7422,15 @@ "node": ">=8" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, "node_modules/smee-client": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/smee-client/-/smee-client-1.2.3.tgz", @@ -5857,6 +7462,19 @@ "node": ">=0.12.0" } }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, "node_modules/sonic-boom": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", @@ -5883,6 +7501,15 @@ "source-map": "^0.6.0" } }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -6101,6 +7728,12 @@ "node": ">=8" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -6136,6 +7769,18 @@ "node": ">=0.6" } }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -6217,11 +7862,80 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -6259,7 +7973,6 @@ "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6280,6 +7993,12 @@ "node": ">=0.8.0" } }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "node_modules/universal-github-app-jwt": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", @@ -6340,6 +8059,24 @@ "dotenv": "*" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -6361,6 +8098,11 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "node_modules/v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", @@ -6518,6 +8260,14 @@ "node": ">=12" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -6532,6 +8282,12 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -6963,11 +8719,123 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "dependencies": { + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "dev": true + }, "@hapi/bourne": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.1.0.tgz", "integrity": "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==" }, + "@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -7265,8 +9133,7 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", @@ -7277,8 +9144,7 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "@jridgewell/trace-mapping": { "version": "0.3.18", @@ -7298,6 +9164,32 @@ } } }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, "@octokit/auth-app": { "version": "4.0.13", "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-4.0.13.tgz", @@ -8086,6 +9978,26 @@ "@sinonjs/commons": "^3.0.0" } }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, "@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -8232,6 +10144,12 @@ "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==" }, + "@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, "@types/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -8301,6 +10219,12 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, "@types/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", @@ -8325,6 +10249,20 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "@types/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==" + }, + "@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, "@types/yargs": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", @@ -8340,6 +10278,205 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz", + "integrity": "sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/type-utils": "5.61.0", + "@typescript-eslint/utils": "5.61.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz", + "integrity": "sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/typescript-estree": "5.61.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz", + "integrity": "sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz", + "integrity": "sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.61.0", + "@typescript-eslint/utils": "5.61.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.61.0.tgz", + "integrity": "sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz", + "integrity": "sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/visitor-keys": "5.61.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.61.0.tgz", + "integrity": "sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.61.0", + "@typescript-eslint/types": "5.61.0", + "@typescript-eslint/typescript-estree": "5.61.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz", + "integrity": "sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.61.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -8349,6 +10486,23 @@ "negotiator": "0.6.3" } }, + "acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==" + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -8366,6 +10520,18 @@ "indent-string": "^4.0.0" } }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -8400,6 +10566,11 @@ "picomatch": "^2.0.4" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -8485,6 +10656,12 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -8599,6 +10776,12 @@ "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, "body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -8687,6 +10870,11 @@ "node-int64": "^0.4.0" } }, + "bson": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.3.0.tgz", + "integrity": "sha512-ukmCZMneMlaC5ebPHXIkP8YJzNl5DC41N5MAIvKDqLggdao342t4McltoJBQfQya/nHBWAcSsYRqlXPoQkTJag==" + }, "btoa-lite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", @@ -8751,6 +10939,22 @@ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -8877,6 +11081,11 @@ "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", "dev": true }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -8907,6 +11116,12 @@ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", @@ -8954,12 +11169,35 @@ "wrappy": "1" } }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + }, "diff-sequences": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", "dev": true }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dotenv": { "version": "8.6.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", @@ -9034,11 +11272,190 @@ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true }, + "eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true + }, + "espree": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -9183,12 +11600,37 @@ } } }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "fast-redact": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", @@ -9207,6 +11649,15 @@ "punycode": "^1.3.2" } }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fb-watchman": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", @@ -9216,6 +11667,15 @@ "bser": "2.1.1" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -9264,11 +11724,27 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, "flatstr": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -9368,17 +11844,46 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "handlebars": { "version": "4.7.7", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", @@ -9462,6 +11967,36 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -9515,6 +12050,11 @@ "standard-as-callback": "^2.1.0" } }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -9530,6 +12070,15 @@ "resolved": "https://registry.npmjs.org/is-base64/-/is-base64-1.1.0.tgz", "integrity": "sha512-Nlhg7Z2dVC4/PTvIFkgVVNvPHSO2eR/Yd0XzhGiXCXEvWnptXlXa/clQ8aePPiMuxEGcWfzWbGw2Fe3d+Y3v1g==" }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-core-module": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", @@ -9538,6 +12087,12 @@ "has": "^1.0.3" } }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -9550,12 +12105,27 @@ "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, "is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -10135,6 +12705,18 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -10200,6 +12782,11 @@ "safe-buffer": "^5.0.1" } }, + "kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==" + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -10212,6 +12799,16 @@ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -10277,6 +12874,12 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lru_map": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", @@ -10303,8 +12906,7 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "makeerror": { "version": "1.0.12", @@ -10320,6 +12922,12 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -10331,6 +12939,12 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -10384,6 +12998,76 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, + "mongodb": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.6.0.tgz", + "integrity": "sha512-z8qVs9NfobHJm6uzK56XBZF8XwM9H294iRnB7wNjF0SnY93si5HPziIJn+qqvUR5QOff/4L0gCD6SShdR/GtVQ==", + "requires": { + "bson": "^5.3.0", + "mongodb-connection-string-url": "^2.6.0", + "saslprep": "^1.0.3", + "socks": "^2.7.1" + } + }, + "mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, + "mongoose": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.3.1.tgz", + "integrity": "sha512-6289bmSIhvR8xMHsYe2/CuzN7wHK+2RHcK7idDdzniCPC5zix5JH0Hc4k3CmXlr/9zQ2250gUQiUWtvDB0vF1Q==", + "requires": { + "bson": "^5.3.0", + "kareem": "2.5.1", + "mongodb": "5.6.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, "morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -10423,6 +13107,19 @@ } } }, + "mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" + }, + "mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "requires": { + "debug": "4.x" + } + }, "mri": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", @@ -10439,6 +13136,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -10481,6 +13184,65 @@ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, + "nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10550,6 +13312,20 @@ "mimic-fn": "^2.1.0" } }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -10589,6 +13365,15 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -10631,6 +13416,12 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -10793,6 +13584,12 @@ "find-up": "^4.0.0" } }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "pretty-format": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", @@ -10905,6 +13702,12 @@ "ipaddr.js": "1.9.1" } }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -10933,6 +13736,12 @@ "side-channel": "^1.0.4" } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", @@ -10970,6 +13779,15 @@ "util-deprecate": "^1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "redis-commands": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", @@ -11025,11 +13843,35 @@ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -11040,6 +13882,15 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -11129,12 +13980,34 @@ "object-inspect": "^1.9.0" } }, + "sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, "sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -11147,6 +14020,11 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, "smee-client": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/smee-client/-/smee-client-1.2.3.tgz", @@ -11174,6 +14052,15 @@ } } }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, "sonic-boom": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", @@ -11197,6 +14084,15 @@ "source-map": "^0.6.0" } }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -11357,6 +14253,12 @@ "minimatch": "^3.0.4" } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -11383,6 +14285,15 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -11430,11 +14341,49 @@ } } }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", @@ -11459,8 +14408,7 @@ "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, "uglify-js": { "version": "3.17.4", @@ -11468,6 +14416,12 @@ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "optional": true }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "universal-github-app-jwt": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", @@ -11503,6 +14457,23 @@ "integrity": "sha512-3cIC18In/t0X/yH793c00qqxcKD8jVCgNOPif/fGQkFpYMGecM9YAc+kaAKXuZsM2dE9I9wFI7KvAuNX22SGMQ==", "requires": {} }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + } + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -11518,6 +14489,11 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, "v8-to-istanbul": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", @@ -11644,6 +14620,11 @@ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/secret-engine/package.json b/secret-engine/package.json index 4e3fe7b38..b038c9206 100644 --- a/secret-engine/package.json +++ b/secret-engine/package.json @@ -13,17 +13,24 @@ ], "scripts": { "build": "tsc", - "start": "npm run build && probot run ./lib/index.js", + "dev": "npm run build && probot run ./lib/index.js", + "start": "nodemon -e ts,yml --watch './**/*.ts' --exec npm run dev", "test": "jest" }, "dependencies": { - "probot": "^12.2.4" + "mongoose": "^7.3.1", + "probot": "^12.2.4", + "ts-node": "^10.9.1" }, "devDependencies": { "@types/jest": "^29.0.0", "@types/node": "^18.0.0", + "@typescript-eslint/eslint-plugin": "^5.61.0", + "@typescript-eslint/parser": "^5.61.0", + "eslint": "^8.44.0", "jest": "^29.0.0", "nock": "^13.0.5", + "nodemon": "^2.0.22", "smee-client": "^1.2.2", "ts-jest": "^29.0.0", "typescript": "^4.1.3" diff --git a/secret-engine/src/index.ts b/secret-engine/src/index.ts index 6a778f306..3704fcf8f 100644 --- a/secret-engine/src/index.ts +++ b/secret-engine/src/index.ts @@ -3,11 +3,9 @@ import { exec } from "child_process"; import { writeFile, readFile, rm, mkdir, } from "fs"; import { tmpdir } from "os"; import { join } from "path" - -// interface CommandResult { -// stdout: string; -// stderr: string; -// } +import mongoose from "mongoose"; +import GitRisks from "./models/gitRisks"; +import GitAppOrganizationInstallation from "./models/gitAppOrganizationInstallation"; type SecretMatch = { Description: string; @@ -31,17 +29,41 @@ type SecretMatch = { }; export = (app: Probot) => { - app.on("pull_request", async (context) => { - // create a check + // connect to DB + initDatabase() + + app.on("installation.created", async (context) => { + const { payload } = context; + // console.log("payload==>", payload.installation.repository_selection) + }) + + app.on("installation.deleted", async (context) => { + const { payload } = context; + const { installation, repositories } = payload; + if (installation.repository_selection == "all") { + await GitRisks.deleteMany({ installationId: installation.id }) + await GitAppOrganizationInstallation.deleteOne({ installationId: installation.id }) + } else { + for (const repository of repositories) { + await GitRisks.deleteMany({ repositoryId: repository.id }) + } + } }) app.on("push", async (context) => { - console.log("something was pushed") const { payload } = context; - const { commits, repository } = payload; + const { commits, repository, installation, } = payload; const [owner, repo] = repository.full_name.split('/'); - const fingerPrints: any = [] + const installationLinkToOrgExists = await GitAppOrganizationInstallation.findOne({ installationId: installation.id }).lean() + if (!installationLinkToOrgExists) { + return + } + + console.log("installation link does exist!") + + const findingsByFingerprint: { [key: string]: SecretMatch; } = {} + for (const commit of commits) { for (const filepath of [...commit.added, ...commit.modified]) { try { @@ -57,7 +79,13 @@ export = (app: Probot) => { const findings = await scanContentAndGetFindings(`\n${fileContent}`) // to count lines correctly for (const finding of findings) { - fingerPrints.push(`${commit.id}:${filepath}:${finding.RuleID}:${finding.StartLine}`) + const fingerPrint = `${commit.id}:${filepath}:${finding.RuleID}:${finding.StartLine}` + finding.Fingerprint = fingerPrint + finding.Commit = commit.id + finding.File = filepath + finding.Author = commit.author.name + finding.Email = commit.author.email + findingsByFingerprint[fingerPrint] = finding } } catch (error) { @@ -66,7 +94,19 @@ export = (app: Probot) => { } } - console.log("fingerPrints==>", fingerPrints) + // change to update + for (const key in findingsByFingerprint) { + await GitRisks.findOneAndUpdate({ fingerprint: findingsByFingerprint[key].Fingerprint }, + { + ...convertKeysToLowercase(findingsByFingerprint[key]), + installationId: installation.id, + organization: installationLinkToOrgExists.organizationId, + repositoryFullName: repository.full_name, + repositoryId: repository.id + }, { + upsert: true + }) + } }); }; @@ -149,3 +189,31 @@ function deleteTempFolder(folderPath: string): Promise { }); }); } + +const initDatabase = async () => { + try { + await mongoose.connect(process.env.MONGO_URL); + // allow empty strings to pass the required validator + mongoose.Schema.Types.String.checkRequired(v => typeof v === "string"); + + console.log("Database connection established"); + + } catch (err) { + console.log(`Unable to establish Database connection due to the error.\n${err}`); + } + + return mongoose.connection; +} + +function convertKeysToLowercase(obj: T): T { + const convertedObj = {} as T; + + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + const lowercaseKey = key.charAt(0).toLowerCase() + key.slice(1); + convertedObj[lowercaseKey] = obj[key]; + } + } + + return convertedObj; +} \ No newline at end of file diff --git a/secret-engine/src/models/gitAppOrganizationInstallation.ts b/secret-engine/src/models/gitAppOrganizationInstallation.ts new file mode 100644 index 000000000..e742c0cf1 --- /dev/null +++ b/secret-engine/src/models/gitAppOrganizationInstallation.ts @@ -0,0 +1,31 @@ +import { Schema, model } from "mongoose"; + +type Installation = { + installationId: string + organizationId: string + user: Schema.Types.ObjectId +}; + + +const gitAppOrganizationInstallation = new Schema({ + installationId: { + type: String, + required: true, + unique: true + }, + organizationId: { + type: String, + required: true, + unique: true + }, + user: { + type: Schema.Types.ObjectId, + ref: "User", + required: true, + } +}); + + +const GitAppOrganizationInstallation = model("git_app_organization_installation", gitAppOrganizationInstallation); + +export default GitAppOrganizationInstallation; diff --git a/secret-engine/src/models/gitRisks.ts b/secret-engine/src/models/gitRisks.ts new file mode 100644 index 000000000..a8a43e6b6 --- /dev/null +++ b/secret-engine/src/models/gitRisks.ts @@ -0,0 +1,147 @@ +import { Schema, model } from "mongoose"; +export const STATUS_RESOLVED_FALSE_POSITIVE = 'RESOLVED_FALSE_POSITIVE'; +export const STATUS_RESOLVED_REVOKED = 'RESOLVED_REVOKED'; +export const STATUS_RESOLVED_NOT_REVOKED = 'RESOLVED_NOT_REVOKED'; +export const STATUS_UNRESOLVED = 'UNRESOLVED'; + +export type GitRisks = { + id: string; + description: string; + startLine: string; + endLine: string; + startColumn: string; + endColumn: string; + match: string; + secret: string; + file: string; + symlinkFile: string; + commit: string; + entropy: string; + author: string; + email: string; + date: string; + message: string; + tags: string[]; + ruleID: string; + fingerprint: string; + + isFalsePositive: boolean; // New field for marking risks as false positives + isResolved: boolean; // New field for marking risks as resolved + riskOwner: string | null; // New field for setting a risk owner (nullable string) + installationId: string, + repositoryId: string, + repositoryLink: string + repositoryFullName: string + status: string + pusher: { + name: string, + email: string + }, + organization: Schema.Types.ObjectId, +} + +const gitRisks = new Schema({ + id: { + type: String, + }, + description: { + type: String, + }, + startLine: { + type: String, + }, + endLine: { + type: String, + }, + startColumn: { + type: String, + }, + endColumn: { + type: String, + }, + file: { + type: String, + }, + symlinkFile: { + type: String, + }, + commit: { + type: String, + }, + entropy: { + type: String, + }, + author: { + type: String, + }, + email: { + type: String, + }, + date: { + type: String, + }, + message: { + type: String, + }, + tags: { + type: [String], + }, + ruleID: { + type: String, + }, + fingerprint: { + type: String, + unique: true + }, + isFalsePositive: { + type: Boolean, + default: false + }, + isResolved: { + type: Boolean, + default: false + }, + riskOwner: { + type: String, + default: null + }, + installationId: { + type: String, + require: true + }, + repositoryId: { + type: String + }, + repositoryLink: { + type: String + }, + repositoryFullName: { + type: String + }, + pusher: { + name: { + type: String + }, + email: { + type: String + }, + }, + organization: { + type: Schema.Types.ObjectId, + ref: "Organization", + }, + status: { + type: String, + enum: [ + STATUS_RESOLVED_FALSE_POSITIVE, + STATUS_RESOLVED_REVOKED, + STATUS_RESOLVED_NOT_REVOKED, + STATUS_UNRESOLVED + ], + default: STATUS_UNRESOLVED + } +}, { timestamps: true }); + +const GitRisks = model("GitRisks", gitRisks); + +export default GitRisks; diff --git a/secret-engine/tsconfig.json b/secret-engine/tsconfig.json index 8f4e51379..bb2122a1c 100644 --- a/secret-engine/tsconfig.json +++ b/secret-engine/tsconfig.json @@ -25,7 +25,7 @@ // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, + "strict": false /* Enable all strict type-checking options. */, // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ // "strictNullChecks": true, /* Enable strict null checks. */ // "strictFunctionTypes": true, /* Enable strict checking of function types. */ From a63d179a0d83bafe03b715398052b61127b473e5 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 4 Jul 2023 22:06:29 -0400 Subject: [PATCH 005/189] add email notifications for risks --- secret-engine/.dockerignore | 1 + secret-engine/app.yml | 30 ++--- secret-engine/package-lock.json | 15 +++ secret-engine/package.json | 4 +- secret-engine/src/helper/nodemailer.ts | 45 +++++++ secret-engine/src/index.ts | 59 ++++++++- secret-engine/src/models/membershipOrg.ts | 56 +++++++++ secret-engine/src/models/user.ts | 116 ++++++++++++++++++ secret-engine/src/service/smtp.ts | 77 ++++++++++++ .../templates/secretLeakIncident.handlebars | 19 +++ .../test/fixtures/issues.opened.json | 18 --- secret-engine/test/fixtures/mock-cert.pem | 27 ---- secret-engine/test/index.test.ts | 74 ----------- secret-engine/tsconfig.json | 7 +- 14 files changed, 406 insertions(+), 142 deletions(-) create mode 100644 secret-engine/src/helper/nodemailer.ts create mode 100644 secret-engine/src/models/membershipOrg.ts create mode 100644 secret-engine/src/models/user.ts create mode 100644 secret-engine/src/service/smtp.ts create mode 100644 secret-engine/src/templates/secretLeakIncident.handlebars delete mode 100644 secret-engine/test/fixtures/issues.opened.json delete mode 100644 secret-engine/test/fixtures/mock-cert.pem delete mode 100644 secret-engine/test/index.test.ts diff --git a/secret-engine/.dockerignore b/secret-engine/.dockerignore index c961acb50..88fe8b202 100644 --- a/secret-engine/.dockerignore +++ b/secret-engine/.dockerignore @@ -8,5 +8,6 @@ **/.env **/.editorconfig **/dist +**/lib **/*.pem Dockerfile diff --git a/secret-engine/app.yml b/secret-engine/app.yml index baea2801a..8121db9fa 100644 --- a/secret-engine/app.yml +++ b/secret-engine/app.yml @@ -13,7 +13,7 @@ # The list of events the GitHub App subscribes to. # Uncomment the event names below to enable them. default_events: - # - check_run + - check_run # - check_suite # - commit_comment # - create @@ -23,20 +23,20 @@ default_events: # - fork # - gollum # - issue_comment - - issues + # - issues - push -# - label -# - milestone -# - member -# - membership -# - org_block -# - organization -# - page_build -# - project -# - project_card -# - project_column -# - public -# - pull_request + # - label + # - milestone + # - member + # - membership + # - org_block + # - organization + # - page_build + # - project + # - project_card + # - project_column + # - public + - pull_request # - pull_request_review # - pull_request_review_comment # - release @@ -128,7 +128,7 @@ name: Infisical Radar # The homepage of your GitHub App. url: https://infisical.com/radar # A description of the GitHub App. -description: A description of my awesome app +description: Scan your commits for leaked secrets # Set to true when your GitHub App is available to the public or false when it is only accessible to the owner of the app. # Default: true # public: false diff --git a/secret-engine/package-lock.json b/secret-engine/package-lock.json index 88d013a6d..658dbed54 100644 --- a/secret-engine/package-lock.json +++ b/secret-engine/package-lock.json @@ -9,7 +9,9 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "handlebars": "^4.7.7", "mongoose": "^7.3.1", + "nodemailer": "^6.9.3", "probot": "^12.2.4", "ts-node": "^10.9.1" }, @@ -6301,6 +6303,14 @@ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, + "node_modules/nodemailer": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", + "integrity": "sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/nodemon": { "version": "2.0.22", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", @@ -13184,6 +13194,11 @@ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", "dev": true }, + "nodemailer": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.3.tgz", + "integrity": "sha512-fy9v3NgTzBngrMFkDsKEj0r02U7jm6XfC3b52eoNV+GCrGj+s8pt5OqhiJdWKuw51zCTdiNR/IUD1z33LIIGpg==" + }, "nodemon": { "version": "2.0.22", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", diff --git a/secret-engine/package.json b/secret-engine/package.json index b038c9206..0a8f744e6 100644 --- a/secret-engine/package.json +++ b/secret-engine/package.json @@ -12,13 +12,15 @@ "probot-app" ], "scripts": { - "build": "tsc", + "build": "tsc && cp -R ./src/templates ./lib", "dev": "npm run build && probot run ./lib/index.js", "start": "nodemon -e ts,yml --watch './**/*.ts' --exec npm run dev", "test": "jest" }, "dependencies": { + "handlebars": "^4.7.7", "mongoose": "^7.3.1", + "nodemailer": "^6.9.3", "probot": "^12.2.4", "ts-node": "^10.9.1" }, diff --git a/secret-engine/src/helper/nodemailer.ts b/secret-engine/src/helper/nodemailer.ts new file mode 100644 index 000000000..3aaa2b28a --- /dev/null +++ b/secret-engine/src/helper/nodemailer.ts @@ -0,0 +1,45 @@ +import fs from "fs"; +import path from "path"; +import handlebars from "handlebars"; +import nodemailer from "nodemailer"; + +let smtpTransporter: nodemailer.Transporter; + +/** + * @param {Object} obj + * @param {String} obj.template - email template to use from /templates folder (e.g. testEmail.handlebars) + * @param {String[]} obj.subjectLine - email subject line + * @param {String[]} obj.recipients - email addresses of people to send email to + * @param {Object} obj.substitutions - object containing template substitutions + */ +export const sendMail = async ({ + template, + subjectLine, + recipients, + substitutions, +}: { + template: string; + subjectLine: string; + recipients: string[]; + substitutions: any; +}) => { + const smtpConfigured = process.env.SMTP_HOST == "" || process.env.SMTP_HOST == undefined ? false : true + if (smtpConfigured) { + const html = fs.readFileSync( + path.resolve(__dirname, "../templates/" + template), + "utf8" + ); + const temp = handlebars.compile(html); + const htmlToSend = temp(substitutions); + await smtpTransporter.sendMail({ + from: `"${process.env.SMTP_FROM_NAME}" <${process.env.SMTP_FROM_ADDRESS}>`, + to: recipients.join(", "), + subject: subjectLine, + html: htmlToSend, + }); + } +}; + +export const setTransporter = (transporter: nodemailer.Transporter) => { + smtpTransporter = transporter; +}; \ No newline at end of file diff --git a/secret-engine/src/index.ts b/secret-engine/src/index.ts index 3704fcf8f..067efcfac 100644 --- a/secret-engine/src/index.ts +++ b/secret-engine/src/index.ts @@ -6,6 +6,10 @@ import { join } from "path" import mongoose from "mongoose"; import GitRisks from "./models/gitRisks"; import GitAppOrganizationInstallation from "./models/gitAppOrganizationInstallation"; +import { sendMail, setTransporter } from "./helper/nodemailer"; +import { initSmtp } from "./service/smtp"; +import MembershipOrg, { ADMIN, OWNER } from "./models/membershipOrg"; +import User from "./models/user"; type SecretMatch = { Description: string; @@ -28,10 +32,12 @@ type SecretMatch = { Fingerprint: string; }; -export = (app: Probot) => { +export = async (app: Probot) => { // connect to DB initDatabase() + setTransporter(await initSmtp()); + app.on("installation.created", async (context) => { const { payload } = context; // console.log("payload==>", payload.installation.repository_selection) @@ -52,7 +58,7 @@ export = (app: Probot) => { app.on("push", async (context) => { const { payload } = context; - const { commits, repository, installation, } = payload; + const { commits, repository, installation, pusher } = payload; const [owner, repo] = repository.full_name.split('/'); const installationLinkToOrgExists = await GitAppOrganizationInstallation.findOne({ installationId: installation.id }).lean() @@ -60,8 +66,6 @@ export = (app: Probot) => { return } - console.log("installation link does exist!") - const findingsByFingerprint: { [key: string]: SecretMatch; } = {} for (const commit of commits) { @@ -107,6 +111,53 @@ export = (app: Probot) => { upsert: true }) } + // get emails of admins + const adminsOfWork = await MembershipOrg.find({ + organization: installationLinkToOrgExists.organizationId, + $or: [ + { role: OWNER }, + { role: ADMIN } + ] + }).lean() + + const userEmails = await User.find({ + _id: { + $in: [adminsOfWork.map(orgMembership => orgMembership.user)] + } + }).select("email").lean() + + const adminOrOwnerEmails = userEmails.map(userObject => userObject.email) + + await sendMail({ + template: "secretLeakIncident.handlebars", + subjectLine: `Incident alert: leaked secrets found in Github repository ${repository.full_name}`, + recipients: [pusher.email, ...adminOrOwnerEmails], + substitutions: { + numberOfSecrets: Object.keys(findingsByFingerprint).length, + pusher_email: pusher.email, + pusher_name: pusher.name + } + }); + }); + + app.on(['pull_request.opened', 'pull_request.synchronize'], async (context) => { + const { payload } = context; + const { pull_request } = payload + if (false) { + const check = { + owner: pull_request.head.repo.owner.login, + repo: pull_request.head.repo.name, + name: 'Secret Detection', + head_sha: pull_request.head.sha, + status: 'completed', + conclusion: 'failure', + output: { + title: `X Secrets detected`, + summary: 'We detected potential leaked secret(s) in your pull request.', + }, + }; + return context.octokit.checks.create(check); + } }); }; diff --git a/secret-engine/src/models/membershipOrg.ts b/secret-engine/src/models/membershipOrg.ts new file mode 100644 index 000000000..3af683631 --- /dev/null +++ b/secret-engine/src/models/membershipOrg.ts @@ -0,0 +1,56 @@ +import { Document, Schema, Types, model } from "mongoose"; +// membership roles +export const OWNER = "owner"; +export const ADMIN = "admin"; +export const MEMBER = "member"; + +// membership statuses +export const INVITED = "invited"; + +// -- organization +export const ACCEPTED = "accepted"; + +export interface IMembershipOrg extends Document { + _id: Types.ObjectId; + user: Types.ObjectId; + inviteEmail: string; + organization: Types.ObjectId; + role: "owner" | "admin" | "member"; + status: "invited" | "accepted"; +} + +const membershipOrgSchema = new Schema( + { + user: { + type: Schema.Types.ObjectId, + ref: "User", + }, + inviteEmail: { + type: String, + }, + organization: { + type: Schema.Types.ObjectId, + ref: "Organization", + }, + role: { + type: String, + enum: [OWNER, ADMIN, MEMBER], + required: true, + }, + status: { + type: String, + enum: [INVITED, ACCEPTED], + required: true, + }, + }, + { + timestamps: true, + } +); + +const MembershipOrg = model( + "MembershipOrg", + membershipOrgSchema +); + +export default MembershipOrg; diff --git a/secret-engine/src/models/user.ts b/secret-engine/src/models/user.ts new file mode 100644 index 000000000..0d49b4cd9 --- /dev/null +++ b/secret-engine/src/models/user.ts @@ -0,0 +1,116 @@ +import { Document, Schema, Types, model } from "mongoose"; + +export enum AuthProvider { + GOOGLE = "google", +} + +export interface IUser extends Document { + _id: Types.ObjectId; + authId?: string; + authProvider?: AuthProvider; + email: string; + firstName?: string; + lastName?: string; + encryptionVersion: number; + protectedKey: string; + protectedKeyIV: string; + protectedKeyTag: string; + publicKey?: string; + encryptedPrivateKey?: string; + iv?: string; + tag?: string; + salt?: string; + verifier?: string; + isMfaEnabled: boolean; + mfaMethods: boolean; + devices: { + ip: string; + userAgent: string; + }[]; +} + +const userSchema = new Schema( + { + authId: { + type: String, + }, + authProvider: { + type: String, + enum: AuthProvider, + }, + email: { + type: String, + required: true, + unique: true, + }, + firstName: { + type: String, + }, + lastName: { + type: String, + }, + encryptionVersion: { + type: Number, + select: false, + default: 1, // to resolve backward-compatibility issues + }, + protectedKey: { // introduced as part of encryption version 2 + type: String, + select: false, + }, + protectedKeyIV: { // introduced as part of encryption version 2 + type: String, + select: false, + }, + protectedKeyTag: { // introduced as part of encryption version 2 + type: String, + select: false, + }, + publicKey: { + type: String, + select: false, + }, + encryptedPrivateKey: { + type: String, + select: false, + }, + iv: { // iv of [encryptedPrivateKey] + type: String, + select: false, + }, + tag: { // tag of [encryptedPrivateKey] + type: String, + select: false, + }, + salt: { + type: String, + select: false, + }, + verifier: { + type: String, + select: false, + }, + isMfaEnabled: { + type: Boolean, + default: false, + }, + mfaMethods: [{ + type: String, + }], + devices: { + type: [{ + ip: String, + userAgent: String, + }], + default: [], + select: false, + }, + }, + { + timestamps: true, + } +); + +const User = model("User", userSchema); + +export default User; diff --git a/secret-engine/src/service/smtp.ts b/secret-engine/src/service/smtp.ts new file mode 100644 index 000000000..bd7ae915f --- /dev/null +++ b/secret-engine/src/service/smtp.ts @@ -0,0 +1,77 @@ +import nodemailer from "nodemailer"; +import SMTPConnection from "nodemailer/lib/smtp-connection"; + +export const SMTP_HOST_SENDGRID = "smtp.sendgrid.net"; +export const SMTP_HOST_MAILGUN = "smtp.mailgun.org"; +export const SMTP_HOST_SOCKETLABS = "smtp.socketlabs.com"; +export const SMTP_HOST_ZOHOMAIL = "smtp.zoho.com"; +export const SMTP_HOST_GMAIL = "smtp.gmail.com"; + +export const initSmtp = async () => { + const mailOpts: SMTPConnection.Options = { + host: process.env.SMTP_HOST, + port: process.env.SMTP_PORT, + }; + + if ((process.env.SMTP_USERNAME) && (process.env.SMTP_PASSWORD)) { + mailOpts.auth = { + user: process.env.SMTP_USERNAME, + pass: process.env.SMTP_PASSWORD, + }; + } + + if ((process.env.SMTP_SECURE) ? (process.env.SMTP_SECURE) : false) { + switch (process.env.SMTP_HOST) { + case SMTP_HOST_SENDGRID: + mailOpts.requireTLS = true; + break; + case SMTP_HOST_MAILGUN: + mailOpts.requireTLS = true; + mailOpts.tls = { + ciphers: "TLSv1.2", + } + break; + case SMTP_HOST_SOCKETLABS: + mailOpts.requireTLS = true; + mailOpts.tls = { + ciphers: "TLSv1.2", + } + break; + case SMTP_HOST_ZOHOMAIL: + mailOpts.requireTLS = true; + mailOpts.tls = { + ciphers: "TLSv1.2", + } + break; + case SMTP_HOST_GMAIL: + mailOpts.requireTLS = true; + mailOpts.tls = { + ciphers: "TLSv1.2", + } + break; + default: + if ((process.env.SMTP_HOST).includes("amazonaws.com")) { + mailOpts.tls = { + ciphers: "TLSv1.2", + } + } else { + mailOpts.secure = true; + } + break; + } + } + + const transporter = nodemailer.createTransport(mailOpts); + transporter + .verify() + .then((err) => { + console.log("SMTP - Successfully connected") + }) + .catch(async (err) => { + console.log( + `SMTP - Failed to connect to ${process.env.SMTP_HOST}:${process.env.SMTP_PORT} \n\t${err}` + ); + }); + + return transporter; +}; diff --git a/secret-engine/src/templates/secretLeakIncident.handlebars b/secret-engine/src/templates/secretLeakIncident.handlebars new file mode 100644 index 000000000..10a66fa51 --- /dev/null +++ b/secret-engine/src/templates/secretLeakIncident.handlebars @@ -0,0 +1,19 @@ + + + + + + + Incident alert: secret leaked + + + +

    Infisical has uncovered {{numberOfSecrets}} secret(s) from your recent push

    +

    View leaked secrets

    +

    One or more secret leaks have been detected in a recent commit pushed by {{pusher_name}} ({{pusher_email}}). If + the secrets are test secrets, please mark them as false positives in the Infisical dashboard. + Otherwise, please rotate the secrets immediately.

    + + + \ No newline at end of file diff --git a/secret-engine/test/fixtures/issues.opened.json b/secret-engine/test/fixtures/issues.opened.json deleted file mode 100644 index e570cd41b..000000000 --- a/secret-engine/test/fixtures/issues.opened.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "action": "opened", - "issue": { - "number": 1, - "user": { - "login": "hiimbex" - } - }, - "repository": { - "name": "testing-things", - "owner": { - "login": "hiimbex" - } - }, - "installation": { - "id": 2 - } -} diff --git a/secret-engine/test/fixtures/mock-cert.pem b/secret-engine/test/fixtures/mock-cert.pem deleted file mode 100644 index f2f271c30..000000000 --- a/secret-engine/test/fixtures/mock-cert.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAli7V49NdZe+XYC1pLaHM0te8kiDmZBJ1u2HJHN8GdbROB6NO -VpC3xK7NxQn6xpvZ9ux20NvcDvGle+DOptZztBH+np6h2jZQ1/kD1yG1eQvVH4th -/9oqHuIjmIfO8lIe4Hyd5Fw5xHkGqVETTGR+0c7kdZIlHmkOregUGtMYZRUi4YG+ -q0w+uFemiHpGKXbeCIAvkq7aIkisEzvPWfSyYdA6WJHpxFk7tD7D8VkzABLVRHCq -AuyqPG39BhGZcGLXx5rGK56kDBJkyTR1t3DkHpwX+JKNG5UYNwOG4LcQj1fteeta -TdkYUMjIyWbanlMYyC+dq7B5fe7el99jXQ1gXwIDAQABAoIBADKfiPOpzKLOtzzx -MbHzB0LO+75aHq7+1faayJrVxqyoYWELuB1P3NIMhknzyjdmU3t7S7WtVqkm5Twz -lBUC1q+NHUHEgRQ4GNokExpSP4SU63sdlaQTmv0cBxmkNarS6ZuMBgDy4XoLvaYX -MSUf/uukDLhg0ehFS3BteVFtdJyllhDdTenF1Nb1rAeN4egt8XLsE5NQDr1szFEG -xH5lb+8EDtzgsGpeIddWR64xP0lDIKSZWst/toYKWiwjaY9uZCfAhvYQ1RsO7L/t -sERmpYgh+rAZUh/Lr98EI8BPSPhzFcSHmtqzzejvC5zrZPHcUimz0CGA3YBiLoJX -V1OrxmECgYEAxkd8gpmVP+LEWB3lqpSvJaXcGkbzcDb9m0OPzHUAJDZtiIIf0UmO -nvL68/mzbCHSj+yFjZeG1rsrAVrOzrfDCuXjAv+JkEtEx0DIevU1u60lGnevOeky -r8Be7pmymFB9/gzQAd5ezIlTv/COgoO986a3h1yfhzrrzbqSiivw308CgYEAwecI -aZZwqH3GifR+0+Z1B48cezA5tC8LZt5yObGzUfxKTWy30d7lxe9N59t0KUVt/QL5 -qVkd7mqGzsUMyxUN2U2HVnFTWfUFMhkn/OnCnayhILs8UlCTD2Xxoy1KbQH/9FIr -xf0pbMNJLXeGfyRt/8H+BzSZKBw9opJBWE4gqfECgYBp9FdvvryHuBkt8UQCRJPX -rWsRy6pY47nf11mnazpZH5Cmqspv3zvMapF6AIxFk0leyYiQolFWvAv+HFV5F6+t -Si1mM8GCDwbA5zh6pEBDewHhw+UqMBh63HSeUhmi1RiOwrAA36CO8i+D2Pt+eQHv -ir52IiPJcs4BUNrv5Q1BdwKBgBHgVNw3LGe8QMOTMOYkRwHNZdjNl2RPOgPf2jQL -d/bFBayhq0jD/fcDmvEXQFxVtFAxKAc+2g2S8J67d/R5Gm/AQAvuIrsWZcY6n38n -pfOXaLt1x5fnKcevpFlg4Y2vM4O416RHNLx8PJDehh3Oo/2CSwMrDDuwbtZAGZok -icphAoGBAI74Tisfn+aeCZMrO8KxaWS5r2CD1KVzddEMRKlJvSKTY+dOCtJ+XKj1 -OsZdcDvDC5GtgcywHsYeOWHldgDWY1S8Z/PUo4eK9qBXYBXp3JEZQ1dqzFdz+Txi -rBn2WsFLsxV9j2/ugm0PqWVBcU2bPUCwvaRu3SOms2teaLwGCkhr ------END RSA PRIVATE KEY----- diff --git a/secret-engine/test/index.test.ts b/secret-engine/test/index.test.ts deleted file mode 100644 index d3a6e556e..000000000 --- a/secret-engine/test/index.test.ts +++ /dev/null @@ -1,74 +0,0 @@ -// You can import your modules -// import index from '../src/index' - -import nock from "nock"; -// Requiring our app implementation -import myProbotApp from "../src"; -import { Probot, ProbotOctokit } from "probot"; -// Requiring our fixtures -import payload from "./fixtures/issues.opened.json"; -const issueCreatedBody = { body: "Thanks for opening this issue!" }; -const fs = require("fs"); -const path = require("path"); - -const privateKey = fs.readFileSync( - path.join(__dirname, "fixtures/mock-cert.pem"), - "utf-8" -); - -describe("My Probot app", () => { - let probot: any; - - beforeEach(() => { - nock.disableNetConnect(); - probot = new Probot({ - appId: 123, - privateKey, - // disable request throttling and retries for testing - Octokit: ProbotOctokit.defaults({ - retry: { enabled: false }, - throttle: { enabled: false }, - }), - }); - // Load our app into probot - probot.load(myProbotApp); - }); - - test("creates a comment when an issue is opened", async () => { - const mock = nock("https://api.github.com") - // Test that we correctly return a test token - .post("/app/installations/2/access_tokens") - .reply(200, { - token: "test", - permissions: { - issues: "write", - }, - }) - - // Test that a comment is posted - .post("/repos/hiimbex/testing-things/issues/1/comments", (body: any) => { - expect(body).toMatchObject(issueCreatedBody); - return true; - }) - .reply(200); - - // Receive a webhook event - await probot.receive({ name: "issues", payload }); - - expect(mock.pendingMocks()).toStrictEqual([]); - }); - - afterEach(() => { - nock.cleanAll(); - nock.enableNetConnect(); - }); -}); - -// For more information about testing with Jest see: -// https://facebook.github.io/jest/ - -// For more information about using TypeScript in your tests, Jest recommends: -// https://github.com/kulshekhar/ts-jest - -// For more information about testing with Nock see: -// https://github.com/nock/nock diff --git a/secret-engine/tsconfig.json b/secret-engine/tsconfig.json index bb2122a1c..1c77d2a21 100644 --- a/secret-engine/tsconfig.json +++ b/secret-engine/tsconfig.json @@ -50,7 +50,7 @@ // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + "sourceRoot": "src", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ @@ -64,7 +64,8 @@ "skipLibCheck": true }, "include": [ - "src/" + "src/**/*", + "src/templates/**/*" ], - "compileOnSave": false + // "compileOnSave": false } \ No newline at end of file From 2f1bd9ca611d63914a53653e6deefd84c3366a6c Mon Sep 17 00:00:00 2001 From: Afrie Irham Date: Wed, 5 Jul 2023 18:32:03 +0800 Subject: [PATCH 006/189] fix: enable user to press Enter in signup flow --- frontend/src/components/signup/CodeInputStep.tsx | 1 + frontend/src/components/signup/EnterEmailStep.tsx | 1 + frontend/src/components/signup/UserInfoStep.tsx | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/signup/CodeInputStep.tsx b/frontend/src/components/signup/CodeInputStep.tsx index dd765c1fc..7f6c75871 100644 --- a/frontend/src/components/signup/CodeInputStep.tsx +++ b/frontend/src/components/signup/CodeInputStep.tsx @@ -114,6 +114,7 @@ export default function CodeInputStep({
    @@ -301,6 +300,7 @@ export default function UserInfoStep({
    -
    + } From 93e0232c21000f7ba912caf99c848e7f1fb66367 Mon Sep 17 00:00:00 2001 From: Afrie Irham Date: Wed, 5 Jul 2023 19:02:48 +0800 Subject: [PATCH 008/189] fix: allow user to press Enter in forgot password page --- frontend/src/pages/verify-email.tsx | 31 ++++++++++++++++------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/frontend/src/pages/verify-email.tsx b/frontend/src/pages/verify-email.tsx index 33640dbc1..605c71da8 100644 --- a/frontend/src/pages/verify-email.tsx +++ b/frontend/src/pages/verify-email.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { FormEvent, useState } from "react"; import Head from "next/head"; import Image from "next/image"; import Link from "next/link"; @@ -12,6 +12,7 @@ import { useFetchServerStatus } from "@app/hooks/api/serverDetails"; import SendEmailOnPasswordReset from "./api/auth/SendEmailOnPasswordReset"; export default function VerifyEmail() { + const [loading, setLoading] = useState(false); const [email, setEmail] = useState(""); const [step, setStep] = useState(1); const { data: serverDetails } = useFetchServerStatus(); @@ -27,6 +28,18 @@ export default function VerifyEmail() { } }; + const onSubmit = (e: FormEvent) => { + e.preventDefault(); + setLoading(true); + + if (serverDetails?.emailConfigured) { + sendVerificationEmail(); + } else { + handlePopUpOpen("setUpEmail"); + setLoading(false); + } + }; + return (
    @@ -45,7 +58,7 @@ export default function VerifyEmail() {
    {step === 1 && ( -
    +

    Forgot your password?

    @@ -67,20 +80,10 @@ export default function VerifyEmail() {
    -
    -
    + )} {step === 2 && (
    From 0cee453202eaf7e92ced1151d44a7030d9172be3 Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Wed, 5 Jul 2023 22:51:21 +0530 Subject: [PATCH 009/189] feat(secret-ref): implemented backend changes for multi env and folder in service token --- backend/package-lock.json | 255 ++++++++++-- backend/package.json | 1 + .../src/controllers/v2/secretsController.ts | 374 +++++++++--------- .../v2/serviceTokenDataController.ts | 56 +-- backend/src/helpers/secrets.ts | 336 ++++++++-------- backend/src/models/serviceTokenData.ts | 60 +-- backend/src/routes/v2/serviceTokenData.ts | 27 +- backend/src/utils/setup/backfillData.ts | 196 ++++----- backend/src/utils/setup/index.ts | 11 +- backend/src/validation/serviceTokenData.ts | 250 ++++++------ 10 files changed, 856 insertions(+), 710 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 524a6017b..0a4a2db17 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -71,6 +71,7 @@ "@types/node": "^18.11.3", "@types/nodemailer": "^6.4.6", "@types/passport": "^1.0.12", + "@types/picomatch": "^2.3.0", "@types/supertest": "^2.0.12", "@types/swagger-jsdoc": "^6.0.1", "@types/swagger-ui-express": "^4.1.3", @@ -2200,6 +2201,26 @@ } } }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@jest/schemas": { "version": "29.4.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", @@ -3241,6 +3262,12 @@ "@types/express": "*" } }, + "node_modules/@types/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g==", + "dev": true + }, "node_modules/@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", @@ -5680,25 +5707,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -6481,6 +6489,26 @@ } } }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/jest-diff": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", @@ -6776,6 +6804,26 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/jest-snapshot": { "version": "29.5.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", @@ -11071,6 +11119,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -11669,6 +11736,25 @@ "node": ">=0.4.0" } }, + "node_modules/swagger-autogen/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/swagger-ui-dist": { "version": "4.19.0", "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.19.0.tgz", @@ -11723,6 +11809,26 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -14154,6 +14260,22 @@ "string-length": "^4.0.1", "strip-ansi": "^6.0.0", "v8-to-istanbul": "^9.0.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "@jest/schemas": { @@ -14988,6 +15110,12 @@ "@types/express": "*" } }, + "@types/picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@types/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-O397rnSS9iQI4OirieAtsDqvCj4+3eY1J+EPdNTKuHuRWIfUoGyzX294o8C4KJYaLqgSrd2o60c5EqCU8Zv02g==", + "dev": true + }, "@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", @@ -16808,19 +16936,6 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -17371,6 +17486,22 @@ "pretty-format": "^29.5.0", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "jest-diff": { @@ -17606,6 +17737,22 @@ "jest-util": "^29.5.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "jest-snapshot": { @@ -20674,6 +20821,21 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "ripemd160": { @@ -21129,6 +21291,19 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } } } }, @@ -21174,6 +21349,22 @@ "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", "minimatch": "^3.0.4" + }, + "dependencies": { + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } } }, "text-hex": { diff --git a/backend/package.json b/backend/package.json index 448ccfac2..0c0f0642d 100644 --- a/backend/package.json +++ b/backend/package.json @@ -89,6 +89,7 @@ "@types/node": "^18.11.3", "@types/nodemailer": "^6.4.6", "@types/passport": "^1.0.12", + "@types/picomatch": "^2.3.0", "@types/supertest": "^2.0.12", "@types/swagger-jsdoc": "^6.0.1", "@types/swagger-ui-express": "^4.1.3", diff --git a/backend/src/controllers/v2/secretsController.ts b/backend/src/controllers/v2/secretsController.ts index a760a511c..8307d373d 100644 --- a/backend/src/controllers/v2/secretsController.ts +++ b/backend/src/controllers/v2/secretsController.ts @@ -1,5 +1,6 @@ import { Types } from "mongoose"; import { Request, Response } from "express"; +import picomatch from "picomatch"; import { ISecret, Secret, ServiceTokenData } from "../../models"; import { IAction, SecretVersion } from "../../ee/models"; import { @@ -9,7 +10,7 @@ import { ACTION_UPDATE_SECRETS, ALGORITHM_AES_256_GCM, ENCODING_SCHEME_UTF8, - SECRET_PERSONAL, + SECRET_PERSONAL } from "../../variables"; import { BadRequestError, UnauthorizedRequestError } from "../../utils/errors"; import { EventService } from "../../services"; @@ -21,7 +22,7 @@ import { PERMISSION_WRITE_SECRETS } from "../../variables"; import { userHasNoAbility, userHasWorkspaceAccess, - userHasWriteOnlyAbility, + userHasWriteOnlyAbility } from "../../ee/helpers/checkMembershipPermissions"; import Tag from "../../models/tag"; import _ from "lodash"; @@ -30,7 +31,7 @@ import Folder from "../../models/folder"; import { getFolderByPath, getFolderIdFromServiceToken, - searchByFolderId, + searchByFolderId } from "../../services/FolderService"; /** @@ -47,7 +48,7 @@ export const batchSecrets = async (req: Request, res: Response) => { workspaceId, environment, requests, - secretPath, + secretPath }: { workspaceId: string; environment: string; @@ -63,7 +64,7 @@ export const batchSecrets = async (req: Request, res: Response) => { // get secret blind index salt const salt = await SecretService.getSecretBlindIndexSalt({ - workspaceId: new Types.ObjectId(workspaceId), + workspaceId: new Types.ObjectId(workspaceId) }); const folders = await Folder.findOne({ workspace: workspaceId, environment }); @@ -73,22 +74,22 @@ export const batchSecrets = async (req: Request, res: Response) => { } if (req.authData.authPayload instanceof ServiceTokenData) { - const { secretPath: serviceTkScopedSecretPath } = req.authData.authPayload; + const { scopes: tkScopes } = req.authData.authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && + scope.environment === environment + ); + // in service token when not giving secretpath folderid must be root // this is to avoid giving folderid when service tokens are used - if ( - (!secretPath && folderId !== "root") || - (secretPath && secretPath !== serviceTkScopedSecretPath) - ) { + if ((!secretPath && folderId !== "root") || (secretPath && !validScope)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } + if (secretPath) { - folderId = await getFolderIdFromServiceToken( - workspaceId, - environment, - secretPath - ); + folderId = await getFolderIdFromServiceToken(workspaceId, environment, secretPath); } for await (const request of requests) { @@ -97,12 +98,10 @@ export const batchSecrets = async (req: Request, res: Response) => { let secretBlindIndex = ""; switch (request.method) { case "POST": - secretBlindIndex = await SecretService.generateSecretBlindIndexWithSalt( - { - secretName: request.secret.secretName, - salt, - } - ); + secretBlindIndex = await SecretService.generateSecretBlindIndexWithSalt({ + secretName: request.secret.secretName, + salt + }); createSecrets.push({ ...request.secret, @@ -113,16 +112,14 @@ export const batchSecrets = async (req: Request, res: Response) => { folder: folderId, secretBlindIndex, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }); break; case "PATCH": - secretBlindIndex = await SecretService.generateSecretBlindIndexWithSalt( - { - secretName: request.secret.secretName, - salt, - } - ); + secretBlindIndex = await SecretService.generateSecretBlindIndexWithSalt({ + secretName: request.secret.secretName, + salt + }); updateSecrets.push({ ...request.secret, @@ -130,7 +127,7 @@ export const batchSecrets = async (req: Request, res: Response) => { secretBlindIndex, folder: folderId, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }); break; case "DELETE": @@ -150,9 +147,9 @@ export const batchSecrets = async (req: Request, res: Response) => { ...n._doc, _id: new Types.ObjectId(), secret: n._id, - isDeleted: false, + isDeleted: false }; - }), + }) }); const addAction = (await EELogService.createAction({ @@ -161,7 +158,7 @@ export const batchSecrets = async (req: Request, res: Response) => { serviceAccountId: req.serviceAccount?._id, serviceTokenDataId: req.serviceTokenData?._id, workspaceId: new Types.ObjectId(workspaceId), - secretIds: createdSecrets.map((n) => n._id), + secretIds: createdSecrets.map((n) => n._id) })) as IAction; actions.push(addAction); @@ -175,8 +172,8 @@ export const batchSecrets = async (req: Request, res: Response) => { workspaceId, folderId, channel, - userAgent: req.headers?.["user-agent"], - }, + userAgent: req.headers?.["user-agent"] + } }); } } @@ -195,7 +192,7 @@ export const batchSecrets = async (req: Request, res: Response) => { listedSecretsObj = req.secrets.reduce( (obj: any, secret: ISecret) => ({ ...obj, - [secret._id.toString()]: secret, + [secret._id.toString()]: secret }), {} ); @@ -204,16 +201,16 @@ export const batchSecrets = async (req: Request, res: Response) => { updateOne: { filter: { _id: new Types.ObjectId(u._id), - workspace: new Types.ObjectId(workspaceId), + workspace: new Types.ObjectId(workspaceId) }, update: { $inc: { - version: 1, + version: 1 }, ...u, - _id: new Types.ObjectId(u._id), - }, - }, + _id: new Types.ObjectId(u._id) + } + } })); await Secret.bulkWrite(updateOperations); @@ -240,25 +237,25 @@ export const batchSecrets = async (req: Request, res: Response) => { algorithm: ALGORITHM_AES_256_GCM, keyEncoding: ENCODING_SCHEME_UTF8, tags: u.tags, - folder: u.folder, + folder: u.folder }) ); await EESecretService.addSecretVersions({ - secretVersions, + secretVersions }); updatedSecrets = await Secret.find({ _id: { - $in: updateSecrets.map((u) => new Types.ObjectId(u._id)), - }, + $in: updateSecrets.map((u) => new Types.ObjectId(u._id)) + } }); const updateAction = (await EELogService.createAction({ name: ACTION_UPDATE_SECRETS, userId: req.user._id, workspaceId: new Types.ObjectId(workspaceId), - secretIds: updatedSecrets.map((u) => u._id), + secretIds: updatedSecrets.map((u) => u._id) })) as IAction; actions.push(updateAction); @@ -272,8 +269,8 @@ export const batchSecrets = async (req: Request, res: Response) => { workspaceId, folderId, channel, - userAgent: req.headers?.["user-agent"], - }, + userAgent: req.headers?.["user-agent"] + } }); } } @@ -282,19 +279,19 @@ export const batchSecrets = async (req: Request, res: Response) => { if (deleteSecrets.length > 0) { await Secret.deleteMany({ _id: { - $in: deleteSecrets, - }, + $in: deleteSecrets + } }); await EESecretService.markDeletedSecretVersions({ - secretIds: deleteSecrets, + secretIds: deleteSecrets }); const deleteAction = (await EELogService.createAction({ name: ACTION_DELETE_SECRETS, userId: req.user._id, workspaceId: new Types.ObjectId(workspaceId), - secretIds: deleteSecrets, + secretIds: deleteSecrets })) as IAction; actions.push(deleteAction); @@ -307,8 +304,8 @@ export const batchSecrets = async (req: Request, res: Response) => { environment, workspaceId, channel: channel, - userAgent: req.headers?.["user-agent"], - }, + userAgent: req.headers?.["user-agent"] + } }); } } @@ -320,22 +317,22 @@ export const batchSecrets = async (req: Request, res: Response) => { workspaceId: new Types.ObjectId(workspaceId), actions, channel, - ipAddress: req.realIP, + ipAddress: req.realIP }); } // // trigger event - push secrets await EventService.handleEvent({ event: eventPushSecrets({ - workspaceId: new Types.ObjectId(workspaceId), - }), + workspaceId: new Types.ObjectId(workspaceId) + }) }); // (EE) take a secret snapshot await EESecretService.takeSecretSnapshot({ workspaceId: new Types.ObjectId(workspaceId), environment, - folderId, + folderId }); const resObj: { [key: string]: ISecret[] | string[] } = {}; @@ -418,7 +415,7 @@ export const createSecrets = async (req: Request, res: Response) => { const { workspaceId, environment, - secretPath, + secretPath }: { workspaceId: string; environment: string; @@ -435,8 +432,7 @@ export const createSecrets = async (req: Request, res: Response) => { ); if (!hasAccess) { throw UnauthorizedRequestError({ - message: - "You do not have the necessary permission(s) perform this action", + message: "You do not have the necessary permission(s) perform this action" }); } } @@ -449,28 +445,28 @@ export const createSecrets = async (req: Request, res: Response) => { // case: create 1 secret listOfSecretsToCreate = [req.body.secrets]; } + if (req.authData.authPayload instanceof ServiceTokenData) { - const { secretPath: serviceTkScopedSecretPath } = req.authData.authPayload; + const { scopes: tkScopes } = req.authData.authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch(secretPath || "/", scope.secretPath, { strictSlashes: false }) && + scope.environment === environment + ); + // in service token when not giving secretpath folderid must be root // this is to avoid giving folderid when service tokens are used - if ( - (!secretPath && folderId !== "root") || - (secretPath && secretPath !== serviceTkScopedSecretPath) - ) { + if ((!secretPath && folderId !== "root") || (secretPath && !validScope)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } if (secretPath) { - folderId = await getFolderIdFromServiceToken( - workspaceId, - environment, - secretPath - ); + folderId = await getFolderIdFromServiceToken(workspaceId, environment, secretPath); } // get secret blind index salt const salt = await SecretService.getSecretBlindIndexSalt({ - workspaceId: new Types.ObjectId(workspaceId), + workspaceId: new Types.ObjectId(workspaceId) }); type secretsToCreateType = { @@ -502,15 +498,14 @@ export const createSecrets = async (req: Request, res: Response) => { secretCommentCiphertext, secretCommentIV, secretCommentTag, - tags, + tags }: secretsToCreateType) => { let secretBlindIndex; if (secretName) { - secretBlindIndex = - await SecretService.generateSecretBlindIndexWithSalt({ - secretName, - salt, - }); + secretBlindIndex = await SecretService.generateSecretBlindIndexWithSalt({ + secretName, + salt + }); } return { @@ -532,22 +527,22 @@ export const createSecrets = async (req: Request, res: Response) => { secretCommentTag, algorithm: ALGORITHM_AES_256_GCM, keyEncoding: ENCODING_SCHEME_UTF8, - tags, + tags }; } ) ); - const newlyCreatedSecrets: ISecret[] = ( - await Secret.insertMany(secretsToInsert) - ).map((insertedSecret) => insertedSecret.toObject()); + const newlyCreatedSecrets: ISecret[] = (await Secret.insertMany(secretsToInsert)).map( + (insertedSecret) => insertedSecret.toObject() + ); setTimeout(async () => { // trigger event - push secrets await EventService.handleEvent({ event: eventPushSecrets({ - workspaceId: new Types.ObjectId(workspaceId), - }), + workspaceId: new Types.ObjectId(workspaceId) + }) }); }, 5000); @@ -567,7 +562,7 @@ export const createSecrets = async (req: Request, res: Response) => { secretKeyTag, secretValueCiphertext, secretValueIV, - secretValueTag, + secretValueTag }) => new SecretVersion({ secret: _id, @@ -586,9 +581,9 @@ export const createSecrets = async (req: Request, res: Response) => { secretValueTag, folder: folderId, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }) - ), + ) }); const addAction = await EELogService.createAction({ @@ -597,7 +592,7 @@ export const createSecrets = async (req: Request, res: Response) => { serviceAccountId: req.serviceAccount?._id, serviceTokenDataId: req.serviceTokenData?._id, workspaceId: new Types.ObjectId(workspaceId), - secretIds: newlyCreatedSecrets.map((n) => n._id), + secretIds: newlyCreatedSecrets.map((n) => n._id) }); // (EE) create (audit) log @@ -609,14 +604,14 @@ export const createSecrets = async (req: Request, res: Response) => { workspaceId: new Types.ObjectId(workspaceId), actions: [addAction], channel, - ipAddress: req.realIP, + ipAddress: req.realIP })); // (EE) take a secret snapshot await EESecretService.takeSecretSnapshot({ workspaceId: new Types.ObjectId(workspaceId), environment, - folderId, + folderId }); const postHogClient = await TelemetryService.getPostHogClient(); @@ -624,7 +619,7 @@ export const createSecrets = async (req: Request, res: Response) => { postHogClient.capture({ event: "secrets added", distinctId: await TelemetryService.getDistinctId({ - authData: req.authData, + authData: req.authData }), properties: { numberOfSecrets: listOfSecretsToCreate.length, @@ -632,13 +627,13 @@ export const createSecrets = async (req: Request, res: Response) => { workspaceId, channel: channel, folderId, - userAgent: req.headers?.["user-agent"], - }, + userAgent: req.headers?.["user-agent"] + } }); } return res.status(200).send({ - secrets: newlyCreatedSecrets, + secrets: newlyCreatedSecrets }); }; @@ -696,10 +691,7 @@ export const getSecrets = async (req: Request, res: Response) => { const environment = req.query.environment as string; const folders = await Folder.findOne({ workspace: workspaceId, environment }); - if ( - (!folders && folderId && folderId !== "root") || - (!folders && secretPath) - ) { + if ((!folders && folderId && folderId !== "root") || (!folders && secretPath)) { res.send({ secrets: [] }); return; } @@ -712,13 +704,17 @@ export const getSecrets = async (req: Request, res: Response) => { } if (req.authData.authPayload instanceof ServiceTokenData) { - const { secretPath: serviceTkScopedSecretPath } = req.authData.authPayload; + const { scopes: tkScopes } = req.authData.authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch((secretPath as string) || "/", scope.secretPath, { + strictSlashes: false + }) && scope.environment === environment + ); + // in service token when not giving secretpath folderid must be root // this is to avoid giving folderid when service tokens are used - if ( - (!secretPath && folderId !== "root") || - (secretPath && secretPath !== serviceTkScopedSecretPath) - ) { + if ((!secretPath && folderId !== "root") || (secretPath && !validScope)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } @@ -738,8 +734,7 @@ export const getSecrets = async (req: Request, res: Response) => { // query tags table to get all tags ids for the tag names for the given workspace let tagIds = []; - const tagNamesList = - typeof tagSlugs === "string" && tagSlugs !== "" ? tagSlugs.split(",") : []; + const tagNamesList = typeof tagSlugs === "string" && tagSlugs !== "" ? tagSlugs.split(",") : []; if (tagNamesList != undefined && tagNamesList.length != 0) { const workspaceFromDB = await Tag.find({ workspace: workspaceId }); tagIds = _.map(tagNamesList, (tagName: string) => { @@ -762,8 +757,7 @@ export const getSecrets = async (req: Request, res: Response) => { ); if (hasNoAccess) { throw UnauthorizedRequestError({ - message: - "You do not have the necessary permission(s) perform this action", + message: "You do not have the necessary permission(s) perform this action" }); } @@ -773,8 +767,8 @@ export const getSecrets = async (req: Request, res: Response) => { folder: folderId, $or: [ { user: req.user._id }, // personal secrets for this user - { user: { $exists: false } }, // shared secrets from workspace - ], + { user: { $exists: false } } // shared secrets from workspace + ] }; if (tagIds.length > 0) { @@ -801,8 +795,8 @@ export const getSecrets = async (req: Request, res: Response) => { environment, $or: [ { user: userId }, // personal secrets for this user - { user: { $exists: false } }, // shared secrets from workspace - ], + { user: { $exists: false } } // shared secrets from workspace + ] }; if (tagIds.length > 0) { @@ -820,7 +814,7 @@ export const getSecrets = async (req: Request, res: Response) => { workspace: workspaceId, environment, folder: folderId, - user: { $exists: false }, // shared secrets only from workspace + user: { $exists: false } // shared secrets only from workspace }; if (tagIds.length > 0) { @@ -838,7 +832,7 @@ export const getSecrets = async (req: Request, res: Response) => { serviceAccountId: req.serviceAccount?._id, serviceTokenDataId: req.serviceTokenData?._id, workspaceId: new Types.ObjectId(workspaceId as string), - secretIds: secrets.map((n: any) => n._id), + secretIds: secrets.map((n: any) => n._id) }); readAction && @@ -849,7 +843,7 @@ export const getSecrets = async (req: Request, res: Response) => { workspaceId: new Types.ObjectId(workspaceId as string), actions: [readAction], channel, - ipAddress: req.realIP, + ipAddress: req.realIP })); const postHogClient = await TelemetryService.getPostHogClient(); @@ -857,7 +851,7 @@ export const getSecrets = async (req: Request, res: Response) => { postHogClient.capture({ event: "secrets pulled", distinctId: await TelemetryService.getDistinctId({ - authData: req.authData, + authData: req.authData }), properties: { numberOfSecrets: secrets.length, @@ -865,13 +859,13 @@ export const getSecrets = async (req: Request, res: Response) => { workspaceId, channel, folderId, - userAgent: req.headers?.["user-agent"], - }, + userAgent: req.headers?.["user-agent"] + } }); } return res.status(200).send({ - secrets, + secrets }); }; @@ -925,9 +919,7 @@ export const updateSecrets = async (req: Request, res: Response) => { } } */ - const channel = req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") - ? "web" - : "cli"; + const channel = req.headers?.["user-agent"]?.toLowerCase().includes("mozilla") ? "web" : "cli"; interface PatchSecret { id: string; @@ -943,51 +935,47 @@ export const updateSecrets = async (req: Request, res: Response) => { tags: string[]; } - const updateOperationsToPerform = req.body.secrets.map( - (secret: PatchSecret) => { - const { - secretKeyCiphertext, - secretKeyIV, - secretKeyTag, - secretValueCiphertext, - secretValueIV, - secretValueTag, - secretCommentCiphertext, - secretCommentIV, - secretCommentTag, - tags, - } = secret; + const updateOperationsToPerform = req.body.secrets.map((secret: PatchSecret) => { + const { + secretKeyCiphertext, + secretKeyIV, + secretKeyTag, + secretValueCiphertext, + secretValueIV, + secretValueTag, + secretCommentCiphertext, + secretCommentIV, + secretCommentTag, + tags + } = secret; - return { - updateOne: { - filter: { _id: new Types.ObjectId(secret.id) }, - update: { - $inc: { - version: 1, - }, - secretKeyCiphertext, - secretKeyIV, - secretKeyTag, - secretValueCiphertext, - secretValueIV, - secretValueTag, - algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, - tags, - ...(secretCommentCiphertext !== undefined && - secretCommentIV && - secretCommentTag - ? { - secretCommentCiphertext, - secretCommentIV, - secretCommentTag, - } - : {}), + return { + updateOne: { + filter: { _id: new Types.ObjectId(secret.id) }, + update: { + $inc: { + version: 1 }, - }, - }; - } - ); + secretKeyCiphertext, + secretKeyIV, + secretKeyTag, + secretValueCiphertext, + secretValueIV, + secretValueTag, + algorithm: ALGORITHM_AES_256_GCM, + keyEncoding: ENCODING_SCHEME_UTF8, + tags, + ...(secretCommentCiphertext !== undefined && secretCommentIV && secretCommentTag + ? { + secretCommentCiphertext, + secretCommentIV, + secretCommentTag + } + : {}) + } + } + }; + }); await Secret.bulkWrite(updateOperationsToPerform); @@ -1009,7 +997,7 @@ export const updateSecrets = async (req: Request, res: Response) => { secretCommentCiphertext, secretCommentIV, secretCommentTag, - tags, + tags } = secretModificationsBySecretId[secret._id.toString()]; return { @@ -1018,9 +1006,7 @@ export const updateSecrets = async (req: Request, res: Response) => { workspace: secret.workspace, type: secret.type, environment: secret.environment, - secretKeyCiphertext: secretKeyCiphertext - ? secretKeyCiphertext - : secret.secretKeyCiphertext, + secretKeyCiphertext: secretKeyCiphertext ? secretKeyCiphertext : secret.secretKeyCiphertext, secretKeyIV: secretKeyIV ? secretKeyIV : secret.secretKeyIV, secretKeyTag: secretKeyTag ? secretKeyTag : secret.secretKeyTag, secretValueCiphertext: secretValueCiphertext @@ -1031,17 +1017,13 @@ export const updateSecrets = async (req: Request, res: Response) => { secretCommentCiphertext: secretCommentCiphertext ? secretCommentCiphertext : secret.secretCommentCiphertext, - secretCommentIV: secretCommentIV - ? secretCommentIV - : secret.secretCommentIV, - secretCommentTag: secretCommentTag - ? secretCommentTag - : secret.secretCommentTag, + secretCommentIV: secretCommentIV ? secretCommentIV : secret.secretCommentIV, + secretCommentTag: secretCommentTag ? secretCommentTag : secret.secretCommentTag, tags: tags ? tags : secret.tags, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }; - }), + }) }; await EESecretService.addSecretVersions(secretVersions); @@ -1062,8 +1044,8 @@ export const updateSecrets = async (req: Request, res: Response) => { setTimeout(async () => { await EventService.handleEvent({ event: eventPushSecrets({ - workspaceId: new Types.ObjectId(key), - }), + workspaceId: new Types.ObjectId(key) + }) }); }, 10000); @@ -1073,7 +1055,7 @@ export const updateSecrets = async (req: Request, res: Response) => { serviceAccountId: req.serviceAccount?._id, serviceTokenDataId: req.serviceTokenData?._id, workspaceId: new Types.ObjectId(key), - secretIds: workspaceSecretObj[key].map((secret: ISecret) => secret._id), + secretIds: workspaceSecretObj[key].map((secret: ISecret) => secret._id) }); // (EE) create (audit) log @@ -1085,7 +1067,7 @@ export const updateSecrets = async (req: Request, res: Response) => { workspaceId: new Types.ObjectId(key), actions: [updateAction], channel, - ipAddress: req.realIP, + ipAddress: req.realIP })); // (EE) take a secret snapshot @@ -1101,15 +1083,15 @@ export const updateSecrets = async (req: Request, res: Response) => { postHogClient.capture({ event: "secrets modified", distinctId: await TelemetryService.getDistinctId({ - authData: req.authData, + authData: req.authData }), properties: { numberOfSecrets: workspaceSecretObj[key].length, environment: workspaceSecretObj[key][0].environment, workspaceId: key, channel: channel, - userAgent: req.headers?.["user-agent"], - }, + userAgent: req.headers?.["user-agent"] + } }); } }); @@ -1117,9 +1099,9 @@ export const updateSecrets = async (req: Request, res: Response) => { return res.status(200).send({ secrets: await Secret.find({ _id: { - $in: req.secrets.map((secret: ISecret) => secret._id), - }, - }), + $in: req.secrets.map((secret: ISecret) => secret._id) + } + }) }); }; @@ -1179,12 +1161,12 @@ export const deleteSecrets = async (req: Request, res: Response) => { await Secret.deleteMany({ _id: { - $in: toDelete, - }, + $in: toDelete + } }); await EESecretService.markDeletedSecretVersions({ - secretIds: toDelete, + secretIds: toDelete }); // group secrets into workspaces so deleted secrets can @@ -1202,8 +1184,8 @@ export const deleteSecrets = async (req: Request, res: Response) => { // trigger event - push secrets await EventService.handleEvent({ event: eventPushSecrets({ - workspaceId: new Types.ObjectId(key), - }), + workspaceId: new Types.ObjectId(key) + }) }); const deleteAction = await EELogService.createAction({ name: ACTION_DELETE_SECRETS, @@ -1211,7 +1193,7 @@ export const deleteSecrets = async (req: Request, res: Response) => { serviceAccountId: req.serviceAccount?._id, serviceTokenDataId: req.serviceTokenData?._id, workspaceId: new Types.ObjectId(key), - secretIds: workspaceSecretObj[key].map((secret: ISecret) => secret._id), + secretIds: workspaceSecretObj[key].map((secret: ISecret) => secret._id) }); // (EE) create (audit) log @@ -1223,7 +1205,7 @@ export const deleteSecrets = async (req: Request, res: Response) => { workspaceId: new Types.ObjectId(key), actions: [deleteAction], channel, - ipAddress: req.realIP, + ipAddress: req.realIP })); // (EE) take a secret snapshot @@ -1237,20 +1219,20 @@ export const deleteSecrets = async (req: Request, res: Response) => { postHogClient.capture({ event: "secrets deleted", distinctId: await TelemetryService.getDistinctId({ - authData: req.authData, + authData: req.authData }), properties: { numberOfSecrets: workspaceSecretObj[key].length, environment: workspaceSecretObj[key][0].environment, workspaceId: key, channel: channel, - userAgent: req.headers?.["user-agent"], - }, + userAgent: req.headers?.["user-agent"] + } }); } }); return res.status(200).send({ - secrets: req.secrets, + secrets: req.secrets }); }; diff --git a/backend/src/controllers/v2/serviceTokenDataController.ts b/backend/src/controllers/v2/serviceTokenDataController.ts index 304311da7..d81fb97d6 100644 --- a/backend/src/controllers/v2/serviceTokenDataController.ts +++ b/backend/src/controllers/v2/serviceTokenDataController.ts @@ -2,10 +2,7 @@ import { Request, Response } from "express"; import crypto from "crypto"; import bcrypt from "bcrypt"; import { ServiceAccount, ServiceTokenData, User } from "../../models"; -import { - AUTH_MODE_JWT, - AUTH_MODE_SERVICE_ACCOUNT, -} from "../../variables"; +import { AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT } from "../../variables"; import { getSaltRounds } from "../../config"; import { BadRequestError } from "../../utils/errors"; import Folder from "../../models/folder"; @@ -46,14 +43,13 @@ export const getServiceTokenData = async (req: Request, res: Response) => { if (!(req.authData.authPayload instanceof ServiceTokenData)) throw BadRequestError({ - message: "Failed accepted client validation for service token data", + message: "Failed accepted client validation for service token data" }); - const serviceTokenData = await ServiceTokenData.findById( - req.authData.authPayload._id - ) + const serviceTokenData = await ServiceTokenData.findById(req.authData.authPayload._id) .select("+encryptedKey +iv +tag") - .populate("user").lean(); + .populate("user") + .lean(); return res.status(200).json(serviceTokenData); }; @@ -68,29 +64,7 @@ export const getServiceTokenData = async (req: Request, res: Response) => { export const createServiceTokenData = async (req: Request, res: Response) => { let serviceTokenData; - const { - name, - workspaceId, - environment, - encryptedKey, - iv, - tag, - expiresIn, - secretPath, - permissions, - } = req.body; - - const folders = await Folder.findOne({ - workspace: workspaceId, - environment, - }); - - if (folders) { - const folder = getFolderByPath(folders.nodes, secretPath); - if (folder == undefined) { - throw BadRequestError({ message: "Path for service token does not exist" }) - } - } + const { name, workspaceId, encryptedKey, iv, tag, expiresIn, permissions, scopes } = req.body; const secret = crypto.randomBytes(16).toString("hex"); const secretHash = await bcrypt.hash(secret, await getSaltRounds()); @@ -103,10 +77,7 @@ export const createServiceTokenData = async (req: Request, res: Response) => { let user, serviceAccount; - if ( - req.authData.authMode === AUTH_MODE_JWT && - req.authData.authPayload instanceof User - ) { + if (req.authData.authMode === AUTH_MODE_JWT && req.authData.authPayload instanceof User) { user = req.authData.authPayload._id; } @@ -120,17 +91,16 @@ export const createServiceTokenData = async (req: Request, res: Response) => { serviceTokenData = await new ServiceTokenData({ name, workspace: workspaceId, - environment, user, serviceAccount, + scopes, lastUsed: new Date(), expiresAt, secretHash, encryptedKey, iv, tag, - secretPath, - permissions, + permissions }).save(); // return service token data without sensitive data @@ -142,7 +112,7 @@ export const createServiceTokenData = async (req: Request, res: Response) => { return res.status(200).send({ serviceToken, - serviceTokenData, + serviceTokenData }); }; @@ -155,11 +125,9 @@ export const createServiceTokenData = async (req: Request, res: Response) => { export const deleteServiceTokenData = async (req: Request, res: Response) => { const { serviceTokenDataId } = req.params; - const serviceTokenData = await ServiceTokenData.findByIdAndDelete( - serviceTokenDataId - ); + const serviceTokenData = await ServiceTokenData.findByIdAndDelete(serviceTokenDataId); return res.status(200).send({ - serviceTokenData, + serviceTokenData }); }; diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index 51731bb6a..cd964fe9f 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -4,21 +4,16 @@ import { DeleteSecretParams, GetSecretParams, GetSecretsParams, - UpdateSecretParams, + UpdateSecretParams } from "../interfaces/services/SecretService"; -import { - ISecret, - Secret, - SecretBlindIndexData, - ServiceTokenData, -} from "../models"; +import { ISecret, Secret, SecretBlindIndexData, ServiceTokenData } from "../models"; import { SecretVersion } from "../ee/models"; import { BadRequestError, InternalServerError, SecretBlindIndexDataNotFoundError, SecretNotFoundError, - UnauthorizedRequestError, + UnauthorizedRequestError } from "../utils/errors"; import { ACTION_ADD_SECRETS, @@ -29,51 +24,42 @@ import { ENCODING_SCHEME_BASE64, ENCODING_SCHEME_UTF8, SECRET_PERSONAL, - SECRET_SHARED, + SECRET_SHARED } from "../variables"; import crypto from "crypto"; import * as argon2 from "argon2"; import { decryptSymmetric128BitHexKeyUTF8, - encryptSymmetric128BitHexKeyUTF8, + encryptSymmetric128BitHexKeyUTF8 } from "../utils/crypto"; import { TelemetryService } from "../services"; import { client, getEncryptionKey, getRootEncryptionKey } from "../config"; import { EELogService, EESecretService } from "../ee/services"; -import { - getAuthDataPayloadIdObj, - getAuthDataPayloadUserObj, -} from "../utils/auth"; +import { getAuthDataPayloadIdObj, getAuthDataPayloadUserObj } from "../utils/auth"; import { getFolderIdFromServiceToken } from "../services/FolderService"; +import picomatch from "picomatch"; /** * Returns an object containing secret [secret] but with its value, key, comment decrypted. - * + * * Precondition: the workspace for secret [secret] must have E2EE disabled * @param {ISecret} secret - secret to repackage to raw * @param {String} key - symmetric key to use to decrypt secret - * @returns + * @returns */ -export const repackageSecretToRaw = ({ - secret, - key, -}: { - secret: ISecret; - key: string; -}) => { - +export const repackageSecretToRaw = ({ secret, key }: { secret: ISecret; key: string }) => { const secretKey = decryptSymmetric128BitHexKeyUTF8({ ciphertext: secret.secretKeyCiphertext, iv: secret.secretKeyIV, tag: secret.secretKeyTag, - key, + key }); const secretValue = decryptSymmetric128BitHexKeyUTF8({ ciphertext: secret.secretValueCiphertext, iv: secret.secretValueIV, tag: secret.secretValueTag, - key, + key }); let secretComment = ""; @@ -83,11 +69,11 @@ export const repackageSecretToRaw = ({ ciphertext: secret.secretCommentCiphertext, iv: secret.secretCommentIV, tag: secret.secretCommentTag, - key, + key }); } - return ({ + return { _id: secret._id, version: secret.version, workspace: secret.workspace, @@ -96,9 +82,9 @@ export const repackageSecretToRaw = ({ user: secret.user, secretKey, secretValue, - secretComment, - }); -} + secretComment + }; +}; /** * Create secret blind index data containing encrypted blind index [salt] @@ -107,7 +93,7 @@ export const repackageSecretToRaw = ({ * @param {Types.ObjectId} obj.workspaceId */ export const createSecretBlindIndexDataHelper = async ({ - workspaceId, + workspaceId }: { workspaceId: Types.ObjectId; }) => { @@ -121,7 +107,7 @@ export const createSecretBlindIndexDataHelper = async ({ const { ciphertext: encryptedSaltCiphertext, iv: saltIV, - tag: saltTag, + tag: saltTag } = client.encryptSymmetric(salt, rootEncryptionKey); return await new SecretBlindIndexData({ @@ -130,16 +116,16 @@ export const createSecretBlindIndexDataHelper = async ({ saltIV, saltTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_BASE64, + keyEncoding: ENCODING_SCHEME_BASE64 }).save(); } else { const { ciphertext: encryptedSaltCiphertext, iv: saltIV, - tag: saltTag, + tag: saltTag } = encryptSymmetric128BitHexKeyUTF8({ plaintext: salt, - key: encryptionKey, + key: encryptionKey }); return await new SecretBlindIndexData({ @@ -148,7 +134,7 @@ export const createSecretBlindIndexDataHelper = async ({ saltIV, saltTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }).save(); } }; @@ -160,7 +146,7 @@ export const createSecretBlindIndexDataHelper = async ({ * @returns */ export const getSecretBlindIndexSaltHelper = async ({ - workspaceId, + workspaceId }: { workspaceId: Types.ObjectId; }) => { @@ -168,36 +154,30 @@ export const getSecretBlindIndexSaltHelper = async ({ const rootEncryptionKey = await getRootEncryptionKey(); const secretBlindIndexData = await SecretBlindIndexData.findOne({ - workspace: workspaceId, + workspace: workspaceId }).select("+algorithm +keyEncoding"); if (!secretBlindIndexData) throw SecretBlindIndexDataNotFoundError(); - if ( - rootEncryptionKey && - secretBlindIndexData.keyEncoding === ENCODING_SCHEME_BASE64 - ) { + if (rootEncryptionKey && secretBlindIndexData.keyEncoding === ENCODING_SCHEME_BASE64) { return client.decryptSymmetric( secretBlindIndexData.encryptedSaltCiphertext, rootEncryptionKey, secretBlindIndexData.saltIV, secretBlindIndexData.saltTag ); - } else if ( - encryptionKey && - secretBlindIndexData.keyEncoding === ENCODING_SCHEME_UTF8 - ) { + } else if (encryptionKey && secretBlindIndexData.keyEncoding === ENCODING_SCHEME_UTF8) { // decrypt workspace salt return decryptSymmetric128BitHexKeyUTF8({ ciphertext: secretBlindIndexData.encryptedSaltCiphertext, iv: secretBlindIndexData.saltIV, tag: secretBlindIndexData.saltTag, - key: encryptionKey, + key: encryptionKey }); } throw InternalServerError({ - message: "Failed to obtain workspace salt needed for secret blind indexing", + message: "Failed to obtain workspace salt needed for secret blind indexing" }); }; @@ -210,7 +190,7 @@ export const getSecretBlindIndexSaltHelper = async ({ */ export const generateSecretBlindIndexWithSaltHelper = async ({ secretName, - salt, + salt }: { secretName: string; salt: string; @@ -224,7 +204,7 @@ export const generateSecretBlindIndexWithSaltHelper = async ({ memoryCost: 65536, // default pool of 64 MiB per thread. hashLength: 32, parallelism: 1, - raw: true, + raw: true }) ).toString("base64"); @@ -240,7 +220,7 @@ export const generateSecretBlindIndexWithSaltHelper = async ({ */ export const generateSecretBlindIndexHelper = async ({ secretName, - workspaceId, + workspaceId }: { secretName: string; workspaceId: Types.ObjectId; @@ -250,16 +230,13 @@ export const generateSecretBlindIndexHelper = async ({ const rootEncryptionKey = await getRootEncryptionKey(); const secretBlindIndexData = await SecretBlindIndexData.findOne({ - workspace: workspaceId, + workspace: workspaceId }).select("+algorithm +keyEncoding"); if (!secretBlindIndexData) throw SecretBlindIndexDataNotFoundError(); let salt; - if ( - rootEncryptionKey && - secretBlindIndexData.keyEncoding === ENCODING_SCHEME_BASE64 - ) { + if (rootEncryptionKey && secretBlindIndexData.keyEncoding === ENCODING_SCHEME_BASE64) { salt = client.decryptSymmetric( secretBlindIndexData.encryptedSaltCiphertext, rootEncryptionKey, @@ -269,32 +246,29 @@ export const generateSecretBlindIndexHelper = async ({ const secretBlindIndex = await generateSecretBlindIndexWithSaltHelper({ secretName, - salt, + salt }); return secretBlindIndex; - } else if ( - encryptionKey && - secretBlindIndexData.keyEncoding === ENCODING_SCHEME_UTF8 - ) { + } else if (encryptionKey && secretBlindIndexData.keyEncoding === ENCODING_SCHEME_UTF8) { // decrypt workspace salt salt = decryptSymmetric128BitHexKeyUTF8({ ciphertext: secretBlindIndexData.encryptedSaltCiphertext, iv: secretBlindIndexData.saltIV, tag: secretBlindIndexData.saltTag, - key: encryptionKey, + key: encryptionKey }); const secretBlindIndex = await generateSecretBlindIndexWithSaltHelper({ secretName, - salt, + salt }); return secretBlindIndex; } throw InternalServerError({ - message: "Failed to generate secret blind index", + message: "Failed to generate secret blind index" }); }; @@ -323,38 +297,39 @@ export const createSecretHelper = async ({ secretCommentCiphertext, secretCommentIV, secretCommentTag, - secretPath = "/", + secretPath = "/" }: CreateSecretParams) => { - const secretBlindIndex = await generateSecretBlindIndexHelper({ secretName, - workspaceId: new Types.ObjectId(workspaceId), + workspaceId: new Types.ObjectId(workspaceId) }); // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { secretPath: serviceTkScopedSecretPath } = authData.authPayload; - if (secretPath !== serviceTkScopedSecretPath) { + const { scopes: tkScopes } = authData.authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && + scope.environment === environment + ); + + if (!validScope) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } - const folderId = await getFolderIdFromServiceToken( - workspaceId, - environment, - secretPath - ); + const folderId = await getFolderIdFromServiceToken(workspaceId, environment, secretPath); const exists = await Secret.exists({ secretBlindIndex, workspace: new Types.ObjectId(workspaceId), folder: folderId, type, - ...(type === SECRET_PERSONAL ? getAuthDataPayloadUserObj(authData) : {}), + ...(type === SECRET_PERSONAL ? getAuthDataPayloadUserObj(authData) : {}) }); if (exists) throw BadRequestError({ - message: "Failed to create secret that already exists", + message: "Failed to create secret that already exists" }); if (type === SECRET_PERSONAL) { @@ -365,13 +340,12 @@ export const createSecretHelper = async ({ secretBlindIndex, folder: folderId, workspace: new Types.ObjectId(workspaceId), - type: SECRET_SHARED, + type: SECRET_SHARED }); if (!exists) throw BadRequestError({ - message: - "Failed to create personal secret override for no corresponding shared secret", + message: "Failed to create personal secret override for no corresponding shared secret" }); } @@ -394,7 +368,7 @@ export const createSecretHelper = async ({ secretCommentTag, folder: folderId, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }).save(); const secretVersion = new SecretVersion({ @@ -414,12 +388,12 @@ export const createSecretHelper = async ({ secretValueIV, secretValueTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }); // (EE) add version for new secret await EESecretService.addSecretVersions({ - secretVersions: [secretVersion], + secretVersions: [secretVersion] }); // (EE) create (audit) log @@ -427,7 +401,7 @@ export const createSecretHelper = async ({ name: ACTION_ADD_SECRETS, ...getAuthDataPayloadIdObj(authData), workspaceId, - secretIds: [secret._id], + secretIds: [secret._id] }); action && @@ -436,14 +410,14 @@ export const createSecretHelper = async ({ workspaceId, actions: [action], channel: authData.authChannel, - ipAddress: authData.authIP, + ipAddress: authData.authIP })); // (EE) take a secret snapshot await EESecretService.takeSecretSnapshot({ workspaceId, environment, - folderId, + folderId }); const postHogClient = await TelemetryService.getPostHogClient(); @@ -452,7 +426,7 @@ export const createSecretHelper = async ({ postHogClient.capture({ event: "secrets added", distinctId: await TelemetryService.getDistinctId({ - authData, + authData }), properties: { numberOfSecrets: 1, @@ -460,8 +434,8 @@ export const createSecretHelper = async ({ workspaceId, folderId, channel: authData.authChannel, - userAgent: authData.authUserAgent, - }, + userAgent: authData.authUserAgent + } }); } @@ -480,21 +454,23 @@ export const getSecretsHelper = async ({ workspaceId, environment, authData, - secretPath = "/", + secretPath = "/" }: GetSecretsParams) => { let secrets: ISecret[] = []; // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { secretPath: serviceTkScopedSecretPath } = authData.authPayload; - if (secretPath !== serviceTkScopedSecretPath) { + const { scopes: tkScopes } = authData.authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && + scope.environment === environment + ); + + if (!validScope) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } - const folderId = await getFolderIdFromServiceToken( - workspaceId, - environment, - secretPath - ); + const folderId = await getFolderIdFromServiceToken(workspaceId, environment, secretPath); // get personal secrets first secrets = await Secret.find({ @@ -502,8 +478,10 @@ export const getSecretsHelper = async ({ environment, folder: folderId, type: SECRET_PERSONAL, - ...getAuthDataPayloadUserObj(authData), - }).populate("tags").lean(); + ...getAuthDataPayloadUserObj(authData) + }) + .populate("tags") + .lean(); // concat with shared secrets secrets = secrets.concat( @@ -513,9 +491,11 @@ export const getSecretsHelper = async ({ folder: folderId, type: SECRET_SHARED, secretBlindIndex: { - $nin: secrets.map((secret) => secret.secretBlindIndex), - }, - }).populate("tags").lean() + $nin: secrets.map((secret) => secret.secretBlindIndex) + } + }) + .populate("tags") + .lean() ); // (EE) create (audit) log @@ -523,7 +503,7 @@ export const getSecretsHelper = async ({ name: ACTION_READ_SECRETS, ...getAuthDataPayloadIdObj(authData), workspaceId, - secretIds: secrets.map((secret) => secret._id), + secretIds: secrets.map((secret) => secret._id) }); action && @@ -532,7 +512,7 @@ export const getSecretsHelper = async ({ workspaceId, actions: [action], channel: authData.authChannel, - ipAddress: authData.authIP, + ipAddress: authData.authIP })); const postHogClient = await TelemetryService.getPostHogClient(); @@ -541,7 +521,7 @@ export const getSecretsHelper = async ({ postHogClient.capture({ event: "secrets pulled", distinctId: await TelemetryService.getDistinctId({ - authData, + authData }), properties: { numberOfSecrets: secrets.length, @@ -549,8 +529,8 @@ export const getSecretsHelper = async ({ workspaceId, folderId, channel: authData.authChannel, - userAgent: authData.authUserAgent, - }, + userAgent: authData.authUserAgent + } }); } @@ -573,25 +553,27 @@ export const getSecretHelper = async ({ environment, type, authData, - secretPath = "/", + secretPath = "/" }: GetSecretParams) => { const secretBlindIndex = await generateSecretBlindIndexHelper({ secretName, - workspaceId: new Types.ObjectId(workspaceId), + workspaceId: new Types.ObjectId(workspaceId) }); let secret: ISecret | null = null; // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { secretPath: serviceTkScopedSecretPath } = authData.authPayload; - if (secretPath !== serviceTkScopedSecretPath) { + const { scopes: tkScopes } = authData.authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && + scope.environment === environment + ); + + if (!validScope) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } - const folderId = await getFolderIdFromServiceToken( - workspaceId, - environment, - secretPath - ); + const folderId = await getFolderIdFromServiceToken(workspaceId, environment, secretPath); // try getting personal secret first (if exists) secret = await Secret.findOne({ @@ -600,7 +582,7 @@ export const getSecretHelper = async ({ environment, folder: folderId, type: type ?? SECRET_PERSONAL, - ...(type === SECRET_PERSONAL ? getAuthDataPayloadUserObj(authData) : {}), + ...(type === SECRET_PERSONAL ? getAuthDataPayloadUserObj(authData) : {}) }).lean(); if (!secret) { @@ -611,7 +593,7 @@ export const getSecretHelper = async ({ workspace: new Types.ObjectId(workspaceId), environment, folder: folderId, - type: SECRET_SHARED, + type: SECRET_SHARED }).lean(); } @@ -622,7 +604,7 @@ export const getSecretHelper = async ({ name: ACTION_READ_SECRETS, ...getAuthDataPayloadIdObj(authData), workspaceId, - secretIds: [secret._id], + secretIds: [secret._id] }); action && @@ -631,7 +613,7 @@ export const getSecretHelper = async ({ workspaceId, actions: [action], channel: authData.authChannel, - ipAddress: authData.authIP, + ipAddress: authData.authIP })); const postHogClient = await TelemetryService.getPostHogClient(); @@ -640,7 +622,7 @@ export const getSecretHelper = async ({ postHogClient.capture({ event: "secrets pull", distinctId: await TelemetryService.getDistinctId({ - authData, + authData }), properties: { numberOfSecrets: 1, @@ -648,8 +630,8 @@ export const getSecretHelper = async ({ workspaceId, folderId, channel: authData.authChannel, - userAgent: authData.authUserAgent, - }, + userAgent: authData.authUserAgent + } }); } @@ -679,26 +661,28 @@ export const updateSecretHelper = async ({ secretValueCiphertext, secretValueIV, secretValueTag, - secretPath, + secretPath }: UpdateSecretParams) => { const secretBlindIndex = await generateSecretBlindIndexHelper({ secretName, - workspaceId: new Types.ObjectId(workspaceId), + workspaceId: new Types.ObjectId(workspaceId) }); let secret: ISecret | null = null; // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { secretPath: serviceTkScopedSecretPath } = authData.authPayload; - if (secretPath !== serviceTkScopedSecretPath) { + const { scopes: tkScopes } = authData.authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && + scope.environment === environment + ); + + if (!validScope) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } - const folderId = await getFolderIdFromServiceToken( - workspaceId, - environment, - secretPath - ); + const folderId = await getFolderIdFromServiceToken(workspaceId, environment, secretPath); if (type === SECRET_SHARED) { // case: update shared secret @@ -708,16 +692,16 @@ export const updateSecretHelper = async ({ workspace: new Types.ObjectId(workspaceId), environment, folder: folderId, - type, + type }, { secretValueCiphertext, secretValueIV, secretValueTag, - $inc: { version: 1 }, + $inc: { version: 1 } }, { - new: true, + new: true } ); } else { @@ -730,16 +714,16 @@ export const updateSecretHelper = async ({ environment, type, folder: folderId, - ...getAuthDataPayloadUserObj(authData), + ...getAuthDataPayloadUserObj(authData) }, { secretValueCiphertext, secretValueIV, secretValueTag, - $inc: { version: 1 }, + $inc: { version: 1 } }, { - new: true, + new: true } ); } @@ -763,12 +747,12 @@ export const updateSecretHelper = async ({ secretValueIV, secretValueTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }); // (EE) add version for new secret await EESecretService.addSecretVersions({ - secretVersions: [secretVersion], + secretVersions: [secretVersion] }); // (EE) create (audit) log @@ -776,7 +760,7 @@ export const updateSecretHelper = async ({ name: ACTION_UPDATE_SECRETS, ...getAuthDataPayloadIdObj(authData), workspaceId, - secretIds: [secret._id], + secretIds: [secret._id] }); action && @@ -785,14 +769,14 @@ export const updateSecretHelper = async ({ workspaceId, actions: [action], channel: authData.authChannel, - ipAddress: authData.authIP, + ipAddress: authData.authIP })); // (EE) take a secret snapshot await EESecretService.takeSecretSnapshot({ workspaceId, environment, - folderId: secret?.folder, + folderId: secret?.folder }); const postHogClient = await TelemetryService.getPostHogClient(); @@ -801,7 +785,7 @@ export const updateSecretHelper = async ({ postHogClient.capture({ event: "secrets modified", distinctId: await TelemetryService.getDistinctId({ - authData, + authData }), properties: { numberOfSecrets: 1, @@ -809,8 +793,8 @@ export const updateSecretHelper = async ({ workspaceId, folderId, channel: authData.authChannel, - userAgent: authData.authUserAgent, - }, + userAgent: authData.authUserAgent + } }); } @@ -833,26 +817,27 @@ export const deleteSecretHelper = async ({ environment, type, authData, - secretPath = "/", + secretPath = "/" }: DeleteSecretParams) => { const secretBlindIndex = await generateSecretBlindIndexHelper({ secretName, - workspaceId: new Types.ObjectId(workspaceId), + workspaceId: new Types.ObjectId(workspaceId) }); // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { secretPath: serviceTkScopedSecretPath } = authData.authPayload; + const { scopes: tkScopes } = authData.authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && + scope.environment === environment + ); - if (secretPath !== serviceTkScopedSecretPath) { + if (!validScope) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } - const folderId = await getFolderIdFromServiceToken( - workspaceId, - environment, - secretPath - ); + const folderId = await getFolderIdFromServiceToken(workspaceId, environment, secretPath); let secrets: ISecret[] = []; let secret: ISecret | null = null; @@ -862,7 +847,7 @@ export const deleteSecretHelper = async ({ secretBlindIndex, workspaceId: new Types.ObjectId(workspaceId), environment, - folder: folderId, + folder: folderId }).lean(); secret = await Secret.findOneAndDelete({ @@ -870,14 +855,14 @@ export const deleteSecretHelper = async ({ workspaceId: new Types.ObjectId(workspaceId), environment, type, - folder: folderId, + folder: folderId }).lean(); await Secret.deleteMany({ secretBlindIndex, workspaceId: new Types.ObjectId(workspaceId), environment, - folder: folderId, + folder: folderId }); } else { secret = await Secret.findOneAndDelete({ @@ -886,7 +871,7 @@ export const deleteSecretHelper = async ({ workspaceId: new Types.ObjectId(workspaceId), environment, type, - ...getAuthDataPayloadUserObj(authData), + ...getAuthDataPayloadUserObj(authData) }).lean(); if (secret) { @@ -897,7 +882,7 @@ export const deleteSecretHelper = async ({ if (!secret) throw SecretNotFoundError(); await EESecretService.markDeletedSecretVersions({ - secretIds: secrets.map((secret) => secret._id), + secretIds: secrets.map((secret) => secret._id) }); // (EE) create (audit) log @@ -905,22 +890,23 @@ export const deleteSecretHelper = async ({ name: ACTION_DELETE_SECRETS, ...getAuthDataPayloadIdObj(authData), workspaceId, - secretIds: secrets.map((secret) => secret._id), + secretIds: secrets.map((secret) => secret._id) }); - action && (await EELogService.createLog({ - ...getAuthDataPayloadIdObj(authData), - workspaceId, - actions: [action], - channel: authData.authChannel, - ipAddress: authData.authIP, - })); + action && + (await EELogService.createLog({ + ...getAuthDataPayloadIdObj(authData), + workspaceId, + actions: [action], + channel: authData.authChannel, + ipAddress: authData.authIP + })); // (EE) take a secret snapshot await EESecretService.takeSecretSnapshot({ workspaceId, environment, - folderId: secret?.folder, + folderId: secret?.folder }); const postHogClient = await TelemetryService.getPostHogClient(); @@ -929,7 +915,7 @@ export const deleteSecretHelper = async ({ postHogClient.capture({ event: "secrets deleted", distinctId: await TelemetryService.getDistinctId({ - authData, + authData }), properties: { numberOfSecrets: secrets.length, @@ -937,13 +923,13 @@ export const deleteSecretHelper = async ({ workspaceId, folderId, channel: authData.authChannel, - userAgent: authData.authUserAgent, - }, + userAgent: authData.authUserAgent + } }); } - return ({ + return { secrets, - secret, - }); + secret + }; }; diff --git a/backend/src/models/serviceTokenData.ts b/backend/src/models/serviceTokenData.ts index 57528a4e9..804184386 100644 --- a/backend/src/models/serviceTokenData.ts +++ b/backend/src/models/serviceTokenData.ts @@ -4,7 +4,10 @@ export interface IServiceTokenData extends Document { _id: Types.ObjectId; name: string; workspace: Types.ObjectId; - environment: string; + scopes: Array<{ + environment: string; + secretPath: string; + }>; user: Types.ObjectId; serviceAccount: Types.ObjectId; lastUsed: Date; @@ -13,7 +16,6 @@ export interface IServiceTokenData extends Document { encryptedKey: string; iv: string; tag: string; - secretPath: string; permissions: string[]; } @@ -21,68 +23,72 @@ const serviceTokenDataSchema = new Schema( { name: { type: String, - required: true, + required: true }, workspace: { type: Schema.Types.ObjectId, ref: "Workspace", - required: true, + required: true }, - environment: { - type: String, - required: true, + scopes: { + type: [ + { + environment: { + type: String, + required: true + }, + secretPath: { + type: String, + default: "/", + required: true + } + } + ], + required: true }, user: { type: Schema.Types.ObjectId, ref: "User", - required: true, + required: true }, serviceAccount: { type: Schema.Types.ObjectId, - ref: "ServiceAccount", + ref: "ServiceAccount" }, lastUsed: { - type: Date, + type: Date }, expiresAt: { - type: Date, + type: Date }, secretHash: { type: String, required: true, - select: false, + select: false }, encryptedKey: { type: String, - select: false, + select: false }, iv: { type: String, - select: false, + select: false }, tag: { type: String, - select: false, + select: false }, permissions: { type: [String], enum: ["read", "write"], - default: ["read"], - }, - secretPath: { - type: String, - default: "/", - required: true, - }, + default: ["read"] + } }, { - timestamps: true, + timestamps: true } ); -const ServiceTokenData = model( - "ServiceTokenData", - serviceTokenDataSchema -); +const ServiceTokenData = model("ServiceTokenData", serviceTokenDataSchema); export default ServiceTokenData; diff --git a/backend/src/routes/v2/serviceTokenData.ts b/backend/src/routes/v2/serviceTokenData.ts index 33ffad3cf..84f443deb 100644 --- a/backend/src/routes/v2/serviceTokenData.ts +++ b/backend/src/routes/v2/serviceTokenData.ts @@ -4,7 +4,7 @@ import { requireAuth, requireServiceTokenDataAuth, requireWorkspaceAuth, - validateRequest, + validateRequest } from "../../middleware"; import { body, param } from "express-validator"; import { @@ -13,14 +13,14 @@ import { AUTH_MODE_SERVICE_ACCOUNT, AUTH_MODE_SERVICE_TOKEN, MEMBER, - PERMISSION_WRITE_SECRETS, + PERMISSION_WRITE_SECRETS } from "../../variables"; import { serviceTokenDataController } from "../../controllers/v2"; router.get( "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_SERVICE_TOKEN], + acceptedAuthModes: [AUTH_MODE_SERVICE_TOKEN] }), serviceTokenDataController.getServiceTokenData ); @@ -28,33 +28,30 @@ router.get( router.post( "/", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT], + acceptedAuthModes: [AUTH_MODE_JWT, AUTH_MODE_SERVICE_ACCOUNT] }), requireWorkspaceAuth({ acceptedRoles: [ADMIN, MEMBER], locationWorkspaceId: "body", locationEnvironment: "body", - requiredPermissions: [PERMISSION_WRITE_SECRETS], + requiredPermissions: [PERMISSION_WRITE_SECRETS] }), body("name").exists().isString().trim(), body("workspaceId").exists().isString().trim(), - body("environment").exists().isString().trim(), + body("scopes").exists().isArray(), + body("scopes.*.environment").exists().isString().trim(), + body("scopes.*.secretPath").exists().isString().trim(), body("encryptedKey").exists().isString().trim(), body("iv").exists().isString().trim(), - body("secretPath").isString().default("/").trim(), body("tag").exists().isString().trim(), body("expiresIn").exists().isNumeric(), // measured in ms body("permissions") .isArray({ min: 1 }) .custom((value: string[]) => { const allowedPermissions = ["read", "write"]; - const invalidValues = value.filter( - (v) => !allowedPermissions.includes(v) - ); + const invalidValues = value.filter((v) => !allowedPermissions.includes(v)); if (invalidValues.length > 0) { - throw new Error( - `permissions contains invalid values: ${invalidValues.join(", ")}` - ); + throw new Error(`permissions contains invalid values: ${invalidValues.join(", ")}`); } return true; @@ -66,10 +63,10 @@ router.post( router.delete( "/:serviceTokenDataId", requireAuth({ - acceptedAuthModes: [AUTH_MODE_JWT], + acceptedAuthModes: [AUTH_MODE_JWT] }), requireServiceTokenDataAuth({ - acceptedRoles: [ADMIN, MEMBER], + acceptedRoles: [ADMIN, MEMBER] }), param("serviceTokenDataId").exists().trim(), validateRequest, diff --git a/backend/src/utils/setup/backfillData.ts b/backend/src/utils/setup/backfillData.ts index a77d3ee27..98dcad90e 100644 --- a/backend/src/utils/setup/backfillData.ts +++ b/backend/src/utils/setup/backfillData.ts @@ -13,14 +13,14 @@ import { Secret, SecretBlindIndexData, ServiceTokenData, - Workspace, + Workspace } from "../../models"; import { generateKeyPair } from "../../utils/crypto"; import { client, getEncryptionKey, getRootEncryptionKey } from "../../config"; import { ALGORITHM_AES_256_GCM, ENCODING_SCHEME_BASE64, - ENCODING_SCHEME_UTF8, + ENCODING_SCHEME_UTF8 } from "../../variables"; import { InternalServerError } from "../errors"; @@ -29,10 +29,7 @@ import { InternalServerError } from "../errors"; * corresponding secret versions */ export const backfillSecretVersions = async () => { - await Secret.updateMany( - { version: { $exists: false } }, - { $set: { version: 1 } } - ); + await Secret.updateMany({ version: { $exists: false } }, { $set: { version: 1 } }); const unversionedSecrets: ISecret[] = await Secret.aggregate([ { @@ -40,14 +37,14 @@ export const backfillSecretVersions = async () => { from: "secretversions", localField: "_id", foreignField: "secret", - as: "versions", - }, + as: "versions" + } }, { $match: { - versions: { $size: 0 }, - }, - }, + versions: { $size: 0 } + } + } ]); if (unversionedSecrets.length > 0) { @@ -62,9 +59,9 @@ export const backfillSecretVersions = async () => { workspace: s.workspace, environment: s.environment, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }) - ), + ) }); } console.log("Migration: Secret version migration v1 complete"); @@ -80,8 +77,8 @@ export const backfillBots = async () => { const workspaceIdsWithBot = await Bot.distinct("workspace"); const workspaceIdsToAddBot = await Workspace.distinct("_id", { _id: { - $nin: workspaceIdsWithBot, - }, + $nin: workspaceIdsWithBot + } }); if (workspaceIdsToAddBot.length === 0) return; @@ -94,7 +91,7 @@ export const backfillBots = async () => { const { ciphertext: encryptedPrivateKey, iv, - tag, + tag } = client.encryptSymmetric(privateKey, rootEncryptionKey); return new Bot({ @@ -106,16 +103,16 @@ export const backfillBots = async () => { iv, tag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_BASE64, + keyEncoding: ENCODING_SCHEME_BASE64 }); } else if (encryptionKey) { const { ciphertext: encryptedPrivateKey, iv, - tag, + tag } = encryptSymmetric128BitHexKeyUTF8({ plaintext: privateKey, - key: encryptionKey, + key: encryptionKey }); return new Bot({ @@ -127,13 +124,12 @@ export const backfillBots = async () => { iv, tag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }); } throw InternalServerError({ - message: - "Failed to backfill workspace bots due to missing encryption key", + message: "Failed to backfill workspace bots due to missing encryption key" }); }) ); @@ -149,13 +145,11 @@ export const backfillSecretBlindIndexData = async () => { const encryptionKey = await getEncryptionKey(); const rootEncryptionKey = await getRootEncryptionKey(); - const workspaceIdsBlindIndexed = await SecretBlindIndexData.distinct( - "workspace" - ); + const workspaceIdsBlindIndexed = await SecretBlindIndexData.distinct("workspace"); const workspaceIdsToBlindIndex = await Workspace.distinct("_id", { _id: { - $nin: workspaceIdsBlindIndexed, - }, + $nin: workspaceIdsBlindIndexed + } }); if (workspaceIdsToBlindIndex.length === 0) return; @@ -168,7 +162,7 @@ export const backfillSecretBlindIndexData = async () => { const { ciphertext: encryptedSaltCiphertext, iv: saltIV, - tag: saltTag, + tag: saltTag } = client.encryptSymmetric(salt, rootEncryptionKey); return new SecretBlindIndexData({ @@ -177,16 +171,16 @@ export const backfillSecretBlindIndexData = async () => { saltIV, saltTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_BASE64, + keyEncoding: ENCODING_SCHEME_BASE64 }); } else if (encryptionKey) { const { ciphertext: encryptedSaltCiphertext, iv: saltIV, - tag: saltTag, + tag: saltTag } = encryptSymmetric128BitHexKeyUTF8({ plaintext: salt, - key: encryptionKey, + key: encryptionKey }); return new SecretBlindIndexData({ @@ -195,13 +189,12 @@ export const backfillSecretBlindIndexData = async () => { saltIV, saltTag, algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, + keyEncoding: ENCODING_SCHEME_UTF8 }); } throw InternalServerError({ - message: - "Failed to backfill secret blind index data due to missing encryption key", + message: "Failed to backfill secret blind index data due to missing encryption key" }); }) ); @@ -219,17 +212,17 @@ export const backfillEncryptionMetadata = async () => { await Secret.updateMany( { algorithm: { - $exists: false, + $exists: false }, keyEncoding: { - $exists: false, - }, + $exists: false + } }, { $set: { algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, - }, + keyEncoding: ENCODING_SCHEME_UTF8 + } } ); @@ -237,17 +230,17 @@ export const backfillEncryptionMetadata = async () => { await SecretVersion.updateMany( { algorithm: { - $exists: false, + $exists: false }, keyEncoding: { - $exists: false, - }, + $exists: false + } }, { $set: { algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, - }, + keyEncoding: ENCODING_SCHEME_UTF8 + } } ); @@ -255,17 +248,17 @@ export const backfillEncryptionMetadata = async () => { await SecretBlindIndexData.updateMany( { algorithm: { - $exists: false, + $exists: false }, keyEncoding: { - $exists: false, - }, + $exists: false + } }, { $set: { algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, - }, + keyEncoding: ENCODING_SCHEME_UTF8 + } } ); @@ -273,17 +266,17 @@ export const backfillEncryptionMetadata = async () => { await Bot.updateMany( { algorithm: { - $exists: false, + $exists: false }, keyEncoding: { - $exists: false, - }, + $exists: false + } }, { $set: { algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, - }, + keyEncoding: ENCODING_SCHEME_UTF8 + } } ); @@ -291,17 +284,17 @@ export const backfillEncryptionMetadata = async () => { await BackupPrivateKey.updateMany( { algorithm: { - $exists: false, + $exists: false }, keyEncoding: { - $exists: false, - }, + $exists: false + } }, { $set: { algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, - }, + keyEncoding: ENCODING_SCHEME_UTF8 + } } ); @@ -309,17 +302,17 @@ export const backfillEncryptionMetadata = async () => { await IntegrationAuth.updateMany( { algorithm: { - $exists: false, + $exists: false }, keyEncoding: { - $exists: false, - }, + $exists: false + } }, { $set: { algorithm: ALGORITHM_AES_256_GCM, - keyEncoding: ENCODING_SCHEME_UTF8, - }, + keyEncoding: ENCODING_SCHEME_UTF8 + } } ); }; @@ -328,26 +321,26 @@ export const backfillSecretFolders = async () => { await Secret.updateMany( { folder: { - $exists: false, - }, + $exists: false + } }, { $set: { - folder: "root", - }, + folder: "root" + } } ); await SecretVersion.updateMany( { folder: { - $exists: false, - }, + $exists: false + } }, { $set: { - folder: "root", - }, + folder: "root" + } } ); @@ -355,20 +348,20 @@ export const backfillSecretFolders = async () => { await SecretVersion.updateMany( { tags: { - $exists: false, - }, + $exists: false + } }, { $set: { - tags: [], - }, + tags: [] + } } ); let secretSnapshots = await SecretSnapshot.find({ environment: { - $exists: false, - }, + $exists: false + } }) .populate<{ secretVersions: ISecretVersion[] }>("secretVersions") .limit(50); @@ -377,8 +370,7 @@ export const backfillSecretFolders = async () => { for (const secSnapshot of secretSnapshots) { const groupSnapByEnv: Record> = {}; secSnapshot.secretVersions.forEach((secVer) => { - if (!groupSnapByEnv?.[secVer.environment]) - groupSnapByEnv[secVer.environment] = []; + if (!groupSnapByEnv?.[secVer.environment]) groupSnapByEnv[secVer.environment] = []; groupSnapByEnv[secVer.environment].push(secVer); }); @@ -390,7 +382,7 @@ export const backfillSecretFolders = async () => { ...secSnapshot.toObject({ virtuals: false }), _id: new Types.ObjectId(), environment: snapEnv, - secretVersions: secretIdsOfEnvGroup, + secretVersions: secretIdsOfEnvGroup }; }); @@ -400,8 +392,8 @@ export const backfillSecretFolders = async () => { secretSnapshots = await SecretSnapshot.find({ environment: { - $exists: false, - }, + $exists: false + } }) .populate<{ secretVersions: ISecretVersion[] }>("secretVersions") .limit(50); @@ -414,13 +406,13 @@ export const backfillServiceToken = async () => { await ServiceTokenData.updateMany( { secretPath: { - $exists: false, - }, + $exists: false + } }, { $set: { - secretPath: "/", - }, + secretPath: "/" + } } ); console.log("Migration: Service token migration v1 complete"); @@ -430,14 +422,36 @@ export const backfillIntegration = async () => { await Integration.updateMany( { secretPath: { - $exists: false, - }, + $exists: false + } }, { $set: { - secretPath: "/", - }, + secretPath: "/" + } } ); console.log("Migration: Integration migration v1 complete"); }; + +export const backfillServiceTokenMultiScope = async () => { + await ServiceTokenData.updateMany( + { + scopes: { + $exists: false + } + }, + [ + { + $set: { + scopes: [{ environment: "$environment", secretPath: "$secretPath" }] + } + }, + { + $unset: ["environment", "secretPath"] + } + ] + ); + + console.log("Migration: Service token migration v2 complete"); +}; diff --git a/backend/src/utils/setup/index.ts b/backend/src/utils/setup/index.ts index 16d9ee1ae..00f41fe67 100644 --- a/backend/src/utils/setup/index.ts +++ b/backend/src/utils/setup/index.ts @@ -14,17 +14,15 @@ import { backfillSecretFolders, backfillSecretVersions, backfillServiceToken, + backfillServiceTokenMultiScope } from "./backfillData"; -import { - reencryptBotPrivateKeys, - reencryptSecretBlindIndexDataSalts, -} from "./reencryptData"; +import { reencryptBotPrivateKeys, reencryptSecretBlindIndexDataSalts } from "./reencryptData"; import { getClientIdGoogle, getClientSecretGoogle, getMongoURL, getNodeEnv, - getSentryDSN, + getSentryDSN } from "../../config"; import { initializePassport } from "../auth"; @@ -79,6 +77,7 @@ export const setup = async () => { await backfillSecretFolders(); await backfillServiceToken(); await backfillIntegration(); + await backfillServiceTokenMultiScope(); // re-encrypt any data previously encrypted under server hex 128-bit ENCRYPTION_KEY // to base64 256-bit ROOT_ENCRYPTION_KEY @@ -90,7 +89,7 @@ export const setup = async () => { dsn: await getSentryDSN(), tracesSampleRate: 1.0, debug: (await getNodeEnv()) === "production" ? false : true, - environment: await getNodeEnv(), + environment: await getNodeEnv() }); await createTestUserForDevelopment(); diff --git a/backend/src/validation/serviceTokenData.ts b/backend/src/validation/serviceTokenData.ts index 0ade7f96e..580bcbdb9 100644 --- a/backend/src/validation/serviceTokenData.ts +++ b/backend/src/validation/serviceTokenData.ts @@ -1,22 +1,19 @@ import { Types } from "mongoose"; import { - ISecret, - IServiceAccount, - IServiceTokenData, - IUser, - ServiceAccount, - ServiceTokenData, - User, + ISecret, + IServiceAccount, + IServiceTokenData, + IUser, + ServiceAccount, + ServiceTokenData, + User } from "../models"; -import { - ServiceTokenDataNotFoundError, - UnauthorizedRequestError, -} from "../utils/errors"; +import { ServiceTokenDataNotFoundError, UnauthorizedRequestError } from "../utils/errors"; import { - AUTH_MODE_API_KEY, - AUTH_MODE_JWT, - AUTH_MODE_SERVICE_ACCOUNT, - AUTH_MODE_SERVICE_TOKEN, + AUTH_MODE_API_KEY, + AUTH_MODE_JWT, + AUTH_MODE_SERVICE_ACCOUNT, + AUTH_MODE_SERVICE_TOKEN } from "../variables"; import { validateUserClientForWorkspace } from "./user"; import { validateServiceAccountClientForWorkspace } from "./serviceAccount"; @@ -30,65 +27,71 @@ import { validateServiceAccountClientForWorkspace } from "./serviceAccount"; * @param {Array<'admin' | 'member'>} obj.acceptedRoles - accepted workspace roles */ export const validateClientForServiceTokenData = async ({ - authData, - serviceTokenDataId, - acceptedRoles, + authData, + serviceTokenDataId, + acceptedRoles }: { - authData: { - authMode: string; - authPayload: IUser | IServiceAccount | IServiceTokenData; - }; - serviceTokenDataId: Types.ObjectId; - acceptedRoles: Array<"admin" | "member">; + authData: { + authMode: string; + authPayload: IUser | IServiceAccount | IServiceTokenData; + }; + serviceTokenDataId: Types.ObjectId; + acceptedRoles: Array<"admin" | "member">; }) => { - const serviceTokenData = await ServiceTokenData - .findById(serviceTokenDataId) - .select("+encryptedKey +iv +tag") - .populate<{ user: IUser }>("user"); + const serviceTokenData = await ServiceTokenData.findById(serviceTokenDataId) + .select("+encryptedKey +iv +tag") + .populate<{ user: IUser }>("user"); - if (!serviceTokenData) throw ServiceTokenDataNotFoundError({ - message: "Failed to find service token data", + if (!serviceTokenData) + throw ServiceTokenDataNotFoundError({ + message: "Failed to find service token data" }); - if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { - await validateUserClientForWorkspace({ - user: authData.authPayload, - workspaceId: serviceTokenData.workspace, - acceptedRoles, - }); - - return serviceTokenData; - } + if (authData.authMode === AUTH_MODE_JWT && authData.authPayload instanceof User) { + await validateUserClientForWorkspace({ + user: authData.authPayload, + workspaceId: serviceTokenData.workspace, + acceptedRoles + }); - if (authData.authMode === AUTH_MODE_SERVICE_ACCOUNT && authData.authPayload instanceof ServiceAccount) { - await validateServiceAccountClientForWorkspace({ - serviceAccount: authData.authPayload, - workspaceId: serviceTokenData.workspace, - }); - - return serviceTokenData; - } + return serviceTokenData; + } - if (authData.authMode === AUTH_MODE_SERVICE_TOKEN && authData.authPayload instanceof ServiceTokenData) { - throw UnauthorizedRequestError({ - message: "Failed service token authorization for service token data", - }); - } + if ( + authData.authMode === AUTH_MODE_SERVICE_ACCOUNT && + authData.authPayload instanceof ServiceAccount + ) { + await validateServiceAccountClientForWorkspace({ + serviceAccount: authData.authPayload, + workspaceId: serviceTokenData.workspace + }); - if (authData.authMode === AUTH_MODE_API_KEY && authData.authPayload instanceof User) { - await validateUserClientForWorkspace({ - user: authData.authPayload, - workspaceId: serviceTokenData.workspace, - acceptedRoles, - }); - - return serviceTokenData; - } - + return serviceTokenData; + } + + if ( + authData.authMode === AUTH_MODE_SERVICE_TOKEN && + authData.authPayload instanceof ServiceTokenData + ) { throw UnauthorizedRequestError({ - message: "Failed client authorization for service token data", + message: "Failed service token authorization for service token data" }); -} + } + + if (authData.authMode === AUTH_MODE_API_KEY && authData.authPayload instanceof User) { + await validateUserClientForWorkspace({ + user: authData.authPayload, + workspaceId: serviceTokenData.workspace, + acceptedRoles + }); + + return serviceTokenData; + } + + throw UnauthorizedRequestError({ + message: "Failed client authorization for service token data" + }); +}; /** * Validate that service token (client) can access workspace @@ -101,42 +104,42 @@ export const validateClientForServiceTokenData = async ({ * @param {String[]} requiredPermissions - required permissions as part of the endpoint */ export const validateServiceTokenDataClientForWorkspace = async ({ - serviceTokenData, - workspaceId, - environment, - requiredPermissions, + serviceTokenData, + workspaceId, + environment, + requiredPermissions }: { - serviceTokenData: IServiceTokenData; - workspaceId: Types.ObjectId; - environment?: string; - requiredPermissions?: string[]; + serviceTokenData: IServiceTokenData; + workspaceId: Types.ObjectId; + environment?: string; + requiredPermissions?: string[]; }) => { - if (!serviceTokenData.workspace.equals(workspaceId)) { - // case: invalid workspaceId passed + if (!serviceTokenData.workspace.equals(workspaceId)) { + // case: invalid workspaceId passed + throw UnauthorizedRequestError({ + message: "Failed service token authorization for the given workspace" + }); + } + + if (environment) { + // case: environment is specified + + if (!serviceTokenData.scopes.find(({ environment: tkEnv }) => tkEnv === environment)) { + // case: invalid environment passed + throw UnauthorizedRequestError({ + message: "Failed service token authorization for the given workspace environment" + }); + } + + requiredPermissions?.forEach((permission) => { + if (!serviceTokenData.permissions.includes(permission)) { throw UnauthorizedRequestError({ - message: "Failed service token authorization for the given workspace", + message: `Failed service token authorization for the given workspace environment action: ${permission}` }); - } - - if (environment) { - // case: environment is specified - - if (serviceTokenData.environment !== environment) { - // case: invalid environment passed - throw UnauthorizedRequestError({ - message: "Failed service token authorization for the given workspace environment", - }); - } - - requiredPermissions?.forEach((permission) => { - if (!serviceTokenData.permissions.includes(permission)) { - throw UnauthorizedRequestError({ - message: `Failed service token authorization for the given workspace environment action: ${permission}`, - }); - } - }); - } -} + } + }); + } +}; /** * Validate that service token (client) can access secrets @@ -147,36 +150,35 @@ export const validateServiceTokenDataClientForWorkspace = async ({ * @param {string[]} requiredPermissions - required permissions as part of the endpoint */ export const validateServiceTokenDataClientForSecrets = async ({ - serviceTokenData, - secrets, - requiredPermissions, + serviceTokenData, + secrets, + requiredPermissions }: { - serviceTokenData: IServiceTokenData; - secrets: ISecret[]; - requiredPermissions?: string[]; + serviceTokenData: IServiceTokenData; + secrets: ISecret[]; + requiredPermissions?: string[]; }) => { + secrets.forEach((secret: ISecret) => { + if (!serviceTokenData.workspace.equals(secret.workspace)) { + // case: invalid workspaceId passed + throw UnauthorizedRequestError({ + message: "Failed service token authorization for the given workspace" + }); + } - secrets.forEach((secret: ISecret) => { - if (!serviceTokenData.workspace.equals(secret.workspace)) { - // case: invalid workspaceId passed - throw UnauthorizedRequestError({ - message: "Failed service token authorization for the given workspace", - }); - } - - if (serviceTokenData.environment !== secret.environment) { - // case: invalid environment passed - throw UnauthorizedRequestError({ - message: "Failed service token authorization for the given workspace environment", - }); - } - - requiredPermissions?.forEach((permission) => { - if (!serviceTokenData.permissions.includes(permission)) { - throw UnauthorizedRequestError({ - message: `Failed service token authorization for the given workspace environment action: ${permission}`, - }); - } + if (!serviceTokenData.scopes.find(({ environment: tkEnv }) => tkEnv === secret.environment)) { + // case: invalid environment passed + throw UnauthorizedRequestError({ + message: "Failed service token authorization for the given workspace environment" + }); + } + + requiredPermissions?.forEach((permission) => { + if (!serviceTokenData.permissions.includes(permission)) { + throw UnauthorizedRequestError({ + message: `Failed service token authorization for the given workspace environment action: ${permission}` }); + } }); -} \ No newline at end of file + }); +}; From 7fe4089bb0c2f22e9722dec5ab5479a9983d49d0 Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Wed, 5 Jul 2023 22:53:03 +0530 Subject: [PATCH 010/189] feat(secret-ref): implemented ui for service token changes --- frontend/src/hooks/api/serviceTokens/types.ts | 11 +- .../AddServiceTokenModal.tsx | 574 +++++++++--------- .../ServiceTokenSection.tsx | 56 +- .../ServiceTokenSection/ServiceTokenTable.tsx | 141 +++-- 4 files changed, 406 insertions(+), 376 deletions(-) diff --git a/frontend/src/hooks/api/serviceTokens/types.ts b/frontend/src/hooks/api/serviceTokens/types.ts index 0c68aea79..d6dc322cc 100644 --- a/frontend/src/hooks/api/serviceTokens/types.ts +++ b/frontend/src/hooks/api/serviceTokens/types.ts @@ -1,9 +1,13 @@ +export type ServiceTokenScope = { + environment: string; + secretPath: string; +}; + export type ServiceToken = { _id: string; name: string; workspace: string; - environment: string; - secretPath: string; + scopes: ServiceTokenScope[]; user: string; expiresAt: string; createdAt: string; @@ -14,9 +18,8 @@ export type ServiceToken = { export type CreateServiceTokenDTO = { name: string; workspaceId: string; - environment: string; + scopes: ServiceTokenScope[]; expiresIn: number; - secretPath: string; encryptedKey: string; iv: string; tag: string; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/AddServiceTokenModal.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/AddServiceTokenModal.tsx index 338738ea2..82fbf9edc 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/AddServiceTokenModal.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/AddServiceTokenModal.tsx @@ -1,9 +1,9 @@ import crypto from "crypto"; import { useEffect, useState } from "react"; -import { Controller, useForm } from "react-hook-form"; +import { Controller, useFieldArray, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; -import { faCheck, faCopy } from "@fortawesome/free-solid-svg-icons"; +import { faCheck, faCopy, faPlus, faTrashCan } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { yupResolver } from "@hookform/resolvers/yup"; import * as yup from "yup"; @@ -27,10 +27,7 @@ import { } from "@app/components/v2"; import { useWorkspace } from "@app/context"; import { useToggle } from "@app/hooks"; -import { - useCreateServiceToken, - useGetUserWsKey -} from "@app/hooks/api"; +import { useCreateServiceToken, useGetUserWsKey } from "@app/hooks/api"; import { UsePopUpState } from "@app/hooks/usePopUp"; const apiTokenExpiry = [ @@ -44,8 +41,16 @@ const apiTokenExpiry = [ const schema = yup.object({ name: yup.string().max(100).required().label("Service Token Name"), - environment: yup.string().max(50).required().label("Environment"), - secretPath: yup.string().required().default("/").label("Secret Path"), + scopes: yup + .array( + yup.object({ + environment: yup.string().max(50).required().label("Environment"), + secretPath: yup.string().required().default("/").label("Secret Path") + }) + ) + .min(1) + .required() + .label("Scope"), expiresIn: yup.string().optional().label("Service Token Expiration"), permissions: yup .object() @@ -60,284 +65,301 @@ const schema = yup.object({ export type FormData = yup.InferType; type Props = { - popUp: UsePopUpState<["createAPIToken"]>; - handlePopUpToggle: (popUpName: keyof UsePopUpState<["createAPIToken"]>, state?: boolean) => void; + popUp: UsePopUpState<["createAPIToken"]>; + handlePopUpToggle: (popUpName: keyof UsePopUpState<["createAPIToken"]>, state?: boolean) => void; }; -export const AddServiceTokenModal = ({ - popUp, - handlePopUpToggle -}: Props) => { - const { t } = useTranslation(); - const { createNotification } = useNotificationContext(); - const { currentWorkspace } = useWorkspace(); - const { - control, - reset, - handleSubmit, - formState: { isSubmitting } - } = useForm({ - resolver: yupResolver(schema) - }); +export const AddServiceTokenModal = ({ popUp, handlePopUpToggle }: Props) => { + const { t } = useTranslation(); + const { createNotification } = useNotificationContext(); + const { currentWorkspace } = useWorkspace(); + const { + control, + reset, + handleSubmit, + formState: { isSubmitting } + } = useForm({ + resolver: yupResolver(schema), + defaultValues: { + scopes: [{ secretPath: "/", environment: currentWorkspace?.environments?.[0]?.slug }] + } + }); - const [newToken, setToken] = useState(""); - const [isTokenCopied, setIsTokenCopied] = useToggle(false); + const { fields: tokenScopes, append, remove } = useFieldArray({ control, name: "scopes" }); - const { data: latestFileKey } = useGetUserWsKey(currentWorkspace?._id ?? ""); - const createServiceToken = useCreateServiceToken(); - const hasServiceToken = Boolean(newToken); + const [newToken, setToken] = useState(""); + const [isTokenCopied, setIsTokenCopied] = useToggle(false); - useEffect(() => { - let timer: NodeJS.Timeout; - if (isTokenCopied) { - timer = setTimeout(() => setIsTokenCopied.off(), 2000); - } + const { data: latestFileKey } = useGetUserWsKey(currentWorkspace?._id ?? ""); + const createServiceToken = useCreateServiceToken(); + const hasServiceToken = Boolean(newToken); - return () => clearTimeout(timer); - }, [isTokenCopied]); + useEffect(() => { + let timer: NodeJS.Timeout; + if (isTokenCopied) { + timer = setTimeout(() => setIsTokenCopied.off(), 2000); + } - const copyTokenToClipboard = () => { - navigator.clipboard.writeText(newToken); - setIsTokenCopied.on(); - }; + return () => clearTimeout(timer); + }, [isTokenCopied]); - const onFormSubmit = async ({ + const copyTokenToClipboard = () => { + navigator.clipboard.writeText(newToken); + setIsTokenCopied.on(); + }; + + const onFormSubmit = async ({ name, scopes, expiresIn, permissions }: FormData) => { + try { + if (!currentWorkspace?._id) return; + if (!latestFileKey) return; + + const key = decryptAssymmetric({ + ciphertext: latestFileKey.encryptedKey, + nonce: latestFileKey.nonce, + publicKey: latestFileKey.sender.publicKey, + privateKey: localStorage.getItem("PRIVATE_KEY") as string + }); + + const randomBytes = crypto.randomBytes(16).toString("hex"); + + const { ciphertext, iv, tag } = encryptSymmetric({ + plaintext: key, + key: randomBytes + }); + + const { serviceToken } = await createServiceToken.mutateAsync({ + encryptedKey: ciphertext, + iv, + tag, + scopes, + expiresIn: Number(expiresIn), name, - environment, - secretPath, - expiresIn, - permissions - }: FormData) => { - try { - if (!currentWorkspace?._id) return; - if (!latestFileKey) return; + workspaceId: currentWorkspace._id, + randomBytes, + permissions: Object.entries(permissions) + .filter(([, permissionsValue]) => permissionsValue) + .map(([permissionsKey]) => permissionsKey) + }); - const key = decryptAssymmetric({ - ciphertext: latestFileKey.encryptedKey, - nonce: latestFileKey.nonce, - publicKey: latestFileKey.sender.publicKey, - privateKey: localStorage.getItem("PRIVATE_KEY") as string - }); + setToken(serviceToken); + createNotification({ + text: "Successfully created a service token", + type: "success" + }); + } catch (err) { + console.error(err); + createNotification({ + text: "Failed to create a service token", + type: "error" + }); + } + }; - const randomBytes = crypto.randomBytes(16).toString("hex"); - - const { ciphertext, iv, tag } = encryptSymmetric({ - plaintext: key, - key: randomBytes - }); - - const { serviceToken } = await createServiceToken.mutateAsync({ - encryptedKey: ciphertext, - iv, - tag, - environment, - secretPath, - expiresIn: Number(expiresIn), - name, - workspaceId: currentWorkspace._id, - randomBytes, - permissions: Object.entries(permissions) - .filter(([, permissionsValue]) => permissionsValue) - .map(([permissionsKey]) => permissionsKey) - }); - - setToken(serviceToken); - - createNotification({ - text: "Successfully created a service token", - type: "success" - }); - - } catch (err) { - console.error(err); - createNotification({ - text: "Failed to create a service token", - type: "error" - }); + return ( + { + handlePopUpToggle("createAPIToken", open); + reset(); + setToken(""); + }} + > + { - handlePopUpToggle("createAPIToken", open); - reset(); - setToken(""); - }} - > - - {!hasServiceToken ? ( -
    - ( - - - - )} - /> - ( - - - - )} - /> - ( - - - - )} - /> - ( - - - - )} - /> - { - const options = [ - { - label: "Read (default)", - value: "read" - }, - { - label: "Write (optional)", - value: "write" - } - ]; - - return ( - - <> - {options.map(({ label, value: optionValue }) => { - return ( - { - onChange({ - ...value, - [optionValue]: state - }); - }} - > - {label} - - ); - })} - - - ); - }} - /> -
    - - - - -
    - - ) : ( -
    -

    {newToken}

    - - - - {t("common.click-to-copy")} - - -
    + subTitle={t("section.token.add-dialog.description") as string} + > + {!hasServiceToken ? ( +
    + ( + + + )} - - - ); -} \ No newline at end of file + /> + {tokenScopes.map(({ id }, index) => ( +
    + ( + + + + )} + /> + ( + + + + )} + /> + remove(index)} + > + + +
    + ))} +
    + +
    + ( + + + + )} + /> + { + const options = [ + { + label: "Read (default)", + value: "read" + }, + { + label: "Write (optional)", + value: "write" + } + ]; + + return ( + + <> + {options.map(({ label, value: optionValue }) => { + return ( + { + onChange({ + ...value, + [optionValue]: state + }); + }} + > + {label} + + ); + })} + + + ); + }} + /> +
    + + + + +
    + + ) : ( +
    +

    {newToken}

    + + + + {t("common.click-to-copy")} + + +
    + )} +
    +
    + ); +}; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/ServiceTokenSection.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/ServiceTokenSection.tsx index fd31870f1..376328673 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/ServiceTokenSection.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/ServiceTokenSection.tsx @@ -3,14 +3,9 @@ import { faPlus } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; -import { - Button, - DeleteActionModal, -} from "@app/components/v2"; +import { Button, DeleteActionModal } from "@app/components/v2"; import { usePopUp } from "@app/hooks"; -import { - useDeleteServiceToken -} from "@app/hooks/api"; +import { useDeleteServiceToken } from "@app/hooks/api"; import { AddServiceTokenModal } from "./AddServiceTokenModal"; import { ServiceTokenTable } from "./ServiceTokenTable"; @@ -29,7 +24,9 @@ export const ServiceTokenSection = () => { const onDeleteApproved = async () => { try { - deleteServiceToken.mutateAsync((popUp?.deleteAPITokenConfirmation?.data as DeleteModalData)?.id); + deleteServiceToken.mutateAsync( + (popUp?.deleteAPITokenConfirmation?.data as DeleteModalData)?.id + ); createNotification({ text: "Successfully deleted service token", type: "success" @@ -46,32 +43,29 @@ export const ServiceTokenSection = () => { }; return ( -
    -
    -

    {t("section.token.service-tokens")}

    - +
    +
    +

    + {t("section.token.service-tokens")} +

    +
    -

    {t("section.token.service-tokens-description")}

    - - +

    {t("section.token.service-tokens-description")}

    + + handlePopUpToggle("deleteAPITokenConfirmation", isOpen)} deleteKey={(popUp?.deleteAPITokenConfirmation?.data as DeleteModalData)?.name} onClose={() => handlePopUpClose("deleteAPITokenConfirmation")} diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/ServiceTokenTable.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/ServiceTokenTable.tsx index 69dab23df..ce39abde2 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/ServiceTokenTable.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/ServiceTokenTable.tsx @@ -1,4 +1,4 @@ -import { faKey, faTrashCan } from "@fortawesome/free-solid-svg-icons"; +import { faFolder, faKey, faTrashCan } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { @@ -18,71 +18,82 @@ import { useGetUserWsServiceTokens } from "@app/hooks/api"; import { UsePopUpState } from "@app/hooks/usePopUp"; type Props = { - handlePopUpOpen: ( - popUpName: keyof UsePopUpState<["deleteAPITokenConfirmation"]>, - { - name, - id - }: { - name: string; - id: string; - } - ) => void; + handlePopUpOpen: ( + popUpName: keyof UsePopUpState<["deleteAPITokenConfirmation"]>, + { + name, + id + }: { + name: string; + id: string; + } + ) => void; }; -export const ServiceTokenTable = ({ - handlePopUpOpen -}: Props) => { - const { currentWorkspace } = useWorkspace(); - const { data, isLoading } = useGetUserWsServiceTokens({ - workspaceID: currentWorkspace?._id || "" - }); +export const ServiceTokenTable = ({ handlePopUpOpen }: Props) => { + const { currentWorkspace } = useWorkspace(); + const { data, isLoading } = useGetUserWsServiceTokens({ + workspaceID: currentWorkspace?._id || "" + }); - return ( - - - - - - - - - - - - {isLoading && } - {!isLoading && data && data.map((row) => ( - - - - - - - + return ( + +
    Token NameEnvironmentSecret PathValid Until -
    {row.name}{row.environment}{row.secretPath}{row.expiresAt && new Date(row.expiresAt).toUTCString()} - - handlePopUpOpen("deleteAPITokenConfirmation", { - name: row.name, - id: row._id - }) - } - colorSchema="danger" - ariaLabel="delete" - > - - -
    + + + + + + + + + {isLoading && } + {!isLoading && + data && + data.map((row) => ( + + + - - - )} - -
    Token NameEnvrionment - Secret PathValid Until +
    {row.name} +
    + {row?.scopes.map(({ secretPath, environment }) => ( +
    +
    {environment}
    + + {secretPath} +
    ))} - {!isLoading && data && data?.length === 0 && ( -
    - -
    -
    - ); -} \ No newline at end of file +
    + + {row.expiresAt && new Date(row.expiresAt).toUTCString()} + + + handlePopUpOpen("deleteAPITokenConfirmation", { + name: row.name, + id: row._id + }) + } + colorSchema="danger" + ariaLabel="delete" + > + + + + + ))} + {!isLoading && data && data?.length === 0 && ( + + + + + + )} + + + + ); +}; From 7ec7d05fb042fc6575861796d39d9db437b9a2ae Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Wed, 5 Jul 2023 22:58:36 +0530 Subject: [PATCH 011/189] feat(secret-ref): implemented cli changes for secret reference --- cli/packages/cmd/export.go | 2 +- cli/packages/cmd/run.go | 2 +- cli/packages/cmd/secrets.go | 2 +- cli/packages/util/log.go | 2 +- cli/packages/util/secrets.go | 105 ++++++++++++++++++++++++++++++----- 5 files changed, 96 insertions(+), 17 deletions(-) diff --git a/cli/packages/cmd/export.go b/cli/packages/cmd/export.go index 453d1b75c..c41750134 100644 --- a/cli/packages/cmd/export.go +++ b/cli/packages/cmd/export.go @@ -83,7 +83,7 @@ var exportCmd = &cobra.Command{ var output string if shouldExpandSecrets { - substitutions := util.SubstituteSecrets(secrets) + substitutions := util.ExpandSecrets(secrets, infisicalToken) output, err = formatEnvs(substitutions, format) if err != nil { util.HandleError(err) diff --git a/cli/packages/cmd/run.go b/cli/packages/cmd/run.go index 8b82faa65..2303cbe2e 100644 --- a/cli/packages/cmd/run.go +++ b/cli/packages/cmd/run.go @@ -100,7 +100,7 @@ var runCmd = &cobra.Command{ } if shouldExpandSecrets { - secrets = util.SubstituteSecrets(secrets) + secrets = util.ExpandSecrets(secrets, infisicalToken) } secretsByKey := getSecretsByKeys(secrets) diff --git a/cli/packages/cmd/secrets.go b/cli/packages/cmd/secrets.go index 0d6181a56..688dd55bf 100644 --- a/cli/packages/cmd/secrets.go +++ b/cli/packages/cmd/secrets.go @@ -65,7 +65,7 @@ var secretsCmd = &cobra.Command{ } if shouldExpandSecrets { - secrets = util.SubstituteSecrets(secrets) + secrets = util.ExpandSecrets(secrets, infisicalToken) } visualize.PrintAllSecretDetails(secrets) diff --git a/cli/packages/util/log.go b/cli/packages/util/log.go index d2bcbe6b0..a9bf75ec1 100644 --- a/cli/packages/util/log.go +++ b/cli/packages/util/log.go @@ -45,5 +45,5 @@ func PrintErrorMessageAndExit(messages ...string) { } func printError(e error) { - color.New(color.FgRed).Fprintf(os.Stderr, "Hmm, we ran into an error: %v", e) + color.New(color.FgRed).Fprintf(os.Stderr, "Hmm, we ran into an error: %v\n", e) } diff --git a/cli/packages/util/secrets.go b/cli/packages/util/secrets.go index 3f742372f..8a7117a9a 100644 --- a/cli/packages/util/secrets.go +++ b/cli/packages/util/secrets.go @@ -6,6 +6,7 @@ import ( "errors" "fmt" "os" + "path" "regexp" "strings" @@ -279,22 +280,100 @@ func getExpandedEnvVariable(secrets []models.SingleEnvironmentVariable, variable return "${" + variableWeAreLookingFor + "}" } -func SubstituteSecrets(secrets []models.SingleEnvironmentVariable) []models.SingleEnvironmentVariable { - hashMapOfCompleteVariables := make(map[string]string) - hashMapOfSelfRefs := make(map[string]string) - expandedSecrets := []models.SingleEnvironmentVariable{} - - for _, secret := range secrets { - expandedVariable := getExpandedEnvVariable(secrets, secret.Key, hashMapOfCompleteVariables, hashMapOfSelfRefs) - expandedSecrets = append(expandedSecrets, models.SingleEnvironmentVariable{ - Key: secret.Key, - Value: expandedVariable, - Type: secret.Type, - }) +var secRefRegex = regexp.MustCompile(`\${([^\}]*)}`) +func recursivelyExpandSecret(expandedSecs map[string]string, interpolatedSecs map[string]string, crossSecRefFetch func(env string, path []string, key string) string, key string) string { + if v, ok := expandedSecs[key]; ok { + return v } - return expandedSecrets + interpolatedVal := interpolatedSecs[key] + refs := secRefRegex.FindAllStringSubmatch(interpolatedVal, -1) + for _, val := range refs { + // key: "${something}" val: [${something},something] + interpolatedExp, interpolationKey := val[0], val[1] + ref := strings.Split(interpolationKey, ".") + + // ${KEY1} => [key1] + if len(ref) == 1 { + val := recursivelyExpandSecret(expandedSecs, interpolatedSecs, crossSecRefFetch, interpolationKey) + interpolatedVal = strings.ReplaceAll(interpolatedVal, interpolatedExp, val) + continue + } + + // cross board reference ${env.folder.key1} => [env folder key1] + if len(ref) > 1 { + secEnv, tmpSecPath, secKey := ref[0], ref[1:len(ref)-1], ref[len(ref)-1] + interpolatedSecs[interpolationKey] = crossSecRefFetch(secEnv, tmpSecPath, secKey) // get the reference value + val := recursivelyExpandSecret(expandedSecs, interpolatedSecs, crossSecRefFetch, interpolationKey) + interpolatedVal = strings.ReplaceAll(interpolatedVal, interpolatedExp, val) + } + + } + expandedSecs[key] = interpolatedVal + return interpolatedVal +} + +func getSecretsByKeys(secrets []models.SingleEnvironmentVariable) map[string]models.SingleEnvironmentVariable { + secretMapByName := make(map[string]models.SingleEnvironmentVariable, len(secrets)) + + for _, secret := range secrets { + secretMapByName[secret.Key] = secret + } + + return secretMapByName +} + +func ExpandSecrets(secrets []models.SingleEnvironmentVariable, infisicalToken string) []models.SingleEnvironmentVariable { + expandedSecs := make(map[string]string) + interpolatedSecs := make(map[string]string) + // map[env.secret-path][keyname]Secret + crossEnvRefSecs := make(map[string]map[string]models.SingleEnvironmentVariable) // a cache to hold all cross board reference secrets + + for _, sec := range secrets { + // get all references in a secret + refs := secRefRegex.FindAllStringSubmatch(sec.Value, -1) + // nil means its a secret without reference + if refs == nil { + expandedSecs[sec.Key] = sec.Value // atomic secrets without any interpolation + } else { + interpolatedSecs[sec.Key] = sec.Value + } + } + + for i, sec := range secrets { + // already present pick that up + if expandedVal, ok := expandedSecs[sec.Key]; ok { + secrets[i].Value = expandedVal + continue + } + + expandedVal := recursivelyExpandSecret(expandedSecs, interpolatedSecs, func(env string, secPaths []string, secKey string) string { + secPath := path.Join(secPaths...) + if secPath == "" { + secPath = "/" + } + secPathDot := strings.Join(secPaths, ".") + uniqKey := fmt.Sprintf("%s.%s", env, secPathDot) + + if crossRefSec, ok := crossEnvRefSecs[uniqKey]; !ok { + // if not in cross reference cache, fetch it from server + refSecs, err := GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: env, InfisicalToken: infisicalToken, SecretsPath: secPath}) + if err != nil { + HandleError(err, fmt.Sprintf("Could not fetch secrets in environment: %s secret-path: %s", env, secPath), "If you are using a service token to fetch secrets, please ensure it is valid") + } + refSecsByKey := getSecretsByKeys(refSecs) + // save it to avoid calling api again for same environment and folder path + crossEnvRefSecs[uniqKey] = refSecsByKey + return refSecsByKey[secKey].Value + } else { + return crossRefSec[secKey].Value + } + }, sec.Key) + + secrets[i].Value = expandedVal + } + return secrets } func OverrideSecrets(secrets []models.SingleEnvironmentVariable, secretType string) []models.SingleEnvironmentVariable { From 13eaa4e9a1a01976fb05fec82ca159b0a3e07560 Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Wed, 5 Jul 2023 22:59:10 +0530 Subject: [PATCH 012/189] feat(secret-ref): updated doc --- docs/documentation/platform/folder.mdx | 2 ++ .../platform/secret-reference.mdx | 26 ++++++++++++++++++ docs/images/project-folder-token.png | Bin 316225 -> 71817 bytes docs/mint.json | 1 + 4 files changed, 29 insertions(+) create mode 100644 docs/documentation/platform/secret-reference.mdx diff --git a/docs/documentation/platform/folder.mdx b/docs/documentation/platform/folder.mdx index 716cb4e46..e285967cd 100644 --- a/docs/documentation/platform/folder.mdx +++ b/docs/documentation/platform/folder.mdx @@ -37,6 +37,8 @@ For more information on integrations, [refer infisical integration](/integration You can scope the secrets that can be read and written using an Infisical token by providing the secret path option when creating the token. +You can provide the folder path as glob if you want to have access to multiple folders and the tokens do support multi-environment. + ![folder scoped service token](../../images/project-folder-token.png) For more information, [refer infisical token section.](./token) diff --git a/docs/documentation/platform/secret-reference.mdx b/docs/documentation/platform/secret-reference.mdx new file mode 100644 index 000000000..663f4ca78 --- /dev/null +++ b/docs/documentation/platform/secret-reference.mdx @@ -0,0 +1,26 @@ +--- +title: "Reference Secrets" +description: "How to use reference secrets in Infisical" +--- + +You can use the interpolation syntax to reference a secret in the same environment, another folder, or another environment +The interpolation syntax is a way of referencing a secret by using a special placeholder. The placeholder is the name of the secret, followed by the environment or folder name, separated by a colon. + +For example, to reference a secret named mysecret in the same environment, you would use the placeholder ${mysecret}. + +While for another environment like `test` would be ${test.mysecret} + +Some more examples of referencing are + +| Syntax | Environment | Folder | Secret Key | +| --------------------- | ----------- | ------------ | ---------- | +| ${KEY1} | same env | ssame folder | KEY1 | +| ${dev.KEY2} | dev | / | KEY2 | +| ${test.frontend.KEY2} | test | /frontend | KEY2 | + +# Permission system for reference + +When you use the infisical CLI to log in, the permission system will work the same way as your user permissions. +This means that if you have permission to access other environments, your references to those environments will be resolved. + +When using the Infisical CLI with a service token, the service token must have permissions to the referenced environment and folder path. diff --git a/docs/images/project-folder-token.png b/docs/images/project-folder-token.png index 4fda56d275b24e30b2de719aa8dae9f11ca886b9..2402acdf21853625dcbaa8e431f9ce21153ebc6d 100644 GIT binary patch literal 71817 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 F{~xU-5DowU literal 316225 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

    pFcy2gd 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

    M| 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 diff --git a/docs/mint.json b/docs/mint.json index ba66b271f..25db15c63 100644 --- a/docs/mint.json +++ b/docs/mint.json @@ -110,6 +110,7 @@ "documentation/platform/organization", "documentation/platform/project", "documentation/platform/folder", + "documentation/platform/secret-reference", "documentation/platform/pit-recovery", "documentation/platform/secret-versioning", "documentation/platform/audit-logs", From 27a110a93a32395b259ca115e10f7dc41d6211b4 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Wed, 5 Jul 2023 15:22:29 -0400 Subject: [PATCH 013/189] build secret scanning --- .github/workflows/build-staging-img.yml | 46 +++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/.github/workflows/build-staging-img.yml b/.github/workflows/build-staging-img.yml index 0e50d0906..872671577 100644 --- a/.github/workflows/build-staging-img.yml +++ b/.github/workflows/build-staging-img.yml @@ -105,6 +105,52 @@ jobs: platforms: linux/amd64,linux/arm64 build-args: | POSTHOG_API_KEY=${{ secrets.PUBLIC_POSTHOG_API_KEY }} + + secret-scanning-git-app: + name: Build secret scanning git app + runs-on: ubuntu-latest + steps: + - name: ☁️ Checkout source + uses: actions/checkout@v3 + - name: Save commit hashes for tag + id: commit + uses: pr-mpt/actions-commit-hash@v2 + - name: 🔧 Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + - name: 🐋 Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Set up Depot CLI + uses: depot/setup-action@v1 + # - name: 📦 Build frontend and export to Docker + # uses: depot/build-push-action@v1 + # with: + # load: true + # token: ${{ secrets.DEPOT_PROJECT_TOKEN }} + # project: 64mmf0n610 + # context: frontend + # tags: infisical/staging_deployment_secret-scanning-git-app:test + # - name: ⏻ Spawn frontend container + # run: | + # docker run -d --rm --name secret-scanning-git-app infisical/staging_deployment_frontend:test + # - name: ⏻ Shut down frontend container + # run: | + # docker stop secret-scanning-git-app + - name: 🏗️ Build secret scanning git app and push + uses: depot/build-push-action@v1 + with: + project: 64mmf0n610 + push: true + token: ${{ secrets.DEPOT_PROJECT_TOKEN }} + context: secret-engine + tags: | + infisical/staging_deployment_secret-scanning-git-app:${{ steps.commit.outputs.short }} + infisical/staging_deployment_secret-scanning-git-app:latest + platforms: linux/amd64,linux/arm64 + build-args: | + POSTHOG_API_KEY=${{ secrets.PUBLIC_POSTHOG_API_KEY }} gamma-deployment: name: Deploy to gamma runs-on: ubuntu-latest From f389aa07ebfa2e2b4c564149675d39e9b7e25f9f Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Wed, 5 Jul 2023 15:39:44 -0400 Subject: [PATCH 014/189] update docker file for prod build --- secret-engine/Dockerfile | 9 ++++++++- secret-engine/package.json | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/secret-engine/Dockerfile b/secret-engine/Dockerfile index c1cd23e10..32189a70b 100644 --- a/secret-engine/Dockerfile +++ b/secret-engine/Dockerfile @@ -5,4 +5,11 @@ RUN npm ci --production RUN npm cache clean --force ENV NODE_ENV="production" COPY . . -CMD [ "npm", "start" ] + +RUN apt-get update && apt-get install -y bash curl && curl -1sLf \ + 'https://dl.cloudsmith.io/public/infisical/infisical-cli/setup.deb.sh' | bash \ + && apt-get update && apt-get install -y infisical=0.8.1 + +RUN npm run build + +CMD [ "npm", "run", "start:prod" ] diff --git a/secret-engine/package.json b/secret-engine/package.json index 0a8f744e6..c9ed32570 100644 --- a/secret-engine/package.json +++ b/secret-engine/package.json @@ -14,7 +14,8 @@ "scripts": { "build": "tsc && cp -R ./src/templates ./lib", "dev": "npm run build && probot run ./lib/index.js", - "start": "nodemon -e ts,yml --watch './**/*.ts' --exec npm run dev", + "start:dev": "nodemon -e ts,yml --watch './**/*.ts' --exec npm run dev", + "start:prod": "probot run ./lib/index.js", "test": "jest" }, "dependencies": { From 0772510e47ef7132047d7d9c28d22319016392e6 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Wed, 5 Jul 2023 15:52:43 -0400 Subject: [PATCH 015/189] update gha for git app gamma deploy --- .github/workflows/build-staging-img.yml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/.github/workflows/build-staging-img.yml b/.github/workflows/build-staging-img.yml index 872671577..f61badbb0 100644 --- a/.github/workflows/build-staging-img.yml +++ b/.github/workflows/build-staging-img.yml @@ -124,20 +124,6 @@ jobs: password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Depot CLI uses: depot/setup-action@v1 - # - name: 📦 Build frontend and export to Docker - # uses: depot/build-push-action@v1 - # with: - # load: true - # token: ${{ secrets.DEPOT_PROJECT_TOKEN }} - # project: 64mmf0n610 - # context: frontend - # tags: infisical/staging_deployment_secret-scanning-git-app:test - # - name: ⏻ Spawn frontend container - # run: | - # docker run -d --rm --name secret-scanning-git-app infisical/staging_deployment_frontend:test - # - name: ⏻ Shut down frontend container - # run: | - # docker stop secret-scanning-git-app - name: 🏗️ Build secret scanning git app and push uses: depot/build-push-action@v1 with: @@ -149,8 +135,6 @@ jobs: infisical/staging_deployment_secret-scanning-git-app:${{ steps.commit.outputs.short }} infisical/staging_deployment_secret-scanning-git-app:latest platforms: linux/amd64,linux/arm64 - build-args: | - POSTHOG_API_KEY=${{ secrets.PUBLIC_POSTHOG_API_KEY }} gamma-deployment: name: Deploy to gamma runs-on: ubuntu-latest From 3cbc9c1b5c3b5075b2c7388014bcfd1cfaf33728 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Wed, 5 Jul 2023 17:54:29 -0400 Subject: [PATCH 016/189] update helm chart to include git app --- docker-compose.yml | 14 ++++ helm-charts/infisical/templates/_helpers.tpl | 28 ++++++++ helm-charts/infisical/templates/ingress.yaml | 7 ++ .../secret-scanning-git-app-deployment.yaml | 67 +++++++++++++++++++ helm-charts/infisical/values.yaml | 52 ++++++++++++++ nginx/default.conf | 14 ++++ secret-engine/Dockerfile.dev | 2 +- secret-engine/src/index.ts | 29 +++++--- 8 files changed, 204 insertions(+), 9 deletions(-) create mode 100644 helm-charts/infisical/templates/secret-scanning-git-app-deployment.yaml diff --git a/docker-compose.yml b/docker-compose.yml index 16f0bd128..bc1a24dd8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,6 +41,20 @@ services: networks: - infisical + secret-scanning-git-app: + container_name: infisical-secret-scanning-git-app + restart: unless-stopped + depends_on: + - backend + - frontend + - mongo + ports: + - "3000:3001" + image: infisical/staging_deployment_secret-scanning-git-app + env_file: .env + networks: + - infisical + mongo: container_name: infisical-mongo image: mongo diff --git a/helm-charts/infisical/templates/_helpers.tpl b/helm-charts/infisical/templates/_helpers.tpl index 500edea33..ac07d327c 100644 --- a/helm-charts/infisical/templates/_helpers.tpl +++ b/helm-charts/infisical/templates/_helpers.tpl @@ -51,6 +51,16 @@ component: {{ .Values.frontend.name | quote }} {{ include "infisical.common.matchLabels" . }} {{- end -}} +{{- define "infisical.secretScanningGitApp.labels" -}} +{{ include "infisical.secretScanningGitApp.matchLabels" . }} +{{ include "infisical.common.metaLabels" . }} +{{- end -}} + +{{- define "infisical.secretScanningGitApp.matchLabels" -}} +component: {{ .Values.secretScanningGitApp.name | quote }} +{{ include "infisical.common.matchLabels" . }} +{{- end -}} + {{- define "infisical.mongodb.labels" -}} {{ include "infisical.mongodb.matchLabels" . }} {{ include "infisical.common.metaLabels" . }} @@ -112,6 +122,24 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this {{- end -}} {{- end -}} + +{{/* +Create a fully qualified secretScanningGitApp name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +*/}} +{{- define "infisical.secretScanningGitApp.fullname" -}} +{{- if .Values.secretScanningGitApp.fullnameOverride -}} +{{- .Values.secretScanningGitApp.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- printf "%s-%s" .Release.Name .Values.secretScanningGitApp.name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s-%s" .Release.Name $name .Values.secretScanningGitApp.name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + {{/* Create the mongodb connection string. */}} diff --git a/helm-charts/infisical/templates/ingress.yaml b/helm-charts/infisical/templates/ingress.yaml index a675fa2ff..c27703956 100644 --- a/helm-charts/infisical/templates/ingress.yaml +++ b/helm-charts/infisical/templates/ingress.yaml @@ -44,6 +44,13 @@ spec: name: {{ include "infisical.backend.fullname" . }} port: number: 4000 + - path: {{ $ingress.secretScanningGitApp.path }} + pathType: {{ $ingress.secretScanningGitApp.pathType }} + backend: + service: + name: {{ include "infisical.secretScanningGitApp.fullname" . }} + port: + number: 3001 {{- if $ingress.hostName }} host: {{ $ingress.hostName }} {{- end }} diff --git a/helm-charts/infisical/templates/secret-scanning-git-app-deployment.yaml b/helm-charts/infisical/templates/secret-scanning-git-app-deployment.yaml new file mode 100644 index 000000000..cc426049f --- /dev/null +++ b/helm-charts/infisical/templates/secret-scanning-git-app-deployment.yaml @@ -0,0 +1,67 @@ +{{- $secretScanningGitApp := .Values.secretScanningGitApp }} +{{- $backend := .Values.backend }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "infisical.secretScanningGitApp.fullname" . }} + annotations: + updatedAt: {{ now | date "2006-01-01 MST 15:04:05" | quote }} + {{- with $secretScanningGitApp.deploymentAnnotations }} + {{- toYaml . | nindent 4 }} + {{- end }} + labels: + {{- include "infisical.secretScanningGitApp.labels" . | nindent 4 }} +spec: + replicas: {{ $secretScanningGitApp.replicaCount }} + selector: + matchLabels: + {{- include "infisical.secretScanningGitApp.matchLabels" . | nindent 6 }} + template: + metadata: + labels: + {{- include "infisical.secretScanningGitApp.matchLabels" . | nindent 8 }} + annotations: + updatedAt: {{ now | date "2006-01-01 MST 15:04:05" | quote }} + {{- with $secretScanningGitApp.podAnnotations }} + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + containers: + - name: {{ template "infisical.name" . }}-{{ $secretScanningGitApp.name }} + image: "{{ $secretScanningGitApp.image.repository }}:{{ $secretScanningGitApp.image.tag | default "latest" }}" + imagePullPolicy: {{ $secretScanningGitApp.image.pullPolicy }} + readinessProbe: + httpGet: + path: / + port: 3000 + initialDelaySeconds: 10 + periodSeconds: 10 + ports: + - containerPort: 3000 + envFrom: + - secretRef: + name: {{ $backend.kubeSecretRef | default (include "infisical.backend.fullname" .) }} + +--- + +apiVersion: v1 +kind: Service +metadata: + name: {{ include "infisical.secretScanningGitApp.fullname" . }} + labels: + {{- include "infisical.secretScanningGitApp.labels" . | nindent 4 }} + {{- with $secretScanningGitApp.service.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + type: {{ $secretScanningGitApp.service.type }} + selector: + {{- include "infisical.secretScanningGitApp.matchLabels" . | nindent 8 }} + ports: + - protocol: TCP + port: 3001 + targetPort: 3000 # container port + {{- if eq $secretScanningGitApp.service.type "NodePort" }} + nodePort: {{ $secretScanningGitApp.service.nodePort }} + {{- end }} diff --git a/helm-charts/infisical/values.yaml b/helm-charts/infisical/values.yaml index a65f59223..ac9630389 100644 --- a/helm-charts/infisical/values.yaml +++ b/helm-charts/infisical/values.yaml @@ -169,6 +169,53 @@ backendEnvironmentVariables: ## MONGO_URL: "" +secretScanningGitApp: + ## @param backend.enabled Enable git scanning app + ## + enabled: true + ## @param backend.name Backend name + ## + name: secret-scanning-git-app + ## @param backend.fullnameOverride Backend fullnameOverride + ## + fullnameOverride: "" + ## @param backend.podAnnotations Backend pod annotations + ## + podAnnotations: {} + ## @param backend.deploymentAnnotations Backend deployment annotations + ## + deploymentAnnotations: {} + ## @param backend.replicaCount Backend replica count + ## + replicaCount: 2 + ## Backend image parameters + ## + image: + ## @param backend.image.repository Backend image repository + ## + repository: infisical/staging_deployment_secret-scanning-git-app + ## @param backend.image.tag Backend image tag + ## + tag: "latest" + ## @param backend.image.pullPolicy Backend image pullPolicy + ## + pullPolicy: IfNotPresent + ## @param backend.kubeSecretRef Backend secret resource reference name (containing required [backend configuration variables](https://infisical.com/docs/self-hosting/configuration/envars)) + ## + kubeSecretRef: "" + ## Backend service + ## + service: + ## @param backend.service.annotations Backend service annotations + ## + annotations: {} + ## @param backend.service.type Backend service type + ## + type: ClusterIP + ## @param backend.service.nodePort Backend service nodePort (used if above type is `NodePort`) + ## + nodePort: "" + ## @section MongoDB(®) parameters ## Documentation : https://github.com/bitnami/charts/blob/main/bitnami/mongodb/values.yaml ## @@ -327,6 +374,11 @@ ingress: backend: path: /api pathType: Prefix + ## @skip ingress.backend + ## + secretScanningGitApp: + path: /git-app-api + pathType: Prefix ## @param ingress.tls Ingress TLS hosts (matching above hostName) ## Replace with your own domain ## diff --git a/nginx/default.conf b/nginx/default.conf index 4c0e2434d..f824372be 100644 --- a/nginx/default.conf +++ b/nginx/default.conf @@ -15,6 +15,20 @@ server { proxy_cookie_path / "/; HttpOnly; SameSite=strict"; } + location /git-app-api { + proxy_set_header X-Real-RIP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_set_header Host $http_host; + proxy_set_header X-NginX-Proxy true; + + proxy_pass http://git-app:3000/; + proxy_redirect off; + # proxy_redirect http://localhost:8080/ http://frontend.example.com/; + + proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict"; + } + location / { include /etc/nginx/mime.types; diff --git a/secret-engine/Dockerfile.dev b/secret-engine/Dockerfile.dev index b40ba2365..52745d9ce 100644 --- a/secret-engine/Dockerfile.dev +++ b/secret-engine/Dockerfile.dev @@ -10,4 +10,4 @@ RUN apt-get update && apt-get install -y bash curl && curl -1sLf \ && apt-get update && apt-get install -y infisical=0.8.1 -CMD [ "npm", "start" ] +CMD [ "npm", "run", "start:dev" ] diff --git a/secret-engine/src/index.ts b/secret-engine/src/index.ts index 067efcfac..09dfedd44 100644 --- a/secret-engine/src/index.ts +++ b/secret-engine/src/index.ts @@ -4,7 +4,7 @@ import { writeFile, readFile, rm, mkdir, } from "fs"; import { tmpdir } from "os"; import { join } from "path" import mongoose from "mongoose"; -import GitRisks from "./models/gitRisks"; +import GitRisks, { STATUS_RESOLVED_FALSE_POSITIVE } from "./models/gitRisks"; import GitAppOrganizationInstallation from "./models/gitAppOrganizationInstallation"; import { sendMail, setTransporter } from "./helper/nodemailer"; import { initSmtp } from "./service/smtp"; @@ -66,7 +66,7 @@ export = async (app: Probot) => { return } - const findingsByFingerprint: { [key: string]: SecretMatch; } = {} + const allFindingsByFingerprint: { [key: string]: SecretMatch; } = {} for (const commit of commits) { for (const filepath of [...commit.added, ...commit.modified]) { @@ -89,7 +89,7 @@ export = async (app: Probot) => { finding.File = filepath finding.Author = commit.author.name finding.Email = commit.author.email - findingsByFingerprint[fingerPrint] = finding + allFindingsByFingerprint[fingerPrint] = finding } } catch (error) { @@ -98,18 +98,27 @@ export = async (app: Probot) => { } } + + // change to update - for (const key in findingsByFingerprint) { - await GitRisks.findOneAndUpdate({ fingerprint: findingsByFingerprint[key].Fingerprint }, + const noneFalsePositiveFindings = {} + + for (const key in allFindingsByFingerprint) { + const risk = await GitRisks.findOneAndUpdate({ fingerprint: allFindingsByFingerprint[key].Fingerprint }, { - ...convertKeysToLowercase(findingsByFingerprint[key]), + ...convertKeysToLowercase(allFindingsByFingerprint[key]), installationId: installation.id, organization: installationLinkToOrgExists.organizationId, repositoryFullName: repository.full_name, repositoryId: repository.id }, { upsert: true - }) + }).lean() + + if (risk.status != STATUS_RESOLVED_FALSE_POSITIVE) { + noneFalsePositiveFindings[key] = { ...convertKeysToLowercase(allFindingsByFingerprint[key]) } + } + } // get emails of admins const adminsOfWork = await MembershipOrg.find({ @@ -128,12 +137,16 @@ export = async (app: Probot) => { const adminOrOwnerEmails = userEmails.map(userObject => userObject.email) + + // TODO + // don't notify if the risk is marked as false positive + await sendMail({ template: "secretLeakIncident.handlebars", subjectLine: `Incident alert: leaked secrets found in Github repository ${repository.full_name}`, recipients: [pusher.email, ...adminOrOwnerEmails], substitutions: { - numberOfSecrets: Object.keys(findingsByFingerprint).length, + numberOfSecrets: Object.keys(allFindingsByFingerprint).length, pusher_email: pusher.email, pusher_name: pusher.name } From e9e2eade890b5901a4cb3cb3bb90a5d3f9fbf198 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Wed, 5 Jul 2023 17:56:30 -0400 Subject: [PATCH 017/189] update helm chart version --- helm-charts/infisical/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm-charts/infisical/Chart.yaml b/helm-charts/infisical/Chart.yaml index aaafc28ba..01d6524d1 100644 --- a/helm-charts/infisical/Chart.yaml +++ b/helm-charts/infisical/Chart.yaml @@ -7,7 +7,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.17 +version: 0.2.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to From da113612eb2f4a1bea77f278a09cf5e4027267b5 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Wed, 5 Jul 2023 18:09:46 -0400 Subject: [PATCH 018/189] diable secret scan by default --- .../templates/secret-scanning-git-app-deployment.yaml | 6 ++++-- helm-charts/infisical/values.yaml | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/helm-charts/infisical/templates/secret-scanning-git-app-deployment.yaml b/helm-charts/infisical/templates/secret-scanning-git-app-deployment.yaml index cc426049f..78a5fecf5 100644 --- a/helm-charts/infisical/templates/secret-scanning-git-app-deployment.yaml +++ b/helm-charts/infisical/templates/secret-scanning-git-app-deployment.yaml @@ -1,5 +1,6 @@ {{- $secretScanningGitApp := .Values.secretScanningGitApp }} {{- $backend := .Values.backend }} +{{- if .Values.secretScanningGitApp.enabled }} apiVersion: apps/v1 kind: Deployment metadata: @@ -41,9 +42,9 @@ spec: envFrom: - secretRef: name: {{ $backend.kubeSecretRef | default (include "infisical.backend.fullname" .) }} - +{{- end }} --- - +{{- if .Values.secretScanningGitApp.enabled }} apiVersion: v1 kind: Service metadata: @@ -65,3 +66,4 @@ spec: {{- if eq $secretScanningGitApp.service.type "NodePort" }} nodePort: {{ $secretScanningGitApp.service.nodePort }} {{- end }} +{{- end }} \ No newline at end of file diff --git a/helm-charts/infisical/values.yaml b/helm-charts/infisical/values.yaml index ac9630389..d346dca86 100644 --- a/helm-charts/infisical/values.yaml +++ b/helm-charts/infisical/values.yaml @@ -172,7 +172,7 @@ backendEnvironmentVariables: secretScanningGitApp: ## @param backend.enabled Enable git scanning app ## - enabled: true + enabled: false ## @param backend.name Backend name ## name: secret-scanning-git-app From 5599132efe80f47a60869f8c2d354d3fc4f176bf Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Thu, 6 Jul 2023 18:58:48 +0530 Subject: [PATCH 019/189] fix(secret-ref): resolved service token unable to fetch secrets in cli --- cli/packages/api/model.go | 6 ++++-- cli/packages/util/secrets.go | 21 +++++++++++++-------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/cli/packages/api/model.go b/cli/packages/api/model.go index 954982dc9..09e6779e0 100644 --- a/cli/packages/api/model.go +++ b/cli/packages/api/model.go @@ -181,14 +181,16 @@ type GetServiceTokenDetailsResponse struct { ID string `json:"_id"` Name string `json:"name"` Workspace string `json:"workspace"` - Environment string `json:"environment"` ExpiresAt time.Time `json:"expiresAt"` EncryptedKey string `json:"encryptedKey"` Iv string `json:"iv"` Tag string `json:"tag"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` - SecretPath string `json:"secretPath"` + Scopes []struct { + Environment string `json:"environment"` + SecretPath string `json:"secretPath"` + } `json:"scopes"` } type GetAccessibleEnvironmentsRequest struct { diff --git a/cli/packages/util/secrets.go b/cli/packages/util/secrets.go index 8a7117a9a..309b17631 100644 --- a/cli/packages/util/secrets.go +++ b/cli/packages/util/secrets.go @@ -17,7 +17,7 @@ import ( "github.com/rs/zerolog/log" ) -func GetPlainTextSecretsViaServiceToken(fullServiceToken string) ([]models.SingleEnvironmentVariable, api.GetServiceTokenDetailsResponse, error) { +func GetPlainTextSecretsViaServiceToken(fullServiceToken string, environment string, secretPath string) ([]models.SingleEnvironmentVariable, api.GetServiceTokenDetailsResponse, error) { serviceTokenParts := strings.SplitN(fullServiceToken, ".", 4) if len(serviceTokenParts) < 4 { return nil, api.GetServiceTokenDetailsResponse{}, fmt.Errorf("invalid service token entered. Please double check your service token and try again") @@ -35,10 +35,19 @@ func GetPlainTextSecretsViaServiceToken(fullServiceToken string) ([]models.Singl return nil, api.GetServiceTokenDetailsResponse{}, fmt.Errorf("unable to get service token details. [err=%v]", err) } + // if multiple scopes are there then user needs to specify which environment and secret path + if environment == "" { + if len(serviceTokenDetails.Scopes) != 1 { + return nil, api.GetServiceTokenDetailsResponse{}, fmt.Errorf("you need to provide the --env for multiple environment scoped token") + } else { + environment = serviceTokenDetails.Scopes[0].Environment + } + } + encryptedSecrets, err := api.CallGetSecretsV3(httpClient, api.GetEncryptedSecretsV3Request{ WorkspaceId: serviceTokenDetails.Workspace, - Environment: serviceTokenDetails.Environment, - SecretPath: serviceTokenDetails.SecretPath, + Environment: environment, + SecretPath: secretPath, }) if err != nil { @@ -190,11 +199,7 @@ func GetAllEnvironmentVariables(params models.GetAllSecretsParameters) ([]models } else { log.Debug().Msg("Trying to fetch secrets using service token") - secretsToReturn, _, errorToReturn = GetPlainTextSecretsViaServiceToken(infisicalToken) - - // if serviceTokenDetails.Environment != params.Environment { - // PrintErrorMessageAndExit(fmt.Sprintf("Fetch secrets failed: token allows [%s] environment access, not [%s]. Service tokens are environment-specific; no need for --env flag.", params.Environment, serviceTokenDetails.Environment)) - // } + secretsToReturn, _, errorToReturn = GetPlainTextSecretsViaServiceToken(infisicalToken, params.Environment, params.SecretsPath) } return secretsToReturn, errorToReturn From 5aba0c60b8b3cdffff267e75d1e678fa705a9493 Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Thu, 6 Jul 2023 20:01:46 +0530 Subject: [PATCH 020/189] feat(secret-ref): removed migration field unset op, refactored service token scope check to a utility fn --- .../src/controllers/v2/secretsController.ts | 34 ++++------ backend/src/helpers/secrets.ts | 68 ++++++++----------- backend/src/utils/setup/backfillData.ts | 3 - cli/packages/util/secrets.go | 6 +- 4 files changed, 45 insertions(+), 66 deletions(-) diff --git a/backend/src/controllers/v2/secretsController.ts b/backend/src/controllers/v2/secretsController.ts index 8307d373d..b93846e70 100644 --- a/backend/src/controllers/v2/secretsController.ts +++ b/backend/src/controllers/v2/secretsController.ts @@ -1,6 +1,5 @@ import { Types } from "mongoose"; import { Request, Response } from "express"; -import picomatch from "picomatch"; import { ISecret, Secret, ServiceTokenData } from "../../models"; import { IAction, SecretVersion } from "../../ee/models"; import { @@ -33,6 +32,7 @@ import { getFolderIdFromServiceToken, searchByFolderId } from "../../services/FolderService"; +import { isValidScope } from "../../helpers/secrets"; /** * Peform a batch of any specified CUD secret operations @@ -74,16 +74,11 @@ export const batchSecrets = async (req: Request, res: Response) => { } if (req.authData.authPayload instanceof ServiceTokenData) { - const { scopes: tkScopes } = req.authData.authPayload; - const validScope = tkScopes.find( - (scope) => - picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && - scope.environment === environment - ); + const isValidScopeAccess = isValidScope(req.authData.authPayload, environment, secretPath); // in service token when not giving secretpath folderid must be root // this is to avoid giving folderid when service tokens are used - if ((!secretPath && folderId !== "root") || (secretPath && !validScope)) { + if ((!secretPath && folderId !== "root") || (secretPath && !isValidScopeAccess)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } @@ -447,16 +442,15 @@ export const createSecrets = async (req: Request, res: Response) => { } if (req.authData.authPayload instanceof ServiceTokenData) { - const { scopes: tkScopes } = req.authData.authPayload; - const validScope = tkScopes.find( - (scope) => - picomatch.isMatch(secretPath || "/", scope.secretPath, { strictSlashes: false }) && - scope.environment === environment + const isValidScopeAccess = isValidScope( + req.authData.authPayload, + environment, + secretPath || "/" ); // in service token when not giving secretpath folderid must be root // this is to avoid giving folderid when service tokens are used - if ((!secretPath && folderId !== "root") || (secretPath && !validScope)) { + if ((!secretPath && folderId !== "root") || (secretPath && !isValidScopeAccess)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } @@ -704,17 +698,15 @@ export const getSecrets = async (req: Request, res: Response) => { } if (req.authData.authPayload instanceof ServiceTokenData) { - const { scopes: tkScopes } = req.authData.authPayload; - const validScope = tkScopes.find( - (scope) => - picomatch.isMatch((secretPath as string) || "/", scope.secretPath, { - strictSlashes: false - }) && scope.environment === environment + const isValidScopeAccess = isValidScope( + req.authData.authPayload, + environment, + (secretPath as string) || "/" ); // in service token when not giving secretpath folderid must be root // this is to avoid giving folderid when service tokens are used - if ((!secretPath && folderId !== "root") || (secretPath && !validScope)) { + if ((!secretPath && folderId !== "root") || (secretPath && !isValidScopeAccess)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } diff --git a/backend/src/helpers/secrets.ts b/backend/src/helpers/secrets.ts index cd964fe9f..1a68930bc 100644 --- a/backend/src/helpers/secrets.ts +++ b/backend/src/helpers/secrets.ts @@ -6,7 +6,13 @@ import { GetSecretsParams, UpdateSecretParams } from "../interfaces/services/SecretService"; -import { ISecret, Secret, SecretBlindIndexData, ServiceTokenData } from "../models"; +import { + ISecret, + IServiceTokenData, + Secret, + SecretBlindIndexData, + ServiceTokenData +} from "../models"; import { SecretVersion } from "../ee/models"; import { BadRequestError, @@ -39,6 +45,21 @@ import { getAuthDataPayloadIdObj, getAuthDataPayloadUserObj } from "../utils/aut import { getFolderIdFromServiceToken } from "../services/FolderService"; import picomatch from "picomatch"; +export const isValidScope = ( + authPayload: IServiceTokenData, + environment: string, + secretPath: string +) => { + const { scopes: tkScopes } = authPayload; + const validScope = tkScopes.find( + (scope) => + picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && + scope.environment === environment + ); + + return Boolean(validScope); +}; + /** * Returns an object containing secret [secret] but with its value, key, comment decrypted. * @@ -306,14 +327,7 @@ export const createSecretHelper = async ({ // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { scopes: tkScopes } = authData.authPayload; - const validScope = tkScopes.find( - (scope) => - picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && - scope.environment === environment - ); - - if (!validScope) { + if (!isValidScope(authData.authPayload, environment, secretPath)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } @@ -459,14 +473,7 @@ export const getSecretsHelper = async ({ let secrets: ISecret[] = []; // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { scopes: tkScopes } = authData.authPayload; - const validScope = tkScopes.find( - (scope) => - picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && - scope.environment === environment - ); - - if (!validScope) { + if (!isValidScope(authData.authPayload, environment, secretPath)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } @@ -562,14 +569,7 @@ export const getSecretHelper = async ({ let secret: ISecret | null = null; // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { scopes: tkScopes } = authData.authPayload; - const validScope = tkScopes.find( - (scope) => - picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && - scope.environment === environment - ); - - if (!validScope) { + if (!isValidScope(authData.authPayload, environment, secretPath)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } @@ -671,14 +671,7 @@ export const updateSecretHelper = async ({ let secret: ISecret | null = null; // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { scopes: tkScopes } = authData.authPayload; - const validScope = tkScopes.find( - (scope) => - picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && - scope.environment === environment - ); - - if (!validScope) { + if (!isValidScope(authData.authPayload, environment, secretPath)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } @@ -826,14 +819,7 @@ export const deleteSecretHelper = async ({ // if using service token filter towards the folderId by secretpath if (authData.authPayload instanceof ServiceTokenData) { - const { scopes: tkScopes } = authData.authPayload; - const validScope = tkScopes.find( - (scope) => - picomatch.isMatch(secretPath, scope.secretPath, { strictSlashes: false }) && - scope.environment === environment - ); - - if (!validScope) { + if (!isValidScope(authData.authPayload, environment, secretPath)) { throw UnauthorizedRequestError({ message: "Folder Permission Denied" }); } } diff --git a/backend/src/utils/setup/backfillData.ts b/backend/src/utils/setup/backfillData.ts index 98dcad90e..801a75e6f 100644 --- a/backend/src/utils/setup/backfillData.ts +++ b/backend/src/utils/setup/backfillData.ts @@ -446,9 +446,6 @@ export const backfillServiceTokenMultiScope = async () => { $set: { scopes: [{ environment: "$environment", secretPath: "$secretPath" }] } - }, - { - $unset: ["environment", "secretPath"] } ] ); diff --git a/cli/packages/util/secrets.go b/cli/packages/util/secrets.go index 309b17631..80d51fcf5 100644 --- a/cli/packages/util/secrets.go +++ b/cli/packages/util/secrets.go @@ -292,7 +292,11 @@ func recursivelyExpandSecret(expandedSecs map[string]string, interpolatedSecs ma return v } - interpolatedVal := interpolatedSecs[key] + interpolatedVal, ok := interpolatedSecs[key] + if !ok { + HandleError(fmt.Errorf("Could not find refered secret - %s", key), "Kindly check whether its provided") + } + refs := secRefRegex.FindAllStringSubmatch(interpolatedVal, -1) for _, val := range refs { // key: "${something}" val: [${something},something] From 8a237af4ac7c412ef22d3f905628c3b4737a9e38 Mon Sep 17 00:00:00 2001 From: akhilmhdh Date: Thu, 6 Jul 2023 22:15:10 +0530 Subject: [PATCH 021/189] feat(secret-ref): updated reference corner cases of trailing slashes --- cli/packages/util/secrets.go | 5 ++--- .../ServiceTokenSection/AddServiceTokenModal.tsx | 9 ++++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/cli/packages/util/secrets.go b/cli/packages/util/secrets.go index 80d51fcf5..d49e92607 100644 --- a/cli/packages/util/secrets.go +++ b/cli/packages/util/secrets.go @@ -358,10 +358,9 @@ func ExpandSecrets(secrets []models.SingleEnvironmentVariable, infisicalToken st } expandedVal := recursivelyExpandSecret(expandedSecs, interpolatedSecs, func(env string, secPaths []string, secKey string) string { + secPaths = append([]string{"/"}, secPaths...) secPath := path.Join(secPaths...) - if secPath == "" { - secPath = "/" - } + secPathDot := strings.Join(secPaths, ".") uniqKey := fmt.Sprintf("%s.%s", env, secPathDot) diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/AddServiceTokenModal.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/AddServiceTokenModal.tsx index 82fbf9edc..a44db233b 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/AddServiceTokenModal.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/ServiceTokenSection/AddServiceTokenModal.tsx @@ -45,7 +45,14 @@ const schema = yup.object({ .array( yup.object({ environment: yup.string().max(50).required().label("Environment"), - secretPath: yup.string().required().default("/").label("Secret Path") + secretPath: yup + .string() + .required() + .default("/") + .label("Secret Path") + .transform((val) => + typeof val === "string" && val.at(-1) === "/" && val.length > 1 ? val.slice(0, -1) : val + ) }) ) .min(1) From 11a19eef0731003cb4d19e8a503ef9f97d8922db Mon Sep 17 00:00:00 2001 From: agoodman1999 Date: Thu, 6 Jul 2023 13:20:48 -0400 Subject: [PATCH 022/189] add --path flag to docs for infisical secrets set --- docs/cli/commands/secrets.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx index 3b1ccd3fb..67f09c542 100644 --- a/docs/cli/commands/secrets.mdx +++ b/docs/cli/commands/secrets.mdx @@ -90,6 +90,14 @@ $ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jeb Default value: `dev` + + Used to select the project folder in which the secrets will be set. Useful when creating new secrets under a particular path. + + ```bash + # Example + infisical secrets set DOMAIN=example.com --path /backend + ``` + From f9fca42c5bf17d4b03c27b5e8012749414dd0d4e Mon Sep 17 00:00:00 2001 From: agoodman1999 Date: Thu, 6 Jul 2023 13:36:15 -0400 Subject: [PATCH 023/189] fix incorrect leading slash in example --- docs/cli/commands/secrets.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx index 67f09c542..24a8f596b 100644 --- a/docs/cli/commands/secrets.mdx +++ b/docs/cli/commands/secrets.mdx @@ -95,7 +95,7 @@ $ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jeb ```bash # Example - infisical secrets set DOMAIN=example.com --path /backend + infisical secrets set DOMAIN=example.com --path backend ``` From f82fa1b3b35bec04dff842518b99c8138b25ed67 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 7 Jul 2023 15:49:21 -0400 Subject: [PATCH 024/189] add secret reference support --- .../api/v1alpha1/infisicalsecret_types.go | 22 +++- .../api/v1alpha1/zz_generated.deepcopy.go | 16 +++ ...ecrets.infisical.com_infisicalsecrets.yaml | 11 ++ k8-operator/config/samples/sample.yaml | 15 ++- .../controllers/infisicalsecret_helper.go | 5 +- k8-operator/packages/util/secrets.go | 114 +++++++++++++++++- 6 files changed, 167 insertions(+), 16 deletions(-) diff --git a/k8-operator/api/v1alpha1/infisicalsecret_types.go b/k8-operator/api/v1alpha1/infisicalsecret_types.go index 203394417..3b61bd215 100644 --- a/k8-operator/api/v1alpha1/infisicalsecret_types.go +++ b/k8-operator/api/v1alpha1/infisicalsecret_types.go @@ -4,8 +4,19 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) +type Authentication struct { + // +kubebuilder:validation:Optional + ServiceAccount ServiceAccountDetails `json:"serviceAccount"` + // +kubebuilder:validation:Optional + ServiceToken ServiceTokenDetails `json:"serviceToken"` +} + type ServiceTokenDetails struct { + // +kubebuilder:validation:Required ServiceTokenSecretReference KubeSecretReference `json:"serviceTokenSecretReference"` + + // +kubebuilder:validation:Required + SecretsScope SecretScopeInWorkspace `json:"secretsScope"` } type ServiceAccountDetails struct { @@ -14,11 +25,12 @@ type ServiceAccountDetails struct { EnvironmentName string `json:"environmentName"` } -type Authentication struct { - // +kubebuilder:validation:Optional - ServiceAccount ServiceAccountDetails `json:"serviceAccount"` - // +kubebuilder:validation:Optional - ServiceToken ServiceTokenDetails `json:"serviceToken"` +type SecretScopeInWorkspace struct { + // +kubebuilder:validation:Required + SecretsPath string `json:"secretsPath"` + + // +kubebuilder:validation:Required + EnvSlug string `json:"envSlug"` } type KubeSecretReference struct { diff --git a/k8-operator/api/v1alpha1/zz_generated.deepcopy.go b/k8-operator/api/v1alpha1/zz_generated.deepcopy.go index 97c0f4fc7..01000431c 100644 --- a/k8-operator/api/v1alpha1/zz_generated.deepcopy.go +++ b/k8-operator/api/v1alpha1/zz_generated.deepcopy.go @@ -157,6 +157,21 @@ func (in *KubeSecretReference) DeepCopy() *KubeSecretReference { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SecretScopeInWorkspace) DeepCopyInto(out *SecretScopeInWorkspace) { + *out = *in +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretScopeInWorkspace. +func (in *SecretScopeInWorkspace) DeepCopy() *SecretScopeInWorkspace { + if in == nil { + return nil + } + out := new(SecretScopeInWorkspace) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ServiceAccountDetails) DeepCopyInto(out *ServiceAccountDetails) { *out = *in @@ -177,6 +192,7 @@ func (in *ServiceAccountDetails) DeepCopy() *ServiceAccountDetails { func (in *ServiceTokenDetails) DeepCopyInto(out *ServiceTokenDetails) { *out = *in out.ServiceTokenSecretReference = in.ServiceTokenSecretReference + out.SecretsScope = in.SecretsScope } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceTokenDetails. diff --git a/k8-operator/config/crd/bases/secrets.infisical.com_infisicalsecrets.yaml b/k8-operator/config/crd/bases/secrets.infisical.com_infisicalsecrets.yaml index f47efb061..07433f781 100644 --- a/k8-operator/config/crd/bases/secrets.infisical.com_infisicalsecrets.yaml +++ b/k8-operator/config/crd/bases/secrets.infisical.com_infisicalsecrets.yaml @@ -63,6 +63,16 @@ spec: type: object serviceToken: properties: + secretsScope: + properties: + envSlug: + type: string + secretsPath: + type: string + required: + - envSlug + - secretsPath + type: object serviceTokenSecretReference: properties: secretName: @@ -77,6 +87,7 @@ spec: - secretNamespace type: object required: + - secretsScope - serviceTokenSecretReference type: object type: object diff --git a/k8-operator/config/samples/sample.yaml b/k8-operator/config/samples/sample.yaml index 971df9f7c..4c5059d9f 100644 --- a/k8-operator/config/samples/sample.yaml +++ b/k8-operator/config/samples/sample.yaml @@ -3,8 +3,8 @@ kind: InfisicalSecret metadata: name: infisicalsecret-sample spec: - hostAPI: http://localhost:7070/api - resyncInterval: 60 + hostAPI: http://localhost:8764/api + resyncInterval: 10 authentication: serviceAccount: serviceAccountSecretReference: @@ -16,10 +16,13 @@ spec: serviceTokenSecretReference: secretName: service-token secretNamespace: default + secretsScope: + envSlug: dev + secretsPath: "/" managedSecretReference: secretName: managed-secret secretNamespace: default - # To be depreciated soon - tokenSecretReference: - secretName: service-token - secretNamespace: default + # # To be depreciated soon + # tokenSecretReference: + # secretName: service-token + # secretNamespace: default diff --git a/k8-operator/controllers/infisicalsecret_helper.go b/k8-operator/controllers/infisicalsecret_helper.go index 32216e2e3..509de94ac 100644 --- a/k8-operator/controllers/infisicalsecret_helper.go +++ b/k8-operator/controllers/infisicalsecret_helper.go @@ -219,7 +219,10 @@ func (r *InfisicalSecretReconciler) ReconcileInfisicalSecret(ctx context.Context fmt.Println("ReconcileInfisicalSecret: Fetched secrets via service account") } else if infisicalToken != "" { - plainTextSecretsFromApi, fullEncryptedSecretsResponse, err = util.GetPlainTextSecretsViaServiceToken(infisicalToken, secretVersionBasedOnETag) + envSlug := infisicalSecret.Spec.Authentication.ServiceToken.SecretsScope.EnvSlug + secretsPath := infisicalSecret.Spec.Authentication.ServiceToken.SecretsScope.SecretsPath + + plainTextSecretsFromApi, fullEncryptedSecretsResponse, err = util.GetPlainTextSecretsViaServiceToken(infisicalToken, secretVersionBasedOnETag, envSlug, secretsPath) if err != nil { return fmt.Errorf("\nfailed to get secrets because [err=%v]", err) } diff --git a/k8-operator/packages/util/secrets.go b/k8-operator/packages/util/secrets.go index 5087cd03a..28ba47253 100644 --- a/k8-operator/packages/util/secrets.go +++ b/k8-operator/packages/util/secrets.go @@ -3,6 +3,8 @@ package util import ( "encoding/base64" "fmt" + "path" + "regexp" "strings" "github.com/Infisical/infisical/k8-operator/packages/api" @@ -48,7 +50,7 @@ func GetServiceTokenDetails(infisicalToken string) (api.GetServiceTokenDetailsRe return serviceTokenDetails, nil } -func GetPlainTextSecretsViaServiceToken(fullServiceToken string, etag string) ([]model.SingleEnvironmentVariable, api.GetEncryptedSecretsV3Response, error) { +func GetPlainTextSecretsViaServiceToken(fullServiceToken string, etag string, envSlug string, secretPath string) ([]model.SingleEnvironmentVariable, api.GetEncryptedSecretsV3Response, error) { serviceTokenParts := strings.SplitN(fullServiceToken, ".", 4) if len(serviceTokenParts) < 4 { return nil, api.GetEncryptedSecretsV3Response{}, fmt.Errorf("invalid service token entered. Please double check your service token and try again") @@ -68,9 +70,9 @@ func GetPlainTextSecretsViaServiceToken(fullServiceToken string, etag string) ([ encryptedSecretsResponse, err := api.CallGetSecretsV3(httpClient, api.GetEncryptedSecretsV3Request{ WorkspaceId: serviceTokenDetails.Workspace, - Environment: serviceTokenDetails.Environment, + Environment: envSlug, ETag: etag, - SecretPath: serviceTokenDetails.SecretPath, + SecretPath: secretPath, }) if err != nil { @@ -92,7 +94,10 @@ func GetPlainTextSecretsViaServiceToken(fullServiceToken string, etag string) ([ return nil, api.GetEncryptedSecretsV3Response{}, fmt.Errorf("unable to decrypt your secrets [err=%v]", err) } - return plainTextSecrets, encryptedSecretsResponse, nil + // expand secrets that are referenced + expandedSecrets := ExpandSecrets(plainTextSecrets, fullServiceToken) + + return expandedSecrets, encryptedSecretsResponse, nil } // Fetches plaintext secrets from an API endpoint using a service account. @@ -252,3 +257,104 @@ func GetPlainTextSecrets(key []byte, encryptedSecretsResponse api.GetEncryptedSe return plainTextSecrets, nil } + +var secRefRegex = regexp.MustCompile(`\${([^\}]*)}`) + +func recursivelyExpandSecret(expandedSecs map[string]string, interpolatedSecs map[string]string, crossSecRefFetch func(env string, path []string, key string) string, key string) string { + if v, ok := expandedSecs[key]; ok { + return v + } + + interpolatedVal, ok := interpolatedSecs[key] + if !ok { + return "" + // panic(fmt.Errorf("Could not find referred secret with key name %s", key), "Please check it refers a") + } + + refs := secRefRegex.FindAllStringSubmatch(interpolatedVal, -1) + for _, val := range refs { + // key: "${something}" val: [${something},something] + interpolatedExp, interpolationKey := val[0], val[1] + ref := strings.Split(interpolationKey, ".") + + // ${KEY1} => [key1] + if len(ref) == 1 { + val := recursivelyExpandSecret(expandedSecs, interpolatedSecs, crossSecRefFetch, interpolationKey) + interpolatedVal = strings.ReplaceAll(interpolatedVal, interpolatedExp, val) + continue + } + + // cross board reference ${env.folder.key1} => [env folder key1] + if len(ref) > 1 { + secEnv, tmpSecPath, secKey := ref[0], ref[1:len(ref)-1], ref[len(ref)-1] + interpolatedSecs[interpolationKey] = crossSecRefFetch(secEnv, tmpSecPath, secKey) // get the reference value + val := recursivelyExpandSecret(expandedSecs, interpolatedSecs, crossSecRefFetch, interpolationKey) + interpolatedVal = strings.ReplaceAll(interpolatedVal, interpolatedExp, val) + } + + } + expandedSecs[key] = interpolatedVal + return interpolatedVal +} + +func ExpandSecrets(secrets []model.SingleEnvironmentVariable, infisicalToken string) []model.SingleEnvironmentVariable { + expandedSecs := make(map[string]string) + interpolatedSecs := make(map[string]string) + // map[env.secret-path][keyname]Secret + crossEnvRefSecs := make(map[string]map[string]model.SingleEnvironmentVariable) // a cache to hold all cross board reference secrets + + for _, sec := range secrets { + // get all references in a secret + refs := secRefRegex.FindAllStringSubmatch(sec.Value, -1) + // nil means its a secret without reference + if refs == nil { + expandedSecs[sec.Key] = sec.Value // atomic secrets without any interpolation + } else { + interpolatedSecs[sec.Key] = sec.Value + } + } + + for i, sec := range secrets { + // already present pick that up + if expandedVal, ok := expandedSecs[sec.Key]; ok { + secrets[i].Value = expandedVal + continue + } + + expandedVal := recursivelyExpandSecret(expandedSecs, interpolatedSecs, func(env string, secPaths []string, secKey string) string { + secPaths = append([]string{"/"}, secPaths...) + secPath := path.Join(secPaths...) + + secPathDot := strings.Join(secPaths, ".") + uniqKey := fmt.Sprintf("%s.%s", env, secPathDot) + + if crossRefSec, ok := crossEnvRefSecs[uniqKey]; !ok { + // if not in cross reference cache, fetch it from server + refSecs, _, err := GetPlainTextSecretsViaServiceToken(infisicalToken, "", env, secPath) + if err != nil { + fmt.Println("HELLO===>", "MOO", err) + // HandleError(err, fmt.Sprintf("Could not fetch secrets in environment: %s secret-path: %s", env, secPath), "If you are using a service token to fetch secrets, please ensure it is valid") + } + refSecsByKey := getSecretsByKeys(refSecs) + // save it to avoid calling api again for same environment and folder path + crossEnvRefSecs[uniqKey] = refSecsByKey + return refSecsByKey[secKey].Value + } else { + return crossRefSec[secKey].Value + } + }, sec.Key) + + secrets[i].Value = expandedVal + } + return secrets +} + +func getSecretsByKeys(secrets []model.SingleEnvironmentVariable) map[string]model.SingleEnvironmentVariable { + secretMapByName := make(map[string]model.SingleEnvironmentVariable, len(secrets)) + + for _, secret := range secrets { + secretMapByName[secret.Key] = secret + } + + return secretMapByName +} From 57cdab07275e7cd058a2fc79f9dc7cd5a552ced4 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 7 Jul 2023 15:55:22 -0400 Subject: [PATCH 025/189] update k8 operator crd for secret refs --- .../kubectl-install/install-secrets-operator.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/k8-operator/kubectl-install/install-secrets-operator.yaml b/k8-operator/kubectl-install/install-secrets-operator.yaml index f362bcfa1..dad6dcf3a 100644 --- a/k8-operator/kubectl-install/install-secrets-operator.yaml +++ b/k8-operator/kubectl-install/install-secrets-operator.yaml @@ -70,6 +70,16 @@ spec: type: object serviceToken: properties: + secretsScope: + properties: + envSlug: + type: string + secretsPath: + type: string + required: + - envSlug + - secretsPath + type: object serviceTokenSecretReference: properties: secretName: @@ -83,6 +93,7 @@ spec: - secretNamespace type: object required: + - secretsScope - serviceTokenSecretReference type: object type: object From 5a2299f758fb9359c6de388d6c2723dc7fcb6e9f Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 7 Jul 2023 15:55:45 -0400 Subject: [PATCH 026/189] update k8 operator crd for secret refs --- .../templates/infisicalsecret-crd.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/helm-charts/secrets-operator/templates/infisicalsecret-crd.yaml b/helm-charts/secrets-operator/templates/infisicalsecret-crd.yaml index ceeac6709..51dd18a41 100644 --- a/helm-charts/secrets-operator/templates/infisicalsecret-crd.yaml +++ b/helm-charts/secrets-operator/templates/infisicalsecret-crd.yaml @@ -63,6 +63,16 @@ spec: type: object serviceToken: properties: + secretsScope: + properties: + envSlug: + type: string + secretsPath: + type: string + required: + - envSlug + - secretsPath + type: object serviceTokenSecretReference: properties: secretName: @@ -77,6 +87,7 @@ spec: - secretNamespace type: object required: + - secretsScope - serviceTokenSecretReference type: object type: object From 83aa6127ec3021749baafd6aa48741c758bfc193 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 7 Jul 2023 15:56:47 -0400 Subject: [PATCH 027/189] update k8 chart version --- helm-charts/secrets-operator/Chart.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helm-charts/secrets-operator/Chart.yaml b/helm-charts/secrets-operator/Chart.yaml index c3e0073b5..d44467dec 100644 --- a/helm-charts/secrets-operator/Chart.yaml +++ b/helm-charts/secrets-operator/Chart.yaml @@ -13,9 +13,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.6 +version: 0.2.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.1.8" +appVersion: "0.2.0" From c5aae44249669387f075c72b822e403225f0cb79 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 7 Jul 2023 18:56:38 -0400 Subject: [PATCH 028/189] add docs for k8 secret refs --- docs/integrations/platforms/kubernetes.mdx | 86 +++++++++++++--------- 1 file changed, 51 insertions(+), 35 deletions(-) diff --git a/docs/integrations/platforms/kubernetes.mdx b/docs/integrations/platforms/kubernetes.mdx index d797293a0..62af3aca5 100644 --- a/docs/integrations/platforms/kubernetes.mdx +++ b/docs/integrations/platforms/kubernetes.mdx @@ -39,9 +39,8 @@ The operator can be install via [Helm](helm.sh) or [kubectl](https://github.com/ ## Sync Infisical Secrets to your cluster To retrieve secrets from an Infisical project and save them as native Kubernetes secrets within a specific namespace, utilize the `InfisicalSecret` custom resource definition (CRD). -This resource can be created after installing the Infisical operator. For each new managed secret, you will need to create a new InfisicalSecret CRD. -```yaml +```yaml example-infisical-secret-crd.yaml apiVersion: secrets.infisical.com/v1alpha1 kind: InfisicalSecret metadata: @@ -50,15 +49,18 @@ metadata: spec: # The host that should be used to pull secrets from. If left empty, the value specified in Global configuration will be used hostAPI: https://app.infisical.com/api - resyncInterval: 60 # <-- the time in seconds between secret re-sync. Faster re-syncs will require higher rate limits + resyncInterval: authentication: serviceToken: serviceTokenSecretReference: secretName: service-token secretNamespace: option + secretsScope: + envSlug: dev + secretsPath: "/" managedSecretReference: secretName: managed-secret # <-- the name of kubernetes secret that will be created - secretNamespace: default # <-- where the kubernetes secret that will be created + secretNamespace: default # <-- where the kubernetes secret should be created ``` ### InfisicalSecret CRD properties @@ -86,45 +88,59 @@ Default re-sync interval is every 1 minute. - The `authentication` property tells the operator where it should look to find credentials needed to fetch secrets from Infisical. + This block defines the method that will be used to authenticate with Infisical so that secrets can be fetched. Currently, only [Service Tokens](../../documentation/platform/token) can be used to authenticate with Infisical. + - - - Authenticating with service tokens is a great option when you have a small number of services you'd like to fetch secrets for and are looking for the least amount of setup. - - #### 1. Generate service token + + The service token required to authenticate with Infisical needs to be stored in a Kubernetes secret. This block defines the reference to the name and name space of secret that stores this service token. + Follow the instructions below to create and store the service token in a Kubernetes secrets and reference it in your CRD. - You can generate a [service token](../../documentation/platform/token) for an Infisical project by heading over to the Infisical dashboard then to Project Settings. + #### 1. Generate service token - #### 2. Create Kubernetes secret containing service token + You can generate a [service token](../../documentation/platform/token) for an Infisical project by heading over to the Infisical dashboard then to Project Settings. - Once you have generated the service token, you will need to create a Kubernetes secret containing the service token you generated. - To quickly create a Kubernetes secret containing the generated service token, you can run the command below. + #### 2. Create Kubernetes secret containing service token - ``` bash - kubectl create secret generic service-token --from-literal=infisicalToken= - ``` + Once you have generated the service token, you will need to create a Kubernetes secret containing the service token you generated. + To quickly create a Kubernetes secret containing the generated service token, you can run the command below. Make sure you replace `` with your service token. - #### 3. Add reference for the Kubernetes secret containing service token + ``` bash + kubectl create secret generic service-token --from-literal=infisicalToken= + ``` - Once the secret is created, add the name and namespace of the secret that was just created under `authentication.serviceToken.serviceTokenSecretReference` field in the InfisicalSecret resource. + #### 3. Add reference for the Kubernetes secret containing service token - ## Example - ```yaml - apiVersion: secrets.infisical.com/v1alpha1 - kind: InfisicalSecret - metadata: - name: infisicalsecret-sample-crd - spec: - authentication: - serviceToken: - serviceTokenSecretReference: - secretName: service-token # <-- name of the Kubernetes secret that stores our service token - secretNamespace: option # <-- namespace of the Kubernetes secret that stores our service token - ... - ``` - - + Once the secret is created, add the name and namespace of the secret that was just created under `authentication.serviceToken.serviceTokenSecretReference` field in the InfisicalSecret resource. + + ## Example + ```yaml + apiVersion: secrets.infisical.com/v1alpha1 + kind: InfisicalSecret + metadata: + name: infisicalsecret-sample-crd + spec: + authentication: + serviceToken: + serviceTokenSecretReference: + secretName: service-token # <-- name of the Kubernetes secret that stores our service token + secretNamespace: option # <-- namespace of the Kubernetes secret that stores our service token + ... + ``` + + + + This block defines the scope of what secrets should be fetched. This is needed as your service token can have access to multiple folders and environments. + A scope is defined by `envSlug` and `secretsPath`. + + #### envSlug + + This refers to the short hand name of an environment. For example for the `development` environment the environment slug is `dev`. You can locate the slug of your environment by heading to your project settings in the Infisical dashboard. + + #### secretsPath + + secretsPath is the path to the secret in the given environment. For example a path of `/` would refer to the root of the environment whereas `/folder1` would refer to the secrets in folder1 from the root. + + Both fields are required. From fd10d7ed34f9f6d618278102f4e36f8326c0e0a5 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 7 Jul 2023 18:56:38 -0400 Subject: [PATCH 029/189] add docs for k8 secret refs --- docs/documentation/platform/secret-reference.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/documentation/platform/secret-reference.mdx b/docs/documentation/platform/secret-reference.mdx index 663f4ca78..9d24e5255 100644 --- a/docs/documentation/platform/secret-reference.mdx +++ b/docs/documentation/platform/secret-reference.mdx @@ -6,17 +6,17 @@ description: "How to use reference secrets in Infisical" You can use the interpolation syntax to reference a secret in the same environment, another folder, or another environment The interpolation syntax is a way of referencing a secret by using a special placeholder. The placeholder is the name of the secret, followed by the environment or folder name, separated by a colon. -For example, to reference a secret named mysecret in the same environment, you would use the placeholder ${mysecret}. +For example, to reference a secret named mysecret in the same environment, you would use the placeholder `${mysecret}`. -While for another environment like `test` would be ${test.mysecret} +While for another environment like `test` would be `${test.mysecret}` Some more examples of referencing are | Syntax | Environment | Folder | Secret Key | | --------------------- | ----------- | ------------ | ---------- | -| ${KEY1} | same env | ssame folder | KEY1 | -| ${dev.KEY2} | dev | / | KEY2 | -| ${test.frontend.KEY2} | test | /frontend | KEY2 | +| `${KEY1}` | same env | ssame folder | KEY1 | +| `${dev.KEY2}` | dev | / | KEY2 | +| `${test.frontend.KEY2}` | test | /frontend | KEY2 | # Permission system for reference From c9820d00719f8fe2be844f62b2966f5be9bb289e Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 8 Jul 2023 12:55:49 -0400 Subject: [PATCH 030/189] Update values.yaml --- .github/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/values.yaml b/.github/values.yaml index 6c2aaf0e0..a95d2904b 100644 --- a/.github/values.yaml +++ b/.github/values.yaml @@ -1,5 +1,5 @@ secretScanningGitApp: - enabled: true + enabled: false deploymentAnnotations: secrets.infisical.com/auto-reload: "true" image: From 1657cf0a7e4283895e63fdded019f73dda3de95e Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 8 Jul 2023 13:16:10 -0400 Subject: [PATCH 031/189] Update values.yaml --- .github/values.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/values.yaml b/.github/values.yaml index a95d2904b..0d818940f 100644 --- a/.github/values.yaml +++ b/.github/values.yaml @@ -1,9 +1,9 @@ -secretScanningGitApp: - enabled: false - deploymentAnnotations: - secrets.infisical.com/auto-reload: "true" - image: - repository: infisical/staging_deployment_secret-scanning-git-app +# secretScanningGitApp: +# enabled: false +# deploymentAnnotations: +# secrets.infisical.com/auto-reload: "true" +# image: +# repository: infisical/staging_deployment_secret-scanning-git-app frontend: enabled: true From 5afcf2798f0b0f5501e5fc6fa7285ee743702a61 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 8 Jul 2023 13:32:35 -0400 Subject: [PATCH 032/189] Update build-staging-img.yml --- .github/workflows/build-staging-img.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-staging-img.yml b/.github/workflows/build-staging-img.yml index 0e50d0906..3ff23ba23 100644 --- a/.github/workflows/build-staging-img.yml +++ b/.github/workflows/build-staging-img.yml @@ -135,7 +135,7 @@ jobs: - name: Download helm values to file and upgrade gamma deploy run: | wget https://raw.githubusercontent.com/Infisical/infisical/main/.github/values.yaml - helm upgrade infisical infisical-helm-charts/infisical --values values.yaml --wait + helm upgrade infisical infisical-helm-charts/infisical --values values.yaml --wait --install if [[ $(helm status infisical) == *"FAILED"* ]]; then echo "Helm upgrade failed" exit 1 From 374c8e4a1ab7765181909743cacd48391b376bb5 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 8 Jul 2023 13:47:13 -0400 Subject: [PATCH 033/189] Update ingress class values.yaml --- .github/values.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/values.yaml b/.github/values.yaml index 0d818940f..54a56e076 100644 --- a/.github/values.yaml +++ b/.github/values.yaml @@ -58,8 +58,8 @@ mongodbConnection: ingress: enabled: true - annotations: - kubernetes.io/ingress.class: "nginx" + # annotations: + # kubernetes.io/ingress.class: "nginx" # cert-manager.io/issuer: letsencrypt-nginx hostName: gamma.infisical.com ## <- Replace with your own domain frontend: From a3b42286856cd47440a6d5ba9852a9b4a84ba566 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 8 Jul 2023 16:15:45 -0400 Subject: [PATCH 034/189] add path to export command --- cli/packages/cmd/export.go | 8 +++++++- docs/cli/commands/export.mdx | 9 +++++++++ docs/cli/commands/secrets.mdx | 25 +++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/cli/packages/cmd/export.go b/cli/packages/cmd/export.go index c41750134..475aee802 100644 --- a/cli/packages/cmd/export.go +++ b/cli/packages/cmd/export.go @@ -70,7 +70,12 @@ var exportCmd = &cobra.Command{ util.HandleError(err, "Unable to parse flag") } - secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, WorkspaceId: projectId}) + secretsPath, err := cmd.Flags().GetString("path") + if err != nil { + util.HandleError(err, "Unable to parse flag") + } + + secrets, err := util.GetAllEnvironmentVariables(models.GetAllSecretsParameters{Environment: environmentName, InfisicalToken: infisicalToken, TagSlugs: tagSlugs, WorkspaceId: projectId, SecretsPath: secretsPath}) if err != nil { util.HandleError(err, "Unable to fetch secrets") } @@ -110,6 +115,7 @@ func init() { exportCmd.Flags().String("token", "", "Fetch secrets using the Infisical Token") exportCmd.Flags().StringP("tags", "t", "", "filter secrets by tag slugs") exportCmd.Flags().String("projectId", "", "manually set the projectId to fetch secrets from") + exportCmd.Flags().String("path", "/", "get secrets within a folder path") } // Format according to the format flag diff --git a/docs/cli/commands/export.mdx b/docs/cli/commands/export.mdx index 59d15ed2f..9ba15c34d 100644 --- a/docs/cli/commands/export.mdx +++ b/docs/cli/commands/export.mdx @@ -99,6 +99,15 @@ Export environment variables from the platform into a file format. Default value: `true` + + The `--path` flag indicates which project folder secrets will be injected from. + + ```bash + # Example + infisical export --path="/path/to/folder" --env=dev + ``` + + When working with tags, you can use this flag to filter and retrieve only secrets that are associated with a specific tag(s). diff --git a/docs/cli/commands/secrets.mdx b/docs/cli/commands/secrets.mdx index 3b1ccd3fb..a15829d5f 100644 --- a/docs/cli/commands/secrets.mdx +++ b/docs/cli/commands/secrets.mdx @@ -51,6 +51,14 @@ This command enables you to perform CRUD (create, read, update, delete) operatio Default value: `dev` + + The `--path` flag indicates which project folder secrets will be injected from. + + ```bash + # Example + infisical secrets --path="/" --env=dev + ``` + @@ -90,6 +98,15 @@ $ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jeb Default value: `dev` + + The `--path` flag indicates which project folder secrets will be injected from. + + ```bash + # Example + infisical secrets set ... --path="/" + ``` + + @@ -108,6 +125,14 @@ $ infisical secrets set STRIPE_API_KEY=sjdgwkeudyjwe DOMAIN=example.com HASH=jeb Default value: `dev` + + The `--path` flag indicates which project folder secrets will be injected from. + + ```bash + # Example + infisical secrets delete ... --path="/" + ``` + From 628bc711c25bb2a8d9218b701b0d2745e0b63746 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 8 Jul 2023 21:12:05 -0400 Subject: [PATCH 035/189] update k8 docks for quick start --- docs/documentation/getting-started/kubernetes.mdx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/documentation/getting-started/kubernetes.mdx b/docs/documentation/getting-started/kubernetes.mdx index 495f3445e..4585e7ce1 100644 --- a/docs/documentation/getting-started/kubernetes.mdx +++ b/docs/documentation/getting-started/kubernetes.mdx @@ -61,14 +61,18 @@ metadata: spec: # The host that should be used to pull secrets from. If left empty, the value specified in Global configuration will be used hostAPI: https://app.infisical.com/api + resyncInterval: authentication: - serviceToken: - serviceTokenSecretReference: # <-- The secret's namespaced name that holds the project token for authentication in step 1 + serviceToken: + serviceTokenSecretReference: secretName: service-token secretNamespace: option - managedSecretReference: + secretsScope: + envSlug: dev + secretsPath: "/" + managedSecretReference: secretName: managed-secret # <-- the name of kubernetes secret that will be created - secretNamespace: default # <-- in what namespace it will be created in + secretNamespace: default # <-- where the kubernetes secret should be created ``` ``` From 25b167332141eaa60e7c1aa1d7e4c02ead391ea7 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 8 Jul 2023 21:48:06 -0400 Subject: [PATCH 036/189] improve k8 operator docs --- docs/integrations/platforms/kubernetes.mdx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/integrations/platforms/kubernetes.mdx b/docs/integrations/platforms/kubernetes.mdx index 62af3aca5..75715e144 100644 --- a/docs/integrations/platforms/kubernetes.mdx +++ b/docs/integrations/platforms/kubernetes.mdx @@ -38,7 +38,7 @@ The operator can be install via [Helm](helm.sh) or [kubectl](https://github.com/ ## Sync Infisical Secrets to your cluster -To retrieve secrets from an Infisical project and save them as native Kubernetes secrets within a specific namespace, utilize the `InfisicalSecret` custom resource definition (CRD). +Once you have installed the operator to your cluster, you'll need to create a `InfisicalSecret` custom resource definition (CRD). ```yaml example-infisical-secret-crd.yaml apiVersion: secrets.infisical.com/v1alpha1 @@ -151,6 +151,14 @@ The managed secret be should be created in the same namespace as the deployment +### Apply the Infisical CRD to your cluster +Once you have configured the Infisical CRD with the required fields, you can apply it to your cluster. +After applying, you should notice that the managed secret has been created in the desired namespace your specified. + +``` +kubectl apply -f example-infisical-secret-crd.yaml +``` + ### Verify managed secret creation To verify that the operator has successfully created the managed secret, you can check the secrets in the namespace that was specified. From 7020c7aeabf30c1e38dfb441866ab0e50d48d5f8 Mon Sep 17 00:00:00 2001 From: Afrie Irham Date: Sun, 9 Jul 2023 15:08:25 +0800 Subject: [PATCH 037/189] fix: completing allow user to press Enter in forgot password flow --- frontend/src/pages/password-reset.tsx | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/frontend/src/pages/password-reset.tsx b/frontend/src/pages/password-reset.tsx index 4ce6d4004..30efc2c3b 100644 --- a/frontend/src/pages/password-reset.tsx +++ b/frontend/src/pages/password-reset.tsx @@ -1,6 +1,6 @@ import crypto from "crypto"; -import { useState } from "react"; +import { FormEvent, useState } from "react"; import Image from "next/image"; import { useRouter } from "next/router"; import { faCheck, faX } from "@fortawesome/free-solid-svg-icons"; @@ -24,6 +24,7 @@ const client = new jsrp.client(); export default function PasswordReset() { const [verificationToken, setVerificationToken] = useState(""); const [step, setStep] = useState(1); + const [loading, setLoading] = useState(false); const [backupKey, setBackupKey] = useState(""); const [privateKey, setPrivateKey] = useState(""); const [newPassword, setNewPassword] = useState(""); @@ -38,7 +39,8 @@ export default function PasswordReset() { const email = (parsedUrl.to as string)?.replace(" ", "+").trim(); // Unencrypt the private key with a backup key - const getEncryptedKeyHandler = async () => { + const getEncryptedKeyHandler = async (e: FormEvent) => { + e.preventDefault(); try { const result = await getBackupEncryptedPrivateKey({ verificationToken }); @@ -57,7 +59,8 @@ export default function PasswordReset() { }; // If everything is correct, reset the password - const resetPasswordHandler = async () => { + const resetPasswordHandler = async (e: FormEvent) => { + e.preventDefault(); const errorCheck = passwordCheck({ password: newPassword, setPasswordErrorLength, @@ -125,6 +128,7 @@ export default function PasswordReset() { if (response?.status === 200) { router.push("/login"); } + setLoading(false) }); } ); @@ -162,7 +166,7 @@ export default function PasswordReset() { // Input backup key const stepInputBackupKey = ( -

    + ); // Enter new password const stepEnterNewPassword = ( -
    +

    Enter new password

    @@ -269,13 +274,15 @@ export default function PasswordReset() {
    -
    + ); return ( From 93264fd2d07a0521d6bd867a862d8e7b01edfa70 Mon Sep 17 00:00:00 2001 From: Reza Rahemtola Date: Sun, 9 Jul 2023 15:40:59 +0200 Subject: [PATCH 038/189] docs: Fix wrong integration name --- docs/self-hosting/configuration/envars.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/self-hosting/configuration/envars.mdx b/docs/self-hosting/configuration/envars.mdx index ef9fc1fd0..fddf6f82e 100644 --- a/docs/self-hosting/configuration/envars.mdx +++ b/docs/self-hosting/configuration/envars.mdx @@ -105,7 +105,7 @@ Other environment variables are listed below to increase the functionality of yo - OAuth2 slug for Netlify integration + OAuth2 slug for Vercel integration From 5ef2508736a9717c6e7453651f23a01ec2eeb6dc Mon Sep 17 00:00:00 2001 From: Reza Rahemtola Date: Sun, 9 Jul 2023 15:44:25 +0200 Subject: [PATCH 039/189] docs: Add missing pull request contribution link --- docs/contributing/overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributing/overview.mdx b/docs/contributing/overview.mdx index 76475862d..f73422388 100644 --- a/docs/contributing/overview.mdx +++ b/docs/contributing/overview.mdx @@ -30,7 +30,7 @@ If you're ever in doubt about whether or not a proposed feature aligns with Infi ## Writing and submitting code Anyone can contribute code to Infisical. To get started, check out the [local development guide](/contributing/developing), make your changes, and submit a pull request to the main repository -adhering to the [pull request guide](/). +adhering to the [pull request guide](/contributing/pull-requests). ## Licensing From 63544648596ee1aaa964ac709165202f3e447c4d Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sun, 9 Jul 2023 22:40:00 -0400 Subject: [PATCH 040/189] update terraform docs with path and env --- docs/integrations/frameworks/terraform.mdx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/integrations/frameworks/terraform.mdx b/docs/integrations/frameworks/terraform.mdx index 0826a833e..2643ca5af 100644 --- a/docs/integrations/frameworks/terraform.mdx +++ b/docs/integrations/frameworks/terraform.mdx @@ -44,10 +44,17 @@ provider "infisical" { ### 3. Fetch Infisical Secrets -Use the `infisical_secrets` data source to fetch your secrets. This is defined with an empty block `{}` as the provider automatically fetches all secrets associated with your service token. +Use the `infisical_secrets` data source to fetch your secrets. In this block, you must set the `env_slug` and `folder_path` to scope the secrets you want. + +`env_slug` is the slug of the environment name. This slug name can be found under the project settings page on the Infisical dashboard. + +`folder_path` is the path to the folder in a given environment. The path `/` for root of the environment where as `/folder1` is the folder at the root of the environment. ```hcl main.tf -data "infisical_secrets" "my-secrets" {} +data "infisical_secrets" "my-secrets" { + env_slug = "dev" + folder_path = "/some-folder/another-folder" +} ``` ### 4. Define Outputs From 13a81c9222e2f83acda803332a14d801946f923a Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sun, 9 Jul 2023 23:25:35 -0400 Subject: [PATCH 041/189] add 401 error message for get secrets in cli --- cli/packages/api/api.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cli/packages/api/api.go b/cli/packages/api/api.go index a94be0ab0..5afec6782 100644 --- a/cli/packages/api/api.go +++ b/cli/packages/api/api.go @@ -246,7 +246,11 @@ func CallGetSecretsV3(httpClient *resty.Client, request GetEncryptedSecretsV3Req } if response.IsError() { - return GetEncryptedSecretsV3Response{}, fmt.Errorf("CallGetSecretsV3: Unsuccessful response. Please make sure your secret path, workspace and environment name are all correct [response=%s]", response) + if response.StatusCode() == 401 { + return GetEncryptedSecretsV3Response{}, fmt.Errorf("CallGetSecretsV3: Request to access secrets with [environment=%v] [path=%v] [workspaceId=%v] is denied. Please check if your authentication method has access to requested scope", request.Environment, request.SecretPath, request.WorkspaceId) + } else { + return GetEncryptedSecretsV3Response{}, fmt.Errorf("CallGetSecretsV3: Unsuccessful response. Please make sure your secret path, workspace and environment name are all correct [response=%v]", response.RawResponse) + } } return secretsResponse, nil From 34fef4aaadf05d4b7f409dc55b3ef09192e61dde Mon Sep 17 00:00:00 2001 From: Juned Khan Date: Mon, 10 Jul 2023 12:16:51 +0530 Subject: [PATCH 042/189] Implemented feature to remove the trailing slash from the domain url --- cli/packages/cmd/login.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cli/packages/cmd/login.go b/cli/packages/cmd/login.go index c629130a4..f8d397233 100644 --- a/cli/packages/cmd/login.go +++ b/cli/packages/cmd/login.go @@ -73,7 +73,6 @@ var loginCmd = &cobra.Command{ return } } - //override domain domainQuery := true if config.INFISICAL_URL_MANUAL_OVERRIDE != "" && config.INFISICAL_URL_MANUAL_OVERRIDE != util.INFISICAL_DEFAULT_API_URL { @@ -322,6 +321,8 @@ func DomainOverridePrompt() (bool, error) { ) options := []string{PRESET, OVERRIDE} + //trim the '/' from the end of the domain url + config.INFISICAL_URL_MANUAL_OVERRIDE = strings.TrimRight(config.INFISICAL_URL_MANUAL_OVERRIDE, "/") optionsPrompt := promptui.Select{ Label: fmt.Sprintf("Current INFISICAL_API_URL Domain Override: %s", config.INFISICAL_URL_MANUAL_OVERRIDE), Items: options, @@ -380,7 +381,8 @@ func askForDomain() error { if err != nil { return err } - + //trimmed the '/' from the end of the self hosting url + domain = strings.TrimRight(domain, "/") //set api and login url config.INFISICAL_URL = fmt.Sprintf("%s/api", domain) config.INFISICAL_LOGIN_URL = fmt.Sprintf("%s/login", domain) From e91e7f96c2753c604de4c90f5074dc42e3cab9db Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 10 Jul 2023 13:48:46 +0700 Subject: [PATCH 043/189] Update free plan logic --- .../controllers/v1/organizationsController.ts | 24 +++++++ backend/src/ee/routes/v1/organizations.ts | 15 +++++ backend/src/ee/services/EELicenseService.ts | 12 +++- .../v2/UpgradePlanModal/UpgradePlanModal.tsx | 63 ++++++++++++++----- frontend/src/hooks/api/organization/index.ts | 4 +- .../src/hooks/api/organization/queries.tsx | 24 ++++++- frontend/src/hooks/api/organization/types.ts | 5 ++ frontend/src/hooks/api/subscriptions/types.ts | 1 + .../AppLayout/components/NavBar/NavBar.tsx | 31 ++++++--- .../BillingCloudTab/PreviewSection.tsx | 33 ++++++++-- 10 files changed, 180 insertions(+), 32 deletions(-) diff --git a/backend/src/ee/controllers/v1/organizationsController.ts b/backend/src/ee/controllers/v1/organizationsController.ts index fb13a6575..652fc4b32 100644 --- a/backend/src/ee/controllers/v1/organizationsController.ts +++ b/backend/src/ee/controllers/v1/organizationsController.ts @@ -27,6 +27,30 @@ export const getOrganizationPlan = async (req: Request, res: Response) => { }); } +/** + * Return checkout url for pro trial + * @param req + * @param res + * @returns + */ +export const startOrganizationTrial = async (req: Request, res: Response) => { + const { organizationId } = req.params; + const { success_url } = req.body; + + const { data: { url } } = await licenseServerKeyRequest.post( + `${await getLicenseServerUrl()}/api/license-server/v1/customers/${req.organization.customerId}/session/trial`, + { + success_url + } + ); + + EELicenseService.delPlan(organizationId); + + return res.status(200).send({ + url + }); +} + /** * Return the organization's current plan's billing info * @param req diff --git a/backend/src/ee/routes/v1/organizations.ts b/backend/src/ee/routes/v1/organizations.ts index 37be3a96d..c9104d964 100644 --- a/backend/src/ee/routes/v1/organizations.ts +++ b/backend/src/ee/routes/v1/organizations.ts @@ -41,6 +41,21 @@ router.get( organizationsController.getOrganizationPlan ); +router.post( + "/:organizationId/session/trial", + requireAuth({ + acceptedAuthModes: ["jwt"], + }), + requireOrganizationAuth({ + acceptedRoles: [OWNER, ADMIN, MEMBER], + acceptedStatuses: [ACCEPTED], + }), + param("organizationId").exists().trim(), + body("success_url").exists().trim(), + validateRequest, + organizationsController.startOrganizationTrial +); + router.get( "/:organizationId/plan/billing", requireAuth({ diff --git a/backend/src/ee/services/EELicenseService.ts b/backend/src/ee/services/EELicenseService.ts index b4bb97753..88220933d 100644 --- a/backend/src/ee/services/EELicenseService.ts +++ b/backend/src/ee/services/EELicenseService.ts @@ -32,6 +32,7 @@ interface FeatureSet { auditLogs: boolean; status: 'incomplete' | 'incomplete_expired' | 'trialing' | 'active' | 'past_due' | 'canceled' | 'unpaid' | null; trial_end: number | null; + has_used_trial: boolean; } /** @@ -63,7 +64,8 @@ class EELicenseService { customAlerts: true, auditLogs: false, status: null, - trial_end: null + trial_end: null, + has_used_trial: true } public localFeatureSet: NodeCache; @@ -71,7 +73,7 @@ class EELicenseService { constructor() { this._isLicenseValid = true; this.localFeatureSet = new NodeCache({ - stdTTL: 300, + stdTTL: 60, }); } @@ -112,6 +114,12 @@ class EELicenseService { await this.getPlan(organizationId, workspaceId); } } + + public async delPlan(organizationId: string) { + if (this.instanceType === "cloud") { + this.localFeatureSet.del(`${organizationId}-`); + } + } public async initGlobalFeatureSet() { const licenseServerKey = await getLicenseServerKey(); diff --git a/frontend/src/components/v2/UpgradePlanModal/UpgradePlanModal.tsx b/frontend/src/components/v2/UpgradePlanModal/UpgradePlanModal.tsx index 968f131bc..e09d35920 100644 --- a/frontend/src/components/v2/UpgradePlanModal/UpgradePlanModal.tsx +++ b/frontend/src/components/v2/UpgradePlanModal/UpgradePlanModal.tsx @@ -1,9 +1,11 @@ import Link from "next/link"; - import { useSubscription } from "@app/context"; - -import { Button } from "../Button"; +import { Button } from "@app/components/v2"; import { Modal, ModalClose, ModalContent } from "../Modal"; +import { useOrganization } from "@app/context"; +import { + useGetOrgTrialUrl +} from "@app/hooks/api"; type Props = { isOpen?: boolean; @@ -13,32 +15,61 @@ type Props = { export const UpgradePlanModal = ({ text, isOpen, onOpenChange }: Props): JSX.Element => { const { subscription } = useSubscription(); + const { currentOrg } = useOrganization(); + const { mutateAsync, isLoading } = useGetOrgTrialUrl(); const link = (subscription && subscription.slug !== null) ? `/settings/billing/${localStorage.getItem("projectData.id") as string}` : "https://infisical.com/scheduledemo"; + const handleUpgradeBtnClick = async () => { + try { + if (!subscription || !currentOrg) return; + + if (!subscription.has_used_trial) { + // direct user to start pro trial + + const url = await mutateAsync({ + orgId: currentOrg._id, + success_url: window.location.href + }); + + window.location.href = url; + } else { + // direct user to upgrade their plan + window.location.href = link; + } + + } catch (err) { + console.error(err); + } + } + return ( - - , - - - - ]} >

    {text}

    Upgrade and get access to this, as well as to other powerful enhancements.

    +
    + + +
    ) diff --git a/frontend/src/hooks/api/organization/index.ts b/frontend/src/hooks/api/organization/index.ts index cffa80d63..d523e1c04 100644 --- a/frontend/src/hooks/api/organization/index.ts +++ b/frontend/src/hooks/api/organization/index.ts @@ -13,4 +13,6 @@ export { useGetOrgPmtMethods, useGetOrgTaxIds, useRenameOrg, - useUpdateOrgBillingDetails} from "./queries"; + useGetOrgTrialUrl, + useUpdateOrgBillingDetails +} from "./queries"; diff --git a/frontend/src/hooks/api/organization/queries.tsx b/frontend/src/hooks/api/organization/queries.tsx index d3f161f64..293ad7022 100644 --- a/frontend/src/hooks/api/organization/queries.tsx +++ b/frontend/src/hooks/api/organization/queries.tsx @@ -10,8 +10,10 @@ import { PlanBillingInfo, PmtMethod, ProductsTable, - RenameOrgDTO, - TaxID} from "./types"; + RenameOrgDTO, + GetOrgTrialUrlDTO, + TaxID +} from "./types"; const organizationKeys = { getUserOrganization: ["organization"] as const, @@ -47,6 +49,24 @@ export const useRenameOrg = () => { }); }; +export const useGetOrgTrialUrl = () => { + return useMutation({ + mutationFn: async ({ + orgId, + success_url + }: { + orgId: string; + success_url: string; + }) => { + const { data: { url } } = await apiRequest.post(`/api/v1/organizations/${orgId}/session/trial`, { + success_url + }) + + return url; + } + }); +}; + export const useGetOrgPlanBillingInfo = (organizationId: string) => { return useQuery({ queryKey: organizationKeys.getOrgPlanBillingInfo(organizationId), diff --git a/frontend/src/hooks/api/organization/types.ts b/frontend/src/hooks/api/organization/types.ts index a33a7f875..b2573400b 100644 --- a/frontend/src/hooks/api/organization/types.ts +++ b/frontend/src/hooks/api/organization/types.ts @@ -10,6 +10,11 @@ export type RenameOrgDTO = { newOrgName: string; }; +export type GetOrgTrialUrlDTO = { + orgId: string; + success_url: string; +} + export type BillingDetails = { name: string; email: string; diff --git a/frontend/src/hooks/api/subscriptions/types.ts b/frontend/src/hooks/api/subscriptions/types.ts index ca50255c8..d3d673764 100644 --- a/frontend/src/hooks/api/subscriptions/types.ts +++ b/frontend/src/hooks/api/subscriptions/types.ts @@ -15,4 +15,5 @@ export type SubscriptionPlan = { environmentLimit: number; status: "incomplete" | "incomplete_expired" | "trialing" | "active" | "past_due" | "canceled" | "unpaid" | null; trial_end: number | null; + has_used_trial: boolean; }; diff --git a/frontend/src/layouts/AppLayout/components/NavBar/NavBar.tsx b/frontend/src/layouts/AppLayout/components/NavBar/NavBar.tsx index b263a25ff..52fa0ba5b 100644 --- a/frontend/src/layouts/AppLayout/components/NavBar/NavBar.tsx +++ b/frontend/src/layouts/AppLayout/components/NavBar/NavBar.tsx @@ -22,7 +22,10 @@ import {TFunction} from "i18next"; import guidGenerator from "@app/components/utilities/randomId"; import { useOrganization, useSubscription,useUser } from "@app/context"; -import { useLogoutUser } from "@app/hooks/api"; +import { + useLogoutUser, + useGetOrgTrialUrl +} from "@app/hooks/api"; const supportOptions = (t: TFunction) => [ [ @@ -67,6 +70,7 @@ export const Navbar = () => { const { subscription } = useSubscription(); const { currentOrg, orgs } = useOrganization(); + const { mutateAsync, isLoading } = useGetOrgTrialUrl(); const { user } = useUser(); const logout = useLogoutUser(); @@ -346,12 +350,25 @@ export const Navbar = () => {
    - {subscription && subscription.status === "trialing" && subscription.trial_end && ( -
    -

    - {`Currently trialing the ${formatPlanSlug(subscription.slug)} plan until ${formatDate(subscription.trial_end).formattedDate} - ${formatDate(subscription.trial_end).remainingDays} day(s) left. `} - Add a card to avoid being downgraded to the Starter plan afterward → -

    + {subscription && subscription.slug === "starter" && !subscription.has_used_trial && ( +
    +
    )}
    diff --git a/frontend/src/views/Settings/BillingSettingsPage/components/BillingCloudTab/PreviewSection.tsx b/frontend/src/views/Settings/BillingSettingsPage/components/BillingCloudTab/PreviewSection.tsx index 23a4be24d..cccbfaf2e 100644 --- a/frontend/src/views/Settings/BillingSettingsPage/components/BillingCloudTab/PreviewSection.tsx +++ b/frontend/src/views/Settings/BillingSettingsPage/components/BillingCloudTab/PreviewSection.tsx @@ -2,7 +2,9 @@ import { Button } from "@app/components/v2"; import { useOrganization,useSubscription } from "@app/context"; import { useCreateCustomerPortalSession, - useGetOrgPlanBillingInfo} from "@app/hooks/api"; + useGetOrgPlanBillingInfo, + useGetOrgTrialUrl +} from "@app/hooks/api"; import { usePopUp } from "@app/hooks/usePopUp"; import { ManagePlansModal } from "./ManagePlansModal"; @@ -11,6 +13,7 @@ export const PreviewSection = () => { const { currentOrg } = useOrganization(); const { subscription, isLoading: isSubscriptionLoading } = useSubscription(); const { data, isLoading } = useGetOrgPlanBillingInfo(currentOrg?._id ?? ""); + const getOrgTrialUrl = useGetOrgTrialUrl(); const createCustomerPortalSession = useCreateCustomerPortalSession(); const { popUp, handlePopUpOpen, handlePopUpToggle } = usePopUp([ @@ -42,19 +45,41 @@ export const PreviewSection = () => { .replace(/-/g, " "); } + const handleUpgradeBtnClick = async () => { + try { + if (!subscription || !currentOrg) return; + + if (!subscription.has_used_trial) { + // direct user to start pro trial + const url = await getOrgTrialUrl.mutateAsync({ + orgId: currentOrg._id, + success_url: window.location.href + }); + + window.location.href = url; + } else { + // open compare plans modal + handlePopUpOpen("managePlan"); + } + } catch (err) { + console.error(err); + } + } + return (
    - {!isSubscriptionLoading && subscription?.slug !== "enterprise" && subscription?.slug !== "pro" && subscription?.slug !== "pro-annual" && ( + {subscription && subscription?.slug !== "enterprise" && subscription?.slug !== "pro" && subscription?.slug !== "pro-annual" && (

    Become Infisical

    Unlimited members, projects, RBAC, smart alerts, and so much more

    )} From bdf4ebd1bcfddcdbfe81b1d8ee6f6a13f0d3b771 Mon Sep 17 00:00:00 2001 From: Vladyslav Matsiiako Date: Sun, 9 Jul 2023 23:58:27 -0700 Subject: [PATCH 044/189] second iteration of the new sidebar --- frontend/public/images/kubernetes-asset.png | Bin 0 -> 182130 bytes ...em-outline-103-coin-cash-monetization.json | 1 + .../system-outline-165-view-carousel.json | 1 + frontend/src/components/basic/Layout.tsx | 385 ---------------- .../src/components/dashboard/DropZone.tsx | 2 +- .../src/components/login/InitialLoginStep.tsx | 5 +- frontend/src/components/login/LoginStep.tsx | 133 ------ frontend/src/components/login/MFAStep.tsx | 12 +- .../components/login/PasswordInputStep.tsx | 5 +- .../components/navigation/NavBarDashboard.tsx | 316 ------------- .../src/components/navigation/NavHeader.tsx | 14 +- .../src/components/signup/TeamInviteStep.tsx | 8 +- .../utilities/checks/OnboardingCheck.ts | 10 - .../components/utilities/intercom/intercom.ts | 1 - .../src/components/v2/Dropdown/Dropdown.tsx | 4 +- frontend/src/components/v2/Menu/Menu.tsx | 49 +- .../src/ee/components/ActivitySideBar.tsx | 2 +- frontend/src/layouts/AppLayout/AppLayout.tsx | 430 +++++++++++------- frontend/src/pages/404.tsx | 9 +- frontend/src/pages/dashboard.tsx | 14 +- frontend/src/pages/home/[id].tsx | 244 ---------- frontend/src/pages/login.tsx | 13 +- frontend/src/pages/noprojects.tsx | 55 --- .../[id].tsx => org/[id]/billing/index.tsx} | 0 frontend/src/pages/org/[id]/members/index.tsx | 21 + .../org/{[id].tsx => [id]/overview/index.tsx} | 405 +++++++++-------- .../org/[id] => org/[id]/settings}/index.tsx | 0 .../[id].tsx => personal-settings.tsx} | 0 .../[id]/audit-logs/index.tsx} | 14 +- .../[id]/members/index.tsx} | 22 +- .../[id]/secrets/index.tsx} | 0 .../[id]/settings/index.tsx} | 0 frontend/src/pages/saml-sso.tsx | 10 +- frontend/src/pages/signup.tsx | 10 +- frontend/src/pages/signupinvite.tsx | 17 +- .../DashboardPage/DashboardEnvOverview.tsx | 5 +- .../src/views/DashboardPage/DashboardPage.tsx | 5 +- .../IntegrationsPage/IntegrationsPage.tsx | 6 +- .../CloudIntegrationSection.tsx | 5 +- .../IntegrationsSection.tsx | 10 +- .../src/views/Org/MembersPage/MembersPage.tsx | 238 ++++++++++ .../OrgIncidentContactsTable.tsx | 200 ++++++++ .../OrgIncidentContactsTable/index.tsx | 1 + .../OrgMembersTable/OrgMembersTable.tsx | 349 ++++++++++++++ .../components/OrgMembersTable/index.tsx | 1 + .../OrgNameChangeSection.tsx | 69 +++ .../components/OrgNameChangeSection/index.tsx | 1 + .../OrgServiceAccountsTable.tsx | 367 +++++++++++++++ .../OrgServiceAccountsTable/index.tsx | 1 + .../Org/MembersPage/components/index.tsx | 5 + frontend/src/views/Org/MembersPage/index.tsx | 1 + .../BillingSettingsPage.tsx | 7 +- .../BillingTabGroup/BillingTabGroup.tsx | 2 +- .../OrgSettingsPage/OrgSettingsPage.tsx | 58 +-- .../OrgIncidentContactsSection.tsx | 4 +- .../OrgMembersSection/OrgMembersSection.tsx | 4 +- .../OrgNameChangeSection.tsx | 8 +- .../OrgServiceAccountsTable.tsx | 2 +- .../APIKeySection/APIKeySection.tsx | 2 +- .../ChangePasswordSection.tsx | 2 +- .../EmergencyKitSection.tsx | 2 +- .../PersonalSettingsPage.tsx | 9 +- .../PersonalTabGroup/PersonalTabGroup.tsx | 2 +- .../SecuritySection/SecuritySection.tsx | 2 +- .../SessionsSection/SessionsSection.tsx | 2 +- .../ProjectSettingsPage.tsx | 11 +- .../AutoCapitalizationSection.tsx | 2 +- .../DeleteProjectSection.tsx | 16 +- .../components/E2EESection/E2EESection.tsx | 2 +- .../EnvironmentSection/EnvironmentSection.tsx | 2 +- .../ProjectIndexSecretsSection.tsx | 2 +- .../ProjectNameChangeSection.tsx | 2 +- .../ProjectTabGroup/ProjectTabGroup.tsx | 2 +- .../SecretTagsSection/SecretTagsSection.tsx | 2 +- .../ServiceTokenSection.tsx | 2 +- 75 files changed, 1927 insertions(+), 1698 deletions(-) create mode 100644 frontend/public/images/kubernetes-asset.png create mode 100644 frontend/public/lotties/system-outline-103-coin-cash-monetization.json create mode 100644 frontend/public/lotties/system-outline-165-view-carousel.json delete mode 100644 frontend/src/components/basic/Layout.tsx delete mode 100644 frontend/src/components/login/LoginStep.tsx delete mode 100644 frontend/src/components/navigation/NavBarDashboard.tsx delete mode 100644 frontend/src/pages/home/[id].tsx delete mode 100644 frontend/src/pages/noprojects.tsx rename frontend/src/pages/{settings/billing/[id].tsx => org/[id]/billing/index.tsx} (100%) create mode 100644 frontend/src/pages/org/[id]/members/index.tsx rename frontend/src/pages/org/{[id].tsx => [id]/overview/index.tsx} (56%) rename frontend/src/pages/{settings/org/[id] => org/[id]/settings}/index.tsx (100%) rename frontend/src/pages/{settings/personal/[id].tsx => personal-settings.tsx} (100%) rename frontend/src/pages/{activity/[id].tsx => project/[id]/audit-logs/index.tsx} (93%) rename frontend/src/pages/{users/[id].tsx => project/[id]/members/index.tsx} (89%) rename frontend/src/pages/{dashboard/[id].tsx => project/[id]/secrets/index.tsx} (100%) rename frontend/src/pages/{settings/project/[id].tsx => project/[id]/settings/index.tsx} (100%) create mode 100644 frontend/src/views/Org/MembersPage/MembersPage.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/OrgIncidentContactsTable/OrgIncidentContactsTable.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/OrgIncidentContactsTable/index.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/OrgMembersTable/OrgMembersTable.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/OrgMembersTable/index.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/OrgNameChangeSection/OrgNameChangeSection.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/OrgNameChangeSection/index.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/OrgServiceAccountsTable/OrgServiceAccountsTable.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/OrgServiceAccountsTable/index.tsx create mode 100644 frontend/src/views/Org/MembersPage/components/index.tsx create mode 100644 frontend/src/views/Org/MembersPage/index.tsx diff --git a/frontend/public/images/kubernetes-asset.png b/frontend/public/images/kubernetes-asset.png new file mode 100644 index 0000000000000000000000000000000000000000..a0938b8e87c552abcbf18a7c4e6bc21ce2d4113c GIT binary patch literal 182130 zcmV($K;yrOP)oL9zc&Qd1jmlcPGs-Zopsz>)-z8|Iug~W=Z=SC|-~Ig=|NdOxaBJsPxawT@`J(&%J+G>{+n?~N^BoR7 zbqy(Q=(;Z4_x<;GpMLJ=8nV!Te~!85@bh8uI`_kb)HS@2j?ev<`}(vkDSht!`{!ai zBdhag;r@I_o-Hi=A{?<=pC;$BYueD)pT3{=+(=FPAAS!@KhNLut-jATdi43oO1zCm zhpvwtrlW_3BJD}Pm?*XVd4Jy@nf%?)ef0G7H}`j&`OQnxmm*2|olDi8yEgsN26-o` zDYt&{l=LlHQ%}*SKK@*Pjj!~4Rxo{l9hC!qf2w*?#-GY%}G1+O-~@_Wy3P z>0kF_)K6RKH-s+H0NDTgWgoKTvOh1Zk~Q1@NK5zhS8&s9T_J5`>%oeCW0d{v(0fl? zV?1driBIDb2OD9#899^so1cL=dWnyPY3x7jh5r5A*9!o~H-aLA0!+0In;kVcjHi^L9fBT>RZ@=AJL9T-6#>?3Q zHlGBe^wm~MEdfsl_0=#s;~v@2SfC>?OfK$3y!F`7kdI1X&9sj$XBIf7Yv z2eU^Z;cQ9q36K~AM+DN-Bky>wy^bE(CJ4}x+~sQ}2m@YK2?}t)z6KilZJq}0N3H?N zyRXp=cJhPh=}S;?v%%{vL&!PbL2xD0D5O6xu+09H?3ko4fU8f)t|w^F_D6iiFUqkp zElMZ*#a}a^+?}@|TR|j!v^Tc9_-8;$z(=nn>bF+{^gn&SeLjF%jE!X`S_DvHK-mh# z7flXIfpw^L4=->M{T-vd6l?M47NwScd_UU^KKnBMmeBbWKR0IZ0}FttS@&KwtZnE4a743y16;X zy3KdDZLje1e<(h*=-)}2>D{CN;j?A(7*~3N?@2(;0Q^ROv1_a>;q?x>+iqIHy~jp} z*Z;;xD|q|7?l%7ilktmRy>Jo`7D}a^QKdIi2(#E9554F64w)>rDc`qqAn5GIGQZV| zX?|Nw`V8=!en*FW%ic^!uXvaCo!$R7pnp+;-!Z|TU2h}*cEVT4_@ZMQalH(m3^W@U z01)WKzq+P-1!-FTM_>e#=R1yQs39CQuAn{0U&8!+_Hh(e zj6P1-%8ch44Dey=(@BpjH@wXgknd6W0rZu0Vd$^d*!9!?M-P8j<@D)P3){??Ux86$ zwdBGjwt1EKSxjgDN?uF%^dxd0xt}WGwfUtDemG-wGwtIdy>rhs-Cw>&b^(KpY0gS! z#SbFj(Lzfu%^(TEQ7v6)(1Qu(uS~;%Zb|96=DJKnN85DwQ(>`c`kmo*BQ~X!}O=;zxZ>99(H> zjW5%$D#XD16^csnCT#(d@jdqs=H2%}^WZ%QHm+V{=g
    3`t~_2OD3$7A;=}i0=z4 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 literal 0 HcmV?d00001 diff --git a/frontend/public/lotties/system-outline-103-coin-cash-monetization.json b/frontend/public/lotties/system-outline-103-coin-cash-monetization.json new file mode 100644 index 000000000..2167a770d --- /dev/null +++ b/frontend/public/lotties/system-outline-103-coin-cash-monetization.json @@ -0,0 +1 @@ +{"v":"5.8.1","fr":60,"ip":0,"op":61,"w":500,"h":500,"nm":"103-coin-cash-monetization-outline","ddd":0,"assets":[{"id":"comp_0","nm":"in-coin","fr":60,"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL ","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.301],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-270]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[-152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[-189]},{"t":59,"s":[-180]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.301,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[250,529,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":15,"s":[250,212,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":33,"s":[250,274,0],"to":[0,0,0],"ti":[0,0,0]},{"t":52,"s":[250,250,0]}],"ix":2,"l":2},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[50.75,-143.5,0],"to":[0,0,0],"ti":[0,-0.287,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[50.75,-142.667,0],"to":[0,0.087,0],"ti":[0,-0.018,0]},{"t":20,"s":[50.75,-142.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":20,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[50.75,-47,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-149.208,-195],[-128.458,-195]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":20,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[50.75,146.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-149.208,-195],[-128.458,-195]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":20,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[50.75,49.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-170.875,-195],[-150.125,-195]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.75,-195],[-192.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":20,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[50.75,243.5,0],"to":[0,0,0],"ti":[0,0.287,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[50.75,242.667,0],"to":[0,-0.087,0],"ti":[0,0.018,0]},{"t":20,"s":[50.75,242.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":20,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[49.998,50.001,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-60.999,-20.671],[-60.999,21]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.167,-20.808],[-10.167,20.863]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61,198.075],[-61,239.746]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.162,197.938],[-10.162,239.61]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[-60.999,158.689],[-61,198.08],[-61,158.689],[-60.999,102.385],[-60.999,60.364],[-61,20.995],[-61,65.266]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-47.054,158.552],[-10.162,197.943],[26.731,158.552],[-18.148,102.248],[-47.054,60.227],[-10.162,20.859],[26.731,65.13]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":0,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[-61.001,109.534],[-61,302.243],[-60.998,109.534],[-61,-83.176]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[150.425,109.397],[-10.166,302.106],[-170.757,109.397],[-10.166,-83.313]],"c":true}]},{"t":20,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":0,"s":[50],"h":1},{"t":13.33203125,"s":[50],"h":1}],"ix":2},"o":{"a":0,"k":90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":20,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[49.998,50.001,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63.001,-20.836],[63.001,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.5,-20.836],[10.5,20.836]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63,197.911],[63,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.505,197.911],[10.505,239.582]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[63.001,158.525],[63,197.915],[63,158.525],[63.001,102.221],[63.001,60.2],[63,20.831],[63,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-26.387,158.525],[10.505,197.915],[47.397,158.525],[2.519,102.221],[-26.387,60.2],[10.505,20.831],[47.397,65.102]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":13.33203125,"s":[100],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[62.999,109.369],[63,302.079],[63.002,109.369],[63,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.332,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[171.091,109.369],[10.501,302.079],[-150.09,109.369],[10.501,-83.34]],"c":true}]},{"t":20,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":13.33203125,"s":[100],"h":1}],"ix":2},"o":{"a":0,"k":-90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":20,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[50.75,-142.5,0],"to":[0,-0.018,0],"ti":[0,0.087,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[50.75,-142.667,0],"to":[0,-0.287,0],"ti":[0,0,0]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[50.75,-143.5,0],"to":[0,0,0],"ti":[0,-0.018,0]},{"t":60,"s":[50.75,-142.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":60,"st":1,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[50.75,-47,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.25,-195],[167.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[129.125,-195],[149.875,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":60,"st":1,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[50.75,146.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.25,-195],[167.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[129.125,-195],[149.875,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":60,"st":1,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[50.75,49.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[193.25,-195],[193.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[150.792,-195],[171.542,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.75,-195],[-192.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":60,"st":1,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[50.75,242.5,0],"to":[0,0.018,0],"ti":[0,-0.087,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[50.75,242.667,0],"to":[0,0.287,0],"ti":[0,0,0]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[50.75,243.5,0],"to":[0,0,0],"ti":[0,0.018,0]},{"t":60,"s":[50.75,242.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":60,"st":1,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[49.998,50.001,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.167,-20.808],[-10.167,20.863]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-60.999,-20.671],[-60.999,21]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.162,197.938],[-10.162,239.61]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61,198.075],[-61,239.746]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-47.054,158.552],[-10.162,197.943],[26.731,158.552],[-18.148,102.248],[-47.054,60.227],[-10.162,20.859],[26.731,65.13]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[-60.999,158.689],[-61,198.08],[-61,158.689],[-60.999,102.385],[-60.999,60.364],[-61,20.995],[-61,65.266]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":20,"s":[100],"h":1},{"t":30,"s":[0],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[150.425,109.397],[-10.166,302.106],[-170.757,109.397],[-10.166,-83.313]],"c":true}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[-61.001,109.534],[-61,302.243],[-60.998,109.534],[-61,-83.176]],"c":true}]},{"t":60,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":20,"s":[100],"h":1},{"t":23.5,"s":[100],"h":1},{"t":30,"s":[50],"h":1}],"ix":2},"o":{"a":0,"k":90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":60,"st":1,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":".primary.design","cl":"primary design","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-180,"ix":10},"p":{"a":0,"k":[49.998,50.001,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.5,-20.836],[10.5,20.836]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63.001,-20.836],[63.001,20.836]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.505,197.911],[10.505,239.582]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63,197.911],[63,239.582]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-26.387,158.525],[10.505,197.915],[47.397,158.525],[2.519,102.221],[-26.387,60.2],[10.505,20.831],[47.397,65.102]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[63.001,158.525],[63,197.915],[63,158.525],[63.001,102.221],[63.001,60.2],[63,20.831],[63,65.102]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":20,"s":[0],"h":1},{"t":23.5,"s":[0],"h":1},{"t":30,"s":[100],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":23.5,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[171.091,109.369],[10.501,302.079],[-150.09,109.369],[10.501,-83.34]],"c":true}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[62.999,109.369],[63,302.079],[63.002,109.369],[63,-83.34]],"c":true}]},{"t":60,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":20,"s":[50],"h":1},{"t":23.5,"s":[50],"h":1},{"t":30,"s":[100],"h":1}],"ix":2},"o":{"a":0,"k":-90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":60,"st":1,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.186,0.025],[-0.025,0],[-0.022,0],[0,-15.761],[-8.644,0],[0,8.643],[25.476,6.899],[0,0],[8.644,0],[0,-8.643],[0,0],[0,-26.851],[-16.456,-9.535],[-1.805,-1.08],[0,0],[0,-14.091],[13.187,-0.023],[0.025,0],[0.025,0],[0,17.49],[8.644,0],[0,-8.643],[-26.389,-5.847],[0,0],[-8.644,0],[0,8.643],[0,0],[0,26.864],[11.729,11.188],[19.101,11.424],[0,0],[1.892,1.096],[0,12.245]],"o":[[0.025,0],[0.022,0],[15.753,0.033],[0,8.643],[8.644,0],[0,-27.629],[0,0],[0,-8.643],[-8.644,0],[0,0],[-26.386,5.846],[0,30.906],[1.768,1.024],[0,0],[37.853,22.64],[0,17.49],[-0.025,0],[-0.025,0],[-13.187,-0.023],[0,-8.643],[-8.644,0],[0,26.864],[0,0],[0,8.643],[8.644,0],[0,0],[26.389,-5.847],[0,-15.958],[-9.731,-9.283],[0,0],[-1.932,-1.155],[-15.848,-9.183],[0,-17.472]],"v":[[-0.079,-72.891],[-0.005,-72.888],[0.061,-72.891],[28.621,-44.271],[44.271,-28.621],[59.921,-44.271],[15.645,-102.107],[15.645,-130.209],[-0.005,-145.859],[-15.656,-130.209],[-15.656,-102.519],[-59.921,-49.174],[-22.985,3.135],[-17.618,6.278],[-15.969,7.264],[28.621,49.151],[0.075,72.891],[0,72.887],[-0.074,72.891],[-28.621,49.151],[-44.271,33.501],[-59.921,49.151],[-15.65,102.519],[-15.65,130.209],[0,145.859],[15.651,130.209],[15.651,102.519],[59.921,49.151],[42.73,9.364],[0.097,-19.598],[-1.548,-20.583],[-7.292,-23.947],[-28.621,-49.174]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[250.003,250.003],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[97.631,0],[0,97.631],[-97.631,0],[0,-97.631]],"o":[[-97.631,0],[0,-97.631],[97.631,0],[0,97.631]],"v":[[0,177.059],[-177.059,0],[0,-177.059],[177.059,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[114.89,0],[0,-114.89],[-114.89,0],[0,114.89]],"o":[[-114.89,0],[0,114.89],[114.89,0],[0,-114.89]],"v":[[0,-208.359],[-208.359,0],[0,208.359],[208.359,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,249.999],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":60,"op":300,"st":0,"bm":0}]},{"id":"comp_1","nm":"hover-coin","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[250.75,442.5,0],"to":[0,0.018,0],"ti":[0,-0.087,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[250.75,442.667,0],"to":[0,0.287,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[250.75,443.5,0],"to":[0,0,0],"ti":[0,0.287,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[250.75,442.667,0],"to":[0,-0.087,0],"ti":[0,0.018,0]},{"t":22,"s":[250.75,442.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":22,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,347,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.25,-195],[167.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[129.125,-195],[149.875,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-149.208,-195],[-128.458,-195]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":22,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,153.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.25,-195],[167.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[129.125,-195],[149.875,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-149.208,-195],[-128.458,-195]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":22,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,250.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[193.25,-195],[193.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[150.792,-195],[171.542,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-170.875,-195],[-150.125,-195]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.75,-195],[-192.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":22,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[250.75,57.5,0],"to":[0,-0.018,0],"ti":[0,0.087,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[250.75,57.333,0],"to":[0,-0.287,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[250.75,56.5,0],"to":[0,0,0],"ti":[0,-0.287,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[250.75,57.333,0],"to":[0,0.087,0],"ti":[0,-0.018,0]},{"t":22,"s":[250.75,57.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":22,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.167,-20.808],[-10.167,20.863]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-60.999,-20.671],[-60.999,21]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.167,-20.808],[-10.167,20.863]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.162,197.938],[-10.162,239.61]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61,198.075],[-61,239.746]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.162,197.938],[-10.162,239.61]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-47.054,158.552],[-10.162,197.943],[26.731,158.552],[-18.148,102.248],[-47.054,60.227],[-10.162,20.859],[26.731,65.13]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[-60.999,158.689],[-61,198.08],[-61,158.689],[-60.999,102.385],[-60.999,60.364],[-61,20.995],[-61,65.266]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-47.054,158.552],[-10.162,197.943],[26.731,158.552],[-18.148,102.248],[-47.054,60.227],[-10.162,20.859],[26.731,65.13]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":11,"s":[0],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[150.425,109.397],[-10.166,302.106],[-170.757,109.397],[-10.166,-83.313]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[-61.001,109.534],[-61,302.243],[-60.998,109.534],[-61,-83.176]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[150.425,109.397],[-10.166,302.106],[-170.757,109.397],[-10.166,-83.313]],"c":true}]},{"t":22,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":3.668,"s":[100],"h":1},{"t":11,"s":[50],"h":1},{"t":18.33203125,"s":[50],"h":1}],"ix":2},"o":{"a":0,"k":90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":22,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.5,-20.836],[10.5,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63.001,-20.836],[63.001,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.5,-20.836],[10.5,20.836]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.505,197.911],[10.505,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63,197.911],[63,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.505,197.911],[10.505,239.582]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-26.387,158.525],[10.505,197.915],[47.397,158.525],[2.519,102.221],[-26.387,60.2],[10.505,20.831],[47.397,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[63.001,158.525],[63,197.915],[63,158.525],[63.001,102.221],[63.001,60.2],[63,20.831],[63,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-26.387,158.525],[10.505,197.915],[47.397,158.525],[2.519,102.221],[-26.387,60.2],[10.505,20.831],[47.397,65.102]],"c":false}]},{"t":22,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":3.668,"s":[0],"h":1},{"t":11,"s":[100],"h":1},{"t":18.33203125,"s":[100],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3.668,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[171.091,109.369],[10.501,302.079],[-150.09,109.369],[10.501,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[62.999,109.369],[63,302.079],[63.002,109.369],[63,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18.332,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[171.091,109.369],[10.501,302.079],[-150.09,109.369],[10.501,-83.34]],"c":true}]},{"t":22,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":0,"s":[50],"h":1},{"t":3.668,"s":[50],"h":1},{"t":11,"s":[100],"h":1},{"t":18.33203125,"s":[100],"h":1}],"ix":2},"o":{"a":0,"k":-90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":22,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[250.75,442.5,0],"to":[0,0.018,0],"ti":[0,-0.087,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[250.75,442.667,0],"to":[0,0.287,0],"ti":[0,0,0]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[250.75,443.5,0],"to":[0,0,0],"ti":[0,0.018,0]},{"t":60,"s":[250.75,442.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":60,"st":1,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,347,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.25,-195],[167.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[129.125,-195],[149.875,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":60,"st":1,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,153.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.25,-195],[167.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[129.125,-195],[149.875,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":60,"st":1,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,250.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[193.25,-195],[193.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[150.792,-195],[171.542,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.75,-195],[-192.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":60,"st":1,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[250.75,57.5,0],"to":[0,-0.018,0],"ti":[0,0.087,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[250.75,57.333,0],"to":[0,-0.287,0],"ti":[0,0,0]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[250.75,56.5,0],"to":[0,0,0],"ti":[0,-0.018,0]},{"t":60,"s":[250.75,57.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":60,"st":1,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.167,-20.808],[-10.167,20.863]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-60.999,-20.671],[-60.999,21]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.162,197.938],[-10.162,239.61]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61,198.075],[-61,239.746]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-47.054,158.552],[-10.162,197.943],[26.731,158.552],[-18.148,102.248],[-47.054,60.227],[-10.162,20.859],[26.731,65.13]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[-60.999,158.689],[-61,198.08],[-61,158.689],[-60.999,102.385],[-60.999,60.364],[-61,20.995],[-61,65.266]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":22,"s":[100],"h":1},{"t":31.5,"s":[0],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[150.425,109.397],[-10.166,302.106],[-170.757,109.397],[-10.166,-83.313]],"c":true}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[-61.001,109.534],[-61,302.243],[-60.998,109.534],[-61,-83.176]],"c":true}]},{"t":60,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":22,"s":[100],"h":1},{"t":25.324,"s":[100],"h":1},{"t":31.5,"s":[50],"h":1}],"ix":2},"o":{"a":0,"k":90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":60,"st":1,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.5,-20.836],[10.5,20.836]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63.001,-20.836],[63.001,20.836]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.505,197.911],[10.505,239.582]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63,197.911],[63,239.582]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-26.387,158.525],[10.505,197.915],[47.397,158.525],[2.519,102.221],[-26.387,60.2],[10.505,20.831],[47.397,65.102]],"c":false}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[63.001,158.525],[63,197.915],[63,158.525],[63.001,102.221],[63.001,60.2],[63,20.831],[63,65.102]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":22,"s":[0],"h":1},{"t":25.324,"s":[0],"h":1},{"t":31.5,"s":[100],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.324,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[171.091,109.369],[10.501,302.079],[-150.09,109.369],[10.501,-83.34]],"c":true}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"t":31.5,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[62.999,109.369],[63,302.079],[63.002,109.369],[63,-83.34]],"c":true}]},{"t":60,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":22,"s":[50],"h":1},{"t":25.324,"s":[50],"h":1},{"t":31.5,"s":[100],"h":1}],"ix":2},"o":{"a":0,"k":-90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":22,"op":60,"st":1,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.186,0.025],[-0.025,0],[-0.022,0],[0,-15.761],[-8.644,0],[0,8.643],[25.476,6.899],[0,0],[8.644,0],[0,-8.643],[0,0],[0,-26.851],[-16.456,-9.535],[-1.805,-1.08],[0,0],[0,-14.091],[13.187,-0.023],[0.025,0],[0.025,0],[0,17.49],[8.644,0],[0,-8.643],[-26.389,-5.847],[0,0],[-8.644,0],[0,8.643],[0,0],[0,26.864],[11.729,11.188],[19.101,11.424],[0,0],[1.892,1.096],[0,12.245]],"o":[[0.025,0],[0.022,0],[15.753,0.033],[0,8.643],[8.644,0],[0,-27.629],[0,0],[0,-8.643],[-8.644,0],[0,0],[-26.386,5.846],[0,30.906],[1.768,1.024],[0,0],[37.853,22.64],[0,17.49],[-0.025,0],[-0.025,0],[-13.187,-0.023],[0,-8.643],[-8.644,0],[0,26.864],[0,0],[0,8.643],[8.644,0],[0,0],[26.389,-5.847],[0,-15.958],[-9.731,-9.283],[0,0],[-1.932,-1.155],[-15.848,-9.183],[0,-17.472]],"v":[[-0.079,-72.891],[-0.005,-72.888],[0.061,-72.891],[28.621,-44.271],[44.271,-28.621],[59.921,-44.271],[15.645,-102.107],[15.645,-130.209],[-0.005,-145.859],[-15.656,-130.209],[-15.656,-102.519],[-59.921,-49.174],[-22.985,3.135],[-17.618,6.278],[-15.969,7.264],[28.621,49.151],[0.075,72.891],[0,72.887],[-0.074,72.891],[-28.621,49.151],[-44.271,33.501],[-59.921,49.151],[-15.65,102.519],[-15.65,130.209],[0,145.859],[15.651,130.209],[15.651,102.519],[59.921,49.151],[42.73,9.364],[0.097,-19.598],[-1.548,-20.583],[-7.292,-23.947],[-28.621,-49.174]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[250.003,250.003],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[97.631,0],[0,97.631],[-97.631,0],[0,-97.631]],"o":[[-97.631,0],[0,-97.631],[97.631,0],[0,97.631]],"v":[[0,177.059],[-177.059,0],[0,-177.059],[177.059,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[114.89,0],[0,-114.89],[-114.89,0],[0,114.89]],"o":[[-114.89,0],[0,114.89],[114.89,0],[0,-114.89]],"v":[[0,-208.359],[-208.359,0],[0,208.359],[208.359,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,249.999],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1,"st":-60,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.186,0.025],[-0.025,0],[-0.022,0],[0,-15.761],[-8.644,0],[0,8.643],[25.476,6.899],[0,0],[8.644,0],[0,-8.643],[0,0],[0,-26.851],[-16.456,-9.535],[-1.805,-1.08],[0,0],[0,-14.091],[13.187,-0.023],[0.025,0],[0.025,0],[0,17.49],[8.644,0],[0,-8.643],[-26.389,-5.847],[0,0],[-8.644,0],[0,8.643],[0,0],[0,26.864],[11.729,11.188],[19.101,11.424],[0,0],[1.892,1.096],[0,12.245]],"o":[[0.025,0],[0.022,0],[15.753,0.033],[0,8.643],[8.644,0],[0,-27.629],[0,0],[0,-8.643],[-8.644,0],[0,0],[-26.386,5.846],[0,30.906],[1.768,1.024],[0,0],[37.853,22.64],[0,17.49],[-0.025,0],[-0.025,0],[-13.187,-0.023],[0,-8.643],[-8.644,0],[0,26.864],[0,0],[0,8.643],[8.644,0],[0,0],[26.389,-5.847],[0,-15.958],[-9.731,-9.283],[0,0],[-1.932,-1.155],[-15.848,-9.183],[0,-17.472]],"v":[[-0.079,-72.891],[-0.005,-72.888],[0.061,-72.891],[28.621,-44.271],[44.271,-28.621],[59.921,-44.271],[15.645,-102.107],[15.645,-130.209],[-0.005,-145.859],[-15.656,-130.209],[-15.656,-102.519],[-59.921,-49.174],[-22.985,3.135],[-17.618,6.278],[-15.969,7.264],[28.621,49.151],[0.075,72.891],[0,72.887],[-0.074,72.891],[-28.621,49.151],[-44.271,33.501],[-59.921,49.151],[-15.65,102.519],[-15.65,130.209],[0,145.859],[15.651,130.209],[15.651,102.519],[59.921,49.151],[42.73,9.364],[0.097,-19.598],[-1.548,-20.583],[-7.292,-23.947],[-28.621,-49.174]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[250.003,250.003],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[97.631,0],[0,97.631],[-97.631,0],[0,-97.631]],"o":[[-97.631,0],[0,-97.631],[97.631,0],[0,97.631]],"v":[[0,177.059],[-177.059,0],[0,-177.059],[177.059,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[114.89,0],[0,-114.89],[-114.89,0],[0,114.89]],"o":[[-114.89,0],[0,114.89],[114.89,0],[0,-114.89]],"v":[[0,-208.359],[-208.359,0],[0,208.359],[208.359,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,249.999],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":60,"op":300,"st":0,"bm":0}]},{"id":"comp_2","nm":"loop-coin","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[250.75,442.5,0],"to":[0,0.018,0],"ti":[0,-0.087,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[250.75,442.667,0],"to":[0,0.287,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[250.75,443.5,0],"to":[0,0,0],"ti":[0,0.287,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[250.75,442.667,0],"to":[0,-0.087,0],"ti":[0,0.018,0]},{"t":60,"s":[250.75,442.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":170,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,347,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.25,-195],[167.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[129.125,-195],[149.875,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-149.208,-195],[-128.458,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":170,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,153.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[167.25,-195],[167.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[129.125,-195],[149.875,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-149.208,-195],[-128.458,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.75,-195],[-166.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":170,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.75,250.5,0],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[193.25,-195],[193.25,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[150.792,-195],[171.542,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-170.875,-195],[-150.125,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-192.75,-195],[-192.75,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":170,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[250.75,57.5,0],"to":[0,-0.018,0],"ti":[0,0.087,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[250.75,57.333,0],"to":[0,-0.287,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[250.75,56.5,0],"to":[0,0,0],"ti":[0,-0.287,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[250.75,57.333,0],"to":[0,0.087,0],"ti":[0,-0.018,0]},{"t":60,"s":[250.75,57.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0.75,-195,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61.5,-195],[63,-195]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-9.417,-195],[10.917,-195]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1,-195],[0.5,-195]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":170,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.167,-20.808],[-10.167,20.863]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-60.999,-20.671],[-60.999,21]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.167,-20.808],[-10.167,20.863]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.162,197.938],[-10.162,239.61]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61,198.075],[-61,239.746]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-10.162,197.938],[-10.162,239.61]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-47.054,158.552],[-10.162,197.943],[26.731,158.552],[-18.148,102.248],[-47.054,60.227],[-10.162,20.859],[26.731,65.13]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[-60.999,158.689],[-61,198.08],[-61,158.689],[-60.999,102.385],[-60.999,60.364],[-61,20.995],[-61,65.266]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-47.054,158.552],[-10.162,197.943],[26.731,158.552],[-18.148,102.248],[-47.054,60.227],[-10.162,20.859],[26.731,65.13]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":30,"s":[0],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[150.425,109.397],[-10.166,302.106],[-170.757,109.397],[-10.166,-83.313]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[-61.001,109.534],[-61,302.243],[-60.998,109.534],[-61,-83.176]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[150.425,109.397],[-10.166,302.106],[-170.757,109.397],[-10.166,-83.313]],"c":true}]},{"t":60,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":0,"s":[100],"h":1},{"t":10,"s":[100],"h":1},{"t":30,"s":[50],"h":1},{"t":50,"s":[50],"h":1}],"ix":2},"o":{"a":0,"k":90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":170,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.998,249.999,0],"ix":2,"l":2},"a":{"a":0,"k":[249.998,249.999,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.5,-20.836],[10.5,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63.001,-20.836],[63.001,20.836]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.5,-20.836],[10.5,20.836]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-20.836],[0,20.836]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.505,197.911],[10.505,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[63,197.911],[63,239.582]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[10.505,197.911],[10.505,239.582]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0.006,197.911],[0.006,239.582]],"c":false}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-26.387,158.525],[10.505,197.915],[47.397,158.525],[2.519,102.221],[-26.387,60.2],[10.505,20.831],[47.397,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0,0],[0,24.45],[0,22.661],[0,24.45],[0,0],[0,-24.45]],"o":[[0,24.45],[0,0],[0,-24.45],[0,-10.661],[0,-24.45],[0,0],[0,0]],"v":[[63.001,158.525],[63,197.915],[63,158.525],[63.001,102.221],[63.001,60.2],[63,20.831],[63,65.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,0],[-20.375,0],[0,24.45],[31.566,22.661],[0,24.45],[-20.375,0],[0,-24.45]],"o":[[0,24.45],[20.375,0],[0,-24.45],[-14.85,-10.661],[0,-24.45],[20.375,0],[0,0]],"v":[[-26.387,158.525],[10.505,197.915],[47.397,158.525],[2.519,102.221],[-26.387,60.2],[10.505,20.831],[47.397,65.102]],"c":false}]},{"t":60,"s":[{"i":[[0,0],[-24.45,0],[0,24.45],[37.879,22.661],[0,24.45],[-24.45,0],[0,-24.45]],"o":[[0,24.45],[24.45,0],[0,-24.45],[-17.82,-10.661],[0,-24.45],[24.45,0],[0,0]],"v":[[-44.265,158.525],[0.006,197.915],[44.277,158.525],[-9.578,102.221],[-44.265,60.2],[0.006,20.831],[44.277,65.102]],"c":false}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":1,"k":[{"t":0,"s":[0],"h":1},{"t":10,"s":[0],"h":1},{"t":30,"s":[100],"h":1},{"t":50,"s":[100],"h":1}],"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[171.091,109.369],[10.501,302.079],[-150.09,109.369],[10.501,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,-106.43],[-0.001,0],[0,106.43],[0.001,0]],"o":[[0,106.43],[0.001,0],[0,-106.43],[-0.001,0]],"v":[[62.999,109.369],[63,302.079],[63.002,109.369],[63,-83.34]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[{"i":[[0,-106.43],[88.692,0],[0,106.43],[-88.692,0]],"o":[[0,106.43],[-88.692,0],[0,-106.43],[88.692,0]],"v":[[171.091,109.369],[10.501,302.079],[-150.09,109.369],[10.501,-83.34]],"c":true}]},{"t":60,"s":[{"i":[[0,-106.43],[106.43,0],[0,106.43],[-106.43,0]],"o":[[0,106.43],[-106.43,0],[0,-106.43],[106.43,0]],"v":[[192.71,109.369],[0.001,302.079],[-192.709,109.369],[0.001,-83.34]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[249.998,140.63],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"t":0,"s":[50],"h":1},{"t":10,"s":[50],"h":1},{"t":30,"s":[100],"h":1},{"t":50,"s":[100],"h":1}],"ix":2},"o":{"a":0,"k":-90,"ix":3},"m":1,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('103-coin-cash-monetization-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":170,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"lordicon.com Outlines","cl":"com","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11,"x":"var $bm_rt;\nvar checkbox = thisComp.layer('02092020').effect('02092020002')('Checkbox');\nif (checkbox == 1) {\n $bm_rt = 20;\n} else {\n $bm_rt = 0;\n}\n;"},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.934,481.369,0],"ix":2,"l":2},"a":{"a":0,"k":[79.934,0.369,0],"ix":1,"l":2},"s":{"a":0,"k":[265.159,265.159,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.415,0],[11.014,0],[11.014,-2.523],[4.656,-2.523],[4.656,-14.809],[1.415,-14.809]],"c":true},"ix":2},"nm":"l","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"l","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.938],[-1.62,-1.723],[-1.949,0],[-1.641,1.846],[0,2.154],[1.579,1.805],[1.579,0]],"o":[[0,1.354],[1.354,1.415],[1.231,0],[1.21,-1.354],[0,-1.456],[-1.456,-1.641],[-5.333,0]],"v":[[11.167,-7.199],[12.992,-1.661],[18.243,0.369],[23.514,-1.743],[25.381,-7.548],[23.494,-13.127],[18.284,-15.137]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.415],[-0.841,1.026],[-1.19,0],[-0.615,-1.825],[0,-0.718],[0.492,-0.738],[1.292,0],[0.451,0.615]],"o":[[0,-1.682],[0.595,-0.759],[1.518,0],[0.308,0.902],[0,2.359],[-0.595,0.923],[-1.477,0],[-0.882,-1.149]],"v":[[14.49,-7.302],[15.577,-11.609],[18.305,-12.86],[21.689,-10.235],[22.058,-7.589],[21.053,-3.343],[18.284,-1.969],[15.597,-3.159]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"o","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-0.287,-0.841],[-0.144,-0.82],[0,0],[0.164,0.656],[0.226,1.743],[2.236,0.205],[0,2.769],[0.923,0.8],[1.641,-0.021],[0,0]],"o":[[0,0],[0,0],[0,0],[0.533,0],[0.205,0.574],[0,0],[-0.164,-0.246],[-0.103,-0.41],[-0.267,-1.928],[0.718,-0.205],[0,-0.964],[-1.19,-1.026],[0,0],[0,0]],"v":[[27.381,0],[30.622,0],[30.622,-5.989],[33.411,-5.989],[35.011,-5.148],[35.811,0],[39.318,0],[38.867,-1.067],[38.416,-3.938],[35.749,-7.343],[38.847,-10.973],[37.554,-13.824],[33.063,-14.829],[27.381,-14.829]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.492,-0.349],[0,-1.005],[0.226,-0.164],[0.369,0],[0,0]],"o":[[0,0],[1.005,0],[0.287,0.185],[0,1.046],[-0.513,0.41],[0,0],[0,0]],"v":[[30.519,-12.491],[32.652,-12.491],[34.744,-12.142],[35.524,-10.481],[34.703,-8.758],[33.083,-8.348],[30.519,-8.348]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"r","np":5,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.554,0.103],[0,4.553],[1.866,1.374],[0.82,0],[0,0]],"o":[[0,0],[1.497,0],[2.81,-0.513],[0,-2.113],[-1.784,-1.313],[0,0],[0,0]],"v":[[41.068,0],[45.683,0],[48.349,-0.164],[53.6,-7.609],[51.077,-13.434],[45.97,-14.768],[41.068,-14.788]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.656,-0.185],[0,-2.092],[1.251,-1.251],[1.354,0],[0.349,0.021]],"o":[[1.825,-0.082],[1.99,0.554],[0,0.718],[-0.923,0.923],[-0.369,0],[0,0]],"v":[[44.288,-12.388],[47.611,-12.183],[50.318,-7.609],[48.985,-3.425],[45.539,-2.4],[44.288,-2.441]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"d","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[55.669,0],[58.849,0],[58.849,-14.87],[55.669,-14.87]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"i","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.241,0],[0,-4.697],[-5.107,0],[-1.313,1.354],[-0.062,0.882],[0,0],[1.333,0],[0,0.882],[-2.359,0],[-0.062,-0.513]],"o":[[0,-2.954],[-4.164,0],[0,3.671],[1.354,0],[1.19,-1.231],[0,0],[-0.062,1.969],[-3.097,0],[0,-3.056],[2.154,0],[0,0]],"v":[[73.104,-9.989],[67.587,-14.911],[60.798,-7.097],[67.566,0.349],[71.894,-1.313],[73.227,-4.799],[69.884,-4.799],[67.218,-1.99],[64.121,-7.076],[67.464,-12.593],[69.864,-9.989]],"c":true},"ix":2},"nm":"c","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"c","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.938],[-1.62,-1.723],[-1.949,0],[-1.641,1.846],[0,2.154],[1.579,1.805],[1.579,0]],"o":[[0,1.354],[1.354,1.415],[1.231,0],[1.21,-1.354],[0,-1.456],[-1.456,-1.641],[-5.333,0]],"v":[[74.546,-7.199],[76.372,-1.661],[81.622,0.369],[86.894,-1.743],[88.76,-7.548],[86.873,-13.127],[81.663,-15.137]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.415],[-0.841,1.026],[-1.19,0],[-0.615,-1.825],[0,-0.718],[0.492,-0.738],[1.292,0],[0.451,0.615]],"o":[[0,-1.682],[0.595,-0.759],[1.518,0],[0.308,0.902],[0,2.359],[-0.595,0.923],[-1.477,0],[-0.882,-1.149]],"v":[[77.869,-7.302],[78.956,-11.609],[81.684,-12.86],[85.068,-10.235],[85.437,-7.589],[84.432,-3.343],[81.663,-1.969],[78.977,-3.159]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"o","np":5,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[91.007,0],[94.001,0],[94.001,-12.306],[99.744,0],[104.113,0],[104.113,-14.829],[101.159,-14.829],[101.159,-3.159],[95.601,-14.829],[91.007,-14.829]],"c":true},"ix":2},"nm":"n","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"n","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[106.893,0],[109.497,0],[109.497,-2.728],[106.893,-2.728]],"c":true},"ix":2},"nm":".","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.241,0],[0,-4.697],[-5.107,0],[-1.313,1.354],[-0.062,0.882],[0,0],[1.333,0],[0,0.882],[-2.359,0],[-0.062,-0.513]],"o":[[0,-2.954],[-4.164,0],[0,3.671],[1.354,0],[1.19,-1.231],[0,0],[-0.062,1.969],[-3.097,0],[0,-3.056],[2.154,0],[0,0]],"v":[[124.04,-9.989],[118.523,-14.911],[111.734,-7.097],[118.502,0.349],[122.83,-1.313],[124.163,-4.799],[120.82,-4.799],[118.154,-1.99],[115.057,-7.076],[118.4,-12.593],[120.8,-9.989]],"c":true},"ix":2},"nm":"c","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"c","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.938],[-1.62,-1.723],[-1.949,0],[-1.641,1.846],[0,2.154],[1.579,1.805],[1.579,0]],"o":[[0,1.354],[1.354,1.415],[1.231,0],[1.21,-1.354],[0,-1.456],[-1.456,-1.641],[-5.333,0]],"v":[[125.482,-7.199],[127.308,-1.661],[132.558,0.369],[137.829,-1.743],[139.696,-7.548],[137.809,-13.127],[132.599,-15.137]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.415],[-0.841,1.026],[-1.19,0],[-0.615,-1.825],[0,-0.718],[0.492,-0.738],[1.292,0],[0.451,0.615]],"o":[[0,-1.682],[0.595,-0.759],[1.518,0],[0.308,0.902],[0,2.359],[-0.595,0.923],[-1.477,0],[-0.882,-1.149]],"v":[[128.805,-7.302],[129.892,-11.609],[132.62,-12.86],[136.004,-10.235],[136.373,-7.589],[135.368,-3.343],[132.599,-1.969],[129.912,-3.159]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"o","np":5,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[141.696,0],[144.67,0],[144.67,-12.716],[148.629,0],[151.254,0],[155.295,-12.716],[155.295,0],[158.453,0],[158.453,-14.829],[153.408,-14.829],[150.024,-4.041],[146.885,-14.829],[141.696,-14.829]],"c":true},"ix":2},"nm":"m","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"m","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":2.5,"op":25,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"02092020","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-105,15,0],"ix":2,"l":2},"a":{"a":0,"k":[60,60,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"02092020002","np":3,"mn":"ADBE Checkbox Control","ix":1,"en":1,"ef":[{"ty":7,"nm":"Checkbox","mn":"ADBE Checkbox Control-0001","ix":1,"v":{"a":0,"k":0,"ix":1}}]}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"Color & Stroke Change","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-55,-102,0],"ix":2,"l":2,"x":"var $bm_rt;\n$bm_rt = effect('Axis')('Point');"},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2,"x":"var $bm_rt;\nvar temp;\ntemp = effect('Scale')('Slider');\n$bm_rt = [\n temp,\n temp\n];"}},"ao":0,"ef":[{"ty":5,"nm":"Primary","np":3,"mn":"ADBE Color Control","ix":1,"en":1,"ef":[{"ty":2,"nm":"Color","mn":"ADBE Color Control-0001","ix":1,"v":{"a":0,"k":[1,1,1],"ix":1}}]},{"ty":5,"nm":"Axis","np":3,"mn":"ADBE Point Control","ix":2,"en":1,"ef":[{"ty":3,"nm":"Point","mn":"ADBE Point Control-0001","ix":1,"v":{"a":0,"k":[250,250],"ix":1}}]},{"ty":5,"nm":"Scale","np":3,"mn":"ADBE Slider Control","ix":3,"en":1,"ef":[{"ty":0,"nm":"Slider","mn":"ADBE Slider Control-0001","ix":1,"v":{"a":0,"k":100,"ix":1}}]},{"ty":5,"nm":"State-Intro","np":3,"mn":"ADBE Slider Control","ix":4,"en":1,"ef":[{"ty":0,"nm":"Slider","mn":"ADBE Slider Control-0001","ix":1,"v":{"a":0,"k":0,"ix":1}}]},{"ty":5,"nm":"State-Hover","np":3,"mn":"ADBE Slider Control","ix":5,"en":1,"ef":[{"ty":0,"nm":"Slider","mn":"ADBE Slider Control-0001","ix":1,"v":{"a":0,"k":1,"ix":1}}]},{"ty":5,"nm":"State-Loop","np":3,"mn":"ADBE Slider Control","ix":6,"en":1,"ef":[{"ty":0,"nm":"Slider","mn":"ADBE Slider Control-0001","ix":1,"v":{"a":0,"k":0,"ix":1}}]}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"in-coin","parent":3,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11,"x":"var $bm_rt;\n$bm_rt = $bm_mul(thisComp.layer('Color & Stroke Change').effect('State-Intro')('Slider'), 100);"},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50,50,0],"ix":2,"l":2},"a":{"a":0,"k":[250,250,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":500,"h":500,"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"hover-coin","parent":3,"refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11,"x":"var $bm_rt;\n$bm_rt = $bm_mul(thisComp.layer('Color & Stroke Change').effect('State-Hover')('Slider'), 100);"},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50,50,0],"ix":2,"l":2},"a":{"a":0,"k":[250,250,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":500,"h":500,"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"loop-coin","parent":3,"refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11,"x":"var $bm_rt;\n$bm_rt = $bm_mul(thisComp.layer('Color & Stroke Change').effect('State-Loop')('Slider'), 100);"},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50,50,0],"ix":2,"l":2},"a":{"a":0,"k":[250,250,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":500,"h":500,"ip":0,"op":71,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/frontend/public/lotties/system-outline-165-view-carousel.json b/frontend/public/lotties/system-outline-165-view-carousel.json new file mode 100644 index 000000000..9cbde6944 --- /dev/null +++ b/frontend/public/lotties/system-outline-165-view-carousel.json @@ -0,0 +1 @@ +{"v":"5.8.1","fr":60,"ip":0,"op":61,"w":500,"h":500,"nm":"165-view-carousel-outline","ddd":0,"assets":[{"id":"comp_0","nm":"in-carousel","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.856,0],[0,0],[0,0],[0,0],[0,-2.856]],"o":[[0,2.862],[0,0],[0,0],[0,0],[2.856,0],[0,0]],"v":[[177.06,88.542],[171.88,93.732],[125.028,93.732],[125.028,-93.718],[171.88,-93.718],[177.06,-88.538]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[2.858,0],[0,0],[0,2.858],[0,0],[0,0.013],[0,0.013],[0,0],[0,0.013],[0,0.013],[0,0],[-2.858,0],[0,0],[0,-2.858]],"o":[[0,2.858],[0,0],[-2.858,0],[0,0],[0,-0.013],[0,-0.013],[0,0],[0,-0.013],[0,-0.013],[0,0],[0,-2.858],[0,0],[2.858,0],[0,0]],"v":[[93.728,130.212],[88.544,135.395],[-88.538,135.395],[-93.722,130.212],[-93.722,109.421],[-93.72,109.382],[-93.722,109.343],[-93.722,-109.329],[-93.72,-109.368],[-93.722,-109.407],[-93.722,-130.206],[-88.538,-135.39],[88.544,-135.39],[93.728,-130.206]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,2.862],[0,0],[-2.861,0],[0,0],[0,0]],"o":[[-2.861,0],[0,0],[0,-2.856],[0,0],[0,0],[0,0]],"v":[[-171.87,93.732],[-177.06,88.542],[-177.06,-88.538],[-171.87,-93.718],[-125.022,-93.718],[-125.022,93.732]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[20.115,0],[0,0],[0,0],[20.117,0],[0,0],[0,-20.117],[0,0],[0,0],[0,-20.115],[0,0],[-20.12,0],[0,0],[0,0],[-20.117,0],[0,0],[0,20.117],[0,0],[0,0],[0,20.121],[0,0]],"o":[[0,0],[0,0],[0,-20.117],[0,0],[-20.117,0],[0,0],[0,0],[-20.12,0],[0,0],[0,20.121],[0,0],[0,0],[0,20.117],[0,0],[20.117,0],[0,0],[0,0],[20.115,0],[0,0],[0,-20.115]],"v":[[171.88,-125.018],[125.028,-125.018],[125.028,-130.206],[88.544,-166.69],[-88.538,-166.69],[-125.022,-130.206],[-125.022,-125.018],[-171.87,-125.018],[-208.36,-88.538],[-208.36,88.542],[-171.87,125.032],[-125.022,125.032],[-125.022,130.212],[-88.538,166.695],[88.544,166.695],[125.028,130.212],[125.028,125.032],[171.88,125.032],[208.36,88.542],[208.36,-88.538]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":47,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250.003,250.003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.17,"y":1},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[11.506,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-11.506,0],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[0.007,-5.179],[-0.007,-5.179],[-20.841,15.655],[-20.841,183.184],[-0.007,204.018],[0.007,204.018],[20.841,183.184],[20.841,15.655]],"c":true}]},{"t":30,"s":[{"i":[[11.506,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-11.506,0],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[88.541,-151.042],[-88.541,-151.042],[-109.375,-130.209],[-109.375,130.209],[-88.541,151.042],[88.541,151.042],[109.375,130.209],[109.375,-130.209]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":1,"op":47,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[158.997,250.003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.17,"y":1},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[11.506,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-11.506,0],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[-92.066,-3.857],[-92.368,-3.749],[-113.202,17.084],[-113.454,185.46],[-92.621,206.293],[-92.319,206.186],[-71.485,185.352],[-71.233,16.976]],"c":true}]},{"t":47,"s":[{"i":[[11.506,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-11.506,0],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[81.291,-108.915],[-33.291,-108.915],[-54.125,-88.081],[-54.125,89.003],[-33.291,109.836],[81.291,109.836],[102.125,89.003],[102.125,-88.081]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.688],"y":[0.857]},"o":{"x":[0.364],"y":[0.014]},"t":7,"s":[21]},{"i":{"x":[0.618],"y":[0.11]},"o":{"x":[0.323],"y":[0.82]},"t":9,"s":[25.025]},{"i":{"x":[0.576],"y":[0.802]},"o":{"x":[0.263],"y":[0.837]},"t":13,"s":[26.481]},{"i":{"x":[0.462],"y":[1]},"o":{"x":[0.176],"y":[-0.167]},"t":18,"s":[27.812]},{"t":47,"s":[24]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.17],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[63]},{"t":47,"s":[74]}],"ix":2},"o":{"a":0,"k":122,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":7,"op":47,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[364.587,250.003,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.17,"y":1},"o":{"x":0.167,"y":0.167},"t":1,"s":[{"i":[[11.506,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-11.506,0],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[-114.066,-3.901],[-114.368,-3.793],[-135.202,17.041],[-135.454,185.417],[-114.621,206.25],[-114.319,206.142],[-93.485,185.309],[-93.233,16.933]],"c":true}]},{"t":47,"s":[{"i":[[11.506,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-11.506,0],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[57.291,-109.376],[-57.291,-109.376],[-78.125,-88.542],[-78.125,88.542],[-57.291,109.376],[57.291,109.376],[78.125,88.542],[78.125,-88.542]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.688],"y":[0.815]},"o":{"x":[0.364],"y":[0.028]},"t":7,"s":[19]},{"i":{"x":[0.618],"y":[0.54]},"o":{"x":[0.323],"y":[0.627]},"t":9,"s":[23.609]},{"i":{"x":[0.576],"y":[3.937]},"o":{"x":[0.263],"y":[-5.335]},"t":13,"s":[26.437]},{"i":{"x":[0.462],"y":[1]},"o":{"x":[0.176],"y":[-6.536]},"t":18,"s":[26.227]},{"t":47,"s":[26]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.17],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[62]},{"t":47,"s":[74]}],"ix":2},"o":{"a":0,"k":121,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":7,"op":47,"st":0,"bm":0}]},{"id":"comp_1","nm":"hover-carousel","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.856,0],[0,0],[0,0],[0,0],[0,-2.856]],"o":[[0,2.862],[0,0],[0,0],[0,0],[2.856,0],[0,0]],"v":[[177.06,88.542],[171.88,93.732],[125.028,93.732],[125.028,-93.718],[171.88,-93.718],[177.06,-88.538]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[2.858,0],[0,0],[0,2.858],[0,0],[0,0.013],[0,0.013],[0,0],[0,0.013],[0,0.013],[0,0],[-2.858,0],[0,0],[0,-2.858]],"o":[[0,2.858],[0,0],[-2.858,0],[0,0],[0,-0.013],[0,-0.013],[0,0],[0,-0.013],[0,-0.013],[0,0],[0,-2.858],[0,0],[2.858,0],[0,0]],"v":[[93.728,130.212],[88.544,135.395],[-88.538,135.395],[-93.722,130.212],[-93.722,109.421],[-93.72,109.382],[-93.722,109.343],[-93.722,-109.329],[-93.72,-109.368],[-93.722,-109.407],[-93.722,-130.206],[-88.538,-135.39],[88.544,-135.39],[93.728,-130.206]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,2.862],[0,0],[-2.861,0],[0,0],[0,0]],"o":[[-2.861,0],[0,0],[0,-2.856],[0,0],[0,0],[0,0]],"v":[[-171.87,93.732],[-177.06,88.542],[-177.06,-88.538],[-171.87,-93.718],[-125.022,-93.718],[-125.022,93.732]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[20.115,0],[0,0],[0,0],[20.117,0],[0,0],[0,-20.117],[0,0],[0,0],[0,-20.115],[0,0],[-20.12,0],[0,0],[0,0],[-20.117,0],[0,0],[0,20.117],[0,0],[0,0],[0,20.121],[0,0]],"o":[[0,0],[0,0],[0,-20.117],[0,0],[-20.117,0],[0,0],[0,0],[-20.12,0],[0,0],[0,20.121],[0,0],[0,0],[0,20.117],[0,0],[20.117,0],[0,0],[0,0],[20.115,0],[0,0],[0,-20.115]],"v":[[171.88,-125.018],[125.028,-125.018],[125.028,-130.206],[88.544,-166.69],[-88.538,-166.69],[-125.022,-130.206],[-125.022,-125.018],[-171.87,-125.018],[-208.36,-88.538],[-208.36,88.542],[-171.87,125.032],[-125.022,125.032],[-125.022,130.212],[-88.538,166.695],[88.544,166.695],[125.028,130.212],[125.028,125.032],[171.88,125.032],[208.36,88.542],[208.36,-88.538]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":55,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.856,0],[0,0],[0,0],[0,0],[0,-2.856]],"o":[[0,2.862],[0,0],[0,0],[0,0],[2.856,0],[0,0]],"v":[[177.06,88.542],[171.88,93.732],[125.028,93.732],[125.028,-93.718],[171.88,-93.718],[177.06,-88.538]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[2.858,0],[0,0],[0,2.858],[0,0],[0,0.013],[0,0.013],[0,0],[0,0.013],[0,0.013],[0,0],[-2.858,0],[0,0],[0,-2.858]],"o":[[0,2.858],[0,0],[-2.858,0],[0,0],[0,-0.013],[0,-0.013],[0,0],[0,-0.013],[0,-0.013],[0,0],[0,-2.858],[0,0],[2.858,0],[0,0]],"v":[[93.728,130.212],[88.544,135.395],[-88.538,135.395],[-93.722,130.212],[-93.722,109.421],[-93.72,109.382],[-93.722,109.343],[-93.722,-109.329],[-93.72,-109.368],[-93.722,-109.407],[-93.722,-130.206],[-88.538,-135.39],[88.544,-135.39],[93.728,-130.206]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,2.862],[0,0],[-2.861,0],[0,0],[0,0]],"o":[[-2.861,0],[0,0],[0,-2.856],[0,0],[0,0],[0,0]],"v":[[-171.87,93.732],[-177.06,88.542],[-177.06,-88.538],[-171.87,-93.718],[-125.022,-93.718],[-125.022,93.732]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[20.115,0],[0,0],[0,0],[20.117,0],[0,0],[0,-20.117],[0,0],[0,0],[0,-20.115],[0,0],[-20.12,0],[0,0],[0,0],[-20.117,0],[0,0],[0,20.117],[0,0],[0,0],[0,20.121],[0,0]],"o":[[0,0],[0,0],[0,-20.117],[0,0],[-20.117,0],[0,0],[0,0],[-20.12,0],[0,0],[0,20.121],[0,0],[0,0],[0,20.117],[0,0],[20.117,0],[0,0],[0,0],[20.115,0],[0,0],[0,-20.115]],"v":[[171.88,-125.018],[125.028,-125.018],[125.028,-130.206],[88.544,-166.69],[-88.538,-166.69],[-125.022,-130.206],[-125.022,-125.018],[-171.87,-125.018],[-208.36,-88.538],[-208.36,88.542],[-171.87,125.032],[-125.022,125.032],[-125.022,130.212],[-88.538,166.695],[88.544,166.695],[125.028,130.212],[125.028,125.032],[171.88,125.032],[208.36,88.542],[208.36,-88.538]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.77,"y":0},"t":1,"s":[158.997,250.003,0],"to":[-11.333,0,0],"ti":[-15.167,0,0]},{"i":{"x":0.159,"y":1},"o":{"x":0.407,"y":0},"t":17,"s":[90.997,250.003,0],"to":[7.313,0,0],"ti":[-13.722,0,0]},{"t":55,"s":[249.997,250.003,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"t":1,"s":[{"i":[[11.506,0],[0,0],[0,0],[3.77,-3.77],[0,-5.753],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[0,0],[-5.753,0],[-3.77,3.77],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[81.291,-108.915],[24,-108.915],[-33.291,-108.915],[-48.023,-102.813],[-54.125,-88.081],[-54.125,89.003],[-33.291,109.836],[81.291,109.836],[102.125,89.003],[102.125,-88.081]],"c":true}],"h":1},{"i":{"x":0.833,"y":0.859},"o":{"x":0.333,"y":0},"t":2.18,"s":[{"i":[[-10.5,0],[-33,0],[0,0],[0,-11.506],[0,0],[10.599,-0.506],[31.5,0],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.33,0],[14.039,-0.421],[0,0],[0,11.505],[0,0],[-32,0],[-10,-0.837],[0,0],[0,-9.675]],"v":[[-34.003,-109.325],[18.497,-109.489],[79.459,-109.409],[100.997,-87.576],[100.997,88.342],[80.898,109.181],[18.497,109.193],[-34.503,109.76],[-55.503,92.484],[-55.503,-91.976]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.141},"t":4.539,"s":[{"i":[[-10.707,0.102],[-33.475,1.617],[0,0],[0,-11.506],[0,0],[11.602,0.847],[31.916,1.156],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.272,-1.173],[14.232,-0.984],[0,0],[0,11.505],[0,0],[-32.538,-0.824],[-10.206,-0.926],[0,0],[0,-9.675]],"v":[[-32.567,-109.991],[23.211,-112.208],[83.578,-115.094],[105.014,-93.835],[105.196,92.407],[84.952,115.024],[22.77,112.067],[-33.068,110.27],[-53.988,92.985],[-53.988,-92.637]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[-11.32,0.404],[-29.19,6.404],[0,0],[0,-11.506],[0,0],[12.597,4.854],[27.72,4.58],[0,0],[0,9.673],[0,0]],"o":[[0,0],[24.953,-4.645],[12.385,-2.651],[0,0],[0,11.505],[0,0],[-28.6,-3.263],[-10.817,-1.188],[0,0],[0,-9.675]],"v":[[-28.317,-111.962],[31.476,-120.26],[79.82,-131.925],[97.307,-112.367],[97.997,104.443],[80.768,132.323],[29.803,120.575],[-28.819,111.778],[-49.503,94.468],[-49.503,-94.593]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-9.013,0.807],[-17.317,12.809],[0,0],[0,-11.506],[0,0],[11.116,10.214],[16.283,9.16],[0,0],[0,9.673],[0,0]],"o":[[0,0],[12.683,-9.289],[7.31,-4.881],[0,0],[0,11.505],[0,0],[-17.3,-6.527],[-8.646,-1.539],[0,0],[0,-9.675]],"v":[[7.243,-114.557],[57.814,-130.99],[80.187,-154.399],[88.793,-137.117],[89.982,120.584],[80.382,155.507],[54.93,131.999],[6.876,113.837],[-10.503,96.493],[-10.503,-97.168]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-7.525,1.615],[-1.633,25.617],[0,0],[0,-11.506],[0,0],[-6.935,3.293],[1.067,18.321],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-9.023,-16.317],[-6.728,1.014],[0,0],[0,11.505],[0,0],[-2.6,-13.053],[-7.292,-2.239],[0,0],[0,-9.675]],"v":[[0.489,-118.579],[59.13,-154.283],[32.725,-168.179],[22.399,-155.812],[24.967,153.672],[41.432,165.042],[58.93,144.014],[0.256,119.124],[-13.503,101.711],[-13.503,-101.15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.873,"s":[{"i":[[-6.038,2.422],[8.3,17.524],[0,0],[0,-11.506],[0,0],[-6.249,-3.706],[-24.4,30.92],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-28.7,-24.476],[-7.161,4.779],[0,0],[0,11.505],[0,0],[12.1,-19.58],[-5.938,-2.94],[0,0],[0,-9.675]],"v":[[25.735,-123.553],[61.197,-154.527],[-29.141,-161.911],[-41.9,-139.278],[-36.9,138.74],[-24.654,160.375],[60.897,155.077],[25.635,123.459],[15.497,105.977],[15.497,-106.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-4.922,3.028],[15.827,9.377],[0,0],[0,-11.506],[0,0],[-10.461,-4.506],[-34,22.494],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-37,-21.921],[-12.461,6.079],[0,0],[0,11.505],[0,0],[24.637,-16.3],[-4.922,-3.466],[0,0],[0,-9.675]],"v":[[42.419,-127.031],[57.997,-160.082],[-64.541,-153.082],[-85.875,-130.248],[-85.875,130.169],[-65.541,152.003],[54.497,161.003],[42.419,126.963],[34.997,109.43],[34.997,-109.531]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[-1.776,2.595],[23.373,8.037],[0,0],[0,-11.506],[0,0],[-10.611,-3.862],[-41.925,18.346],[0,0],[0,9.935],[0,0]],"o":[[0,0],[-44.2,-18.355],[-12.325,5.211],[0,0],[0,11.505],[0,0],[31.73,-13.971],[-1.776,-2.971],[0,0],[0,-9.936]],"v":[[58.47,-130.461],[59.054,-159.208],[-67.97,-152.791],[-89.232,-130.243],[-89.232,130.175],[-68.827,151.866],[56.422,159.163],[58.47,130.403],[56.711,112.398],[56.711,-112.485]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[6.089,1.514],[42.238,4.688],[0,0],[0,-11.506],[0,0],[-10.984,-2.253],[-61.736,7.974],[0,0],[0,10.589],[0,0]],"o":[[0,0],[-62.199,-9.441],[-11.984,3.04],[0,0],[0,11.505],[0,0],[49.46,-8.15],[6.089,-1.733],[0,0],[0,-10.591]],"v":[[98.595,-139.037],[30.196,-155.562],[-76.541,-152.062],[-97.625,-130.229],[-97.625,130.189],[-77.041,151.523],[29.733,156.023],[98.595,139.003],[110.997,119.819],[110.997,-119.87]],"c":true}]},{"i":{"x":0.25,"y":1},"o":{"x":0.167,"y":0.167},"t":34.428,"s":[{"i":[[8.754,0.899],[38.858,0.619],[0,0],[0,-11.506],[0,0],[-11.208,-1.286],[-49.166,1.112],[0,0],[0,11.425],[0,0]],"o":[[0,0],[-47.257,-0.753],[-11.779,1.735],[0,0],[0,11.505],[0,0],[44.834,-0.888],[8.754,-1.029],[0,0],[0,-11.427]],"v":[[93.957,-150.003],[16.803,-153.622],[-81.693,-151.624],[-102.669,-130.22],[-102.669,130.198],[-81.978,151.316],[17.827,153.885],[93.957,149.984],[110.624,129.29],[110.624,-129.319]],"c":true}]},{"t":47.28515625,"s":[{"i":[[11.506,0],[29.848,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[-30.18,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-29.179,0],[-11.506,0],[0,0],[0,11.505],[0,0],[28.848,0],[11.506,0],[0,0],[0,-11.506]],"v":[[88.541,-151.042],[-1.003,-151.042],[-88.541,-151.042],[-109.375,-130.209],[-109.375,130.209],[-88.541,151.042],[1.997,151.042],[88.541,151.042],[109.375,130.209],[109.375,-130.209]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"t":1,"s":[24],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[15]},{"t":9,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"t":1,"s":[74],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[74]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[83]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[85]},{"t":9,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"t":1,"s":[122],"h":1},{"t":3,"s":[302],"h":1}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":29,"op":55,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":1,"s":[250.003,250.003,0],"to":[19.333,0,0],"ti":[-19.333,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":17.514,"s":[366.003,250.003,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.23,"y":1},"o":{"x":0.167,"y":0.167},"t":30.486,"s":[366.003,250.003,0],"to":[-4.167,0,0],"ti":[4.167,0,0]},{"t":47,"s":[341.003,250.003,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,-11.506],[0,0]],"o":[[0,0],[0,11.505]],"v":[[71.259,-144.472],[71.259,140.945]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[0,-11.506],[0,0]],"o":[[0,0],[0,11.505]],"v":[[63.259,-151.942],[64.259,148.476]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-11.506],[0,0]],"o":[[0,0],[0,11.505]],"v":[[63.259,-151.942],[61.259,148.476]],"c":false}]},{"t":28,"s":[{"i":[[0,-11.506],[0,0]],"o":[[0,0],[0,11.505]],"v":[[48.259,-151.881],[51.259,147.537]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":13,"op":29,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":1,"s":[250.003,250.003,0],"to":[19.333,0,0],"ti":[-19.333,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":17.514,"s":[366.003,250.003,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.23,"y":1},"o":{"x":0.167,"y":0.167},"t":30.486,"s":[366.003,250.003,0],"to":[-4.167,0,0],"ti":[4.167,0,0]},{"t":47,"s":[341.003,250.003,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":1,"s":[{"i":[[11.506,0],[29.848,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[-30.18,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-29.179,0],[-11.506,0],[0,0],[0,11.505],[0,0],[28.848,0],[11.506,0],[0,0],[0,-11.506]],"v":[[88.541,-151.042],[-1.003,-151.042],[-88.541,-151.042],[-109.375,-130.209],[-109.375,130.209],[-88.541,151.042],[1.997,151.042],[88.541,151.042],[109.375,130.209],[109.375,-130.209]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6.896,"s":[{"i":[[7.637,1.081],[38.698,3.349],[0,0],[0,-11.506],[0,0],[-11.133,-1.609],[-52.72,5.696],[0,0],[0,10.851],[0,0]],"o":[[0,0],[-52.765,-6.743],[-11.848,2.171],[0,0],[0,11.505],[0,0],[43.571,-5.821],[7.637,-1.238],[0,0],[0,-10.852]],"v":[[106.723,-142.676],[20.996,-159.271],[-79.97,-151.771],[-100.982,-130.223],[-100.982,130.195],[-80.327,151.385],[22.05,158.6],[106.723,142.233],[121.534,122.578],[121.534,-123.033]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.256,"s":[{"i":[[6.089,1.514],[42.238,4.688],[0,0],[0,-11.506],[0,0],[-10.984,-2.253],[-61.736,7.974],[0,0],[0,10.589],[0,0]],"o":[[0,0],[-62.199,-9.441],[-11.984,3.04],[0,0],[0,11.505],[0,0],[49.46,-8.15],[6.089,-1.733],[0,0],[0,-10.591]],"v":[[98.595,-139.037],[30.196,-155.562],[-76.541,-152.062],[-97.625,-130.229],[-97.625,130.189],[-77.041,151.523],[29.733,156.023],[98.595,139.003],[110.997,119.819],[110.997,-119.87]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.154,"s":[{"i":[[-1.776,2.595],[23.373,8.037],[0,0],[0,-11.506],[0,0],[-10.611,-3.862],[-41.925,18.346],[0,0],[0,9.935],[0,0]],"o":[[0,0],[-44.2,-18.355],[-12.325,5.211],[0,0],[0,11.505],[0,0],[31.73,-13.971],[-1.776,-2.971],[0,0],[0,-9.936]],"v":[[58.47,-130.461],[59.054,-159.208],[-67.97,-152.791],[-89.232,-130.243],[-89.232,130.175],[-68.827,151.866],[56.422,159.163],[58.47,130.403],[56.711,112.398],[56.711,-112.485]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17.514,"s":[{"i":[[-4.922,3.028],[15.827,9.377],[0,0],[0,-11.506],[0,0],[-10.461,-4.506],[-34,22.494],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-37,-21.921],[-12.461,6.079],[0,0],[0,11.505],[0,0],[24.637,-16.3],[-4.922,-3.466],[0,0],[0,-9.675]],"v":[[42.419,-127.031],[57.997,-160.082],[-64.541,-153.082],[-85.875,-130.248],[-85.875,130.169],[-65.541,152.003],[54.497,161.003],[42.419,126.963],[34.997,109.43],[34.997,-109.531]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.051,"s":[{"i":[[-6.038,2.422],[8.3,17.524],[0,0],[0,-11.506],[0,0],[-6.249,-3.706],[-24.4,30.92],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-28.7,-24.476],[-7.161,4.779],[0,0],[0,11.505],[0,0],[12.1,-19.58],[-5.938,-2.94],[0,0],[0,-9.675]],"v":[[25.735,-123.553],[61.197,-154.527],[-29.141,-161.911],[-41.9,-139.278],[-36.9,138.74],[-24.654,160.375],[60.897,155.077],[25.635,123.459],[15.497,105.977],[15.497,-106.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.77,"s":[{"i":[[-7.525,1.615],[-1.633,25.617],[0,0],[0,-11.506],[0,0],[-6.935,3.293],[1.067,18.321],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-9.023,-16.317],[-6.728,1.014],[0,0],[0,11.505],[0,0],[-2.6,-13.053],[-7.292,-2.239],[0,0],[0,-9.675]],"v":[[3.489,-118.917],[62.13,-154.62],[35.725,-168.517],[25.399,-156.15],[27.967,153.335],[44.432,164.704],[61.93,143.676],[3.256,118.787],[-10.503,101.373],[-10.503,-101.487]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30.486,"s":[{"i":[[-9.013,0.807],[-17.317,12.809],[0,0],[0,-11.506],[0,0],[11.116,10.214],[16.283,9.16],[0,0],[0,9.673],[0,0]],"o":[[0,0],[12.683,-9.289],[7.31,-4.881],[0,0],[0,11.505],[0,0],[-17.3,-6.527],[-8.646,-1.539],[0,0],[0,-9.675]],"v":[[-18.757,-114.28],[31.814,-130.714],[54.187,-154.122],[62.793,-136.84],[63.982,120.861],[54.382,155.784],[28.93,132.276],[-19.124,114.114],[-36.503,96.77],[-36.503,-96.891]],"c":true}]},{"i":{"x":0.833,"y":0.859},"o":{"x":0.167,"y":0.167},"t":32.846,"s":[{"i":[[-11.32,0.404],[-29.19,6.404],[0,0],[0,-11.506],[0,0],[12.597,4.854],[27.72,4.58],[0,0],[0,9.673],[0,0]],"o":[[0,0],[24.953,-4.645],[12.385,-2.651],[0,0],[0,11.505],[0,0],[-28.6,-3.263],[-10.817,-1.188],[0,0],[0,-9.675]],"v":[[-28.317,-111.962],[31.476,-120.26],[79.82,-131.925],[97.307,-112.367],[97.997,104.443],[80.768,132.323],[29.803,120.575],[-28.819,111.778],[-49.503,94.468],[-49.503,-94.593]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.141},"t":36.385,"s":[{"i":[[-10.707,0.102],[-33.475,1.617],[0,0],[0,-11.506],[0,0],[11.602,0.847],[31.916,1.156],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.272,-1.173],[14.232,-0.984],[0,0],[0,11.505],[0,0],[-32.538,-0.824],[-10.206,-0.926],[0,0],[0,-9.675]],"v":[[-32.567,-109.991],[23.211,-112.208],[83.578,-115.094],[105.014,-93.835],[105.196,92.407],[84.952,115.024],[22.77,112.067],[-33.068,110.27],[-53.988,92.985],[-53.988,-92.637]],"c":true}]},{"t":38.744,"s":[{"i":[[-10.5,0],[-33,0],[0,0],[0,-11.506],[0,0],[10.599,-0.506],[31.5,0],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.33,0],[14.039,-0.421],[0,0],[0,11.505],[0,0],[-32,0],[-10,-0.837],[0,0],[0,-9.675]],"v":[[-34.003,-109.325],[18.497,-109.489],[79.459,-109.409],[100.997,-87.576],[100.997,88.342],[80.898,109.181],[18.497,109.193],[-34.503,109.76],[-55.503,92.484],[-55.503,-91.976]],"c":true}],"h":1},{"t":39.923828125,"s":[{"i":[[11.506,0],[0,0],[0,0],[3.77,-3.77],[0,-5.753],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[0,0],[-5.753,0],[-3.77,3.77],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[81.291,-108.915],[24,-108.915],[-33.291,-108.915],[-48.023,-102.813],[-54.125,-88.081],[-54.125,89.003],[-33.291,109.836],[81.291,109.836],[102.125,89.003],[102.125,-88.081]],"c":true}],"h":1}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"t":33,"s":[0],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[5]},{"i":{"x":[0.569],"y":[0.704]},"o":{"x":[0.203],"y":[0.107]},"t":40,"s":[5]},{"i":{"x":[0.703],"y":[1]},"o":{"x":[0.317],"y":[0.743]},"t":45,"s":[8.155]},{"t":55,"s":[10]}],"ix":1},"e":{"a":1,"k":[{"t":33,"s":[100],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":34,"s":[68]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":39,"s":[62]},{"i":{"x":[0.569],"y":[0.83]},"o":{"x":[0.203],"y":[0.062]},"t":40,"s":[62]},{"i":{"x":[0.703],"y":[1]},"o":{"x":[0.317],"y":[-2.808]},"t":45,"s":[58.707]},{"t":55,"s":[59]}],"ix":2},"o":{"a":1,"k":[{"t":39,"s":[0],"h":1},{"t":40,"s":[-182],"h":1}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":29,"op":55,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":1,"s":[250.003,250.003,0],"to":[19.333,0,0],"ti":[-19.333,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":17.514,"s":[366.003,250.003,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.23,"y":1},"o":{"x":0.167,"y":0.167},"t":30.486,"s":[366.003,250.003,0],"to":[-4.167,0,0],"ti":[4.167,0,0]},{"t":47,"s":[341.003,250.003,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":1,"s":[{"i":[[11.506,0],[29.848,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[-30.18,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-29.179,0],[-11.506,0],[0,0],[0,11.505],[0,0],[28.848,0],[11.506,0],[0,0],[0,-11.506]],"v":[[88.541,-151.042],[-1.003,-151.042],[-88.541,-151.042],[-109.375,-130.209],[-109.375,130.209],[-88.541,151.042],[1.997,151.042],[88.541,151.042],[109.375,130.209],[109.375,-130.209]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6.896,"s":[{"i":[[7.637,1.081],[38.698,3.349],[0,0],[0,-11.506],[0,0],[-11.133,-1.609],[-52.72,5.696],[0,0],[0,10.851],[0,0]],"o":[[0,0],[-52.765,-6.743],[-11.848,2.171],[0,0],[0,11.505],[0,0],[43.571,-5.821],[7.637,-1.238],[0,0],[0,-10.852]],"v":[[106.723,-142.676],[20.996,-159.271],[-79.97,-151.771],[-100.982,-130.223],[-100.982,130.195],[-80.327,151.385],[22.05,158.6],[106.723,142.233],[121.534,122.578],[121.534,-123.033]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.256,"s":[{"i":[[6.089,1.514],[42.238,4.688],[0,0],[0,-11.506],[0,0],[-10.984,-2.253],[-61.736,7.974],[0,0],[0,10.589],[0,0]],"o":[[0,0],[-62.199,-9.441],[-11.984,3.04],[0,0],[0,11.505],[0,0],[49.46,-8.15],[6.089,-1.733],[0,0],[0,-10.591]],"v":[[98.595,-139.037],[30.196,-155.562],[-76.541,-152.062],[-97.625,-130.229],[-97.625,130.189],[-77.041,151.523],[29.733,156.023],[98.595,139.003],[110.997,119.819],[110.997,-119.87]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.154,"s":[{"i":[[-1.776,2.595],[23.373,8.037],[0,0],[0,-11.506],[0,0],[-10.611,-3.862],[-41.925,18.346],[0,0],[0,9.935],[0,0]],"o":[[0,0],[-44.2,-18.355],[-12.325,5.211],[0,0],[0,11.505],[0,0],[31.73,-13.971],[-1.776,-2.971],[0,0],[0,-9.936]],"v":[[58.47,-130.461],[59.054,-159.208],[-67.97,-152.791],[-89.232,-130.243],[-89.232,130.175],[-68.827,151.866],[56.422,159.163],[58.47,130.403],[56.711,112.398],[56.711,-112.485]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17.514,"s":[{"i":[[-4.922,3.028],[15.827,9.377],[0,0],[0,-11.506],[0,0],[-10.461,-4.506],[-34,22.494],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-37,-21.921],[-12.461,6.079],[0,0],[0,11.505],[0,0],[24.637,-16.3],[-4.922,-3.466],[0,0],[0,-9.675]],"v":[[42.419,-127.031],[57.997,-160.082],[-64.541,-153.082],[-85.875,-130.248],[-85.875,130.169],[-65.541,152.003],[54.497,161.003],[42.419,126.963],[34.997,109.43],[34.997,-109.531]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.051,"s":[{"i":[[-6.038,2.422],[8.3,17.524],[0,0],[0,-11.506],[0,0],[-6.249,-3.706],[-24.4,30.92],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-28.7,-24.476],[-7.161,4.779],[0,0],[0,11.505],[0,0],[12.1,-19.58],[-5.938,-2.94],[0,0],[0,-9.675]],"v":[[25.735,-123.553],[61.197,-154.527],[-29.141,-161.911],[-41.9,-139.278],[-36.9,138.74],[-24.654,160.375],[60.897,155.077],[25.635,123.459],[15.497,105.977],[15.497,-106.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.77,"s":[{"i":[[-7.525,1.615],[-1.633,25.617],[0,0],[0,-11.506],[0,0],[-6.935,3.293],[1.067,18.321],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-9.023,-16.317],[-6.728,1.014],[0,0],[0,11.505],[0,0],[-2.6,-13.053],[-7.292,-2.239],[0,0],[0,-9.675]],"v":[[3.489,-118.917],[62.13,-154.62],[35.725,-168.517],[25.399,-156.15],[27.967,153.335],[44.432,164.704],[61.93,143.676],[3.256,118.787],[-10.503,101.373],[-10.503,-101.487]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30.486,"s":[{"i":[[-9.013,0.807],[-17.317,12.809],[0,0],[0,-11.506],[0,0],[11.116,10.214],[16.283,9.16],[0,0],[0,9.673],[0,0]],"o":[[0,0],[12.683,-9.289],[7.31,-4.881],[0,0],[0,11.505],[0,0],[-17.3,-6.527],[-8.646,-1.539],[0,0],[0,-9.675]],"v":[[-18.757,-114.28],[31.814,-130.714],[54.187,-154.122],[62.793,-136.84],[63.982,120.861],[54.382,155.784],[28.93,132.276],[-19.124,114.114],[-36.503,96.77],[-36.503,-96.891]],"c":true}]},{"i":{"x":0.833,"y":0.859},"o":{"x":0.167,"y":0.167},"t":32.846,"s":[{"i":[[-11.32,0.404],[-29.19,6.404],[0,0],[0,-11.506],[0,0],[12.597,4.854],[27.72,4.58],[0,0],[0,9.673],[0,0]],"o":[[0,0],[24.953,-4.645],[12.385,-2.651],[0,0],[0,11.505],[0,0],[-28.6,-3.263],[-10.817,-1.188],[0,0],[0,-9.675]],"v":[[-28.317,-111.962],[31.476,-120.26],[79.82,-131.925],[97.307,-112.367],[97.997,104.443],[80.768,132.323],[29.803,120.575],[-28.819,111.778],[-49.503,94.468],[-49.503,-94.593]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.141},"t":36.385,"s":[{"i":[[-10.707,0.102],[-33.475,1.617],[0,0],[0,-11.506],[0,0],[11.602,0.847],[31.916,1.156],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.272,-1.173],[14.232,-0.984],[0,0],[0,11.505],[0,0],[-32.538,-0.824],[-10.206,-0.926],[0,0],[0,-9.675]],"v":[[-32.567,-109.991],[23.211,-112.208],[83.578,-115.094],[105.014,-93.835],[105.196,92.407],[84.952,115.024],[22.77,112.067],[-33.068,110.27],[-53.988,92.985],[-53.988,-92.637]],"c":true}]},{"t":38.744,"s":[{"i":[[-10.5,0],[-33,0],[0,0],[0,-11.506],[0,0],[10.599,-0.506],[31.5,0],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.33,0],[14.039,-0.421],[0,0],[0,11.505],[0,0],[-32,0],[-10,-0.837],[0,0],[0,-9.675]],"v":[[-34.003,-109.325],[18.497,-109.489],[79.459,-109.409],[100.997,-87.576],[100.997,88.342],[80.898,109.181],[18.497,109.193],[-34.503,109.76],[-55.503,92.484],[-55.503,-91.976]],"c":true}],"h":1},{"t":39.923828125,"s":[{"i":[[11.506,0],[0,0],[0,0],[3.77,-3.77],[0,-5.753],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[0,0],[-5.753,0],[-3.77,3.77],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[81.291,-108.915],[24,-108.915],[-33.291,-108.915],[-48.023,-102.813],[-54.125,-88.081],[-54.125,89.003],[-33.291,109.836],[81.291,109.836],[102.125,89.003],[102.125,-88.081]],"c":true}],"h":1}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[8]},{"t":26,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":12,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[69]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[69]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":21,"s":[65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[59]},{"t":26,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":29,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.77,"y":0},"t":1,"s":[158.997,250.003,0],"to":[-11.333,0,0],"ti":[-15.167,0,0]},{"i":{"x":0.159,"y":1},"o":{"x":0.407,"y":0},"t":17,"s":[90.997,250.003,0],"to":[7.313,0,0],"ti":[-13.722,0,0]},{"t":55,"s":[249.997,250.003,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[60.705,-147.133],[60.712,150.416]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[61.705,-148.133],[62.712,149.416]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[70.455,-148.133],[71.462,142.666]],"c":false}]},{"t":25,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[70.705,-148.133],[71.712,140.416]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":13,"op":26,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.77,"y":0},"t":1,"s":[158.997,250.003,0],"to":[-11.333,0,0],"ti":[-15.167,0,0]},{"i":{"x":0.159,"y":1},"o":{"x":0.407,"y":0},"t":17,"s":[90.997,250.003,0],"to":[7.313,0,0],"ti":[-13.722,0,0]},{"t":55,"s":[249.997,250.003,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"t":1,"s":[{"i":[[11.506,0],[0,0],[0,0],[3.77,-3.77],[0,-5.753],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[0,0],[-5.753,0],[-3.77,3.77],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[81.291,-108.915],[24,-108.915],[-33.291,-108.915],[-48.023,-102.813],[-54.125,-88.081],[-54.125,89.003],[-33.291,109.836],[81.291,109.836],[102.125,89.003],[102.125,-88.081]],"c":true}],"h":1},{"i":{"x":0.833,"y":0.859},"o":{"x":0.333,"y":0},"t":2.18,"s":[{"i":[[-10.5,0],[-33,0],[0,0],[0,-11.506],[0,0],[10.599,-0.506],[31.5,0],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.33,0],[14.039,-0.421],[0,0],[0,11.505],[0,0],[-32,0],[-10,-0.837],[0,0],[0,-9.675]],"v":[[-34.003,-109.325],[18.497,-109.489],[79.459,-109.409],[100.997,-87.576],[100.997,88.342],[80.898,109.181],[18.497,109.193],[-34.503,109.76],[-55.503,92.484],[-55.503,-91.976]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.141},"t":4.539,"s":[{"i":[[-10.707,0.102],[-33.475,1.617],[0,0],[0,-11.506],[0,0],[11.602,0.847],[31.916,1.156],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.272,-1.173],[14.232,-0.984],[0,0],[0,11.505],[0,0],[-32.538,-0.824],[-10.206,-0.926],[0,0],[0,-9.675]],"v":[[-32.567,-109.991],[23.211,-112.208],[83.578,-115.094],[105.014,-93.835],[105.196,92.407],[84.952,115.024],[22.77,112.067],[-33.068,110.27],[-53.988,92.985],[-53.988,-92.637]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[-11.32,0.404],[-29.19,6.404],[0,0],[0,-11.506],[0,0],[12.597,4.854],[27.72,4.58],[0,0],[0,9.673],[0,0]],"o":[[0,0],[24.953,-4.645],[12.385,-2.651],[0,0],[0,11.505],[0,0],[-28.6,-3.263],[-10.817,-1.188],[0,0],[0,-9.675]],"v":[[-28.317,-111.962],[31.476,-120.26],[79.82,-131.925],[97.307,-112.367],[97.997,104.443],[80.768,132.323],[29.803,120.575],[-28.819,111.778],[-49.503,94.468],[-49.503,-94.593]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-9.013,0.807],[-17.317,12.809],[0,0],[0,-11.506],[0,0],[11.116,10.214],[16.283,9.16],[0,0],[0,9.673],[0,0]],"o":[[0,0],[12.683,-9.289],[7.31,-4.881],[0,0],[0,11.505],[0,0],[-17.3,-6.527],[-8.646,-1.539],[0,0],[0,-9.675]],"v":[[7.243,-114.557],[57.814,-130.99],[80.187,-154.399],[88.793,-137.117],[89.982,120.584],[80.382,155.507],[54.93,131.999],[6.876,113.837],[-10.503,96.493],[-10.503,-97.168]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-7.525,1.615],[-1.633,25.617],[0,0],[0,-11.506],[0,0],[-6.935,3.293],[1.067,18.321],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-9.023,-16.317],[-6.728,1.014],[0,0],[0,11.505],[0,0],[-2.6,-13.053],[-7.292,-2.239],[0,0],[0,-9.675]],"v":[[0.489,-118.579],[59.13,-154.283],[32.725,-168.179],[22.399,-155.812],[24.967,153.672],[41.432,165.042],[58.93,144.014],[0.256,119.124],[-13.503,101.711],[-13.503,-101.15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.873,"s":[{"i":[[-6.038,2.422],[8.3,17.524],[0,0],[0,-11.506],[0,0],[-6.249,-3.706],[-24.4,30.92],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-28.7,-24.476],[-7.161,4.779],[0,0],[0,11.505],[0,0],[12.1,-19.58],[-5.938,-2.94],[0,0],[0,-9.675]],"v":[[25.735,-123.553],[61.197,-154.527],[-29.141,-161.911],[-41.9,-139.278],[-36.9,138.74],[-24.654,160.375],[60.897,155.077],[25.635,123.459],[15.497,105.977],[15.497,-106.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-4.922,3.028],[15.827,9.377],[0,0],[0,-11.506],[0,0],[-10.461,-4.506],[-34,22.494],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-37,-21.921],[-12.461,6.079],[0,0],[0,11.505],[0,0],[24.637,-16.3],[-4.922,-3.466],[0,0],[0,-9.675]],"v":[[42.419,-127.031],[57.997,-160.082],[-64.541,-153.082],[-85.875,-130.248],[-85.875,130.169],[-65.541,152.003],[54.497,161.003],[42.419,126.963],[34.997,109.43],[34.997,-109.531]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[-1.776,2.595],[23.373,8.037],[0,0],[0,-11.506],[0,0],[-10.611,-3.862],[-41.925,18.346],[0,0],[0,9.935],[0,0]],"o":[[0,0],[-44.2,-18.355],[-12.325,5.211],[0,0],[0,11.505],[0,0],[31.73,-13.971],[-1.776,-2.971],[0,0],[0,-9.936]],"v":[[58.47,-130.461],[59.054,-159.208],[-67.97,-152.791],[-89.232,-130.243],[-89.232,130.175],[-68.827,151.866],[56.422,159.163],[58.47,130.403],[56.711,112.398],[56.711,-112.485]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[6.089,1.514],[42.238,4.688],[0,0],[0,-11.506],[0,0],[-10.984,-2.253],[-61.736,7.974],[0,0],[0,10.589],[0,0]],"o":[[0,0],[-62.199,-9.441],[-11.984,3.04],[0,0],[0,11.505],[0,0],[49.46,-8.15],[6.089,-1.733],[0,0],[0,-10.591]],"v":[[98.595,-139.037],[30.196,-155.562],[-76.541,-152.062],[-97.625,-130.229],[-97.625,130.189],[-77.041,151.523],[29.733,156.023],[98.595,139.003],[110.997,119.819],[110.997,-119.87]],"c":true}]},{"i":{"x":0.25,"y":1},"o":{"x":0.167,"y":0.167},"t":34.428,"s":[{"i":[[8.754,0.899],[38.858,0.619],[0,0],[0,-11.506],[0,0],[-11.208,-1.286],[-49.166,1.112],[0,0],[0,11.425],[0,0]],"o":[[0,0],[-47.257,-0.753],[-11.779,1.735],[0,0],[0,11.505],[0,0],[44.834,-0.888],[8.754,-1.029],[0,0],[0,-11.427]],"v":[[93.957,-150.003],[16.803,-153.622],[-81.693,-151.624],[-102.669,-130.22],[-102.669,130.198],[-81.978,151.316],[17.827,153.885],[93.957,149.984],[110.624,129.29],[110.624,-129.319]],"c":true}]},{"t":47.28515625,"s":[{"i":[[11.506,0],[29.848,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[-30.18,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-29.179,0],[-11.506,0],[0,0],[0,11.505],[0,0],[28.848,0],[11.506,0],[0,0],[0,-11.506]],"v":[[88.541,-151.042],[-1.003,-151.042],[-88.541,-151.042],[-109.375,-130.209],[-109.375,130.209],[-88.541,151.042],[1.997,151.042],[88.541,151.042],[109.375,130.209],[109.375,-130.209]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[22]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[25]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[20]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[18]},{"t":26,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":13,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[75]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[75]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[84]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":25,"s":[86]},{"t":26,"s":[100]}],"ix":2},"o":{"a":0,"k":302,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":29,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.77,"y":0},"t":1,"s":[158.997,250.003,0],"to":[-11.333,0,0],"ti":[-15.167,0,0]},{"i":{"x":0.159,"y":1},"o":{"x":0.407,"y":0},"t":17,"s":[90.997,250.003,0],"to":[7.313,0,0],"ti":[-13.722,0,0]},{"t":55,"s":[249.997,250.003,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[-100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"t":1,"s":[{"i":[[11.506,0],[0,0],[0,0],[3.77,-3.77],[0,-5.753],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[0,0],[-5.753,0],[-3.77,3.77],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[81.291,-108.915],[24,-108.915],[-33.291,-108.915],[-48.023,-102.813],[-54.125,-88.081],[-54.125,89.003],[-33.291,109.836],[81.291,109.836],[102.125,89.003],[102.125,-88.081]],"c":true}],"h":1},{"i":{"x":0.833,"y":0.859},"o":{"x":0.333,"y":0},"t":2.18,"s":[{"i":[[-10.5,0],[-33,0],[0,0],[0,-11.506],[0,0],[10.599,-0.506],[31.5,0],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.33,0],[14.039,-0.421],[0,0],[0,11.505],[0,0],[-32,0],[-10,-0.837],[0,0],[0,-9.675]],"v":[[-34.003,-109.325],[18.497,-109.489],[79.459,-109.409],[100.997,-87.576],[100.997,88.342],[80.898,109.181],[18.497,109.193],[-34.503,109.76],[-55.503,92.484],[-55.503,-91.976]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.141},"t":4.539,"s":[{"i":[[-10.707,0.102],[-33.475,1.617],[0,0],[0,-11.506],[0,0],[11.602,0.847],[31.916,1.156],[0,0],[0,9.674],[0,0]],"o":[[0,0],[30.272,-1.173],[14.232,-0.984],[0,0],[0,11.505],[0,0],[-32.538,-0.824],[-10.206,-0.926],[0,0],[0,-9.675]],"v":[[-32.567,-109.991],[23.211,-112.208],[83.578,-115.094],[105.014,-93.835],[105.196,92.407],[84.952,115.024],[22.77,112.067],[-33.068,110.27],[-53.988,92.985],[-53.988,-92.637]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[-11.32,0.404],[-29.19,6.404],[0,0],[0,-11.506],[0,0],[12.597,4.854],[27.72,4.58],[0,0],[0,9.673],[0,0]],"o":[[0,0],[24.953,-4.645],[12.385,-2.651],[0,0],[0,11.505],[0,0],[-28.6,-3.263],[-10.817,-1.188],[0,0],[0,-9.675]],"v":[[-28.317,-111.962],[31.476,-120.26],[79.82,-131.925],[97.307,-112.367],[97.997,104.443],[80.768,132.323],[29.803,120.575],[-28.819,111.778],[-49.503,94.468],[-49.503,-94.593]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-9.013,0.807],[-17.317,12.809],[0,0],[0,-11.506],[0,0],[11.116,10.214],[16.283,9.16],[0,0],[0,9.673],[0,0]],"o":[[0,0],[12.683,-9.289],[7.31,-4.881],[0,0],[0,11.505],[0,0],[-17.3,-6.527],[-8.646,-1.539],[0,0],[0,-9.675]],"v":[[7.243,-114.557],[57.814,-130.99],[80.187,-154.399],[88.793,-137.117],[89.982,120.584],[80.382,155.507],[54.93,131.999],[6.876,113.837],[-10.503,96.493],[-10.503,-97.168]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-7.525,1.615],[-1.633,25.617],[0,0],[0,-11.506],[0,0],[-6.935,3.293],[1.067,18.321],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-9.023,-16.317],[-6.728,1.014],[0,0],[0,11.505],[0,0],[-2.6,-13.053],[-7.292,-2.239],[0,0],[0,-9.675]],"v":[[0.489,-118.579],[59.13,-154.283],[32.725,-168.179],[22.399,-155.812],[24.967,153.672],[41.432,165.042],[58.93,144.014],[0.256,119.124],[-13.503,101.711],[-13.503,-101.15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.873,"s":[{"i":[[-6.038,2.422],[8.3,17.524],[0,0],[0,-11.506],[0,0],[-6.249,-3.706],[-24.4,30.92],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-28.7,-24.476],[-7.161,4.779],[0,0],[0,11.505],[0,0],[12.1,-19.58],[-5.938,-2.94],[0,0],[0,-9.675]],"v":[[25.735,-123.553],[61.197,-154.527],[-29.141,-161.911],[-41.9,-139.278],[-36.9,138.74],[-24.654,160.375],[60.897,155.077],[25.635,123.459],[15.497,105.977],[15.497,-106.084]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-4.922,3.028],[15.827,9.377],[0,0],[0,-11.506],[0,0],[-10.461,-4.506],[-34,22.494],[0,0],[0,9.674],[0,0]],"o":[[0,0],[-37,-21.921],[-12.461,6.079],[0,0],[0,11.505],[0,0],[24.637,-16.3],[-4.922,-3.466],[0,0],[0,-9.675]],"v":[[42.419,-127.031],[57.997,-160.082],[-64.541,-153.082],[-85.875,-130.248],[-85.875,130.169],[-65.541,152.003],[54.497,161.003],[42.419,126.963],[34.997,109.43],[34.997,-109.531]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[-1.776,2.595],[23.373,8.037],[0,0],[0,-11.506],[0,0],[-10.611,-3.862],[-41.925,18.346],[0,0],[0,9.935],[0,0]],"o":[[0,0],[-44.2,-18.355],[-12.325,5.211],[0,0],[0,11.505],[0,0],[31.73,-13.971],[-1.776,-2.971],[0,0],[0,-9.936]],"v":[[58.47,-130.461],[59.054,-159.208],[-67.97,-152.791],[-89.232,-130.243],[-89.232,130.175],[-68.827,151.866],[56.422,159.163],[58.47,130.403],[56.711,112.398],[56.711,-112.485]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[6.089,1.514],[42.238,4.688],[0,0],[0,-11.506],[0,0],[-10.984,-2.253],[-61.736,7.974],[0,0],[0,10.589],[0,0]],"o":[[0,0],[-62.199,-9.441],[-11.984,3.04],[0,0],[0,11.505],[0,0],[49.46,-8.15],[6.089,-1.733],[0,0],[0,-10.591]],"v":[[98.595,-139.037],[30.196,-155.562],[-76.541,-152.062],[-97.625,-130.229],[-97.625,130.189],[-77.041,151.523],[29.733,156.023],[98.595,139.003],[110.997,119.819],[110.997,-119.87]],"c":true}]},{"i":{"x":0.25,"y":1},"o":{"x":0.167,"y":0.167},"t":34.428,"s":[{"i":[[8.754,0.899],[38.858,0.619],[0,0],[0,-11.506],[0,0],[-11.208,-1.286],[-49.166,1.112],[0,0],[0,11.425],[0,0]],"o":[[0,0],[-47.257,-0.753],[-11.779,1.735],[0,0],[0,11.505],[0,0],[44.834,-0.888],[8.754,-1.029],[0,0],[0,-11.427]],"v":[[93.957,-150.003],[16.803,-153.622],[-81.693,-151.624],[-102.669,-130.22],[-102.669,130.198],[-81.978,151.316],[17.827,153.885],[93.957,149.984],[110.624,129.29],[110.624,-129.319]],"c":true}]},{"t":47.28515625,"s":[{"i":[[11.506,0],[29.848,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[-30.18,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-29.179,0],[-11.506,0],[0,0],[0,11.505],[0,0],[28.848,0],[11.506,0],[0,0],[0,-11.506]],"v":[[88.541,-151.042],[-1.003,-151.042],[-88.541,-151.042],[-109.375,-130.209],[-109.375,130.209],[-88.541,151.042],[1.997,151.042],[88.541,151.042],[109.375,130.209],[109.375,-130.209]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"t":1,"s":[24],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[17]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[15]},{"t":9,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"t":1,"s":[74],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":3,"s":[74]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":7,"s":[83]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[85]},{"t":9,"s":[100]}],"ix":2},"o":{"a":1,"k":[{"t":1,"s":[122],"h":1},{"t":3,"s":[302],"h":1}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":12,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":".primary.design","cl":"primary design","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.25,"y":1},"o":{"x":0.333,"y":0},"t":1,"s":[364.587,250.003,0],"to":[-38.167,0,0],"ti":[38.167,0,0]},{"t":40,"s":[135.587,250.003,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[11.506,0],[0,0],[0,-11.506],[0,0],[-11.506,0],[0,0],[0,11.505],[0,0]],"o":[[0,0],[-11.506,0],[0,0],[0,11.505],[0,0],[11.506,0],[0,0],[0,-11.506]],"v":[[57.291,-109.376],[-57.291,-109.376],[-78.125,-88.542],[-78.125,88.542],[-57.291,109.376],[57.291,109.376],[78.125,88.542],[78.125,-88.542]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":3,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":31.3,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[26]},{"t":7,"s":[34],"h":1},{"t":8,"s":[50],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[65]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[77]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[83]},{"t":19,"s":[100],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[27.5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[29]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[36]},{"t":28,"s":[50],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[63]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[68]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[70]},{"t":55,"s":[73]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[74]},{"t":7,"s":[65],"h":1},{"t":8,"s":[50],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[35]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":15,"s":[21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":18,"s":[14]},{"t":19,"s":[0],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[81]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":22,"s":[73.5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":24,"s":[70]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":27,"s":[63]},{"t":28,"s":[50],"h":1},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":31,"s":[35]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":35,"s":[32]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":40,"s":[27]},{"t":55,"s":[26]}],"ix":2},"o":{"a":1,"k":[{"t":1,"s":[121],"h":1},{"t":11,"s":[301],"h":1},{"t":20,"s":[121],"h":1},{"t":31,"s":[301],"h":1}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"gr","it":[{"ty":"fl","c":{"a":0,"k":[0.070588235294,0.074509803922,0.192156862745,1],"ix":4,"x":"var $bm_rt;\n$bm_rt = comp('165-view-carousel-outline').layer('Color & Stroke Change').effect('Primary')('Color');"},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":55,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"lordicon.com Outlines","cl":"com","sr":1,"ks":{"o":{"a":0,"k":20,"ix":11,"x":"var $bm_rt;\nvar checkbox = thisComp.layer('02092020').effect('02092020002')('Checkbox');\nif (checkbox == 1) {\n $bm_rt = 20;\n} else {\n $bm_rt = 0;\n}\n;"},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[249.934,481.369,0],"ix":2,"l":2},"a":{"a":0,"k":[79.934,0.369,0],"ix":1,"l":2},"s":{"a":0,"k":[265.159,265.159,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.415,0],[11.014,0],[11.014,-2.523],[4.656,-2.523],[4.656,-14.809],[1.415,-14.809]],"c":true},"ix":2},"nm":"l","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"l","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.938],[-1.62,-1.723],[-1.949,0],[-1.641,1.846],[0,2.154],[1.579,1.805],[1.579,0]],"o":[[0,1.354],[1.354,1.415],[1.231,0],[1.21,-1.354],[0,-1.456],[-1.456,-1.641],[-5.333,0]],"v":[[11.167,-7.199],[12.992,-1.661],[18.243,0.369],[23.514,-1.743],[25.381,-7.548],[23.494,-13.127],[18.284,-15.137]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.415],[-0.841,1.026],[-1.19,0],[-0.615,-1.825],[0,-0.718],[0.492,-0.738],[1.292,0],[0.451,0.615]],"o":[[0,-1.682],[0.595,-0.759],[1.518,0],[0.308,0.902],[0,2.359],[-0.595,0.923],[-1.477,0],[-0.882,-1.149]],"v":[[14.49,-7.302],[15.577,-11.609],[18.305,-12.86],[21.689,-10.235],[22.058,-7.589],[21.053,-3.343],[18.284,-1.969],[15.597,-3.159]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"o","np":5,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-0.287,-0.841],[-0.144,-0.82],[0,0],[0.164,0.656],[0.226,1.743],[2.236,0.205],[0,2.769],[0.923,0.8],[1.641,-0.021],[0,0]],"o":[[0,0],[0,0],[0,0],[0.533,0],[0.205,0.574],[0,0],[-0.164,-0.246],[-0.103,-0.41],[-0.267,-1.928],[0.718,-0.205],[0,-0.964],[-1.19,-1.026],[0,0],[0,0]],"v":[[27.381,0],[30.622,0],[30.622,-5.989],[33.411,-5.989],[35.011,-5.148],[35.811,0],[39.318,0],[38.867,-1.067],[38.416,-3.938],[35.749,-7.343],[38.847,-10.973],[37.554,-13.824],[33.063,-14.829],[27.381,-14.829]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.492,-0.349],[0,-1.005],[0.226,-0.164],[0.369,0],[0,0]],"o":[[0,0],[1.005,0],[0.287,0.185],[0,1.046],[-0.513,0.41],[0,0],[0,0]],"v":[[30.519,-12.491],[32.652,-12.491],[34.744,-12.142],[35.524,-10.481],[34.703,-8.758],[33.083,-8.348],[30.519,-8.348]],"c":true},"ix":2},"nm":"r","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"r","np":5,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-0.554,0.103],[0,4.553],[1.866,1.374],[0.82,0],[0,0]],"o":[[0,0],[1.497,0],[2.81,-0.513],[0,-2.113],[-1.784,-1.313],[0,0],[0,0]],"v":[[41.068,0],[45.683,0],[48.349,-0.164],[53.6,-7.609],[51.077,-13.434],[45.97,-14.768],[41.068,-14.788]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-0.656,-0.185],[0,-2.092],[1.251,-1.251],[1.354,0],[0.349,0.021]],"o":[[1.825,-0.082],[1.99,0.554],[0,0.718],[-0.923,0.923],[-0.369,0],[0,0]],"v":[[44.288,-12.388],[47.611,-12.183],[50.318,-7.609],[48.985,-3.425],[45.539,-2.4],[44.288,-2.441]],"c":true},"ix":2},"nm":"d","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"d","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[55.669,0],[58.849,0],[58.849,-14.87],[55.669,-14.87]],"c":true},"ix":2},"nm":"i","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"i","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.241,0],[0,-4.697],[-5.107,0],[-1.313,1.354],[-0.062,0.882],[0,0],[1.333,0],[0,0.882],[-2.359,0],[-0.062,-0.513]],"o":[[0,-2.954],[-4.164,0],[0,3.671],[1.354,0],[1.19,-1.231],[0,0],[-0.062,1.969],[-3.097,0],[0,-3.056],[2.154,0],[0,0]],"v":[[73.104,-9.989],[67.587,-14.911],[60.798,-7.097],[67.566,0.349],[71.894,-1.313],[73.227,-4.799],[69.884,-4.799],[67.218,-1.99],[64.121,-7.076],[67.464,-12.593],[69.864,-9.989]],"c":true},"ix":2},"nm":"c","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"c","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.938],[-1.62,-1.723],[-1.949,0],[-1.641,1.846],[0,2.154],[1.579,1.805],[1.579,0]],"o":[[0,1.354],[1.354,1.415],[1.231,0],[1.21,-1.354],[0,-1.456],[-1.456,-1.641],[-5.333,0]],"v":[[74.546,-7.199],[76.372,-1.661],[81.622,0.369],[86.894,-1.743],[88.76,-7.548],[86.873,-13.127],[81.663,-15.137]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.415],[-0.841,1.026],[-1.19,0],[-0.615,-1.825],[0,-0.718],[0.492,-0.738],[1.292,0],[0.451,0.615]],"o":[[0,-1.682],[0.595,-0.759],[1.518,0],[0.308,0.902],[0,2.359],[-0.595,0.923],[-1.477,0],[-0.882,-1.149]],"v":[[77.869,-7.302],[78.956,-11.609],[81.684,-12.86],[85.068,-10.235],[85.437,-7.589],[84.432,-3.343],[81.663,-1.969],[78.977,-3.159]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"o","np":5,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[91.007,0],[94.001,0],[94.001,-12.306],[99.744,0],[104.113,0],[104.113,-14.829],[101.159,-14.829],[101.159,-3.159],[95.601,-14.829],[91.007,-14.829]],"c":true},"ix":2},"nm":"n","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"n","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[106.893,0],[109.497,0],[109.497,-2.728],[106.893,-2.728]],"c":true},"ix":2},"nm":".","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":".","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.241,0],[0,-4.697],[-5.107,0],[-1.313,1.354],[-0.062,0.882],[0,0],[1.333,0],[0,0.882],[-2.359,0],[-0.062,-0.513]],"o":[[0,-2.954],[-4.164,0],[0,3.671],[1.354,0],[1.19,-1.231],[0,0],[-0.062,1.969],[-3.097,0],[0,-3.056],[2.154,0],[0,0]],"v":[[124.04,-9.989],[118.523,-14.911],[111.734,-7.097],[118.502,0.349],[122.83,-1.313],[124.163,-4.799],[120.82,-4.799],[118.154,-1.99],[115.057,-7.076],[118.4,-12.593],[120.8,-9.989]],"c":true},"ix":2},"nm":"c","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"c","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.938],[-1.62,-1.723],[-1.949,0],[-1.641,1.846],[0,2.154],[1.579,1.805],[1.579,0]],"o":[[0,1.354],[1.354,1.415],[1.231,0],[1.21,-1.354],[0,-1.456],[-1.456,-1.641],[-5.333,0]],"v":[[125.482,-7.199],[127.308,-1.661],[132.558,0.369],[137.829,-1.743],[139.696,-7.548],[137.809,-13.127],[132.599,-15.137]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,1.415],[-0.841,1.026],[-1.19,0],[-0.615,-1.825],[0,-0.718],[0.492,-0.738],[1.292,0],[0.451,0.615]],"o":[[0,-1.682],[0.595,-0.759],[1.518,0],[0.308,0.902],[0,2.359],[-0.595,0.923],[-1.477,0],[-0.882,-1.149]],"v":[[128.805,-7.302],[129.892,-11.609],[132.62,-12.86],[136.004,-10.235],[136.373,-7.589],[135.368,-3.343],[132.599,-1.969],[129.912,-3.159]],"c":true},"ix":2},"nm":"o","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"o","np":5,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[141.696,0],[144.67,0],[144.67,-12.716],[148.629,0],[151.254,0],[155.295,-12.716],[155.295,0],[158.453,0],[158.453,-14.829],[153.408,-14.829],[150.024,-4.041],[146.885,-14.829],[141.696,-14.829]],"c":true},"ix":2},"nm":"m","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"m","np":3,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false}],"ip":2.5,"op":25,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"02092020","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-105,15,0],"ix":2,"l":2},"a":{"a":0,"k":[60,60,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"ef":[{"ty":5,"nm":"02092020002","np":3,"mn":"ADBE Checkbox Control","ix":1,"en":1,"ef":[{"ty":7,"nm":"Checkbox","mn":"ADBE Checkbox Control-0001","ix":1,"v":{"a":0,"k":0,"ix":1}}]}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"Color & Stroke Change","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-55,-102,0],"ix":2,"l":2,"x":"var $bm_rt;\n$bm_rt = effect('Axis')('Point');"},"a":{"a":0,"k":[50,50,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2,"x":"var $bm_rt;\nvar temp;\ntemp = effect('Scale')('Slider');\n$bm_rt = [\n temp,\n temp\n];"}},"ao":0,"ef":[{"ty":5,"nm":"Primary","np":3,"mn":"ADBE Color Control","ix":1,"en":1,"ef":[{"ty":2,"nm":"Color","mn":"ADBE Color Control-0001","ix":1,"v":{"a":0,"k":[1,1,1],"ix":1}}]},{"ty":5,"nm":"Axis","np":3,"mn":"ADBE Point Control","ix":2,"en":1,"ef":[{"ty":3,"nm":"Point","mn":"ADBE Point Control-0001","ix":1,"v":{"a":0,"k":[250,250],"ix":1}}]},{"ty":5,"nm":"Scale","np":3,"mn":"ADBE Slider Control","ix":3,"en":1,"ef":[{"ty":0,"nm":"Slider","mn":"ADBE Slider Control-0001","ix":1,"v":{"a":0,"k":100,"ix":1}}]},{"ty":5,"nm":"State-Intro","np":3,"mn":"ADBE Slider Control","ix":4,"en":1,"ef":[{"ty":0,"nm":"Slider","mn":"ADBE Slider Control-0001","ix":1,"v":{"a":0,"k":0,"ix":1}}]},{"ty":5,"nm":"State-Hover","np":3,"mn":"ADBE Slider Control","ix":5,"en":1,"ef":[{"ty":0,"nm":"Slider","mn":"ADBE Slider Control-0001","ix":1,"v":{"a":0,"k":1,"ix":1}}]}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"in-carousel","parent":3,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11,"x":"var $bm_rt;\n$bm_rt = $bm_mul(thisComp.layer('Color & Stroke Change').effect('State-Intro')('Slider'), 100);"},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50,50,0],"ix":2,"l":2},"a":{"a":0,"k":[250,250,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":500,"h":500,"ip":0,"op":71,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"hover-carousel","parent":3,"refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11,"x":"var $bm_rt;\n$bm_rt = $bm_mul(thisComp.layer('Color & Stroke Change').effect('State-Hover')('Slider'), 100);"},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[50,50,0],"ix":2,"l":2},"a":{"a":0,"k":[250,250,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":500,"h":500,"ip":0,"op":71,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/frontend/src/components/basic/Layout.tsx b/frontend/src/components/basic/Layout.tsx deleted file mode 100644 index 5a73a29e4..000000000 --- a/frontend/src/components/basic/Layout.tsx +++ /dev/null @@ -1,385 +0,0 @@ -/* eslint-disable no-nested-ternary */ -/* eslint-disable no-unexpected-multiline */ -/* eslint-disable react-hooks/exhaustive-deps */ -import crypto from "crypto"; - -import { useEffect, useMemo, useState } from "react"; -import { useTranslation } from "react-i18next"; -import Link from "next/link"; -import { useRouter } from "next/router"; -import { - faBookOpen, - faFileLines, - faGear, - faKey, - faMobile, - faPlug, - faPlus, - faUser -} from "@fortawesome/free-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -import getOrganizations from "@app/pages/api/organization/getOrgs"; -import getOrganizationUserProjects from "@app/pages/api/organization/GetOrgUserProjects"; -import getOrganizationUsers from "@app/pages/api/organization/GetOrgUsers"; -import getUser from "@app/pages/api/user/getUser"; -import addUserToWorkspace from "@app/pages/api/workspace/addUserToWorkspace"; -import createWorkspace from "@app/pages/api/workspace/createWorkspace"; -import getWorkspaces from "@app/pages/api/workspace/getWorkspaces"; -import uploadKeys from "@app/pages/api/workspace/uploadKeys"; - -import NavBarDashboard from "../navigation/NavBarDashboard"; -import onboardingCheck from "../utilities/checks/OnboardingCheck"; -import { tempLocalStorage } from "../utilities/checks/tempLocalStorage"; -import { decryptAssymmetric, encryptAssymmetric } from "../utilities/cryptography/crypto"; -import Button from "./buttons/Button"; -import AddWorkspaceDialog from "./dialog/AddWorkspaceDialog"; -import Listbox from "./Listbox"; - -interface LayoutProps { - children: React.ReactNode; -} - -const Layout = ({ children }: LayoutProps) => { - const router = useRouter(); - const [workspaceMapping, setWorkspaceMapping] = useState[]>([]); - const [workspaceSelected, setWorkspaceSelected] = useState("∞"); - const [newWorkspaceName, setNewWorkspaceName] = useState(""); - const [isOpen, setIsOpen] = useState(false); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(false); - const [totalOnboardingActionsDone, setTotalOnboardingActionsDone] = useState(0); - - const { t } = useTranslation(); - - const closeModal = () => { - setIsOpen(false); - }; - - const openModal = () => { - setIsOpen(true); - }; - - // TODO: what to do about the fact that 2ids can have the same name - - /** - * When a user creates a new workspace, redirect them to the page of the new workspace. - * @param {*} workspaceName - */ - const submitModal = async (workspaceName: string, addAllUsers: boolean) => { - setLoading(true); - // timeout code. - setTimeout(() => setLoading(false), 1500); - - try { - const workspaces = await getWorkspaces(); - const currentWorkspaces = workspaces.map((workspace) => workspace.name); - if (!currentWorkspaces.includes(workspaceName)) { - const newWorkspace = await createWorkspace({ - workspaceName, - organizationId: tempLocalStorage("orgData.id") - }); - const newWorkspaceId = newWorkspace._id; - - const randomBytes = crypto.randomBytes(16).toString("hex"); - const PRIVATE_KEY = String(localStorage.getItem("PRIVATE_KEY")); - - const myUser = await getUser(); - - const { ciphertext, nonce } = encryptAssymmetric({ - plaintext: randomBytes, - publicKey: myUser.publicKey, - privateKey: PRIVATE_KEY - }); - - await uploadKeys(newWorkspaceId, myUser._id, ciphertext, nonce); - - if (addAllUsers) { - console.log("adding other users"); - const orgUsers = await getOrganizationUsers({ - orgId: tempLocalStorage("orgData.id") - }); - orgUsers.map(async (user: any) => { - if (user.status === "accepted" && user.email !== myUser.email) { - const result = await addUserToWorkspace(user.user.email, newWorkspaceId); - if (result?.invitee && result?.latestKey) { - const TEMP_PRIVATE_KEY = tempLocalStorage("PRIVATE_KEY"); - - // assymmetrically decrypt symmetric key with local private key - const key = decryptAssymmetric({ - ciphertext: result.latestKey.encryptedKey, - nonce: result.latestKey.nonce, - publicKey: result.latestKey.sender.publicKey, - privateKey: TEMP_PRIVATE_KEY - }); - - const { ciphertext: inviteeCipherText, nonce: inviteeNonce } = encryptAssymmetric({ - plaintext: key, - publicKey: result.invitee.publicKey, - privateKey: PRIVATE_KEY - }); - - uploadKeys(newWorkspaceId, result.invitee._id, inviteeCipherText, inviteeNonce); - } - } - }); - } - setWorkspaceMapping((prevState) => ({ - ...prevState, - [workspaceName]: newWorkspaceId - })); - setWorkspaceSelected(workspaceName); - setIsOpen(false); - setNewWorkspaceName(""); - } else { - console.error("A project with this name already exists."); - setError(true); - setLoading(false); - } - } catch (err) { - console.error(err); - setError(true); - setLoading(false); - } - }; - - const menuItems = useMemo( - () => [ - { - href: `/dashboard/${workspaceMapping[workspaceSelected as any]}`, - title: t("nav.menu.secrets"), - emoji: - }, - { - href: `/users/${workspaceMapping[workspaceSelected as any]}`, - title: t("nav.menu.members"), - emoji: - }, - { - href: `/integrations/${workspaceMapping[workspaceSelected as any]}`, - title: t("nav.menu.integrations"), - emoji: - }, - { - href: `/activity/${workspaceMapping[workspaceSelected as any]}`, - title: "Audit Logs", - emoji: - }, - { - href: `/settings/project/${workspaceMapping[workspaceSelected as any]}`, - title: t("nav.menu.project-settings"), - emoji: - } - ], - [t, workspaceMapping, workspaceSelected] - ); - - useEffect(() => { - // Put a user in a workspace if they're not in one yet - - const putUserInWorkSpace = async () => { - if (tempLocalStorage("orgData.id") === "") { - const userOrgs = await getOrganizations(); - localStorage.setItem("orgData.id", userOrgs[0]._id); - } - - const orgUserProjects = await getOrganizationUserProjects({ - orgId: tempLocalStorage("orgData.id") - }); - const userWorkspaces = orgUserProjects; - if ( - (userWorkspaces.length === 0 && - router.asPath !== "/noprojects" && - !router.asPath.includes("home") && - !router.asPath.includes("settings")) || - router.asPath === "/dashboard/undefined" - ) { - router.push("/noprojects"); - } else if (router.asPath !== "/noprojects") { - const intendedWorkspaceId = router.asPath - .split("/") - [router.asPath.split("/").length - 1].split("?")[0]; - - if (!["callback", "create", "authorize"].includes(intendedWorkspaceId)) { - localStorage.setItem("projectData.id", intendedWorkspaceId); - } - - // If a user is not a member of a workspace they are trying to access, just push them to one of theirs - if ( - !["callback", "create", "authorize"].includes(intendedWorkspaceId) && - !userWorkspaces - .map((workspace: { _id: string }) => workspace._id) - .includes(intendedWorkspaceId) - ) { - router.push(`/dashboard/${userWorkspaces[0]._id}`); - } else { - setWorkspaceMapping( - Object.fromEntries( - userWorkspaces.map((workspace: any) => [workspace.name, workspace._id]) - ) as any - ); - setWorkspaceSelected( - Object.fromEntries( - userWorkspaces.map((workspace: any) => [workspace._id, workspace.name]) - )[router.asPath.split("/")[router.asPath.split("/").length - 1].split("?")[0]] - ); - } - } - }; - putUserInWorkSpace(); - onboardingCheck({ setTotalOnboardingActionsDone }); - }, [router.query.id]); - - useEffect(() => { - try { - if ( - workspaceMapping[workspaceSelected as any] && - `${workspaceMapping[workspaceSelected as any]}` !== - router.asPath.split("/")[router.asPath.split("/").length - 1].split("?")[0] - ) { - localStorage.setItem("projectData.id", `${workspaceMapping[workspaceSelected as any]}`); - router.push(`/dashboard/${workspaceMapping[workspaceSelected as any]}`); - } - } catch (err) { - console.log(err); - } - }, [workspaceSelected]); - - return ( - <> -
      - -
      - - -
      {children}
      -
      -
      -
      - -

      - {` ${t("common.no-mobile")} `} -

      -
      - - ); -}; - -export default Layout; diff --git a/frontend/src/components/dashboard/DropZone.tsx b/frontend/src/components/dashboard/DropZone.tsx index 93edd35b8..fdf3b1cbe 100644 --- a/frontend/src/components/dashboard/DropZone.tsx +++ b/frontend/src/components/dashboard/DropZone.tsx @@ -182,7 +182,7 @@ const DropZone = ({ return loading ? (
      - google logo + loading animation
      ) : keysExist ? (
      void; - password: string; - setPassword: (password: string) => void; - setStep: (step: number) => void; -}) { - const router = useRouter(); - const [isLoading, setIsLoading] = useState(false); - const [loginError, setLoginError] = useState(false); - - const { t } = useTranslation(); - - const handleLogin = async () => { - try { - if (!email || !password) { - return; - } - - setIsLoading(true); - const isLoginSuccessful = await attemptLogin({ - email, - password, - }); - if (isLoginSuccessful && isLoginSuccessful.success) { - // case: login was successful - - if (isLoginSuccessful.mfaEnabled) { - // case: login requires MFA step - setStep(2); - setIsLoading(false); - return; - } - - // case: login does not require MFA step - router.push(`/dashboard/${localStorage.getItem("projectData.id")}`); - } - - } catch (err) { - setLoginError(true); - } - - setIsLoading(false); - } - - return ( -
      e.preventDefault()}> -
      -

      - {t("login.login")} -

      -
      - setEmail(e.target.value)} - type="email" - placeholder="Enter your email..." - isRequired - autoComplete="username" - className="h-12" - /> -
      -
      -
      - setPassword(e.target.value)} - type="password" - placeholder="Enter your password..." - isRequired - autoComplete="current-password" - id="current-password" - className="h-12" - /> -
      -
      - {!isLoading && loginError && } -
      -
      - -
      -
      -
      -
      - - {t("login.forgot-password")} - -
      - {false && ( -
      - - {t("common.maintenance-alert")} -
      - )} -
      - ); -} diff --git a/frontend/src/components/login/MFAStep.tsx b/frontend/src/components/login/MFAStep.tsx index 2408ad0b1..d75442d8e 100644 --- a/frontend/src/components/login/MFAStep.tsx +++ b/frontend/src/components/login/MFAStep.tsx @@ -8,6 +8,7 @@ import axios from "axios" import attemptCliLoginMfa from "@app/components/utilities/attemptCliLoginMfa" import attemptLoginMfa from "@app/components/utilities/attemptLoginMfa"; import { useSendMfaToken } from "@app/hooks/api/auth"; +import getOrganizations from "@app/pages/api/organization/getOrgs"; import Error from "../basic/Error"; import { Button } from "../v2"; @@ -101,7 +102,7 @@ export default function MFAStep({ // cli page router.push("/cli-redirect"); } - }else{ + } else { const isLoginSuccessful = await attemptLoginMfa({ email, password, @@ -111,7 +112,11 @@ export default function MFAStep({ if (isLoginSuccessful) { setIsLoading(false); - router.push(`/dashboard/${localStorage.getItem("projectData.id")}`); + const userOrgs = await getOrganizations(); + const userOrg = userOrgs[0] && userOrgs[0]._id; + + // case: login does not require MFA step + router.push(`/org/${userOrg}/overview`); } } @@ -180,6 +185,7 @@ export default function MFAStep({ className='h-14' colorSchema="primary" variant="outline_bg" + isLoading={isLoading} > {String(t("mfa.verify"))}
    @@ -187,7 +193,7 @@ export default function MFAStep({
    {t("signup.step2-resend-alert")}
    - - -
    - {orgs?.length > 1 && ( -
    -
    - {t("nav.user.other-organizations")} -
    -
    - {orgs - .filter( - (org: { _id: string }) => org._id !== localStorage.getItem("orgData.id") - ) - .map((org: { _id: string; name: string }) => ( -
    null} - role="button" - tabIndex={0} - key={guidGenerator()} - onClick={() => { - localStorage.setItem("orgData.id", org._id); - router.reload(); - }} - className="flex flex-row justify-start items-center hover:bg-white/5 w-full p-1.5 cursor-pointer rounded-md" - > -
    - {org.name.charAt(0)} -
    -
    -

    {org.name}

    -
    -
    - ))} -
    -
    - )} -
    - - {({ active }) => ( - - )} - -
    - - - -
    -
    - ); -} diff --git a/frontend/src/components/navigation/NavHeader.tsx b/frontend/src/components/navigation/NavHeader.tsx index 4bbdce1bc..fac8f4749 100644 --- a/frontend/src/components/navigation/NavHeader.tsx +++ b/frontend/src/components/navigation/NavHeader.tsx @@ -58,10 +58,16 @@ export default function NavHeader({ return (
    -
    +
    {currentOrg?.name?.charAt(0)}
    -
    {currentOrg?.name}
    + + {currentOrg?.name} + {isProjectRelated && ( <> @@ -79,7 +85,7 @@ export default function NavHeader({ {pageName} @@ -120,7 +126,7 @@ export default function NavHeader({ {index + 1 === folders?.length ? ( {name} ) : ( - + {name === "root" ? selectedEnv?.name : name} diff --git a/frontend/src/components/signup/TeamInviteStep.tsx b/frontend/src/components/signup/TeamInviteStep.tsx index c5fc30f75..b53532c4f 100644 --- a/frontend/src/components/signup/TeamInviteStep.tsx +++ b/frontend/src/components/signup/TeamInviteStep.tsx @@ -5,7 +5,7 @@ import { useRouter } from "next/router"; import { useFetchServerStatus } from "@app/hooks/api/serverDetails"; import { usePopUp } from "@app/hooks/usePopUp"; import addUserToOrg from "@app/pages/api/organization/addUserToOrg"; -import getWorkspaces from "@app/pages/api/workspace/getWorkspaces"; +import getOrganizations from "@app/pages/api/organization/getOrgs"; import { Button, EmailServiceSetupModal } from "../v2"; @@ -21,9 +21,9 @@ export default function TeamInviteStep(): JSX.Element { // Redirect user to the getting started page const redirectToHome = async () => { - const userWorkspaces = await getWorkspaces(); - const userWorkspace = userWorkspaces[0]._id; - router.push(`/dashboard/${userWorkspace}`); + const userOrgs = await getOrganizations(); + const userOrg = userOrgs[0]._id; + router.push(`/org/${userOrg?._id}/overview`); }; const inviteUsers = async ({ emails: inviteEmails }: { emails: string }) => { diff --git a/frontend/src/components/utilities/checks/OnboardingCheck.ts b/frontend/src/components/utilities/checks/OnboardingCheck.ts index 1ac367045..20bb1cd78 100644 --- a/frontend/src/components/utilities/checks/OnboardingCheck.ts +++ b/frontend/src/components/utilities/checks/OnboardingCheck.ts @@ -5,7 +5,6 @@ interface OnboardingCheckProps { setTotalOnboardingActionsDone?: (value: number) => void; setHasUserClickedSlack?: (value: boolean) => void; setHasUserClickedIntro?: (value: boolean) => void; - setHasUserStarred?: (value: boolean) => void; setHasUserPushedSecrets?: (value: boolean) => void; setUsersInOrg?: (value: boolean) => void; } @@ -17,7 +16,6 @@ const onboardingCheck = async ({ setTotalOnboardingActionsDone, setHasUserClickedSlack, setHasUserClickedIntro, - setHasUserStarred, setHasUserPushedSecrets, setUsersInOrg }: OnboardingCheckProps) => { @@ -46,14 +44,6 @@ const onboardingCheck = async ({ } if (setHasUserClickedIntro) setHasUserClickedIntro(!!userActionIntro); - const userActionStar = await checkUserAction({ - action: "star_cta_clicked" - }); - if (userActionStar) { - countActions += 1; - } - if (setHasUserStarred) setHasUserStarred(!!userActionStar); - const orgId = localStorage.getItem("orgData.id"); const orgUsers = await getOrganizationUsers({ orgId: orgId || "" diff --git a/frontend/src/components/utilities/intercom/intercom.ts b/frontend/src/components/utilities/intercom/intercom.ts index cea69edd7..94079bc2b 100644 --- a/frontend/src/components/utilities/intercom/intercom.ts +++ b/frontend/src/components/utilities/intercom/intercom.ts @@ -54,7 +54,6 @@ export const load = () => { // Initializes Intercom export const boot = (options = {}) => { - console.log("boot", { app_id: APP_ID, ...options }) window && window.Intercom && window.Intercom("boot", { app_id: APP_ID, ...options }); diff --git a/frontend/src/components/v2/Dropdown/Dropdown.tsx b/frontend/src/components/v2/Dropdown/Dropdown.tsx index a9292d8b7..cf53714c3 100644 --- a/frontend/src/components/v2/Dropdown/Dropdown.tsx +++ b/frontend/src/components/v2/Dropdown/Dropdown.tsx @@ -21,7 +21,7 @@ export const DropdownMenuContent = forwardRef @@ -62,7 +62,7 @@ export const DropdownMenuItem = ({ diff --git a/frontend/src/components/v2/Menu/Menu.tsx b/frontend/src/components/v2/Menu/Menu.tsx index 87ef29b5c..d56d16fec 100644 --- a/frontend/src/components/v2/Menu/Menu.tsx +++ b/frontend/src/components/v2/Menu/Menu.tsx @@ -56,7 +56,7 @@ export const MenuItem = ({ > -
    +
    {/* {icon && {icon}} */} ({ ) }; +export const SubMenuItem = ({ + children, + icon, + className, + isDisabled, + isSelected, + as: Item = "button", + description, + // wrapping in forward ref with generic component causes the loss of ts definitions on props + inputRef, + ...props +}: MenuItemProps & ComponentPropsWithRef): JSX.Element => { + const iconRef = useRef() + + return( + iconRef.current?.play()} + onMouseLeave={() => iconRef.current?.stop()} + > +
  • + + + + {children} + + {description && {description}} + +
  • + + ) +}; + + MenuItem.displayName = "MenuItem"; export type MenuGroupProps = { diff --git a/frontend/src/ee/components/ActivitySideBar.tsx b/frontend/src/ee/components/ActivitySideBar.tsx index 3ba01c6d9..274704f06 100644 --- a/frontend/src/ee/components/ActivitySideBar.tsx +++ b/frontend/src/ee/components/ActivitySideBar.tsx @@ -129,7 +129,7 @@ const ActivitySideBar = ({ toggleSidebar, currentAction }: SideBarProps) => {
    {isLoading ? (
    diff --git a/frontend/src/layouts/AppLayout/AppLayout.tsx b/frontend/src/layouts/AppLayout/AppLayout.tsx index 50422864f..05c1c1532 100644 --- a/frontend/src/layouts/AppLayout/AppLayout.tsx +++ b/frontend/src/layouts/AppLayout/AppLayout.tsx @@ -10,12 +10,14 @@ import crypto from "crypto"; import { useEffect, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; +import Image from "next/image"; import Link from "next/link"; import { useRouter } from "next/router"; -import { faAngleDown, faBookOpen, faMobile, faPlus, faQuestion } from "@fortawesome/free-solid-svg-icons"; +import { faGithub, faSlack } from "@fortawesome/free-brands-svg-icons"; +import { faAngleDown, faArrowLeft, faArrowUpRightFromSquare, faBook, faCheck, faEnvelope, faMobile, faPlus, faQuestion } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { yupResolver } from "@hookform/resolvers/yup"; -import queryString from "query-string"; +import { DropdownMenuTrigger } from "@radix-ui/react-dropdown-menu"; import * as yup from "yup"; import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; @@ -25,6 +27,9 @@ import { encryptAssymmetric } from "@app/components/utilities/cryptography/crypt import { Button, Checkbox, + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, FormControl, Input, Menu, @@ -37,16 +42,35 @@ import { } from "@app/components/v2"; import { useOrganization, useSubscription, useUser, useWorkspace } from "@app/context"; import { usePopUp } from "@app/hooks"; -import { fetchOrgUsers, useAddUserToWs, useCreateWorkspace, useUploadWsKey } from "@app/hooks/api"; -import getOrganizations from "@app/pages/api/organization/getOrgs"; -import getOrganizationUserProjects from "@app/pages/api/organization/GetOrgUserProjects"; - -import { Navbar } from "./components/NavBar"; +import { fetchOrgUsers, useAddUserToWs, useCreateWorkspace, useLogoutUser, useUploadWsKey } from "@app/hooks/api"; interface LayoutProps { children: React.ReactNode; } +const supportOptions = [ + [ + , + "Support Forum", + "https://infisical.com/slack" + ], + [ + , + "Read Docs", + "https://infisical.com/docs/documentation/getting-started/introduction" + ], + [ + , + "GitHub Issues", + "https://github.com/Infisical/infisical/issues" + ], + [ + , + "Email Support", + "mailto:support@infisical.com" + ] +]; + const formSchema = yup.object({ name: yup.string().required().label("Project Name").trim(), addMembers: yup.bool().required().label("Add Members") @@ -60,9 +84,10 @@ export const AppLayout = ({ children }: LayoutProps) => { // eslint-disable-next-line prefer-const const { workspaces, currentWorkspace } = useWorkspace(); - const { currentOrg } = useOrganization(); + const { orgs, currentOrg } = useOrganization(); const { user } = useUser(); const { subscription } = useSubscription(); + const [ isLearningNoteOpen, setIsLearningNoteOpen ] = useState(true); const isAddingProjectsAllowed = subscription?.workspaceLimit ? (subscription.workspacesUsed < subscription.workspaceLimit) : true; @@ -83,10 +108,6 @@ export const AppLayout = ({ children }: LayoutProps) => { resolver: yupResolver(formSchema) }); - const [workspaceMapping, setWorkspaceMapping] = useState[]>([]); - const [workspaceSelected, setWorkspaceSelected] = useState("∞"); - const [totalOnboardingActionsDone, setTotalOnboardingActionsDone] = useState(0); - const { t } = useTranslation(); useEffect(() => { @@ -101,111 +122,71 @@ export const AppLayout = ({ children }: LayoutProps) => { }; }, []); + const logout = useLogoutUser(); + const logOutUser = async () => { + try { + console.log("Logging out...") + await logout.mutateAsync(); + localStorage.removeItem("protectedKey"); + localStorage.removeItem("protectedKeyIV"); + localStorage.removeItem("protectedKeyTag"); + localStorage.removeItem("publicKey"); + localStorage.removeItem("encryptedPrivateKey"); + localStorage.removeItem("iv"); + localStorage.removeItem("tag"); + localStorage.removeItem("PRIVATE_KEY"); + localStorage.removeItem("orgData.id"); + localStorage.removeItem("projectData.id"); + router.push("/login"); + } catch (error) { + console.error(error); + } + }; + // TODO(akhilmhdh): This entire logic will be rechecked and will try to avoid // Placing the localstorage as much as possible // Wait till tony integrates the azure and its launched useEffect(() => { - // Put a user in a workspace if they're not in one yet - const putUserInWorkSpace = async () => { + // Put a user in an org if they're not in one yet + const putUserInOrg = async () => { if (tempLocalStorage("orgData.id") === "") { - const userOrgs = await getOrganizations(); - localStorage.setItem("orgData.id", userOrgs[0]?._id); + localStorage.setItem("orgData.id", orgs[0]?._id); } - const orgUserProjects = await getOrganizationUserProjects({ - orgId: tempLocalStorage("orgData.id") - }); - const userWorkspaces = orgUserProjects; - if ( - (userWorkspaces?.length === 0 && - router.asPath !== "/noprojects" && - !router.asPath.includes("home") && - !router.asPath.includes("settings")) || - router.asPath === "/dashboard/undefined" - ) { - router.push("/noprojects"); - } else if (router.asPath !== "/noprojects") { - // const pathSegments = router.asPath.split('/').filter(segment => segment.length > 0); + if (currentOrg && ( + (workspaces?.length === 0 && !router.asPath.includes("org") && !router.asPath.includes("personal") && !router.asPath.includes("integration")) + || router.asPath.includes("/project/undefined") + || !orgs?.includes(router.query.id) + )) { + router.push(`/org/${currentOrg?._id}/overview`); + } + // else if (!router.asPath.includes("org") && !router.asPath.includes("project") && !router.asPath.includes("integrations") && !router.asPath.includes("personal-settings")) { - // let intendedWorkspaceId; - // if (pathSegments.length >= 2 && pathSegments[0] === 'dashboard') { - // intendedWorkspaceId = pathSegments[1]; - // } else if (pathSegments.length >= 3 && pathSegments[0] === 'settings') { - // intendedWorkspaceId = pathSegments[2]; - // } else { - // intendedWorkspaceId = router.asPath - // .split('/') - // [router.asPath.split('/').length - 1].split('?')[0]; - // } + // const pathSegments = router.asPath.split("/").filter((segment) => segment.length > 0); - const pathSegments = router.asPath.split("/").filter((segment) => segment.length > 0); + // let intendedWorkspaceId; + // if (pathSegments.length >= 2 && pathSegments[0] === "dashboard") { + // [, intendedWorkspaceId] = pathSegments; + // } else if (pathSegments.length >= 3 && pathSegments[0] === "settings") { + // [, , intendedWorkspaceId] = pathSegments; + // } else { + // const lastPathSegments = router.asPath.split("/").pop(); + // if (lastPathSegments !== undefined) { + // [intendedWorkspaceId] = lastPathSegments.split("?"); + // } + // } - let intendedWorkspaceId; - if (pathSegments.length >= 2 && pathSegments[0] === "dashboard") { - [, intendedWorkspaceId] = pathSegments; - } else if (pathSegments.length >= 3 && pathSegments[0] === "settings") { - [, , intendedWorkspaceId] = pathSegments; - } else { - const lastPathSegments = router.asPath.split("/").pop(); - if (lastPathSegments !== undefined) { - [intendedWorkspaceId] = lastPathSegments.split("?"); - } + // if (!intendedWorkspaceId) return; - // const lastPathSegment = router.asPath.split('/').pop().split('?'); - // [intendedWorkspaceId] = lastPathSegment; - } - - if (!intendedWorkspaceId) return; - - if (!["callback", "create", "authorize"].includes(intendedWorkspaceId)) { - localStorage.setItem("projectData.id", intendedWorkspaceId); - } - - // If a user is not a member of a workspace they are trying to access, just push them to one of theirs - if ( - !["callback", "create", "authorize"].includes(intendedWorkspaceId) && - userWorkspaces[0]?._id !== undefined && - !userWorkspaces - .map((workspace: { _id: string }) => workspace._id) - .includes(intendedWorkspaceId) - ) { - const { env } = queryString.parse(router.asPath.split("?")[1]); - if (!env) { - router.push(`/dashboard/${userWorkspaces[0]._id}`); - } - } else { - setWorkspaceMapping( - Object.fromEntries( - userWorkspaces.map((workspace: any) => [workspace.name, workspace._id]) - ) as any - ); - setWorkspaceSelected( - Object.fromEntries( - userWorkspaces.map((workspace: any) => [workspace._id, workspace.name]) - )[router.asPath.split("/")[router.asPath.split("/").length - 1].split("?")[0]] - ); - } - } + // if (!["callback", "create", "authorize"].includes(intendedWorkspaceId)) { + // localStorage.setItem("projectData.id", intendedWorkspaceId); + // } + // } }; - putUserInWorkSpace(); - onboardingCheck({ setTotalOnboardingActionsDone }); - }, [router.query.id]); - - useEffect(() => { - try { - if ( - workspaceMapping[workspaceSelected as any] && - `${workspaceMapping[workspaceSelected as any]}` !== - router.asPath.split("/")[router.asPath.split("/").length - 1].split("?")[0] - ) { - localStorage.setItem("projectData.id", `${workspaceMapping[workspaceSelected as any]}`); - router.push(`/dashboard/${workspaceMapping[workspaceSelected as any]}`); - } - } catch (err) { - console.log(err); - } - }, [workspaceSelected]); + putUserInOrg(); + onboardingCheck({}); + }, [currentOrg]); const onCreateProject = async ({ name, addMembers }: TAddProjectFormData) => { // type check @@ -247,7 +228,7 @@ export const AppLayout = ({ children }: LayoutProps) => { } createNotification({ text: "Workspace created", type: "success" }); handlePopUpClose("addNewWs"); - router.push(`/dashboard/${newWorkspaceId}`); + router.push(`/project/${newWorkspaceId}/secrets`); } catch (err) { console.error(err); createNotification({ text: "Failed to create workspace", type: "error" }); @@ -257,20 +238,74 @@ export const AppLayout = ({ children }: LayoutProps) => { return ( <>
    - {/* */}
    -