diff --git a/.gitignore b/.gitignore index 545cd65da..d2ce28214 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,5 @@ website/.yarn toolbox/fdc3-for-web/fdc3-web-impl/generated/ cucumber-report.html nyc-coverage-report/ -.history/ \ No newline at end of file +.history/ +**/junit.xml \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..dfd63e30d --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node-terminal", + "name": "Run Script: test", + "request": "launch", + "command": "npm run test", + "cwd": "${workspaceFolder}/packages/fdc3-security" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 55712c19f..6111f0cb2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,7 @@ { - "typescript.tsdk": "node_modules/typescript/lib" + "typescript.tsdk": "node_modules/typescript/lib", + "cSpell.words": [ + "finos", + "uuidv" + ] } \ No newline at end of file diff --git a/README.md b/README.md index 87919cd38..38192cb5b 100755 --- a/README.md +++ b/README.md @@ -81,21 +81,24 @@ The specifications are informed by agreed [business use cases](https://fdc3.fino This project (the FDC3 Standard repo) is now a monorepo containing the following modules: -| Directory | Release Coordinates | Purpose | Testing / Coverage | -|--------------------------------------|--------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------| -| `packages/fdc3-schema` | `@finos/fdc3-schema` (npm) | Contains the FDC3 For The Web and Desktop Agent Bridging protocol schemas. Generates `BridgingTypes.ts` and `BrowserTypes.ts` versions of those schemas for consumption in typescript code. | n/a | -| `packages/fdc3-context` | `@finos/fdc3-context` (npm) | Contains the schemas for standard FDC3 context types. Generates the `ContextTypes.ts` typescript version of the schema for consumption in typescript/javascript. | n/a | -| `packages/fdc3-standard` | `@finos/fdc3-standard` (npm) | Interface definitions for the FDC3 standard in typescript (e.g. the `DesktopAgent` interface) and the app directory schema. | Jest, embedded NYC | -| `packages/fdc3-agent-proxy` | `@finos/fdc3-agent-proxy` (npm) | Contains a complete implementation of the FDC3 DACP. Written in a platform-agnostic manner. | Cucumber, NYC | -| `packages/fdc3-get-agent` | `@finos/fdc3-get-agent` (npm) | Implements the `getAgent` and `fdc3Ready()` functions as well as the FDC3 Web Connection protocol to allow FDC3 to work on the web or in an electron container. | Cucumber, NYC | -| `packages/testing` | -not released- | Contains testing tools used by the cucumber tests used within other modules of this project. | | -| `toolbox/fdc3-conformance` | -not released- | Contains definitions of the FDC3 conformance test suite, implemented by the [FDC3 Conformance Framework](https://github.com/finos/FDC3-conformance-framework) | Test Definitions Only | -| `toolbox/fdc3-workbench` | [here](https://fdc3.finos.org/toolbox/fdc3-workbench/) | Contains an FDC3-For-Web ready version of the [FDC3 Workbench](toolbox/fdc3-workbench/README.md). | | -| `toolbox/fdc3-explained` | [Here](https://fdc3.finos.org/toolbox/fdc3-explained) | [Readme Here](toolbox/fdc3-explained/README.md) | | -| `toolbox/fdc3-for-web/fdc3-web-impl` | `@finos/fdc3-web-impl` (npm) | Portable and reusable implementation of the FDC3 For-The-Web Desktop Agent-Side protocol, | Cucumber, NYC | -| `toolbox/fdc3-for-web/demo` | -not released- | A reference implementation of an FDC3-For-The-Web Desktop Agent, using the above implementation and conforming to FDC3 2.0 from the [FDC3 Conformance Framework](https://github.com/finos/FDC3-conformance-framework) | | -| `packages/fdc3` | `@finos/fdc3` (npm) | Imports `fdc3-standard`, `fdc3-context`, `fdc3-schema` and `fdc3-get-agent` sub-modules. This is intended to be the main entry point for typescript / javascript applications using FDC3 | | -| `packages/fdc3-commonjs` | `@finos/fdc3-commonjs` (npm) | A roll-up of the `fdc3` sub-module. This is for **backwards compatibility where CommonJS is required**. May not be provided in future versions of FDC3. | | +| Directory | Release Coordinates | Purpose | Testing / Coverage | Demo Port No | +|--------------------------------------|--------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------|--------------| +| `packages/fdc3-schema` | `@finos/fdc3-schema` (npm) | Contains the FDC3 For The Web and Desktop Agent Bridging protocol schemas. Generates `BridgingTypes.ts` and `BrowserTypes.ts` versions of those schemas for consumption in typescript code. | n/a | - | +| `packages/fdc3-context` | `@finos/fdc3-context` (npm) | Contains the schemas for standard FDC3 context types. Generates the `ContextTypes.ts` typescript version of the schema for consumption in typescript/javascript. | n/a | - | +| `packages/fdc3-standard` | `@finos/fdc3-standard` (npm) | Interface definitions for the FDC3 standard in typescript (e.g. the `DesktopAgent` interface) and the app directory schema. | Jest, embedded NYC | - | +| `packages/fdc3-agent-proxy` | `@finos/fdc3-agent-proxy` (npm) | Contains a complete implementation of the FDC3 DACP. Written in a platform-agnostic manner. | Cucumber, NYC | - | +| `packages/fdc3-get-agent` | `@finos/fdc3-get-agent` (npm) | Implements the `getAgent` and `fdc3Ready()` functions as well as the FDC3 Web Connection protocol to allow FDC3 to work on the web or in an electron container. | Cucumber, NYC | - | +| `packages/fdc3-security` | `@finos/fdc3-security` (npm) | Contains FDC3 security functionality including signing, encryption, and message authenticity verification. | Cucumber, NYC | - | +| `packages/fdc3-testing` | `@finos/fdc3-testing` | Contains testing tools used by the cucumber tests used within other modules of this project. | - | - | +| `packages/fdc3` | `@finos/fdc3` (npm) | Imports `fdc3-standard`, `fdc3-context`, `fdc3-schema` and `fdc3-get-agent` sub-modules. This is intended to be the main entry point for typescript / javascript applications using FDC3 | - | - | +| `packages/fdc3-commonjs` | `@finos/fdc3-commonjs` (npm) | A roll-up of the `fdc3` sub-module. This is for **backwards compatibility where CommonJS is required**. May not be provided in future versions of FDC3. | - | - | +| `toolbox/fdc3-conformance` | -not released- | Contains definitions of the FDC3 conformance test suite, implemented by the [FDC3 Conformance Framework](https://github.com/finos/FDC3-conformance-framework) | Test Definitions Only | - | +| `toolbox/fdc3-explained` | [Here](https://fdc3.finos.org/toolbox/fdc3-explained) | [Readme Here](toolbox/fdc3-explained/README.md) | - | - | +| `toolbox/fdc3-for-web/fdc3-web-impl` | `@finos/fdc3-web-impl` (npm) | Portable and reusable implementation of the FDC3 For-The-Web Desktop Agent-Side protocol, | Cucumber, NYC | - | +| `toolbox/fdc3-for-web/demo` | -not released- | A reference implementation of an FDC3-For-The-Web Desktop Agent, using the above implementation and conforming to FDC3 2.0 from the [FDC3 Conformance Framework](https://github.com/finos/FDC3-conformance-framework) | - | 4000 | +| `toolbox/fdc3-workbench` | [here](https://fdc3.finos.org/toolbox/fdc3-workbench/) | Contains an FDC3-For-Web ready version of the [FDC3 Workbench](toolbox/fdc3-workbench/README.md). | - | 4001 | +| `toolbox/fdc3-for-web/reference-ui` | -not released- | Reference UI components for channel selector and intent resolver used by the demo. | - | 4002 | +| `toolbox/fdc3-security-implementation` | `@finos/fdc3-security-implementation` (npm) | Implementation of FDC3 security functionality with example server and JOSE-based cryptographic operations. | Jest | 4003-4005 | ### Building and Running The FDC3 Modules diff --git a/package-lock.json b/package-lock.json index 280e1a6c0..ce90e0505 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,23 +1,25 @@ { "name": "@finos/fdc3", - "version": "2.2.0", + "version": "2.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@finos/fdc3", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "workspaces": [ "packages/fdc3-schema", "packages/fdc3-context", "packages/fdc3-standard", - "packages/testing", + "packages/fdc3-testing", "packages/fdc3-agent-proxy", + "packages/fdc3-security", "toolbox/fdc3-for-web/fdc3-web-impl", "packages/fdc3-get-agent", "packages/fdc3", "packages/fdc3-commonjs", + "toolbox/fdc3-security-implementation", "toolbox/fdc3-for-web/reference-ui", "toolbox/fdc3-for-web/demo", "toolbox/fdc3-workbench", @@ -36,21 +38,11 @@ "prettier": "3.4.1" } }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@apidevtools/json-schema-ref-parser": { "version": "11.7.2", "integrity": "sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==", "dev": true, + "license": "MIT", "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.15", @@ -63,39 +55,61 @@ "url": "https://github.com/sponsors/philsturgeon" } }, + "node_modules/@azure/msal-browser": { + "version": "4.25.1", + "integrity": "sha512-kAdOSNjvMbeBmEyd5WnddGmIpKCbAAGj4Gg/1iURtF+nHmIfS0+QUBBO3uaHl7CBB2R1SEAbpOgxycEwrHOkFA==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.13.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "15.13.0", + "integrity": "sha512-8oF6nj02qX7eE/6+wFT5NluXRHc05AgdCC3fJnkjiJooq8u7BcLmxaYYSwc2AfEkWRMRi6Eyvvbeqk4U4412Ag==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/code-frame": { - "version": "7.26.2", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "version": "7.27.1", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.26.8", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "version": "7.28.4", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.10", - "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.10", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.10", - "@babel/parser": "^7.26.10", - "@babel/template": "^7.26.9", - "@babel/traverse": "^7.26.10", - "@babel/types": "^7.26.10", + "version": "7.28.4", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -113,18 +127,20 @@ "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.27.0", - "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "version": "7.28.3", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -132,22 +148,24 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "version": "7.27.3", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.0", - "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "version": "7.27.2", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-validator-option": "^7.25.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -159,21 +177,23 @@ "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.0", - "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "version": "7.28.3", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.27.0", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/traverse": "^7.28.3", "semver": "^6.3.1" }, "engines": { @@ -187,16 +207,18 @@ "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.27.0", - "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "version": "7.27.1", + "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, @@ -211,55 +233,68 @@ "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "version": "0.6.5", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "version": "7.27.1", + "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "version": "7.27.1", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "version": "7.28.3", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -269,32 +304,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "version": "7.27.1", + "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.25.9" + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "version": "7.27.1", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "version": "7.27.1", + "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-wrap-function": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -304,13 +342,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "version": "7.27.1", + "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" + "@babel/helper-member-expression-to-functions": "^7.27.1", + "@babel/helper-optimise-call-expression": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -320,67 +359,74 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "version": "7.27.1", + "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "version": "7.27.1", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "version": "7.27.1", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "version": "7.27.1", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "version": "7.28.3", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.27.0", - "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "version": "7.28.4", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.27.0", - "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "version": "7.28.4", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.27.0" + "@babel/types": "^7.28.4" }, "bin": { "parser": "bin/babel-parser.js" @@ -390,12 +436,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "version": "7.27.1", + "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -405,11 +452,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "version": "7.27.1", + "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -419,11 +467,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "version": "7.27.1", + "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -433,13 +482,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "version": "7.27.1", + "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -449,12 +499,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "version": "7.28.3", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -467,6 +518,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -478,6 +530,7 @@ "version": "7.8.4", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -489,6 +542,7 @@ "version": "7.8.3", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -500,6 +554,7 @@ "version": "7.12.13", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -511,6 +566,7 @@ "version": "7.14.5", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -522,11 +578,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "version": "7.27.1", + "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -536,11 +593,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "version": "7.27.1", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -553,6 +611,7 @@ "version": "7.10.4", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -564,6 +623,7 @@ "version": "7.8.3", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -572,11 +632,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.25.9", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "version": "7.27.1", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -589,6 +650,7 @@ "version": "7.10.4", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -600,6 +662,7 @@ "version": "7.8.3", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -611,6 +674,7 @@ "version": "7.10.4", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -622,6 +686,7 @@ "version": "7.8.3", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -633,6 +698,7 @@ "version": "7.8.3", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -644,6 +710,7 @@ "version": "7.8.3", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -655,6 +722,7 @@ "version": "7.14.5", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -669,6 +737,7 @@ "version": "7.14.5", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -680,11 +749,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.25.9", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", + "version": "7.27.1", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -697,6 +767,7 @@ "version": "7.18.6", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -709,11 +780,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "version": "7.27.1", + "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -723,13 +795,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.26.8", - "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "version": "7.28.0", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.26.8" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -739,13 +812,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "version": "7.27.1", + "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-remap-async-to-generator": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -755,11 +829,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "version": "7.27.1", + "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -769,11 +844,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.0", - "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "version": "7.28.4", + "integrity": "sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -783,12 +859,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "version": "7.27.1", + "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -798,12 +875,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "version": "7.28.3", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.28.3", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -813,16 +891,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "version": "7.28.4", + "integrity": "sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -831,21 +910,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-classes/node_modules/globals": { - "version": "11.12.0", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "version": "7.27.1", + "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/template": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -855,11 +927,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "version": "7.28.0", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -869,12 +943,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "version": "7.27.1", + "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -884,11 +959,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "version": "7.27.1", + "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -898,12 +974,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "version": "7.27.1", + "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -913,11 +990,28 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "version": "7.27.1", + "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -927,11 +1021,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "version": "7.27.1", + "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -941,11 +1036,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "version": "7.27.1", + "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -955,12 +1051,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.26.9", - "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "version": "7.27.1", + "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -970,13 +1067,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "version": "7.27.1", + "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -986,11 +1084,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "version": "7.27.1", + "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1000,11 +1099,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "version": "7.27.1", + "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1014,11 +1114,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "version": "7.27.1", + "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1028,11 +1129,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "version": "7.27.1", + "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1042,12 +1144,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "version": "7.27.1", + "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1057,12 +1160,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "version": "7.27.1", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1072,14 +1176,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "version": "7.27.1", + "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1089,12 +1194,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "version": "7.27.1", + "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1104,12 +1210,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "version": "7.27.1", + "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1119,11 +1226,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "version": "7.27.1", + "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1133,11 +1241,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "version": "7.27.1", + "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1147,11 +1256,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "version": "7.27.1", + "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1161,13 +1271,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "version": "7.28.4", + "integrity": "sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/traverse": "^7.28.4" }, "engines": { "node": ">=6.9.0" @@ -1177,12 +1290,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "version": "7.27.1", + "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-replace-supers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1192,11 +1306,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "version": "7.27.1", + "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1206,12 +1321,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "version": "7.27.1", + "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1221,11 +1337,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "version": "7.27.7", + "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1235,12 +1352,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "version": "7.27.1", + "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1250,13 +1368,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "version": "7.27.1", + "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1266,11 +1385,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "version": "7.27.1", + "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1280,11 +1400,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.9", - "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "version": "7.27.1", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1294,11 +1415,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.9", - "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "version": "7.27.1", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1308,12 +1430,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.0", - "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "version": "7.28.4", + "integrity": "sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5", - "regenerator-transform": "^0.15.2" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1323,12 +1445,13 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "version": "7.27.1", + "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1338,11 +1461,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "version": "7.27.1", + "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1352,11 +1476,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "version": "7.27.1", + "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1366,12 +1491,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "version": "7.27.1", + "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1381,11 +1507,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "version": "7.27.1", + "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1395,11 +1522,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.26.8", - "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "version": "7.27.1", + "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1409,11 +1537,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.0", - "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "version": "7.27.1", + "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1423,11 +1552,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "version": "7.27.1", + "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1437,12 +1567,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "version": "7.27.1", + "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1452,12 +1583,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "version": "7.27.1", + "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1467,12 +1599,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "version": "7.27.1", + "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-create-regexp-features-plugin": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1482,78 +1615,80 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.9", - "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.26.8", - "@babel/helper-compilation-targets": "^7.26.5", - "@babel/helper-plugin-utils": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "version": "7.28.3", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.27.1", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-import-assertions": "^7.27.1", + "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.26.8", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.26.5", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.26.3", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.26.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.26.3", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.26.8", - "@babel/plugin-transform-typeof-symbol": "^7.26.7", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", + "@babel/plugin-transform-async-to-generator": "^7.27.1", + "@babel/plugin-transform-block-scoped-functions": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", + "@babel/plugin-transform-class-properties": "^7.27.1", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", + "@babel/plugin-transform-computed-properties": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", + "@babel/plugin-transform-dotall-regex": "^7.27.1", + "@babel/plugin-transform-duplicate-keys": "^7.27.1", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", + "@babel/plugin-transform-exponentiation-operator": "^7.27.1", + "@babel/plugin-transform-export-namespace-from": "^7.27.1", + "@babel/plugin-transform-for-of": "^7.27.1", + "@babel/plugin-transform-function-name": "^7.27.1", + "@babel/plugin-transform-json-strings": "^7.27.1", + "@babel/plugin-transform-literals": "^7.27.1", + "@babel/plugin-transform-logical-assignment-operators": "^7.27.1", + "@babel/plugin-transform-member-expression-literals": "^7.27.1", + "@babel/plugin-transform-modules-amd": "^7.27.1", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-modules-systemjs": "^7.27.1", + "@babel/plugin-transform-modules-umd": "^7.27.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", + "@babel/plugin-transform-new-target": "^7.27.1", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", + "@babel/plugin-transform-numeric-separator": "^7.27.1", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", + "@babel/plugin-transform-object-super": "^7.27.1", + "@babel/plugin-transform-optional-catch-binding": "^7.27.1", + "@babel/plugin-transform-optional-chaining": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", + "@babel/plugin-transform-private-methods": "^7.27.1", + "@babel/plugin-transform-private-property-in-object": "^7.27.1", + "@babel/plugin-transform-property-literals": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.3", + "@babel/plugin-transform-regexp-modifiers": "^7.27.1", + "@babel/plugin-transform-reserved-words": "^7.27.1", + "@babel/plugin-transform-shorthand-properties": "^7.27.1", + "@babel/plugin-transform-spread": "^7.27.1", + "@babel/plugin-transform-sticky-regex": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/plugin-transform-typeof-symbol": "^7.27.1", + "@babel/plugin-transform-unicode-escapes": "^7.27.1", + "@babel/plugin-transform-unicode-property-regex": "^7.27.1", + "@babel/plugin-transform-unicode-regex": "^7.27.1", + "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -1567,6 +1702,7 @@ "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -1575,6 +1711,7 @@ "version": "0.1.6-no-external-plugins", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -1585,57 +1722,50 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, + "version": "7.28.4", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.27.0", - "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "version": "7.27.2", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/parser": "^7.27.0", - "@babel/types": "^7.27.0" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.27.0", - "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "version": "7.28.4", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.27.0", - "@babel/parser": "^7.27.0", - "@babel/template": "^7.27.0", - "@babel/types": "^7.27.0", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.27.0", - "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "version": "7.28.4", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1644,11 +1774,13 @@ "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@colors/colors": { "version": "1.5.0", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -1657,6 +1789,7 @@ "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -1667,6 +1800,7 @@ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1674,11 +1808,13 @@ }, "node_modules/@cucumber/ci-environment": { "version": "10.0.0", - "integrity": "sha512-lRkiehckosIOdc7p1L44nZsttO5dVHFjpwKKWZ07x8SeoAdV/sPuGe1PISe0AmAowFGza62nMOgG4KaroGzwFQ==" + "integrity": "sha512-lRkiehckosIOdc7p1L44nZsttO5dVHFjpwKKWZ07x8SeoAdV/sPuGe1PISe0AmAowFGza62nMOgG4KaroGzwFQ==", + "license": "MIT" }, "node_modules/@cucumber/cucumber": { "version": "10.3.1", "integrity": "sha512-0H0NkOXcYTCG1qCh3o0p1HPSMODGJmlHi1rm5yfoiMx5tJbBjxVNI2VVD2xtPWA+D6ehHQD9asewuzjMXrbPIw==", + "license": "MIT", "dependencies": { "@cucumber/ci-environment": "10.0.0", "@cucumber/cucumber-expressions": "17.0.1", @@ -1732,6 +1868,7 @@ "node_modules/@cucumber/cucumber-expressions": { "version": "17.0.1", "integrity": "sha512-reR7/sNRmDWgdz8BtFuHEwpksPnAkHty7gxUC2n0iaUPmckv9G5I5i+Vonc6xwUHDb/hmHPz/DyUL+Iv4Ao96w==", + "license": "MIT", "dependencies": { "regexp-match-indices": "1.0.2" } @@ -1739,6 +1876,7 @@ "node_modules/@cucumber/cucumber/node_modules/@cucumber/html-formatter": { "version": "21.2.0", "integrity": "sha512-4OcSa12Y0v5e4ySDl67+QFTxCG/Y9fxGSkFqvm98ggpTvS7b75whwzupu+lM2lMBw+h3H6P8ZURQr0xQIAwE2A==", + "license": "MIT", "peerDependencies": { "@cucumber/messages": ">=18" } @@ -1746,6 +1884,7 @@ "node_modules/@cucumber/cucumber/node_modules/@cucumber/messages": { "version": "24.0.1", "integrity": "sha512-dKfNkvgc6stSQIyeHk7p/221iqEZe1BP+e/Js8XKtSmc0sS8khKMvbSBwYVeonn/67/vYKiAyo6Eo0SzXd5Plw==", + "license": "MIT", "dependencies": { "@types/uuid": "9.0.7", "class-transformer": "0.5.1", @@ -1755,16 +1894,33 @@ }, "node_modules/@cucumber/cucumber/node_modules/@types/uuid": { "version": "9.0.7", - "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==" + "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==", + "license": "MIT" + }, + "node_modules/@cucumber/cucumber/node_modules/mkdirp": { + "version": "2.1.6", + "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/@cucumber/cucumber/node_modules/reflect-metadata": { "version": "0.2.1", "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==", - "deprecated": "This version has a critical bug in fallback handling. Please upgrade to reflect-metadata@0.2.2 or newer." + "deprecated": "This version has a critical bug in fallback handling. Please upgrade to reflect-metadata@0.2.2 or newer.", + "license": "Apache-2.0" }, "node_modules/@cucumber/gherkin": { "version": "27.0.0", "integrity": "sha512-j5rCsjqzRiC3iVTier3sa0kzyNbkcAmF7xr7jKnyO7qDeK3Z8Ye1P3KSVpeQRMY+KCDJ3WbTDdyxH0FwfA/fIw==", + "license": "MIT", "dependencies": { "@cucumber/messages": ">=19.1.4 <=22" } @@ -1772,6 +1928,7 @@ "node_modules/@cucumber/gherkin-streams": { "version": "5.0.1", "integrity": "sha512-/7VkIE/ASxIP/jd4Crlp4JHXqdNFxPGQokqWqsaCCiqBiu5qHoKMxcWNlp9njVL/n9yN4S08OmY3ZR8uC5x74Q==", + "license": "MIT", "dependencies": { "commander": "9.1.0", "source-map-support": "0.5.21" @@ -1788,6 +1945,7 @@ "node_modules/@cucumber/gherkin-streams/node_modules/commander": { "version": "9.1.0", "integrity": "sha512-i0/MaqBtdbnJ4XQs4Pmyb+oFQl+q0lsAmokVUH92SlSw4fkeAcG3bVon+Qt7hmtF+u3Het6o4VgrcY3qAoEB6w==", + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } @@ -1795,6 +1953,7 @@ "node_modules/@cucumber/gherkin-utils": { "version": "8.0.5", "integrity": "sha512-kxM1OCDjYddF26VKc892PF0GokW4wUIl1PUz3TIXsPZgS39ExM1pF8oww8mlGFD2B0+4op/cSE3SSIME5H3aNw==", + "license": "MIT", "dependencies": { "@cucumber/gherkin": "^26.0.0", "@cucumber/messages": "^22.0.0", @@ -1809,6 +1968,7 @@ "node_modules/@cucumber/gherkin-utils/node_modules/@cucumber/gherkin": { "version": "26.2.0", "integrity": "sha512-iRSiK8YAIHAmLrn/mUfpAx7OXZ7LyNlh1zT89RoziSVCbqSVDxJS6ckEzW8loxs+EEXl0dKPQOXiDmbHV+C/fA==", + "license": "MIT", "dependencies": { "@cucumber/messages": ">=19.1.4 <=22" } @@ -1816,6 +1976,7 @@ "node_modules/@cucumber/gherkin-utils/node_modules/@cucumber/messages": { "version": "22.0.0", "integrity": "sha512-EuaUtYte9ilkxcKmfqGF9pJsHRUU0jwie5ukuZ/1NPTuHS1LxHPsGEODK17RPRbZHOFhqybNzG2rHAwThxEymg==", + "license": "MIT", "dependencies": { "@types/uuid": "9.0.1", "class-transformer": "0.5.1", @@ -1825,15 +1986,18 @@ }, "node_modules/@cucumber/gherkin-utils/node_modules/@types/uuid": { "version": "9.0.1", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==" + "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", + "license": "MIT" }, "node_modules/@cucumber/gherkin-utils/node_modules/reflect-metadata": { "version": "0.1.13", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "license": "Apache-2.0" }, "node_modules/@cucumber/gherkin-utils/node_modules/uuid": { "version": "9.0.0", "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -1841,6 +2005,7 @@ "node_modules/@cucumber/gherkin/node_modules/@cucumber/messages": { "version": "22.0.0", "integrity": "sha512-EuaUtYte9ilkxcKmfqGF9pJsHRUU0jwie5ukuZ/1NPTuHS1LxHPsGEODK17RPRbZHOFhqybNzG2rHAwThxEymg==", + "license": "MIT", "dependencies": { "@types/uuid": "9.0.1", "class-transformer": "0.5.1", @@ -1850,15 +2015,18 @@ }, "node_modules/@cucumber/gherkin/node_modules/@types/uuid": { "version": "9.0.1", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==" + "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", + "license": "MIT" }, "node_modules/@cucumber/gherkin/node_modules/reflect-metadata": { "version": "0.1.13", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "license": "Apache-2.0" }, "node_modules/@cucumber/gherkin/node_modules/uuid": { "version": "9.0.0", "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -1866,6 +2034,7 @@ "node_modules/@cucumber/html-formatter": { "version": "11.0.4", "integrity": "sha512-Ojsx8U6C5IMLpQRYHugan2XM0/+5qXSCrds2Z7/bySuoaZr6ppVYB2jb03aXKWKA4GaMVbflpFOajb4Bc3niUg==", + "license": "MIT", "dependencies": { "@cucumber/gherkin-utils": "^2.1.1", "@cucumber/messages": "^13.2.1", @@ -1884,6 +2053,7 @@ "node_modules/@cucumber/html-formatter/node_modules/@cucumber/gherkin-utils": { "version": "2.1.1", "integrity": "sha512-3wSvFMi6i8lCxNIOM+WMWh/kvnUCEc1S7e0qUlEV7SaW/I4HqXwAodcZjoP6LBkwbPRpK+xEzqitsVLq0x88jQ==", + "license": "MIT", "dependencies": { "@cucumber/messages": "^13.2.1", "@teppeis/multimaps": "^1.1.0" @@ -1892,6 +2062,7 @@ "node_modules/@cucumber/html-formatter/node_modules/@cucumber/messages": { "version": "13.2.1", "integrity": "sha512-2cu6P1JsEcH0/RlMx302KOK9rkKDHYS1H+6/VhQ6L+yrVW458wOU3CiVgurLn3heCDdJH8r4L87pkSwt0rxiGQ==", + "license": "MIT", "dependencies": { "@types/uuid": "^8.3.0", "protobufjs": "^6.10.2", @@ -1901,17 +2072,20 @@ "node_modules/@cucumber/html-formatter/node_modules/@teppeis/multimaps": { "version": "1.1.0", "integrity": "sha512-YgANgfYU7LqgaLkGPWSTiwu2qcuhj0IOvj+kRwDFjAVbiEXT7ZQLPaFfmrAAN/Fa+tvwy1aYFd0RdT7lMO1Msw==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@cucumber/html-formatter/node_modules/@types/uuid": { "version": "8.3.4", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "license": "MIT" }, "node_modules/@cucumber/html-formatter/node_modules/commander": { "version": "6.2.1", "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -1919,6 +2093,7 @@ "node_modules/@cucumber/html-formatter/node_modules/uuid": { "version": "8.3.2", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -1926,36 +2101,25 @@ "node_modules/@cucumber/message-streams": { "version": "4.0.1", "integrity": "sha512-Kxap9uP5jD8tHUZVjTWgzxemi/0uOsbGjd4LBOSxcJoOCRbESFwemUzilJuzNTB8pcTQUh8D5oudUyxfkJOKmA==", + "license": "MIT", "peerDependencies": { "@cucumber/messages": ">=17.1.1" } }, "node_modules/@cucumber/messages": { - "version": "27.2.0", - "integrity": "sha512-f2o/HqKHgsqzFLdq6fAhfG1FNOQPdBdyMGpKwhb7hZqg0yZtx9BVqkTyuoNk83Fcvk3wjMVfouFXXHNEk4nddA==", + "version": "30.1.0", + "integrity": "sha512-KxnsSjHz9EGF23GeZc3BRMK2+bagt2p87mwwNfisBK7BfuyvnXJumyBQJJN4xv5SLSzBKxH3FsZnuOf8LwsHhg==", + "license": "MIT", "peer": true, "dependencies": { - "@types/uuid": "10.0.0", "class-transformer": "0.5.1", - "reflect-metadata": "0.2.2", - "uuid": "11.0.5" - } - }, - "node_modules/@cucumber/messages/node_modules/uuid": { - "version": "11.0.5", - "integrity": "sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "peer": true, - "bin": { - "uuid": "dist/esm/bin/uuid" + "reflect-metadata": "0.2.2" } }, "node_modules/@cucumber/pretty-formatter": { "version": "1.0.1", "integrity": "sha512-A1lU4VVP0aUWdOTmpdzvXOyEYuPtBDI0xYwYJnmoMDplzxMdhcHk86lyyvYDoMoPzzq6OkOE3isuosvUU4X7IQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^5.0.0", "cli-table3": "^0.6.0", @@ -1970,6 +2134,7 @@ "node_modules/@cucumber/pretty-formatter/node_modules/ansi-styles": { "version": "5.2.0", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -1980,6 +2145,7 @@ "node_modules/@cucumber/query": { "version": "7.0.1", "integrity": "sha512-Ocxtm0LLLbYa3TwZZFzHG4/uHnb7GkYNUsRzf+bLyKOYymkffMkgLcITkx+X4Kw/tq+xzzHh3z/YivEAXxBJdQ==", + "license": "MIT", "dependencies": { "@cucumber/messages": "^13.2.1", "@teppeis/multimaps": "^1.1.0" @@ -1988,6 +2154,7 @@ "node_modules/@cucumber/query/node_modules/@cucumber/messages": { "version": "13.2.1", "integrity": "sha512-2cu6P1JsEcH0/RlMx302KOK9rkKDHYS1H+6/VhQ6L+yrVW458wOU3CiVgurLn3heCDdJH8r4L87pkSwt0rxiGQ==", + "license": "MIT", "dependencies": { "@types/uuid": "^8.3.0", "protobufjs": "^6.10.2", @@ -1997,17 +2164,20 @@ "node_modules/@cucumber/query/node_modules/@teppeis/multimaps": { "version": "1.1.0", "integrity": "sha512-YgANgfYU7LqgaLkGPWSTiwu2qcuhj0IOvj+kRwDFjAVbiEXT7ZQLPaFfmrAAN/Fa+tvwy1aYFd0RdT7lMO1Msw==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@cucumber/query/node_modules/@types/uuid": { "version": "8.3.4", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "license": "MIT" }, "node_modules/@cucumber/query/node_modules/uuid": { "version": "8.3.2", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -2016,6 +2186,7 @@ "version": "11.0.2", "integrity": "sha512-kT3T2zakMI9JDOHGpCxFgq54T/xkGFIvbEKm6vRjW5WjbDXV7pp5sMsxqeL5TS9MgmNRkZ3gNr1hX7MKytWb9g==", "deprecated": "This package is now published under @cucumber/react-components", + "license": "MIT", "dependencies": { "@cucumber/gherkin-utils": "^2.1.1", "@cucumber/messages": "^13.2.1", @@ -2041,6 +2212,7 @@ "node_modules/@cucumber/react/node_modules/@cucumber/gherkin-utils": { "version": "2.1.1", "integrity": "sha512-3wSvFMi6i8lCxNIOM+WMWh/kvnUCEc1S7e0qUlEV7SaW/I4HqXwAodcZjoP6LBkwbPRpK+xEzqitsVLq0x88jQ==", + "license": "MIT", "dependencies": { "@cucumber/messages": "^13.2.1", "@teppeis/multimaps": "^1.1.0" @@ -2049,6 +2221,7 @@ "node_modules/@cucumber/react/node_modules/@cucumber/messages": { "version": "13.2.1", "integrity": "sha512-2cu6P1JsEcH0/RlMx302KOK9rkKDHYS1H+6/VhQ6L+yrVW458wOU3CiVgurLn3heCDdJH8r4L87pkSwt0rxiGQ==", + "license": "MIT", "dependencies": { "@types/uuid": "^8.3.0", "protobufjs": "^6.10.2", @@ -2057,34 +2230,62 @@ }, "node_modules/@cucumber/react/node_modules/@cucumber/tag-expressions": { "version": "2.0.4", - "integrity": "sha512-HiNncmg/gS34yNpMFAeoIyUHqLFFN92MXIj3rs+BKo7vn16SxvYsigDvd2PAHyjSIThsp9TO1XDtl0SLKVB58g==" + "integrity": "sha512-HiNncmg/gS34yNpMFAeoIyUHqLFFN92MXIj3rs+BKo7vn16SxvYsigDvd2PAHyjSIThsp9TO1XDtl0SLKVB58g==", + "license": "MIT" }, "node_modules/@cucumber/react/node_modules/@teppeis/multimaps": { "version": "1.1.0", "integrity": "sha512-YgANgfYU7LqgaLkGPWSTiwu2qcuhj0IOvj+kRwDFjAVbiEXT7ZQLPaFfmrAAN/Fa+tvwy1aYFd0RdT7lMO1Msw==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@cucumber/react/node_modules/@types/uuid": { "version": "8.3.4", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "license": "MIT" }, - "node_modules/@cucumber/react/node_modules/uuid": { - "version": "8.3.2", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" + "node_modules/@cucumber/react/node_modules/color": { + "version": "3.2.1", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/@cucumber/react/node_modules/color-convert": { + "version": "1.9.3", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@cucumber/react/node_modules/color-name": { + "version": "1.1.3", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@cucumber/react/node_modules/uuid": { + "version": "8.3.2", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/@cucumber/tag-expressions": { "version": "6.1.0", - "integrity": "sha512-+3DwRumrCJG27AtzCIL37A/X+A/gSfxOPLg8pZaruh5SLumsTmpvilwroVWBT2fPzmno/tGXypeK5a7NHU4RzA==" + "integrity": "sha512-+3DwRumrCJG27AtzCIL37A/X+A/gSfxOPLg8pZaruh5SLumsTmpvilwroVWBT2fPzmno/tGXypeK5a7NHU4RzA==", + "license": "MIT" }, "node_modules/@effect/schema": { "version": "0.69.0", "integrity": "sha512-dqVnriWqM8TT8d+5vgg1pH4ZOXfs7tQBVAY5N7PALzIOlZamsBKQCdwvMMqremjSkKITckF8/cIj1eQZHQeg7Q==", "deprecated": "this package has been merged into the main effect package", + "license": "MIT", "dependencies": { "fast-check": "^3.20.0" }, @@ -2095,14 +2296,16 @@ "node_modules/@emotion/hash": { "version": "0.8.0", "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.2", - "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", + "version": "0.25.11", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "aix" @@ -2112,11 +2315,12 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.2", - "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", + "version": "0.25.11", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -2126,11 +2330,12 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.2", - "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", + "version": "0.25.11", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -2140,11 +2345,12 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.2", - "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", + "version": "0.25.11", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "android" @@ -2154,11 +2360,12 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.2", - "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", + "version": "0.25.11", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2168,11 +2375,12 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.2", - "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", + "version": "0.25.11", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2182,11 +2390,12 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.2", - "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", + "version": "0.25.11", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2196,11 +2405,12 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.2", - "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", + "version": "0.25.11", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2210,11 +2420,12 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.2", - "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", + "version": "0.25.11", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2224,11 +2435,12 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.2", - "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", + "version": "0.25.11", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2238,11 +2450,12 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.2", - "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", + "version": "0.25.11", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2252,11 +2465,12 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.2", - "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", + "version": "0.25.11", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", "cpu": [ "loong64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2266,11 +2480,12 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.2", - "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", + "version": "0.25.11", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", "cpu": [ "mips64el" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2280,11 +2495,12 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.2", - "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", + "version": "0.25.11", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", "cpu": [ "ppc64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2294,11 +2510,12 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.2", - "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", + "version": "0.25.11", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", "cpu": [ "riscv64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2308,11 +2525,12 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.2", - "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", + "version": "0.25.11", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", "cpu": [ "s390x" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2322,11 +2540,12 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.2", - "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", + "version": "0.25.11", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2336,11 +2555,12 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.2", - "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "version": "0.25.11", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -2350,11 +2570,12 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.2", - "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", + "version": "0.25.11", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -2364,11 +2585,12 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.2", - "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "version": "0.25.11", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -2378,11 +2600,12 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.2", - "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", + "version": "0.25.11", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -2391,12 +2614,28 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.11", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.2", - "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", + "version": "0.25.11", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "sunos" @@ -2406,11 +2645,12 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.2", - "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", + "version": "0.25.11", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -2420,11 +2660,12 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.2", - "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", + "version": "0.25.11", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", "cpu": [ "ia32" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -2434,11 +2675,12 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.2", - "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", + "version": "0.25.11", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -2448,8 +2690,9 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.5.1", - "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "version": "4.9.0", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -2466,6 +2709,7 @@ "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { "version": "3.4.3", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -2476,19 +2720,24 @@ "node_modules/@eslint-community/regexpp": { "version": "4.12.1", "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/compat": { - "version": "1.2.8", - "integrity": "sha512-LqCYHdWL/QqKIJuZ/ucMAv8d4luKGs4oCPgpt8mWztQAtPrHfXKQ/XAUc8ljCHAfJCn6SvkpTcGt5Tsh8saowA==", + "version": "1.4.0", + "integrity": "sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": "^9.10.0" + "eslint": "^8.40 || 9" }, "peerDependenciesMeta": { "eslint": { @@ -2497,11 +2746,11 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.21.0", - "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "version": "0.21.1", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.6", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -2510,16 +2759,19 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.3.0", - "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "version": "0.4.1", + "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.15.1", - "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "version": "0.16.0", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", "license": "Apache-2.0", "dependencies": { "@types/json-schema": "^7.0.15" @@ -2531,6 +2783,7 @@ "node_modules/@eslint/eslintrc": { "version": "3.3.1", "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2552,6 +2805,7 @@ "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "14.0.0", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -2560,8 +2814,8 @@ } }, "node_modules/@eslint/js": { - "version": "9.32.0", - "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", + "version": "9.38.0", + "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2571,19 +2825,19 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.6", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "version": "2.1.7", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/plugin-kit": { - "version": "0.3.4", - "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "version": "0.4.0", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.15.1", + "@eslint/core": "^0.16.0", "levn": "^0.4.1" }, "engines": { @@ -2594,6 +2848,7 @@ "version": "2.1.1", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -2626,32 +2881,43 @@ "resolved": "packages/fdc3-schema", "link": true }, + "node_modules/@finos/fdc3-security": { + "resolved": "packages/fdc3-security", + "link": true + }, + "node_modules/@finos/fdc3-security-implementation": { + "resolved": "toolbox/fdc3-security-implementation", + "link": true + }, "node_modules/@finos/fdc3-standard": { "resolved": "packages/fdc3-standard", "link": true }, - "node_modules/@finos/fdc3-web-impl": { - "resolved": "toolbox/fdc3-for-web/fdc3-web-impl", + "node_modules/@finos/fdc3-testing": { + "resolved": "packages/fdc3-testing", "link": true }, - "node_modules/@finos/testing": { - "resolved": "packages/testing", + "node_modules/@finos/fdc3-web-impl": { + "resolved": "toolbox/fdc3-for-web/fdc3-web-impl", "link": true }, "node_modules/@fontsource/roboto": { "version": "5.1.0", "integrity": "sha512-cFRRC1s6RqPygeZ8Uw/acwVHqih8Czjt6Q0MwoUoDe9U3m4dH1HmNDRBZyqlMSFwgNAUKgFImncKdmDHyKpwdg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@fontsource/source-code-pro": { "version": "5.1.0", "integrity": "sha512-aT6pQbwEM/oGyK4Q8XOOknFcrXTAnP+GLVuEADBnB4avOYAOa4U5BG/D5JrTobwckuWyKrbMZ8EdcXPsqizfSw==", - "dev": true + "dev": true, + "license": "OFL-1.1" }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "0.2.36", "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", "hasInstallScript": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2660,6 +2926,7 @@ "version": "1.2.36", "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "@fortawesome/fontawesome-common-types": "^0.2.36" }, @@ -2671,6 +2938,7 @@ "version": "5.15.4", "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", "hasInstallScript": true, + "license": "(CC-BY-4.0 AND MIT)", "dependencies": { "@fortawesome/fontawesome-common-types": "^0.2.36" }, @@ -2681,6 +2949,7 @@ "node_modules/@fortawesome/react-fontawesome": { "version": "0.1.19", "integrity": "sha512-Hyb+lB8T18cvLNX0S3llz7PcSOAJMLwiVKBuuzwM/nI5uoBw+gQjnf9il0fR1C3DKOI5Kc79pkJ4/xB0Uw9aFQ==", + "license": "MIT", "dependencies": { "prop-types": "^15.8.1" }, @@ -2692,40 +2961,33 @@ "node_modules/@glideapps/ts-necessities": { "version": "2.4.0", "integrity": "sha512-mDC+qosuNa4lxR3ioMBb6CD0XLRsQBplU+zRPUYiMLXKeVPZ6UYphdNG/EGReig0YyfnVlBKZEXl1wzTotYmPA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@humanfs/core": { "version": "0.19.1", "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "license": "Apache-2.0", "engines": { "node": ">=18.18.0" } }, "node_modules/@humanfs/node": { - "version": "0.16.6", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "version": "0.16.7", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "license": "Apache-2.0", "dependencies": { "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.3.0" + "@humanwhocodes/retry": "^0.4.0" }, "engines": { "node": ">=18.18.0" } }, - "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { - "version": "0.3.1", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2735,8 +2997,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.2", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "version": "0.4.3", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "license": "Apache-2.0", "engines": { "node": ">=18.18" }, @@ -2745,9 +3008,29 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2761,8 +3044,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -2773,6 +3057,7 @@ "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -2786,8 +3071,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2801,6 +3087,7 @@ "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -2815,6 +3102,7 @@ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -2822,6 +3110,7 @@ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2833,6 +3122,7 @@ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -2844,6 +3134,7 @@ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -2854,6 +3145,7 @@ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -2867,6 +3159,7 @@ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -2877,6 +3170,7 @@ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { "version": "5.0.0", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "engines": { "node": ">=8" } @@ -2884,6 +3178,7 @@ "node_modules/@istanbuljs/schema": { "version": "0.1.3", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", "engines": { "node": ">=8" } @@ -2892,6 +3187,7 @@ "version": "29.7.0", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2908,6 +3204,7 @@ "version": "29.7.0", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -2960,6 +3257,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -2968,6 +3266,7 @@ "version": "29.7.0", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -2982,6 +3281,7 @@ "version": "29.7.0", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -2993,6 +3293,7 @@ "node_modules/@jest/expect-utils": { "version": "29.7.0", "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -3004,6 +3305,7 @@ "version": "29.7.0", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -3016,10 +3318,20 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jest/globals": { "version": "29.7.0", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -3030,10 +3342,33 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern/node_modules/jest-regex-util": { + "version": "30.0.1", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, "node_modules/@jest/reporters": { "version": "29.7.0", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, + "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -3077,6 +3412,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3095,6 +3431,7 @@ "node_modules/@jest/schemas": { "version": "29.6.3", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -3106,6 +3443,7 @@ "version": "29.6.3", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -3119,6 +3457,7 @@ "version": "29.7.0", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -3133,6 +3472,7 @@ "version": "29.7.0", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -3147,6 +3487,7 @@ "version": "29.7.0", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -3171,6 +3512,7 @@ "node_modules/@jest/types": { "version": "29.6.3", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -3184,47 +3526,50 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.11", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "version": "1.5.5", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3233,11 +3578,13 @@ "node_modules/@jsdevtools/ono": { "version": "7.1.3", "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jsep-plugin/assignment": { "version": "1.3.0", "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", + "license": "MIT", "engines": { "node": ">= 10.16.0" }, @@ -3248,6 +3595,7 @@ "node_modules/@jsep-plugin/regex": { "version": "1.0.4", "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", + "license": "MIT", "engines": { "node": ">= 10.16.0" }, @@ -3259,6 +3607,7 @@ "version": "0.55.0", "integrity": "sha512-jI48mSnRgFQxXiE/UTUCVCpX8lK3wCFKLF1Ss2aEreboKNuLQGt3e0/YFqWVHe/WENxOaqiJvwOz+L/SrN2+qQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@types/json-schema": "^7.0.9", "@types/node": "^16.9.2", @@ -3276,13 +3625,15 @@ "node_modules/@mark.probst/typescript-json-schema/node_modules/@types/node": { "version": "16.18.126", "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@mark.probst/typescript-json-schema/node_modules/glob": { "version": "7.2.3", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3302,6 +3653,7 @@ "version": "4.9.4", "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3315,6 +3667,7 @@ "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.4.4", "@material-ui/styles": "^4.11.5", @@ -3350,12 +3703,14 @@ "node_modules/@material-ui/core/node_modules/react-is": { "version": "17.0.2", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@material-ui/icons": { "version": "4.11.3", "integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.4.4" }, @@ -3379,6 +3734,7 @@ "integrity": "sha512-rSzm+XKiNUjKegj8bzt5+pygZeckNLOr+IjykH8sYdVk7dE9y2ZuUSofiMV2bJk3qU+JHwexmw+q0RyNZB9ugg==", "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.4.4", "@material-ui/utils": "^4.11.3", @@ -3404,13 +3760,15 @@ "node_modules/@material-ui/lab/node_modules/react-is": { "version": "17.0.2", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@material-ui/styles": { "version": "4.11.5", "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==", "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.4.4", "@emotion/hash": "^0.8.0", @@ -3450,12 +3808,14 @@ "node_modules/@material-ui/styles/node_modules/csstype": { "version": "2.6.21", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@material-ui/system": { "version": "4.12.2", "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.4.4", "@material-ui/utils": "^4.11.3", @@ -3483,12 +3843,14 @@ "node_modules/@material-ui/system/node_modules/csstype": { "version": "2.6.21", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@material-ui/types": { "version": "5.1.0", "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", "dev": true, + "license": "MIT", "peerDependencies": { "@types/react": "*" }, @@ -3502,6 +3864,7 @@ "version": "4.11.3", "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.4.4", "prop-types": "^15.7.2", @@ -3518,11 +3881,13 @@ "node_modules/@material-ui/utils/node_modules/react-is": { "version": "17.0.2", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3534,6 +3899,7 @@ "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -3541,6 +3907,7 @@ "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3552,30 +3919,48 @@ "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -3583,28 +3968,40 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "license": "BSD-3-Clause" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" }, "node_modules/@rollup/plugin-commonjs": { - "version": "28.0.3", - "integrity": "sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==", + "version": "28.0.8", + "integrity": "sha512-o1Ug9PxYsF61R7/NXO/GgMZZproLd/WH2XA53Tp9ppf6bU1lMlTtC/gUM6zM3mesi2E0rypk+PNtVrELREyWEQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", @@ -3627,9 +4024,13 @@ } }, "node_modules/@rollup/plugin-commonjs/node_modules/fdir": { - "version": "6.4.3", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.5.0", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -3640,9 +4041,10 @@ } }, "node_modules/@rollup/plugin-commonjs/node_modules/picomatch": { - "version": "4.0.2", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3654,6 +4056,7 @@ "version": "5.0.5", "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "estree-walker": "^2.0.2", @@ -3675,6 +4078,7 @@ "version": "6.1.0", "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.1.0" }, @@ -3694,6 +4098,7 @@ "version": "15.3.1", "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -3714,9 +4119,10 @@ } }, "node_modules/@rollup/plugin-typescript": { - "version": "12.1.2", - "integrity": "sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==", + "version": "12.1.4", + "integrity": "sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.1.0", "resolve": "^1.22.1" @@ -3739,9 +4145,10 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "version": "5.3.0", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -3760,9 +4167,10 @@ } }, "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.2", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -3771,240 +4179,286 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.39.0", - "integrity": "sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==", + "version": "4.52.5", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.39.0", - "integrity": "sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==", + "version": "4.52.5", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.39.0", - "integrity": "sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==", + "version": "4.52.5", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.39.0", - "integrity": "sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==", + "version": "4.52.5", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.39.0", - "integrity": "sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==", + "version": "4.52.5", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.39.0", - "integrity": "sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==", + "version": "4.52.5", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.39.0", - "integrity": "sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==", + "version": "4.52.5", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.39.0", - "integrity": "sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==", + "version": "4.52.5", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.39.0", - "integrity": "sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==", + "version": "4.52.5", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.39.0", - "integrity": "sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==", + "version": "4.52.5", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.39.0", - "integrity": "sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.39.0", - "integrity": "sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.39.0", - "integrity": "sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==", + "version": "4.52.5", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.39.0", - "integrity": "sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==", + "version": "4.52.5", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.39.0", - "integrity": "sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==", + "version": "4.52.5", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.39.0", - "integrity": "sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==", + "version": "4.52.5", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.39.0", - "integrity": "sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==", + "version": "4.52.5", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.39.0", - "integrity": "sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==", + "version": "4.52.5", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.39.0", - "integrity": "sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==", + "version": "4.52.5", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.39.0", - "integrity": "sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==", + "version": "4.52.5", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -4012,15 +4466,18 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==" + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -4032,6 +4489,7 @@ "version": "3.0.1", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -4040,22 +4498,26 @@ "version": "10.3.0", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" }, "node_modules/@sphinxxxx/color-conversion": { "version": "2.2.2", "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@teppeis/multimaps": { "version": "3.0.0", "integrity": "sha512-ID7fosbc50TbT0MK0EG12O+gAP3W3Aa/Pz4DaTtQtEvlc9Odaqi0de+xuZ7Li2GtK4HzEX7IuRWS/JmZLksR3Q==", + "license": "MIT", "engines": { "node": ">=14" } @@ -4064,6 +4526,7 @@ "version": "2.0.0", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -4072,6 +4535,7 @@ "version": "0.25.0", "integrity": "sha512-kMnZz+vGGHi4GoHnLmMhGNjm44kGtKUXGnOvrKmMwAuvNjM/PgKVGfUnL7IDvK7Jb2QQ82jq3Zmp04Gy+r3Dkg==", "dev": true, + "license": "MIT", "dependencies": { "minimatch": "^9.0.4", "path-browserify": "^1.0.1", @@ -4091,6 +4555,7 @@ "version": "9.0.5", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4103,29 +4568,35 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.11", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "license": "MIT" }, "node_modules/@types/ace": { "version": "0.0.52", "integrity": "sha512-YPF9S7fzpuyrxru+sG/rrTpZkC6gpHBPF14W3x70kqVOD+ks6jkYLapk4yceh36xej7K4HYxcyz9ZDQ2lTvwgQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -4138,6 +4609,7 @@ "version": "7.27.0", "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } @@ -4146,23 +4618,26 @@ "version": "7.4.4", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/body-parser": { - "version": "1.19.5", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "version": "1.19.6", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -4172,6 +4647,7 @@ "version": "4.2.0", "integrity": "sha512-6+xrIRImMtGAL2X3qYkd02Mgs+gFGs+WsK0b7VVMaO4mYRISwyTjcqNrO0mNSmYEoq++rSLDB2F5HDNmqfOe+A==", "dev": true, + "license": "MIT", "dependencies": { "@types/color-convert": "*" } @@ -4180,6 +4656,7 @@ "version": "2.0.4", "integrity": "sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/color-name": "^1.1.0" } @@ -4187,43 +4664,50 @@ "node_modules/@types/color-name": { "version": "1.1.5", "integrity": "sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/connect": { "version": "3.4.38", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/cors": { - "version": "2.8.17", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "version": "2.8.19", + "integrity": "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/elasticlunr": { "version": "0.9.9", - "integrity": "sha512-59TMY+u8jKLqSg0AZStCz4n8A7l/nVenmum6fFQa9bUOH26GNMEgDseiN813IxXmTQ0AivefnMlbileBggCf5g==" + "integrity": "sha512-59TMY+u8jKLqSg0AZStCz4n8A7l/nVenmum6fFQa9bUOH26GNMEgDseiN813IxXmTQ0AivefnMlbileBggCf5g==", + "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.7", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" + "version": "1.0.8", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" }, "node_modules/@types/expect": { "version": "24.3.0", "integrity": "sha512-aq5Z+YFBz5o2b6Sp1jigx5nsmoZMK5Ceurjwy6PZmRv7dEi1jLtkARfvB1ME+OXJUG+7TZUDcv3WoCr/aor6dQ==", "deprecated": "This is a stub types definition. expect provides its own type definitions, so you do not need this installed.", + "license": "MIT", "dependencies": { "expect": "*" } }, "node_modules/@types/express": { - "version": "4.17.21", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "version": "4.17.23", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -4232,9 +4716,10 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "4.19.7", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4242,26 +4727,39 @@ "@types/send": "*" } }, + "node_modules/@types/express-session": { + "version": "1.18.2", + "integrity": "sha512-k+I0BxwVXsnEU2hV77cCobC08kIsn4y44C3gC0b46uxZVMaXA04lSPgRLR/bSL2w0t0ShJiG8o4jPzRG/nscFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/http-errors": { - "version": "2.0.4", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "version": "2.0.5", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -4269,6 +4767,7 @@ "node_modules/@types/istanbul-reports": { "version": "3.0.4", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4277,6 +4776,7 @@ "version": "29.5.13", "integrity": "sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==", "dev": true, + "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -4286,6 +4786,7 @@ "version": "20.0.1", "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/tough-cookie": "*", @@ -4294,16 +4795,19 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "license": "MIT" }, "node_modules/@types/jsoneditor": { "version": "8.6.2", "integrity": "sha512-ZzL6XANCYEWtYMfD5DLM5yjJdJ+cnuqtxOaJ5vV521HIDOuSyJM7eH8GXB72HL6HCZclqRr7Ix4UnHKeSS4WjA==", "dev": true, + "license": "MIT", "dependencies": { "@types/ace": "*", "ajv": "^6.12.0" @@ -4311,15 +4815,18 @@ }, "node_modules/@types/lodash": { "version": "4.14.167", - "integrity": "sha512-w7tQPjARrvdeBkX/Rwg95S592JwxqOjmms3zWQ0XZgSyxSLdzWaYH3vErBhdVS/lRBX7F8aBYcYJYTr5TMGOzw==" + "integrity": "sha512-w7tQPjARrvdeBkX/Rwg95S592JwxqOjmms3zWQ0XZgSyxSLdzWaYH3vErBhdVS/lRBX7F8aBYcYJYTr5TMGOzw==", + "license": "MIT" }, "node_modules/@types/long": { "version": "4.0.2", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "license": "MIT" }, "node_modules/@types/mdast": { "version": "3.0.15", "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", + "license": "MIT", "dependencies": { "@types/unist": "^2" } @@ -4327,36 +4834,53 @@ "node_modules/@types/mime": { "version": "1.3.5", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.17.30", - "integrity": "sha512-7zf4YyHA+jvBNfVrk2Gtvs6x7E8V+YDW05bNfG2XkWDJfYRXrTiP/DsB2zSYTaHX0bGIujTBQdMVAhb+j7mwpg==", + "version": "20.19.22", + "integrity": "sha512-hRnu+5qggKDSyWHlnmThnUqg62l29Aj/6vcYgUaSFL9oc7DVjeWEQN3PRgdSc6F8d9QRMWkf36CLMch1Do/+RQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "@types/node": "*", + "form-data": "^4.0.4" } }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==" + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.14", - "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==" + "version": "15.7.15", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.18", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", - "dev": true + "version": "6.14.0", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "17.0.85", - "integrity": "sha512-5oBDUsRDsrYq4DdyHaL99gE1AJCfuDhyxqF6/55fvvOIRkp1PpKuwJ+aMiGJR+GJt7YqMNclPROTHF20vY2cXA==", + "version": "17.0.89", + "integrity": "sha512-I98SaDCar5lvEYl80ClRIUztH/hyWHR+I2f+5yTVp/MQ205HgYkA2b5mVdry/+nsEIrf8I65KA5V/PASx68MsQ==", + "license": "MIT", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "^0.16", @@ -4367,6 +4891,7 @@ "version": "18.3.1", "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/react": "*" } @@ -4375,6 +4900,7 @@ "version": "4.4.12", "integrity": "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==", "dev": true, + "license": "MIT", "peerDependencies": { "@types/react": "*" } @@ -4382,56 +4908,75 @@ "node_modules/@types/resolve": { "version": "1.20.2", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/scheduler": { "version": "0.16.8", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.4", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "version": "1.2.0", + "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.7", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "version": "1.15.9", + "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.5", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==" + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" }, "node_modules/@types/tough-cookie": { "version": "4.0.5", "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/unist": { "version": "2.0.11", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" }, "node_modules/@types/urijs": { "version": "1.19.25", "integrity": "sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/uuid": { "version": "10.0.0", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==" + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", + "license": "MIT" }, "node_modules/@types/ws": { "version": "8.18.1", "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4439,32 +4984,36 @@ "node_modules/@types/wtfnode": { "version": "0.7.3", "integrity": "sha512-UMkHpx+o2xRWLJ7PmT3bBzvIA9/0oFw80oPtY/xO4jfdq+Gznn4wP7K9B/JjMxyxy+wF+5oRPIykxeBbEDjwRg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { "version": "17.0.33", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.29.1", - "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==", + "version": "8.46.1", + "integrity": "sha512-rUsLh8PXmBjdiPY+Emjz9NX2yHvhS11v0SR6xNJkm5GM1MO9ea/1GoDKlHHZGrOJclL/cZ2i/vRUYVtjRhrHVQ==", + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.29.1", - "@typescript-eslint/type-utils": "8.29.1", - "@typescript-eslint/utils": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1", + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/type-utils": "8.46.1", + "@typescript-eslint/utils": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4474,19 +5023,28 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "@typescript-eslint/parser": "^8.46.1", "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.29.1", - "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==", + "version": "8.46.1", + "integrity": "sha512-6JSSaBZmsKvEkbRUkf7Zj7dru/8ZCrJxAqArcLaVMee5907JdtEbKGsZ7zNiIm/UAkpGUkaSMZEXShnN2D1HZA==", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.29.1", - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/typescript-estree": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1", + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4" }, "engines": { @@ -4498,32 +5056,70 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.1", + "integrity": "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==", + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.1", + "@typescript-eslint/types": "^8.46.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.29.1", - "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", + "version": "8.46.1", + "integrity": "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1" + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.1", + "integrity": "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==", + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.29.1", - "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==", + "version": "8.46.1", + "integrity": "sha512-+BlmiHIiqufBxkVnOtFwjah/vrkF4MtKKvpXrKSPLCkCtAp8H01/VV43sfqA98Od7nJpDcFnkwgyfQbOG0AMvw==", + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.29.1", - "@typescript-eslint/utils": "8.29.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1", + "@typescript-eslint/utils": "8.46.1", "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4534,12 +5130,13 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.29.1", - "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", + "version": "8.46.1", + "integrity": "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==", + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4549,17 +5146,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.29.1", - "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", + "version": "8.46.1", + "integrity": "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1", + "@typescript-eslint/project-service": "8.46.1", + "@typescript-eslint/tsconfig-utils": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4569,7 +5169,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -4583,6 +5183,7 @@ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.5", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -4594,8 +5195,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.1", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.3", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4604,13 +5206,14 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.29.1", - "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==", + "version": "8.46.1", + "integrity": "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==", + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.29.1", - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/typescript-estree": "8.29.1" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4621,15 +5224,16 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.29.1", - "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", + "version": "8.46.1", + "integrity": "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.29.1", - "eslint-visitor-keys": "^4.2.0" + "@typescript-eslint/types": "8.46.1", + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -4640,15 +5244,16 @@ } }, "node_modules/@vitejs/plugin-legacy": { - "version": "6.0.2", - "integrity": "sha512-b/a6ARuJ1yCoIH/lSjpwPMyqo3NSCoqyxYtff7VCC6cnJfvBTzd7PthcrbomhLZnMsp/eW41b6TrbNSQvHW2lA==", + "version": "6.1.1", + "integrity": "sha512-BvusL+mYZ0q5qS5Rq3D70QxZBmhyiHRaXLtYJHH5AEsAmdSqJR4xe5KwMi1H3w8/9lVJwhkLYqFQ9vmWYWy6kA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.26.9", + "@babel/core": "^7.26.10", "@babel/preset-env": "^7.26.9", "browserslist": "^4.24.4", "browserslist-to-esbuild": "^2.1.1", - "core-js": "^3.40.0", + "core-js": "^3.41.0", "magic-string": "^0.30.17", "regenerator-runtime": "^0.14.1", "systemjs": "^6.15.1" @@ -4665,33 +5270,37 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.4", - "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", + "version": "4.7.0", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.26.0", - "@babel/plugin-transform-react-jsx-self": "^7.25.9", - "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" + "react-refresh": "^0.17.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "node_modules/abab": { "version": "2.0.6", "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/abort-controller": { "version": "3.0.0", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dev": true, + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -4702,6 +5311,7 @@ "node_modules/accepts": { "version": "1.3.8", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -4711,9 +5321,10 @@ } }, "node_modules/ace-builds": { - "version": "1.39.1", - "integrity": "sha512-HcJbBzx8qY66t9gZo/sQu7pi0wO/CFLdYn1LxQO1WQTfIkMfyc7LRnBpsp/oNCSSU/LL83jXHN1fqyOTuIhUjg==", - "dev": true + "version": "1.43.4", + "integrity": "sha512-8hAxVfo2ImICd69BWlZwZlxe9rxDGDjuUhh+WeWgGDvfBCE+r3lkynkQvIovDz4jcMi8O7bsEaFygaDT+h9sBA==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/acorn": { "version": "8.15.0", @@ -4730,6 +5341,7 @@ "version": "7.0.1", "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.1.0", "acorn-walk": "^8.0.2" @@ -4738,6 +5350,7 @@ "node_modules/acorn-jsx": { "version": "5.3.2", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -4745,6 +5358,7 @@ "node_modules/acorn-walk": { "version": "8.3.4", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -4756,6 +5370,7 @@ "version": "6.0.2", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -4766,6 +5381,7 @@ "node_modules/aggregate-error": { "version": "3.1.0", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4777,6 +5393,7 @@ "node_modules/ajv": { "version": "6.12.6", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4807,6 +5424,7 @@ "node_modules/ajv-formats/node_modules/ajv": { "version": "8.17.1", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -4820,11 +5438,13 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/ansi-colors": { "version": "4.1.3", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4833,6 +5453,7 @@ "version": "4.3.2", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -4847,6 +5468,7 @@ "version": "0.21.3", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4857,6 +5479,7 @@ "node_modules/ansi-regex": { "version": "4.1.1", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", "engines": { "node": ">=6" } @@ -4864,6 +5487,7 @@ "node_modules/ansi-styles": { "version": "4.3.0", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4877,6 +5501,7 @@ "node_modules/ansi-to-html": { "version": "0.6.15", "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==", + "license": "MIT", "dependencies": { "entities": "^2.0.0" }, @@ -4889,12 +5514,14 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4906,6 +5533,7 @@ "node_modules/append-transform": { "version": "2.0.0", "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "license": "MIT", "dependencies": { "default-require-extensions": "^3.0.0" }, @@ -4915,20 +5543,24 @@ }, "node_modules/archy": { "version": "1.0.0", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "license": "MIT" }, "node_modules/arg": { "version": "4.1.3", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.2", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">= 0.4" } @@ -4937,6 +5569,7 @@ "version": "3.1.0", "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4944,6 +5577,7 @@ "node_modules/array-buffer-byte-length": { "version": "1.0.2", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" @@ -4957,18 +5591,22 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.8", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4981,6 +5619,7 @@ "version": "1.2.5", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4999,6 +5638,7 @@ "node_modules/array.prototype.findlastindex": { "version": "1.2.6", "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", @@ -5018,6 +5658,7 @@ "node_modules/array.prototype.flat": { "version": "1.3.3", "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -5034,6 +5675,7 @@ "node_modules/array.prototype.flatmap": { "version": "1.3.3", "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -5051,6 +5693,7 @@ "version": "1.1.4", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -5065,6 +5708,7 @@ "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", @@ -5085,6 +5729,7 @@ "version": "4.10.1", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -5092,14 +5737,16 @@ } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.1", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "version": "4.12.2", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/assert": { "version": "2.1.0", "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-nan": "^1.3.2", @@ -5111,6 +5758,7 @@ "node_modules/assertion-error-formatter": { "version": "3.0.0", "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", + "license": "MIT", "dependencies": { "diff": "^4.0.1", "pad-right": "^0.2.2", @@ -5120,16 +5768,19 @@ "node_modules/ast-types-flow": { "version": "0.0.8", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async": { "version": "3.2.6", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -5137,11 +5788,13 @@ "node_modules/asynckit": { "version": "0.4.0", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -5153,9 +5806,10 @@ } }, "node_modules/axe-core": { - "version": "4.10.3", - "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "version": "4.11.0", + "integrity": "sha512-ilYanEU8vxxBexpJd8cWM4ElSQq4QctCLKih0TSfjIfCQTeyH/6zVrmIJfLPrKTKJRbiG+cfnZbQIjAlJmF1jQ==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=4" } @@ -5164,6 +5818,7 @@ "version": "4.1.0", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">= 0.4" } @@ -5172,6 +5827,7 @@ "version": "29.7.0", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -5192,6 +5848,7 @@ "version": "6.1.1", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -5207,6 +5864,7 @@ "version": "5.2.1", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -5222,6 +5880,7 @@ "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5230,6 +5889,7 @@ "version": "29.6.3", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -5241,12 +5901,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "version": "0.4.14", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { @@ -5257,37 +5918,41 @@ "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "version": "0.13.0", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "version": "0.6.5", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" + "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -5306,13 +5971,14 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { "version": "29.6.3", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, + "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -5327,6 +5993,7 @@ "node_modules/bail": { "version": "1.0.5", "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5334,7 +6001,8 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -5353,19 +6021,30 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/base64id": { "version": "2.0.0", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.18", + "integrity": "sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -5374,13 +6053,15 @@ } }, "node_modules/bn.js": { - "version": "5.2.1", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "version": "5.2.2", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.3", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -5403,13 +6084,15 @@ "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.12", @@ -5423,6 +6106,7 @@ "node_modules/braces": { "version": "3.0.3", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -5433,17 +6117,20 @@ "node_modules/brorand": { "version": "1.1.0", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browser-or-node": { "version": "2.1.1", "integrity": "sha512-8CVjaLJGuSKMVTxJ2DpBl5XnlNDiT4cQFeuCJJrvJmts9YrTZDizTX7PjC2s6W4x+MBGZeEY6dGMrF04/6Hgqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browser-resolve": { "version": "2.0.0", "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.17.0" } @@ -5452,6 +6139,7 @@ "version": "1.2.0", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -5465,6 +6153,7 @@ "version": "1.0.1", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, + "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -5475,6 +6164,7 @@ "version": "1.0.2", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -5486,6 +6176,7 @@ "version": "4.1.1", "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^5.2.1", "randombytes": "^2.1.0", @@ -5496,34 +6187,36 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.3", - "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "version": "4.2.5", + "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", "dev": true, + "license": "ISC", "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", + "bn.js": "^5.2.2", + "browserify-rsa": "^4.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.5", - "hash-base": "~3.0", + "elliptic": "^6.6.1", "inherits": "^2.0.4", - "parse-asn1": "^5.1.7", + "parse-asn1": "^5.1.9", "readable-stream": "^2.3.8", "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 0.12" + "node": ">= 0.10" } }, "node_modules/browserify-sign/node_modules/isarray": { "version": "1.0.0", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "2.3.8", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5537,12 +6230,14 @@ "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browserify-sign/node_modules/string_decoder": { "version": "1.1.1", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -5550,19 +6245,21 @@ "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browserify-zlib": { "version": "0.2.0", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, + "license": "MIT", "dependencies": { "pako": "~1.0.5" } }, "node_modules/browserslist": { - "version": "4.24.4", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.26.3", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "funding": [ { "type": "opencollective", @@ -5577,11 +6274,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -5594,6 +6293,7 @@ "version": "2.1.1", "integrity": "sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^13.0.0" }, @@ -5611,6 +6311,7 @@ "version": "0.2.6", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, + "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -5622,6 +6323,7 @@ "version": "2.1.1", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } @@ -5644,6 +6346,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -5651,21 +6354,25 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtin-status-codes": { "version": "3.0.0", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bytes": { "version": "3.1.2", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5673,6 +6380,7 @@ "node_modules/caching-transform": { "version": "4.0.0", "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "license": "MIT", "dependencies": { "hasha": "^5.0.0", "make-dir": "^3.0.0", @@ -5686,6 +6394,7 @@ "node_modules/caching-transform/node_modules/make-dir": { "version": "3.1.0", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -5699,17 +6408,20 @@ "node_modules/caching-transform/node_modules/semver": { "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/caching-transform/node_modules/signal-exit": { "version": "3.0.7", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/caching-transform/node_modules/write-file-atomic": { "version": "3.0.3", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -5720,6 +6432,7 @@ "node_modules/call-bind": { "version": "1.0.8", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -5736,6 +6449,7 @@ "node_modules/call-bind-apply-helpers": { "version": "1.0.2", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -5747,6 +6461,7 @@ "node_modules/call-bound": { "version": "1.0.4", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -5761,6 +6476,7 @@ "node_modules/callsites": { "version": "3.1.0", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -5768,13 +6484,14 @@ "node_modules/camelcase": { "version": "5.3.1", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001712", - "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", + "version": "1.0.30001751", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", "funding": [ { "type": "opencollective", @@ -5788,11 +6505,21 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" + }, + "node_modules/canonicalize": { + "version": "2.1.0", + "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", + "license": "Apache-2.0", + "bin": { + "canonicalize": "bin/canonicalize.js" + } }, "node_modules/capital-case": { "version": "1.0.4", "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3", @@ -5802,6 +6529,7 @@ "node_modules/chalk": { "version": "4.1.2", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5817,6 +6545,7 @@ "version": "0.4.0", "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2" }, @@ -5830,6 +6559,7 @@ "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5841,6 +6571,7 @@ "version": "1.0.2", "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -5848,6 +6579,7 @@ "node_modules/character-entities": { "version": "1.2.4", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5856,6 +6588,7 @@ "node_modules/character-entities-legacy": { "version": "1.1.4", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5864,6 +6597,7 @@ "node_modules/character-reference-invalid": { "version": "1.1.4", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5873,6 +6607,7 @@ "version": "3.6.0", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5896,6 +6631,7 @@ "version": "5.1.2", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -5905,15 +6641,18 @@ }, "node_modules/ci-info": { "version": "2.0.0", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT" }, "node_modules/cipher-base": { - "version": "1.0.6", - "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "version": "1.0.7", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" }, "engines": { "node": ">= 0.10" @@ -5922,15 +6661,18 @@ "node_modules/cjs-module-lexer": { "version": "1.4.3", "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/class-transformer": { "version": "0.5.1", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", "engines": { "node": ">=6" } @@ -5939,6 +6681,7 @@ "version": "5.0.0", "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^5.0.0" }, @@ -5952,6 +6695,7 @@ "node_modules/cli-spinners": { "version": "2.9.2", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", "engines": { "node": ">=6" }, @@ -5962,6 +6706,7 @@ "node_modules/cli-table3": { "version": "0.6.3", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -5976,6 +6721,7 @@ "version": "4.0.0", "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, + "license": "MIT", "dependencies": { "slice-ansi": "^5.0.0", "string-width": "^7.0.0" @@ -5988,9 +6734,10 @@ } }, "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.1.0", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -5999,14 +6746,16 @@ } }, "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.4.0", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true + "version": "10.6.0", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" }, "node_modules/cli-truncate/node_modules/string-width": { "version": "7.2.0", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -6020,9 +6769,10 @@ } }, "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.0", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6036,7 +6786,7 @@ "node_modules/cliui": { "version": "8.0.1", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -6049,7 +6799,7 @@ "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6066,6 +6816,7 @@ "version": "1.2.1", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -6074,6 +6825,7 @@ "version": "4.6.0", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, + "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -6082,29 +6834,38 @@ "node_modules/code-block-writer": { "version": "13.0.3", "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", - "dev": true + "version": "1.0.3", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" }, "node_modules/collection-utils": { "version": "1.0.1", "integrity": "sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/color": { - "version": "3.2.1", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "version": "4.2.3", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" } }, "node_modules/color-convert": { "version": "2.0.1", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6114,36 +6875,29 @@ }, "node_modules/color-name": { "version": "1.1.4", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, "node_modules/colorette": { "version": "2.0.20", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -6155,6 +6909,7 @@ "version": "5.2.1", "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.1.0", "find-replace": "^3.0.0", @@ -6169,6 +6924,7 @@ "version": "7.0.3", "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", @@ -6183,6 +6939,7 @@ "version": "6.2.2", "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } @@ -6191,6 +6948,7 @@ "version": "7.3.0", "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } @@ -6198,22 +6956,25 @@ "node_modules/commander": { "version": "10.0.1", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/commondir": { "version": "1.0.1", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" }, "node_modules/concurrently": { "version": "8.2.2", "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", - "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "date-fns": "^2.30.0", @@ -6244,11 +7005,13 @@ "node_modules/constants-browserify": { "version": "1.0.0", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -6259,41 +7022,47 @@ "node_modules/content-type": { "version": "1.0.5", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "2.0.0", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" }, "node_modules/cookie": { "version": "0.7.1", "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" }, "node_modules/core-js": { - "version": "3.41.0", - "integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==", + "version": "3.46.0", + "integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { - "version": "3.41.0", - "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "version": "3.46.0", + "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.24.4" + "browserslist": "^4.26.3" }, "funding": { "type": "opencollective", @@ -6303,11 +7072,13 @@ "node_modules/core-util-is": { "version": "1.0.3", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -6319,6 +7090,7 @@ "node_modules/cosmiconfig": { "version": "9.0.0", "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "license": "MIT", "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -6344,20 +7116,23 @@ "version": "4.0.4", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.1", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "version": "4.12.2", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -6370,6 +7145,7 @@ "version": "1.1.7", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -6383,6 +7159,7 @@ "version": "29.7.0", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -6401,19 +7178,59 @@ }, "node_modules/create-require": { "version": "1.1.1", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } }, "node_modules/cross-fetch": { "version": "4.1.0", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", "dev": true, + "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" } }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6427,6 +7244,7 @@ "version": "3.12.1", "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, + "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.1", "browserify-sign": "^4.2.3", @@ -6452,6 +7270,7 @@ "version": "2.0.8", "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.3", "is-in-browser": "^1.0.2" @@ -6460,12 +7279,14 @@ "node_modules/cssom": { "version": "0.5.0", "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cssstyle": { "version": "2.3.0", "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", "dev": true, + "license": "MIT", "dependencies": { "cssom": "~0.3.6" }, @@ -6476,15 +7297,18 @@ "node_modules/cssstyle/node_modules/cssom": { "version": "0.3.8", "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/csstype": { "version": "3.1.3", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/cucumber-console-formatter": { "version": "1.0.0", "integrity": "sha512-2DtwlLDE+URsh6/optsjH4/JLF01p9pkBMxBhH702neUrtU/FXm9FEyBYqhg5355MIq2FgEdRB3AcoVfBxO8hw==", + "license": "ISC", "dependencies": { "@types/lodash": "4.14.167" }, @@ -6498,12 +7322,22 @@ "node_modules/damerau-levenshtein": { "version": "1.0.8", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } }, "node_modules/data-urls": { "version": "3.0.2", "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "whatwg-mimetype": "^3.0.0", @@ -6517,6 +7351,7 @@ "version": "3.0.0", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -6528,6 +7363,7 @@ "version": "7.0.0", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } @@ -6536,6 +7372,7 @@ "version": "11.0.0", "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -6547,6 +7384,7 @@ "node_modules/data-view-buffer": { "version": "1.0.2", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -6562,6 +7400,7 @@ "node_modules/data-view-byte-length": { "version": "1.0.2", "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -6577,6 +7416,7 @@ "node_modules/data-view-byte-offset": { "version": "1.0.1", "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -6592,7 +7432,7 @@ "node_modules/date-fns": { "version": "2.30.0", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -6605,8 +7445,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -6622,19 +7463,22 @@ "node_modules/decamelize": { "version": "1.2.0", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decimal.js": { - "version": "10.5.0", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", - "dev": true - }, + "version": "10.6.0", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, "node_modules/dedent": { - "version": "1.5.3", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "version": "1.7.0", + "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", "dev": true, + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -6646,12 +7490,14 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6659,6 +7505,7 @@ "node_modules/default-require-extensions": { "version": "3.0.1", "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "license": "MIT", "dependencies": { "strip-bom": "^4.0.0" }, @@ -6672,6 +7519,7 @@ "node_modules/define-data-property": { "version": "1.1.4", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -6687,6 +7535,7 @@ "node_modules/define-properties": { "version": "1.2.1", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -6703,6 +7552,7 @@ "version": "1.0.0", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -6710,6 +7560,7 @@ "node_modules/depd": { "version": "2.0.0", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6718,6 +7569,7 @@ "version": "1.1.0", "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -6726,6 +7578,7 @@ "node_modules/destroy": { "version": "1.2.0", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -6735,6 +7588,7 @@ "version": "3.1.0", "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6742,6 +7596,7 @@ "node_modules/diff": { "version": "4.0.2", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -6749,6 +7604,7 @@ "node_modules/diff-sequences": { "version": "29.6.3", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -6757,6 +7613,7 @@ "version": "5.0.3", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -6764,13 +7621,15 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.1", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "version": "4.12.2", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/doctrine": { "version": "2.1.0", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -6782,6 +7641,7 @@ "version": "5.2.1", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" @@ -6790,6 +7650,7 @@ "node_modules/dom-serializer": { "version": "2.0.0", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -6802,6 +7663,7 @@ "node_modules/dom-serializer/node_modules/entities": { "version": "4.5.0", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -6813,6 +7675,7 @@ "version": "4.22.0", "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6828,13 +7691,15 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domexception": { "version": "4.0.0", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", "deprecated": "Use your platform's native DOMException instead", "dev": true, + "license": "MIT", "dependencies": { "webidl-conversions": "^7.0.0" }, @@ -6846,6 +7711,7 @@ "version": "7.0.0", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } @@ -6853,6 +7719,7 @@ "node_modules/domhandler": { "version": "5.0.3", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -6866,6 +7733,7 @@ "node_modules/domutils": { "version": "3.2.2", "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -6875,9 +7743,21 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "version": "16.6.1", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -6889,20 +7769,24 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" }, "node_modules/effect": { "version": "3.5.7", - "integrity": "sha512-PzEncc0R3ZZhqNTR+fXrSX+anF/4Ai6ftKie1ZrUUWY7WPE7d4KjB6wjpeWoGMOC7xWFPGSkBBUudyJN1mx3+g==" + "integrity": "sha512-PzEncc0R3ZZhqNTR+fXrSX+anF/4Ai6ftKie1ZrUUWY7WPE7d4KjB6wjpeWoGMOC7xWFPGSkBBUudyJN1mx3+g==", + "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -6915,16 +7799,19 @@ }, "node_modules/elasticlunr": { "version": "0.9.5", - "integrity": "sha512-5YM9LFQgVYfuLNEoqMqVWIBuF2UNCA+xu/jz1TyryLN/wmBcQSb+GNAwvLKvEpGESwgGN8XA1nbLAt6rKlyHYQ==" + "integrity": "sha512-5YM9LFQgVYfuLNEoqMqVWIBuF2UNCA+xu/jz1TyryLN/wmBcQSb+GNAwvLKvEpGESwgGN8XA1nbLAt6rKlyHYQ==", + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.134", - "integrity": "sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==" + "version": "1.5.237", + "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==", + "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.1", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -6936,14 +7823,16 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.1", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "version": "4.12.2", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/emittery": { "version": "0.13.1", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6953,11 +7842,13 @@ }, "node_modules/emoji-regex": { "version": "9.2.2", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -6965,6 +7856,7 @@ "node_modules/engine.io": { "version": "6.6.4", "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "license": "MIT", "dependencies": { "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", @@ -6983,6 +7875,7 @@ "node_modules/engine.io-client": { "version": "6.6.3", "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1", @@ -6994,6 +7887,7 @@ "node_modules/engine.io-client/node_modules/debug": { "version": "4.3.7", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -7009,6 +7903,7 @@ "node_modules/engine.io-parser": { "version": "5.2.3", "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -7016,6 +7911,7 @@ "node_modules/engine.io/node_modules/cookie": { "version": "0.7.2", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7023,6 +7919,7 @@ "node_modules/engine.io/node_modules/debug": { "version": "4.3.7", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -7038,6 +7935,7 @@ "node_modules/enquirer": { "version": "2.4.1", "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1", "strip-ansi": "^6.0.1" @@ -7049,6 +7947,7 @@ "node_modules/entities": { "version": "2.2.0", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -7056,6 +7955,7 @@ "node_modules/env-paths": { "version": "2.2.1", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", "engines": { "node": ">=6" } @@ -7064,6 +7964,7 @@ "version": "1.1.0", "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -7072,8 +7973,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -7081,30 +7983,32 @@ "node_modules/error-stack-parser": { "version": "2.1.4", "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", "dependencies": { "stackframe": "^1.3.4" } }, "node_modules/es-abstract": { - "version": "1.23.9", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.24.0", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -7116,21 +8020,24 @@ "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", + "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", @@ -7139,7 +8046,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -7151,6 +8058,7 @@ "node_modules/es-define-property": { "version": "1.0.1", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -7158,6 +8066,7 @@ "node_modules/es-errors": { "version": "1.3.0", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -7166,6 +8075,7 @@ "version": "1.2.1", "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -7191,6 +8101,7 @@ "node_modules/es-object-atoms": { "version": "1.1.1", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -7201,6 +8112,7 @@ "node_modules/es-set-tostringtag": { "version": "2.1.0", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -7214,6 +8126,7 @@ "node_modules/es-shim-unscopables": { "version": "1.1.0", "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -7224,6 +8137,7 @@ "node_modules/es-to-primitive": { "version": "1.3.0", "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", @@ -7238,12 +8152,14 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.2", - "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", + "version": "0.25.11", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -7251,47 +8167,51 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.2", - "@esbuild/android-arm": "0.25.2", - "@esbuild/android-arm64": "0.25.2", - "@esbuild/android-x64": "0.25.2", - "@esbuild/darwin-arm64": "0.25.2", - "@esbuild/darwin-x64": "0.25.2", - "@esbuild/freebsd-arm64": "0.25.2", - "@esbuild/freebsd-x64": "0.25.2", - "@esbuild/linux-arm": "0.25.2", - "@esbuild/linux-arm64": "0.25.2", - "@esbuild/linux-ia32": "0.25.2", - "@esbuild/linux-loong64": "0.25.2", - "@esbuild/linux-mips64el": "0.25.2", - "@esbuild/linux-ppc64": "0.25.2", - "@esbuild/linux-riscv64": "0.25.2", - "@esbuild/linux-s390x": "0.25.2", - "@esbuild/linux-x64": "0.25.2", - "@esbuild/netbsd-arm64": "0.25.2", - "@esbuild/netbsd-x64": "0.25.2", - "@esbuild/openbsd-arm64": "0.25.2", - "@esbuild/openbsd-x64": "0.25.2", - "@esbuild/sunos-x64": "0.25.2", - "@esbuild/win32-arm64": "0.25.2", - "@esbuild/win32-ia32": "0.25.2", - "@esbuild/win32-x64": "0.25.2" + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" } }, "node_modules/escalade": { "version": "3.2.0", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -7303,6 +8223,7 @@ "version": "2.1.0", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -7320,23 +8241,22 @@ } }, "node_modules/eslint": { - "version": "9.32.0", - "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", + "version": "9.38.0", + "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.21.0", - "@eslint/config-helpers": "^0.3.0", - "@eslint/core": "^0.15.0", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.1", + "@eslint/core": "^0.16.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.32.0", - "@eslint/plugin-kit": "^0.3.4", + "@eslint/js": "9.38.0", + "@eslint/plugin-kit": "^0.4.0", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", @@ -7379,8 +8299,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "version": "9.1.2", + "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -7391,6 +8312,7 @@ "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -7400,13 +8322,15 @@ "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -7422,32 +8346,34 @@ "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -7460,6 +8386,7 @@ "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -7467,6 +8394,7 @@ "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -7475,6 +8403,7 @@ "version": "28.8.3", "integrity": "sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" }, @@ -7499,6 +8428,7 @@ "version": "6.10.2", "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, + "license": "MIT", "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", @@ -7526,6 +8456,7 @@ "node_modules/eslint-plugin-prettier": { "version": "3.3.1", "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==", + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0" }, @@ -7546,6 +8477,7 @@ "version": "7.37.5", "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", @@ -7577,6 +8509,7 @@ "version": "2.0.0-next.5", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -7593,6 +8526,7 @@ "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -7642,6 +8576,7 @@ "node_modules/esprima": { "version": "4.0.1", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -7653,6 +8588,7 @@ "node_modules/esquery": { "version": "1.6.0", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -7674,6 +8610,7 @@ "node_modules/estraverse": { "version": "5.3.0", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -7681,11 +8618,13 @@ "node_modules/estree-walker": { "version": "2.0.2", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -7693,6 +8632,7 @@ "node_modules/etag": { "version": "1.8.1", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -7701,6 +8641,7 @@ "version": "5.0.1", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7708,12 +8649,14 @@ "node_modules/eventemitter3": { "version": "5.0.1", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -7722,6 +8665,7 @@ "version": "1.0.3", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -7731,6 +8675,7 @@ "version": "5.1.1", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7752,7 +8697,8 @@ "node_modules/execa/node_modules/signal-exit": { "version": "3.0.7", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/exit": { "version": "0.1.2", @@ -7765,6 +8711,7 @@ "node_modules/expect": { "version": "29.7.0", "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -7779,6 +8726,7 @@ "node_modules/express": { "version": "4.21.2", "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -7820,20 +8768,76 @@ "url": "https://opencollective.com/express" } }, + "node_modules/express-session": { + "version": "1.18.2", + "integrity": "sha512-SZjssGQC7TzTs9rpPDuUrR23GNZ9+2+IkA/+IJWmvQilTr5OSliEHGF+D9scbIpdC6yGtTI0/VhaHoVes2AN/A==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.7", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.1.0", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.7.2", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express-session/node_modules/cookie-signature": { + "version": "1.0.7", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express-static-gzip": { + "version": "2.2.0", + "integrity": "sha512-4ZQ0pHX0CAauxmzry2/8XFLM6aZA4NBvg9QezSlsEO1zLnl7vMFa48/WIcjzdfOiEUS4S1npPPKP2NHHYAp6qg==", + "license": "MIT", + "dependencies": { + "parseurl": "^1.3.3", + "serve-static": "^1.16.2" + } + }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" }, "node_modules/fast-check": { "version": "3.20.0", @@ -7848,6 +8852,7 @@ "url": "https://opencollective.com/fast-check" } ], + "license": "MIT", "dependencies": { "pure-rand": "^6.1.0" }, @@ -7857,15 +8862,18 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.3", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7880,6 +8888,7 @@ "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -7889,15 +8898,17 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.6", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -7907,11 +8918,13 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.19.1", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -7920,6 +8933,7 @@ "version": "2.0.2", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } @@ -7929,6 +8943,7 @@ "version": "1.2.0", "integrity": "sha512-im/vqpS96qsCKMPkwR/Fg2t2FQtwh+/LOvTekIY0eYyuz/CZQoqhwcxwk/Re0pqJiA3inisV7DSfQ1JYLi+bxw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10" } @@ -7941,9 +8956,32 @@ "resolved": "toolbox/fdc3-workbench", "link": true }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "3.2.0", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -7957,6 +8995,7 @@ "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -7964,6 +9003,7 @@ "node_modules/file-entry-cache": { "version": "8.0.0", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "license": "MIT", "dependencies": { "flat-cache": "^4.0.0" }, @@ -7975,6 +9015,7 @@ "version": "1.0.4", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -7992,6 +9033,7 @@ "version": "5.1.6", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8002,6 +9044,7 @@ "node_modules/fill-range": { "version": "7.1.1", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -8012,6 +9055,7 @@ "node_modules/finalhandler": { "version": "1.3.1", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -8028,17 +9072,20 @@ "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/find-cache-dir": { "version": "3.3.2", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -8054,6 +9101,7 @@ "node_modules/find-cache-dir/node_modules/make-dir": { "version": "3.1.0", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -8067,6 +9115,7 @@ "node_modules/find-cache-dir/node_modules/semver": { "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -8075,6 +9124,7 @@ "version": "3.0.0", "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^3.0.1" }, @@ -8085,6 +9135,7 @@ "node_modules/find-up": { "version": "5.0.0", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -8099,6 +9150,7 @@ "node_modules/flat-cache": { "version": "4.0.1", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -8109,11 +9161,13 @@ }, "node_modules/flatted": { "version": "3.3.3", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==" + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC" }, "node_modules/for-each": { "version": "0.3.5", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", "dependencies": { "is-callable": "^1.2.7" }, @@ -8127,6 +9181,7 @@ "node_modules/foreground-child": { "version": "3.3.1", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -8154,9 +9209,21 @@ "node": ">= 6" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8164,6 +9231,7 @@ "node_modules/fresh": { "version": "0.5.2", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -8184,16 +9252,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -8205,6 +9276,7 @@ "node_modules/function-bind": { "version": "1.1.2", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8212,6 +9284,7 @@ "node_modules/function.prototype.name": { "version": "1.1.8", "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -8230,13 +9303,23 @@ "node_modules/functions-have-names": { "version": "1.2.3", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -8244,13 +9327,15 @@ "node_modules/get-caller-file": { "version": "2.0.5", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-east-asian-width": { - "version": "1.3.0", - "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "version": "1.4.0", + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -8261,6 +9346,7 @@ "node_modules/get-intrinsic": { "version": "1.3.0", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -8283,6 +9369,7 @@ "node_modules/get-package-type": { "version": "0.1.0", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -8290,6 +9377,7 @@ "node_modules/get-proto": { "version": "1.0.1", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -8302,6 +9390,7 @@ "version": "6.0.1", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8312,6 +9401,7 @@ "node_modules/get-symbol-description": { "version": "1.1.0", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -8325,8 +9415,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.0", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "version": "4.12.0", + "integrity": "sha512-LScr2aNr2FbjAjZh2C6X6BxRx1/x+aTDExct/xyq2XKbYOiG5c0aK7pMsSuyc0brz3ibr/lbQiHD9jzt4lccJw==", + "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -8337,6 +9428,7 @@ "node_modules/glob": { "version": "10.4.5", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -8355,6 +9447,7 @@ "node_modules/glob-parent": { "version": "6.0.2", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -8373,6 +9466,7 @@ "node_modules/glob/node_modules/minimatch": { "version": "9.0.5", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8386,6 +9480,7 @@ "node_modules/global-dirs": { "version": "3.0.1", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "license": "MIT", "dependencies": { "ini": "2.0.0" }, @@ -8400,6 +9495,7 @@ "version": "15.15.0", "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -8410,6 +9506,7 @@ "node_modules/globalthis": { "version": "1.0.4", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -8424,6 +9521,7 @@ "node_modules/globby": { "version": "14.0.2", "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -8442,6 +9540,7 @@ "node_modules/globby/node_modules/slash": { "version": "5.1.0", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -8452,6 +9551,7 @@ "node_modules/gopd": { "version": "1.2.0", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8461,16 +9561,20 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT" }, "node_modules/graphql": { "version": "0.11.7", "integrity": "sha512-x7uDjyz8Jx+QPbpCFCMQ8lltnQa4p4vSYHx6ADe8rVYRTdsyhCJbvSty5DAsLVmU6cGakl+r8HQYolKHxk/tiw==", + "deprecated": "No longer supported; please update to a newer version. Details: https://github.com/graphql/graphql-js#version-support", "dev": true, + "license": "MIT", "dependencies": { "iterall": "1.1.3" } @@ -8478,6 +9582,7 @@ "node_modules/has-ansi": { "version": "4.0.1", "integrity": "sha512-Qr4RtTm30xvEdqUXbSBVWDu+PrTokJOwe/FU+VdfJPk+MXAPoeOzKpRyrDTnZIJwAkQ4oBLTU53nu0HrkF/Z2A==", + "license": "MIT", "dependencies": { "ansi-regex": "^4.1.0" }, @@ -8488,6 +9593,7 @@ "node_modules/has-bigints": { "version": "1.1.0", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8498,6 +9604,7 @@ "node_modules/has-flag": { "version": "4.0.0", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -8505,6 +9612,7 @@ "node_modules/has-property-descriptors": { "version": "1.0.2", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -8515,6 +9623,7 @@ "node_modules/has-proto": { "version": "1.2.0", "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.0" }, @@ -8528,6 +9637,7 @@ "node_modules/has-symbols": { "version": "1.1.0", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8538,6 +9648,7 @@ "node_modules/has-tostringtag": { "version": "1.0.2", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -8552,6 +9663,7 @@ "version": "3.0.5", "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" @@ -8564,6 +9676,7 @@ "version": "1.1.7", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -8572,6 +9685,7 @@ "node_modules/hasha": { "version": "5.2.2", "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "type-fest": "^0.8.0" @@ -8586,6 +9700,7 @@ "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -8593,6 +9708,7 @@ "node_modules/hasown": { "version": "2.0.2", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -8603,6 +9719,7 @@ "node_modules/highlight-words": { "version": "1.2.2", "integrity": "sha512-Mf4xfPXYm8Ay1wTibCrHpNWeR2nUMynMVFkXCi4mbl+TEgmNOe+I4hV7W3OCZcSvzGL6kupaqpfHOemliMTGxQ==", + "license": "MIT", "engines": { "node": ">= 16", "npm": ">= 8" @@ -8612,6 +9729,7 @@ "version": "1.0.1", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -8622,6 +9740,7 @@ "version": "3.3.2", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "react-is": "^16.7.0" } @@ -8629,16 +9748,19 @@ "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/hosted-git-info": { "version": "2.8.9", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "license": "ISC" }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-encoding": "^2.0.0" }, @@ -8648,11 +9770,13 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" }, "node_modules/html-to-react": { "version": "1.7.0", "integrity": "sha512-b5HTNaTGyOj5GGIMiWVr1k57egAZ/vGy0GGefnCQ1VW5hu9+eku8AXHtf2/DeD95cj/FKBKYa1J7SWBOX41yUQ==", + "license": "MIT", "dependencies": { "domhandler": "^5.0", "htmlparser2": "^9.0", @@ -8672,6 +9796,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -8682,6 +9807,7 @@ "node_modules/htmlparser2/node_modules/entities": { "version": "4.5.0", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -8692,6 +9818,7 @@ "node_modules/http-errors": { "version": "2.0.0", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -8707,6 +9834,7 @@ "version": "5.0.0", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -8719,12 +9847,14 @@ "node_modules/https-browserify": { "version": "1.0.0", "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/https-proxy-agent": { "version": "5.0.1", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -8737,6 +9867,7 @@ "version": "2.1.0", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -8745,6 +9876,7 @@ "version": "9.1.7", "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, + "license": "MIT", "bin": { "husky": "bin.js" }, @@ -8758,11 +9890,13 @@ "node_modules/hyphenate-style-name": { "version": "1.1.0", "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/iconv-lite": { "version": "0.4.24", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -8787,11 +9921,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", "engines": { "node": ">= 4" } @@ -8799,11 +9935,13 @@ "node_modules/ignore-by-default": { "version": "1.0.1", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/import-fresh": { "version": "3.3.1", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8819,6 +9957,7 @@ "version": "3.2.0", "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -8836,6 +9975,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -8843,6 +9983,7 @@ "node_modules/indent-string": { "version": "4.0.0", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -8851,6 +9992,7 @@ "version": "1.0.6", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8858,11 +10000,13 @@ }, "node_modules/inherits": { "version": "2.0.4", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "2.0.0", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", "engines": { "node": ">=10" } @@ -8870,6 +10014,7 @@ "node_modules/internal-slot": { "version": "1.1.0", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", @@ -8882,6 +10027,7 @@ "node_modules/ipaddr.js": { "version": "1.9.1", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -8889,6 +10035,7 @@ "node_modules/is-alphabetical": { "version": "1.0.4", "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -8897,6 +10044,7 @@ "node_modules/is-alphanumerical": { "version": "1.0.4", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "license": "MIT", "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -8910,6 +10058,7 @@ "version": "1.2.0", "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -8924,6 +10073,7 @@ "node_modules/is-array-buffer": { "version": "3.0.5", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -8938,11 +10088,13 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", @@ -8960,6 +10112,7 @@ "node_modules/is-bigint": { "version": "1.1.0", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" }, @@ -8974,6 +10127,7 @@ "version": "2.1.0", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -8984,6 +10138,7 @@ "node_modules/is-boolean-object": { "version": "1.2.2", "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -9012,6 +10167,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "engines": { "node": ">=4" } @@ -9019,6 +10175,7 @@ "node_modules/is-callable": { "version": "1.2.7", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9029,6 +10186,7 @@ "node_modules/is-ci": { "version": "2.0.0", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "license": "MIT", "dependencies": { "ci-info": "^2.0.0" }, @@ -9039,6 +10197,7 @@ "node_modules/is-core-module": { "version": "2.16.1", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -9052,6 +10211,7 @@ "node_modules/is-data-view": { "version": "1.0.2", "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", @@ -9067,6 +10227,7 @@ "node_modules/is-date-object": { "version": "1.1.0", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -9081,6 +10242,7 @@ "node_modules/is-decimal": { "version": "1.0.4", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9089,6 +10251,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9096,6 +10259,7 @@ "node_modules/is-finalizationregistry": { "version": "1.1.1", "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -9110,6 +10274,7 @@ "version": "4.0.0", "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -9121,16 +10286,19 @@ "version": "2.1.0", "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/is-generator-function": { - "version": "1.1.0", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "version": "1.1.2", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "license": "MIT", "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" }, @@ -9144,6 +10312,7 @@ "node_modules/is-glob": { "version": "4.0.3", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -9154,6 +10323,7 @@ "node_modules/is-hexadecimal": { "version": "1.0.4", "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9162,11 +10332,13 @@ "node_modules/is-in-browser": { "version": "1.1.3", "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-installed-globally": { "version": "0.4.0", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "license": "MIT", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -9181,6 +10353,7 @@ "node_modules/is-interactive": { "version": "2.0.0", "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -9191,6 +10364,7 @@ "node_modules/is-map": { "version": "2.0.3", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9201,12 +10375,14 @@ "node_modules/is-module": { "version": "1.0.0", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-nan": { "version": "1.3.2", "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -9218,9 +10394,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -9228,6 +10416,7 @@ "node_modules/is-number-object": { "version": "1.1.1", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -9242,6 +10431,7 @@ "node_modules/is-path-inside": { "version": "3.0.3", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -9249,6 +10439,7 @@ "node_modules/is-plain-obj": { "version": "2.1.0", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", "engines": { "node": ">=8" } @@ -9256,12 +10447,14 @@ "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-reference": { "version": "1.2.1", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -9269,6 +10462,7 @@ "node_modules/is-regex": { "version": "1.2.1", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -9285,6 +10479,7 @@ "node_modules/is-set": { "version": "2.0.3", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9295,6 +10490,7 @@ "node_modules/is-shared-array-buffer": { "version": "1.0.4", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -9308,6 +10504,7 @@ "node_modules/is-stream": { "version": "2.0.1", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -9318,6 +10515,7 @@ "node_modules/is-string": { "version": "1.1.1", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -9332,6 +10530,7 @@ "node_modules/is-symbol": { "version": "1.1.1", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", @@ -9347,6 +10546,7 @@ "node_modules/is-typed-array": { "version": "1.1.15", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -9359,14 +10559,15 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" }, "node_modules/is-unicode-supported": { - "version": "0.1.0", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, + "version": "2.1.0", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9375,11 +10576,13 @@ "node_modules/is-url": { "version": "1.2.4", "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-weakmap": { "version": "2.0.2", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9390,6 +10593,7 @@ "node_modules/is-weakref": { "version": "1.1.1", "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -9403,6 +10607,7 @@ "node_modules/is-weakset": { "version": "2.0.4", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" @@ -9417,22 +10622,26 @@ "node_modules/is-windows": { "version": "1.0.2", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isarray": { "version": "2.0.5", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/isomorphic-timers-promises": { "version": "1.0.1", "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -9440,6 +10649,7 @@ "node_modules/istanbul-lib-coverage": { "version": "3.2.2", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", "engines": { "node": ">=8" } @@ -9447,6 +10657,7 @@ "node_modules/istanbul-lib-hook": { "version": "3.0.0", "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "license": "BSD-3-Clause", "dependencies": { "append-transform": "^2.0.0" }, @@ -9457,6 +10668,7 @@ "node_modules/istanbul-lib-instrument": { "version": "6.0.3", "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", @@ -9469,8 +10681,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.1", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.3", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -9481,6 +10694,7 @@ "node_modules/istanbul-lib-processinfo": { "version": "2.0.3", "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "license": "ISC", "dependencies": { "archy": "^1.0.0", "cross-spawn": "^7.0.3", @@ -9497,6 +10711,7 @@ "version": "7.2.3", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9516,6 +10731,7 @@ "version": "3.0.2", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -9529,6 +10745,7 @@ "node_modules/istanbul-lib-processinfo/node_modules/uuid": { "version": "8.3.2", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -9536,6 +10753,7 @@ "node_modules/istanbul-lib-report": { "version": "3.0.1", "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -9548,6 +10766,7 @@ "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9558,6 +10777,7 @@ "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -9571,6 +10791,7 @@ "version": "2.0.0", "integrity": "sha512-Y812/uTdnF5Qc2qWxA7jQOTkqpFLEr7BHy8mzUQFRJstTjPigNS1Bh3q06AbOhBZ7tZqrI4MZdMgG34KVnUn6w==", "dev": true, + "license": "MIT", "dependencies": { "array.prototype.flatmap": "^1.3.1", "for-each": "^0.3.3", @@ -9593,6 +10814,7 @@ "version": "6.0.0", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -9603,6 +10825,7 @@ "version": "4.1.0", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -9616,6 +10839,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9635,6 +10859,7 @@ "version": "5.0.0", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -9646,6 +10871,7 @@ "version": "0.5.6", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -9657,6 +10883,7 @@ "version": "2.3.0", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -9671,6 +10898,7 @@ "version": "4.1.0", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -9682,6 +10910,7 @@ "version": "6.2.0", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9694,12 +10923,14 @@ "node_modules/istanbul-merge/node_modules/y18n": { "version": "4.0.3", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/istanbul-merge/node_modules/yargs": { "version": "15.4.1", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -9721,6 +10952,7 @@ "version": "18.1.3", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -9730,8 +10962,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.7", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "version": "3.2.0", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -9743,12 +10976,14 @@ "node_modules/iterall": { "version": "1.1.3", "integrity": "sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/iterator.prototype": { "version": "1.1.5", "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", @@ -9764,6 +10999,7 @@ "node_modules/jackspeak": { "version": "3.4.3", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -9775,14 +11011,14 @@ } }, "node_modules/jake": { - "version": "10.9.2", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", + "version": "10.9.4", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", + "async": "^3.2.6", "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" @@ -9794,12 +11030,14 @@ "node_modules/javascript-natural-sort": { "version": "0.7.1", "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jest": { "version": "29.7.0", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -9825,6 +11063,7 @@ "version": "29.7.0", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -9838,6 +11077,7 @@ "version": "29.7.0", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -9868,6 +11108,7 @@ "version": "29.7.0", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, + "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -9900,6 +11141,7 @@ "version": "29.7.0", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -9950,6 +11192,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -9959,6 +11202,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9974,9 +11218,27 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/jest-config/node_modules/jest-environment-node": { + "version": "29.7.0", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-diff": { "version": "29.7.0", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -9991,6 +11253,7 @@ "version": "29.7.0", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, + "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -10002,6 +11265,7 @@ "version": "29.7.0", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -10017,6 +11281,7 @@ "version": "29.7.0", "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -10040,114 +11305,334 @@ } }, "node_modules/jest-environment-node": { - "version": "29.7.0", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "version": "30.2.0", + "integrity": "sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/environment": "30.2.0", + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "jest-mock": "30.2.0", + "jest-util": "30.2.0", + "jest-validate": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jest-environment-node/node_modules/@jest/environment": { + "version": "30.2.0", + "integrity": "sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "30.2.0", + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-mock": "30.2.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "node_modules/jest-environment-node/node_modules/@jest/fake-timers": { + "version": "30.2.0", + "integrity": "sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", + "@jest/types": "30.2.0", + "@sinonjs/fake-timers": "^13.0.0", "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-junit": { - "version": "16.0.0", - "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", + "node_modules/jest-environment-node/node_modules/@jest/schemas": { + "version": "30.0.5", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, + "license": "MIT", "dependencies": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": ">=10.12.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-junit/node_modules/mkdirp": { - "version": "1.0.4", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/jest-environment-node/node_modules/@jest/types": { + "version": "30.2.0", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { - "node": ">=10" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/jest-junit/node_modules/uuid": { - "version": "8.3.2", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/jest-environment-node/node_modules/@sinclair/typebox": { + "version": "0.34.41", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } + "license": "MIT" }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "node_modules/jest-environment-node/node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@sinonjs/commons": "^3.0.1" } }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, + "node_modules/jest-environment-node/node_modules/ansi-styles": { + "version": "5.2.0", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dependencies": { + "node_modules/jest-environment-node/node_modules/camelcase": { + "version": "6.3.0", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-environment-node/node_modules/ci-info": { + "version": "4.3.1", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-node/node_modules/jest-message-util": { + "version": "30.2.0", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.2.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-mock": { + "version": "30.2.0", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "jest-util": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-util": { + "version": "30.2.0", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/jest-validate": { + "version": "30.2.0", + "integrity": "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "@jest/types": "30.2.0", + "camelcase": "^6.3.0", + "chalk": "^4.1.2", + "leven": "^3.1.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/picomatch": { + "version": "4.0.3", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-environment-node/node_modules/pretty-format": { + "version": "30.2.0", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-junit": { + "version": "16.0.0", + "integrity": "sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "mkdirp": "^1.0.4", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2", + "xml": "^1.0.1" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/jest-junit/node_modules/mkdirp": { + "version": "1.0.4", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-junit/node_modules/uuid": { + "version": "8.3.2", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "license": "MIT", + "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", "@types/stack-utils": "^2.0.0", @@ -10166,6 +11651,7 @@ "version": "29.7.0", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -10179,6 +11665,7 @@ "version": "3.0.5", "integrity": "sha512-/eHdaNPUAXe7f65gHH5urc8SbRVWjYxBqmCgax2uqOBJy8UUcCBMN1upj1eZ8y/i+IqpyEm4Kq0VKss/GCCTdw==", "dev": true, + "license": "MIT", "dependencies": { "ts-essentials": "^7.0.3" }, @@ -10191,6 +11678,7 @@ "version": "1.2.3", "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -10207,6 +11695,7 @@ "version": "29.6.3", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -10215,6 +11704,7 @@ "version": "29.7.0", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -10234,6 +11724,7 @@ "version": "29.7.0", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, + "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -10246,6 +11737,7 @@ "version": "29.7.0", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -10273,10 +11765,28 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runner/node_modules/jest-environment-node": { + "version": "29.7.0", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-runner/node_modules/source-map-support": { "version": "0.5.13", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -10286,6 +11796,7 @@ "version": "29.7.0", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -10319,6 +11830,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10338,6 +11850,7 @@ "version": "29.7.0", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -10367,6 +11880,7 @@ "node_modules/jest-util": { "version": "29.7.0", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -10388,6 +11902,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -10396,6 +11911,7 @@ "version": "29.7.0", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, + "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -10412,6 +11928,7 @@ "version": "6.3.0", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10423,6 +11940,7 @@ "version": "29.7.0", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, + "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -10441,6 +11959,7 @@ "version": "29.7.0", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -10455,22 +11974,34 @@ "version": "0.16.0", "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">= 0.6.0" } }, + "node_modules/jose": { + "version": "6.0.6", + "integrity": "sha512-FFF9x3KcdRJgQo74X8e6I4D1h3Wtd27fEo0suijveKFc+HFz6M5gonqxFPnDos9ulJFRqMNqWI6NexiHQPSnfQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-base64": { - "version": "3.7.7", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", - "dev": true + "version": "3.7.8", + "integrity": "sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==", + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/js-tokens": { "version": "4.0.0", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -10482,6 +12013,7 @@ "version": "20.0.3", "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", "dev": true, + "license": "MIT", "dependencies": { "abab": "^2.0.6", "acorn": "^8.8.1", @@ -10526,6 +12058,7 @@ "version": "3.0.0", "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.1" }, @@ -10537,6 +12070,7 @@ "version": "7.0.0", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } @@ -10545,6 +12079,7 @@ "version": "11.0.0", "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "^3.0.0", "webidl-conversions": "^7.0.0" @@ -10556,6 +12091,7 @@ "node_modules/jsep": { "version": "1.4.0", "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", + "license": "MIT", "engines": { "node": ">= 10.16.0" } @@ -10563,6 +12099,7 @@ "node_modules/jsesc": { "version": "3.1.0", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -10572,28 +12109,40 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-canonicalize": { + "version": "1.2.0", + "integrity": "sha512-TTdjBvqrqJKSADlEsY5rWbx8/1tOrVlTR/aSLU8N2VSInCTffP0p+byYB8Es+OmL4ZOeEftjUdvV+eJeSzJC/Q==", + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" }, "node_modules/json-source-map": { "version": "0.6.1", "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -10605,6 +12154,7 @@ "version": "9.10.5", "integrity": "sha512-fVZ0NMt+zm4rqTKBv2x7zPdLeaRyKo1EjJkaR1QjK4gEM1rMwICILYSW1OPxSc1qqyAoDaA/eeNrluKoxOocCA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "ace-builds": "^1.31.1", "ajv": "^6.12.6", @@ -10620,6 +12170,7 @@ "node_modules/jsonpath-plus": { "version": "10.3.0", "integrity": "sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==", + "license": "MIT", "dependencies": { "@jsep-plugin/assignment": "^1.3.0", "@jsep-plugin/regex": "^1.0.4", @@ -10637,6 +12188,7 @@ "version": "3.1.0", "integrity": "sha512-idqReg23J0PVRAADmZMc5xQM3xeOX5bTB6OTyMnzq33IXJXmn9iJuWIEvGmrN80rQf4d7uLTMEDwpzujNcI0Rg==", "dev": true, + "license": "ISC", "bin": { "jsonrepair": "bin/cli.js" } @@ -10645,6 +12197,7 @@ "version": "10.10.0", "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "csstype": "^3.0.2", @@ -10660,6 +12213,7 @@ "version": "10.10.0", "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "hyphenate-style-name": "^1.0.3", @@ -10670,6 +12224,7 @@ "version": "10.10.0", "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0" @@ -10679,6 +12234,7 @@ "version": "10.10.0", "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0" @@ -10688,6 +12244,7 @@ "version": "10.10.0", "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0", @@ -10698,6 +12255,7 @@ "version": "10.10.0", "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0" @@ -10707,6 +12265,7 @@ "version": "10.10.0", "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "jss": "10.10.0", @@ -10717,6 +12276,7 @@ "version": "10.10.0", "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", "css-vendor": "^2.0.8", @@ -10727,6 +12287,7 @@ "version": "3.3.5", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", @@ -10740,6 +12301,7 @@ "node_modules/keyv": { "version": "4.5.4", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -10747,6 +12309,7 @@ "node_modules/kleur": { "version": "3.0.3", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", "engines": { "node": ">=6" } @@ -10754,6 +12317,7 @@ "node_modules/knuth-shuffle-seeded": { "version": "1.0.6", "integrity": "sha512-9pFH0SplrfyKyojCLxZfMcvkhf5hH0d+UwR9nTVJ/DDQJGuzcXjTwB7TP7sDfehSudlGGaOLblmEWqv04ERVWg==", + "license": "Apache-2.0", "dependencies": { "seed-random": "~2.2.0" } @@ -10761,12 +12325,14 @@ "node_modules/language-subtag-registry": { "version": "0.3.23", "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, + "license": "MIT", "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -10778,6 +12344,7 @@ "version": "3.1.0", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -10785,6 +12352,7 @@ "node_modules/levn": { "version": "0.4.1", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -10797,6 +12365,7 @@ "version": "3.1.3", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -10806,12 +12375,14 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" }, "node_modules/lint-staged": { - "version": "15.5.0", - "integrity": "sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==", + "version": "15.5.2", + "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.4.1", "commander": "^13.1.0", @@ -10835,9 +12406,10 @@ } }, "node_modules/lint-staged/node_modules/chalk": { - "version": "5.4.1", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -10849,6 +12421,7 @@ "version": "13.1.0", "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -10857,6 +12430,7 @@ "version": "8.0.1", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -10879,6 +12453,7 @@ "version": "8.0.1", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -10890,6 +12465,7 @@ "version": "5.0.0", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=16.17.0" } @@ -10898,6 +12474,7 @@ "version": "3.0.0", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -10909,6 +12486,7 @@ "version": "4.0.0", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10920,6 +12498,7 @@ "version": "5.3.0", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^4.0.0" }, @@ -10934,6 +12513,7 @@ "version": "6.0.0", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -10948,6 +12528,7 @@ "version": "4.0.0", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10959,6 +12540,7 @@ "version": "0.3.2", "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.19" } @@ -10967,6 +12549,7 @@ "version": "3.0.0", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -10975,9 +12558,10 @@ } }, "node_modules/listr2": { - "version": "8.3.2", - "integrity": "sha512-vsBzcU4oE+v0lj4FhVLzr9dBTv4/fHIa57l+GCwovP8MoFNZJTOhGU8PXd4v2VJCbECAaijBiHntiekFMLvo0g==", + "version": "8.3.3", + "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", "dev": true, + "license": "MIT", "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", @@ -10991,9 +12575,10 @@ } }, "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.1.0", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11002,9 +12587,10 @@ } }, "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11013,14 +12599,16 @@ } }, "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.4.0", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true + "version": "10.6.0", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" }, "node_modules/listr2/node_modules/string-width": { "version": "7.2.0", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -11034,9 +12622,10 @@ } }, "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.0", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -11048,9 +12637,10 @@ } }, "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "version": "9.0.2", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -11066,6 +12656,7 @@ "node_modules/locate-path": { "version": "6.0.0", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -11079,44 +12670,72 @@ "node_modules/lodash": { "version": "4.17.21", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "license": "MIT" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==" + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT" }, "node_modules/lodash.mergewith": { "version": "4.6.2", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==" + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "license": "MIT" }, "node_modules/log-symbols": { - "version": "4.1.0", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, + "version": "6.0.0", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" }, "engines": { - "node": ">=10" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "5.6.2", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -11126,6 +12745,7 @@ "version": "6.1.0", "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^7.0.0", "cli-cursor": "^5.0.0", @@ -11141,9 +12761,10 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "version": "7.1.1", + "integrity": "sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==", "dev": true, + "license": "MIT", "dependencies": { "environment": "^1.0.0" }, @@ -11155,9 +12776,10 @@ } }, "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.1.0", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11166,9 +12788,10 @@ } }, "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -11177,16 +12800,18 @@ } }, "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.4.0", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true + "version": "10.6.0", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "version": "5.1.0", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, + "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.0.0" + "get-east-asian-width": "^1.3.1" }, "engines": { "node": ">=18" @@ -11196,9 +12821,10 @@ } }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "version": "7.1.2", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" @@ -11214,6 +12840,7 @@ "version": "7.2.0", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -11227,9 +12854,10 @@ } }, "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.0", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -11241,9 +12869,10 @@ } }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "version": "9.0.2", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", @@ -11258,11 +12887,13 @@ }, "node_modules/long": { "version": "4.0.0", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0" }, "node_modules/loose-envify": { "version": "1.4.0", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -11273,6 +12904,7 @@ "node_modules/lower-case": { "version": "2.0.2", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -11280,6 +12912,7 @@ "node_modules/lru-cache": { "version": "5.1.1", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -11287,21 +12920,24 @@ "node_modules/luxon": { "version": "3.2.1", "integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==", + "license": "MIT", "engines": { "node": ">=12" } }, "node_modules/magic-string": { - "version": "0.30.17", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.19", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/make-dir": { "version": "4.0.0", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -11314,12 +12950,14 @@ }, "node_modules/make-error": { "version": "1.3.6", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" }, "node_modules/makeerror": { "version": "1.0.12", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } @@ -11327,6 +12965,7 @@ "node_modules/math-intrinsics": { "version": "1.1.0", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -11335,6 +12974,7 @@ "version": "1.3.5", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -11344,6 +12984,7 @@ "node_modules/mdast-add-list-metadata": { "version": "1.0.1", "integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==", + "license": "MIT", "dependencies": { "unist-util-visit-parents": "1.1.2" } @@ -11351,6 +12992,7 @@ "node_modules/mdast-util-from-markdown": { "version": "0.8.5", "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^2.0.0", @@ -11366,6 +13008,7 @@ "node_modules/mdast-util-to-string": { "version": "2.0.0", "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -11374,6 +13017,7 @@ "node_modules/media-typer": { "version": "0.3.0", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -11382,6 +13026,7 @@ "version": "13.2.0", "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -11392,6 +13037,7 @@ "node_modules/merge-descriptors": { "version": "1.0.3", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -11399,11 +13045,13 @@ "node_modules/merge-stream": { "version": "2.0.0", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -11412,6 +13060,7 @@ "version": "1.1.0", "integrity": "sha512-kvvy5kkCgqF7tM3tWSOalpw46dtIzmHtAYvEqiuLK8Bv7tLK4V92tPW/T4Iu8jNr9JSexK3b2s9JekUziuZ9sg==", "dev": true, + "license": "ISC", "dependencies": { "cli-cursor": "^3.1.0", "log-symbols": "^4.1.0" @@ -11421,6 +13070,7 @@ "version": "3.1.0", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -11428,10 +13078,39 @@ "node": ">=8" } }, + "node_modules/message-await/node_modules/is-unicode-supported": { + "version": "0.1.0", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/message-await/node_modules/log-symbols": { + "version": "4.1.0", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/message-await/node_modules/restore-cursor": { "version": "3.1.0", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -11443,11 +13122,13 @@ "node_modules/message-await/node_modules/signal-exit": { "version": "3.0.7", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/methods": { "version": "1.1.2", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -11465,6 +13146,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -11473,6 +13155,7 @@ "node_modules/micromatch": { "version": "4.0.8", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -11485,6 +13168,7 @@ "version": "4.0.1", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -11494,13 +13178,15 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.1", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "version": "4.12.2", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/mime": { "version": "1.6.0", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -11511,6 +13197,7 @@ "node_modules/mime-db": { "version": "1.52.0", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -11518,6 +13205,7 @@ "node_modules/mime-types": { "version": "2.1.35", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -11528,6 +13216,7 @@ "node_modules/mimic-fn": { "version": "2.1.0", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -11536,6 +13225,7 @@ "version": "5.0.1", "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -11546,16 +13236,19 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/minimatch": { "version": "3.1.2", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11566,6 +13259,7 @@ "node_modules/minimist": { "version": "1.2.8", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11573,13 +13267,16 @@ "node_modules/minipass": { "version": "7.1.2", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mkdirp": { - "version": "2.1.6", - "integrity": "sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==", + "version": "3.0.1", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -11593,12 +13290,14 @@ "node_modules/mobius1-selectr": { "version": "2.4.13", "integrity": "sha512-Mk9qDrvU44UUL0EBhbAA1phfQZ7aMZPjwtL7wkpiBzGh8dETGqfsh50mWoX9EkjDlkONlErWXArHCKfoxVg0Bw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mobx": { - "version": "6.13.7", - "integrity": "sha512-aChaVU/DO5aRPmk1GX8L+whocagUUpBQqoPtJk+cm7UOXUk87J4PeWCh6nNmTTIfEhiR9DI/+FnA8dln/hTK7g==", + "version": "6.15.0", + "integrity": "sha512-UczzB+0nnwGotYSgllfARAqWCJ5e/skuV2K/l+Zyck/H6pJIhLXuBnz+6vn2i211o7DtbE78HQtsYEKICHGI+g==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -11608,6 +13307,7 @@ "version": "7.6.0", "integrity": "sha512-+HQUNuh7AoQ9ZnU6c4rvbiVVl+wEkb9WqYsVDzGLng+Dqj1XntHu79PvEWKtSMoMj67vFp/ZPXcElosuJO8ckA==", "dev": true, + "license": "MIT", "dependencies": { "mobx-react-lite": "^3.4.0" }, @@ -11632,6 +13332,7 @@ "version": "3.4.3", "integrity": "sha512-NkJREyFTSUXR772Qaai51BnE1voWx56LOL80xG7qkZr6vo8vEaLF3sz1JNUVh+rxmUzxYaqOhfuxTfqUh0FXUg==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -11653,6 +13354,7 @@ "version": "2.30.1", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -11661,17 +13363,20 @@ "version": "1.2.0", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ms": { "version": "2.1.3", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/mz": { "version": "2.7.0", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -11688,6 +13393,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11697,11 +13403,13 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -11709,38 +13417,58 @@ "node_modules/no-case": { "version": "3.0.4", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-fetch": { - "version": "2.7.0", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, + "version": "3.3.2", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, "node_modules/node-int64": { "version": "0.4.0", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-preload": { "version": "0.2.1", "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "license": "MIT", "dependencies": { "process-on-spawn": "^1.0.0" }, @@ -11749,13 +13477,15 @@ } }, "node_modules/node-releases": { - "version": "2.0.19", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==" + "version": "2.0.25", + "integrity": "sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==", + "license": "MIT" }, "node_modules/node-stdlib-browser": { "version": "1.3.1", "integrity": "sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==", "dev": true, + "license": "MIT", "dependencies": { "assert": "^2.0.0", "browser-resolve": "^2.0.0", @@ -11807,6 +13537,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -11816,6 +13547,7 @@ "version": "5.0.0", "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^5.0.0" }, @@ -11826,12 +13558,14 @@ "node_modules/node-stdlib-browser/node_modules/punycode": { "version": "1.4.1", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-stdlib-browser/node_modules/readable-stream": { "version": "3.6.2", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -11842,9 +13576,10 @@ } }, "node_modules/nodemon": { - "version": "3.1.9", - "integrity": "sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==", + "version": "3.1.10", + "integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.2", "debug": "^4", @@ -11872,6 +13607,7 @@ "version": "3.0.0", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11880,6 +13616,7 @@ "version": "5.5.0", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -11890,6 +13627,7 @@ "node_modules/normalize-package-data": { "version": "2.5.0", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -11900,6 +13638,7 @@ "node_modules/normalize-package-data/node_modules/semver": { "version": "5.7.2", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -11908,6 +13647,7 @@ "version": "3.0.0", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11915,11 +13655,13 @@ "node_modules/normalize.css": { "version": "8.0.1", "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/npm-package-arg": { "version": "11.0.3", "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", @@ -11933,6 +13675,7 @@ "node_modules/npm-package-arg/node_modules/hosted-git-info": { "version": "7.0.2", "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -11942,12 +13685,14 @@ }, "node_modules/npm-package-arg/node_modules/lru-cache": { "version": "10.4.3", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/npm-run-path": { "version": "4.0.1", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -11956,13 +13701,15 @@ } }, "node_modules/nwsapi": { - "version": "2.2.20", - "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", - "dev": true + "version": "2.2.22", + "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", + "dev": true, + "license": "MIT" }, "node_modules/nyc": { "version": "17.1.0", "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "license": "ISC", "dependencies": { "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.2", @@ -12002,6 +13749,7 @@ "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -12010,11 +13758,13 @@ }, "node_modules/nyc/node_modules/convert-source-map": { "version": "1.9.0", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -12027,6 +13777,7 @@ "version": "7.2.3", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12045,6 +13796,7 @@ "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -12055,6 +13807,7 @@ "node_modules/nyc/node_modules/make-dir": { "version": "3.1.0", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -12068,6 +13821,7 @@ "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -12081,6 +13835,7 @@ "node_modules/nyc/node_modules/p-locate": { "version": "4.1.0", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -12091,6 +13846,7 @@ "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "engines": { "node": ">=8" } @@ -12099,6 +13855,7 @@ "version": "3.0.2", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -12112,17 +13869,20 @@ "node_modules/nyc/node_modules/semver": { "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/nyc/node_modules/signal-exit": { "version": "3.0.7", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12134,11 +13894,13 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -12159,6 +13921,7 @@ "node_modules/nyc/node_modules/yargs-parser": { "version": "18.1.3", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -12170,6 +13933,7 @@ "node_modules/object-assign": { "version": "4.1.1", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12177,6 +13941,7 @@ "node_modules/object-inspect": { "version": "1.13.4", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -12188,6 +13953,7 @@ "version": "1.1.6", "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" @@ -12202,6 +13968,7 @@ "node_modules/object-keys": { "version": "1.1.1", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -12209,6 +13976,7 @@ "node_modules/object.assign": { "version": "4.1.7", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -12228,6 +13996,7 @@ "version": "1.1.9", "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", @@ -12241,6 +14010,7 @@ "node_modules/object.fromentries": { "version": "2.0.8", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -12257,6 +14027,7 @@ "node_modules/object.groupby": { "version": "1.0.3", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -12269,6 +14040,7 @@ "node_modules/object.values": { "version": "1.2.1", "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -12285,6 +14057,7 @@ "node_modules/on-finished": { "version": "2.4.1", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -12292,9 +14065,18 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.1.0", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/once": { "version": "1.4.0", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -12302,6 +14084,7 @@ "node_modules/onetime": { "version": "5.1.2", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -12316,6 +14099,7 @@ "version": "6.7.6", "integrity": "sha512-c/hfooPx+RBIOPM09GSxABOZhYPblDoyaGhqBkD/59vtpN21jEuWKDlM0KYTvqJVlSYjKs0tBcIdeXKChlSPtw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.3", "fast-glob": "^3.3.2", @@ -12332,6 +14116,7 @@ "version": "9.4.0", "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -12342,6 +14127,7 @@ "node_modules/optionator": { "version": "0.9.4", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -12357,6 +14143,7 @@ "node_modules/ora": { "version": "8.0.1", "integrity": "sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==", + "license": "MIT", "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^4.0.0", @@ -12376,8 +14163,9 @@ } }, "node_modules/ora/node_modules/ansi-regex": { - "version": "6.1.0", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -12386,8 +14174,9 @@ } }, "node_modules/ora/node_modules/chalk": { - "version": "5.4.1", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.6.2", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -12398,6 +14187,7 @@ "node_modules/ora/node_modules/cli-cursor": { "version": "4.0.0", "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "license": "MIT", "dependencies": { "restore-cursor": "^4.0.0" }, @@ -12409,46 +14199,14 @@ } }, "node_modules/ora/node_modules/emoji-regex": { - "version": "10.4.0", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" - }, - "node_modules/ora/node_modules/is-unicode-supported": { - "version": "2.1.0", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/log-symbols": { - "version": "6.0.0", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "version": "10.6.0", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" }, "node_modules/ora/node_modules/restore-cursor": { "version": "4.0.0", "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -12462,11 +14220,13 @@ }, "node_modules/ora/node_modules/signal-exit": { "version": "3.0.7", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/ora/node_modules/string-width": { "version": "7.2.0", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", @@ -12480,8 +14240,9 @@ } }, "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.0", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -12495,11 +14256,13 @@ "node_modules/os-browserify": { "version": "0.3.0", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/own-keys": { "version": "1.0.1", "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", @@ -12515,6 +14278,7 @@ "node_modules/p-limit": { "version": "3.1.0", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -12528,6 +14292,7 @@ "node_modules/p-locate": { "version": "5.0.0", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -12541,6 +14306,7 @@ "node_modules/p-map": { "version": "3.0.0", "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -12551,6 +14317,7 @@ "node_modules/p-try": { "version": "2.2.0", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -12558,6 +14325,7 @@ "node_modules/package-hash": { "version": "4.0.0", "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.15", "hasha": "^5.0.0", @@ -12570,11 +14338,13 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" }, "node_modules/pad-right": { "version": "0.2.2", "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", + "license": "MIT", "dependencies": { "repeat-string": "^1.5.2" }, @@ -12585,11 +14355,13 @@ "node_modules/pako": { "version": "1.0.11", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -12598,15 +14370,15 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.7", - "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "version": "5.1.9", + "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", "dev": true, + "license": "ISC", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", "evp_bytestokey": "^1.0.3", - "hash-base": "~3.0", - "pbkdf2": "^3.1.2", + "pbkdf2": "^3.1.5", "safe-buffer": "^5.2.1" }, "engines": { @@ -12616,6 +14388,7 @@ "node_modules/parse-entities": { "version": "2.0.0", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "license": "MIT", "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -12632,6 +14405,7 @@ "node_modules/parse-json": { "version": "5.2.0", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -12646,20 +14420,22 @@ } }, "node_modules/parse5": { - "version": "7.2.1", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "version": "7.3.0", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, + "license": "MIT", "dependencies": { - "entities": "^4.5.0" + "entities": "^6.0.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" } }, "node_modules/parse5/node_modules/entities": { - "version": "4.5.0", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "version": "6.0.1", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -12670,6 +14446,7 @@ "node_modules/parseurl": { "version": "1.3.3", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -12677,16 +14454,19 @@ "node_modules/path-browserify": { "version": "1.0.1", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-equal": { "version": "1.2.5", "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "engines": { "node": ">=8" } @@ -12694,6 +14474,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12701,17 +14482,20 @@ "node_modules/path-key": { "version": "3.1.1", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -12725,15 +14509,18 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/path-to-regexp": { "version": "0.1.12", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" }, "node_modules/path-type": { "version": "5.0.0", "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -12742,60 +14529,31 @@ } }, "node_modules/pbkdf2": { - "version": "3.1.3", - "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "version": "3.1.5", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "dev": true, "license": "MIT", "dependencies": { - "create-hash": "~1.1.3", + "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "ripemd160": "=2.0.1", + "ripemd160": "^2.0.3", "safe-buffer": "^5.2.1", - "sha.js": "^2.4.11", - "to-buffer": "^1.2.0" + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" }, "engines": { - "node": ">=0.12" - } - }, - "node_modules/pbkdf2/node_modules/create-hash": { - "version": "1.1.3", - "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "sha.js": "^2.4.0" - } - }, - "node_modules/pbkdf2/node_modules/hash-base": { - "version": "2.0.2", - "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/pbkdf2/node_modules/ripemd160": { - "version": "2.0.1", - "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^2.0.0", - "inherits": "^2.0.1" + "node": ">= 0.10" } }, "node_modules/picocolors": { "version": "1.1.1", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -12806,12 +14564,14 @@ "node_modules/picomodal": { "version": "3.0.0", "integrity": "sha512-FoR3TDfuLlqUvcEeK5ifpKSVVns6B4BQvc8SDF6THVMuadya6LLtji0QgUDSStw0ZR2J7I6UGi5V2V23rnPWTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pidtree": { "version": "0.6.0", "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", "dev": true, + "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -12823,6 +14583,7 @@ "version": "4.0.7", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -12830,6 +14591,7 @@ "node_modules/pkg-dir": { "version": "4.2.0", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -12840,6 +14602,7 @@ "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -12851,6 +14614,7 @@ "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -12861,6 +14625,7 @@ "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -12874,6 +14639,7 @@ "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -12885,6 +14651,7 @@ "version": "8.0.0", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -12892,18 +14659,20 @@ "node_modules/popper.js": { "version": "1.16.1-lts", "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.5.3", - "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "version": "8.5.6", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -12919,8 +14688,9 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.8", + "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -12931,6 +14701,7 @@ "node_modules/prelude-ls": { "version": "1.2.1", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -12938,6 +14709,7 @@ "node_modules/prettier": { "version": "3.4.1", "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -12951,6 +14723,7 @@ "node_modules/prettier-linter-helpers": { "version": "1.0.0", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -12961,6 +14734,7 @@ "node_modules/pretty-format": { "version": "29.7.0", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -12973,6 +14747,7 @@ "node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -12981,12 +14756,13 @@ } }, "node_modules/pretty-quick": { - "version": "4.1.1", - "integrity": "sha512-9Ud0l/CspNTmyIdYac9X7Inb3o8fuUsw+1zJFvCGn+at0t1UwUcUdo2RSZ41gcmfLv1fxgWQxWEfItR7CBwugg==", + "version": "4.2.2", + "integrity": "sha512-uAh96tBW1SsD34VhhDmWuEmqbpfYc/B3j++5MC/6b3Cb8Ow7NJsvKFhg0eoGu2xXX+o9RkahkTK6sUdd8E7g5w==", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^5.0.0", - "ignore": "^7.0.3", + "@pkgr/core": "^0.2.7", + "ignore": "^7.0.5", "mri": "^1.2.0", "picocolors": "^1.1.1", "picomatch": "^4.0.2", @@ -12999,22 +14775,27 @@ "engines": { "node": ">=14" }, + "funding": { + "url": "https://opencollective.com/pretty-quick" + }, "peerDependencies": { "prettier": "^3.0.0" } }, "node_modules/pretty-quick/node_modules/ignore": { - "version": "7.0.3", - "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "version": "7.0.5", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/pretty-quick/node_modules/picomatch": { - "version": "4.0.2", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -13025,6 +14806,7 @@ "node_modules/proc-log": { "version": "4.2.0", "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -13033,6 +14815,7 @@ "version": "0.11.10", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -13040,11 +14823,13 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/process-on-spawn": { "version": "1.1.0", "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "license": "MIT", "dependencies": { "fromentries": "^1.2.0" }, @@ -13055,6 +14840,7 @@ "node_modules/progress": { "version": "2.0.3", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -13062,6 +14848,7 @@ "node_modules/prompts": { "version": "2.4.2", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -13073,6 +14860,7 @@ "node_modules/prop-types": { "version": "15.8.1", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -13081,16 +14869,19 @@ }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/property-expr": { "version": "2.0.6", - "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "license": "MIT" }, "node_modules/protobufjs": { "version": "6.11.4", "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -13114,6 +14905,7 @@ "node_modules/proxy-addr": { "version": "2.0.7", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -13126,6 +14918,7 @@ "version": "1.15.0", "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -13136,12 +14929,14 @@ "node_modules/pstree.remy": { "version": "1.1.8", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -13152,13 +14947,15 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.1", - "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==", - "dev": true + "version": "4.12.2", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -13175,11 +14972,13 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ] + ], + "license": "MIT" }, "node_modules/qs": { "version": "6.13.0", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" }, @@ -13201,7 +15000,8 @@ "node_modules/querystringify": { "version": "2.2.0", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -13219,12 +15019,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quicktype": { "version": "23.0.78", "integrity": "sha512-KeF1KNwfcnoi349hmbvJpxGccNKF6xvyUnPZ4uOQ8NA1Ipb/2f2HPvx6UIUtGYUY2AM9PJSIMjwMAg1dfB5MtA==", "dev": true, + "license": "Apache-2.0", + "workspaces": [ + "./packages/quicktype-core", + "./packages/quicktype-graphql-input", + "./packages/quicktype-typescript-input" + ], "dependencies": { "@glideapps/ts-necessities": "^2.1.3", "chalk": "^4.1.2", @@ -13254,6 +15061,7 @@ "version": "23.0.78", "integrity": "sha512-df+wJfOudbKWV7u82qRvJLCPR86T9ObpRWjs+2DKQoNm/b9ku5PH74GRgaTkaQ942CwISH1hbXiFxAGoeNEaFg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@glideapps/ts-necessities": "2.1.3", "@types/urijs": "^1.19.19", @@ -13275,12 +15083,14 @@ "node_modules/quicktype-core/node_modules/@glideapps/ts-necessities": { "version": "2.1.3", "integrity": "sha512-q9U8v/n9qbkd2zDYjuX3qtlbl+OIyI9zF+zQhZjfYOE9VMDH7tfcUSJ9p0lXoY3lxmGFne09yi4iiNeQUwV7AA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/quicktype-core/node_modules/readable-stream": { "version": "4.4.2", "integrity": "sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -13296,6 +15106,7 @@ "version": "23.0.78", "integrity": "sha512-KyGSdzC8HwCWAJpw1UnmWDhNJTm2Nx+rlySopeFX9tndJIhv69Jg+Drk6XIUEq/YrenjB/+bmgpz/41ugtncTA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "collection-utils": "^1.0.1", "graphql": "^0.11.7", @@ -13306,6 +15117,7 @@ "version": "23.0.78", "integrity": "sha512-OaEfS4n4OjgAUe5IpuZiBPe675GnvSGyP1/3WUrX5T558SoorjA1RcqiPmitUh0MikhYQLBR9j/L2AaM4OkLWQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@mark.probst/typescript-json-schema": "0.55.0", "quicktype-core": "23.0.78", @@ -13316,6 +15128,7 @@ "version": "4.9.5", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13328,6 +15141,7 @@ "version": "4.9.5", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13336,10 +15150,19 @@ "node": ">=4.2.0" } }, + "node_modules/random-bytes": { + "version": "1.0.0", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/randombytes": { "version": "2.1.0", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -13348,6 +15171,7 @@ "version": "1.0.4", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, + "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -13356,6 +15180,7 @@ "node_modules/range-parser": { "version": "1.2.1", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -13363,6 +15188,7 @@ "node_modules/raw-body": { "version": "2.5.2", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -13376,6 +15202,7 @@ "node_modules/react": { "version": "17.0.2", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -13387,6 +15214,7 @@ "node_modules/react-accessible-accordion": { "version": "3.3.5", "integrity": "sha512-yCh3tx+jNuOPs+m58LOBFTGDEaGvM8UfuCNznr855FDAWzwV8V/ZH/TVBvgqH0npP58KrrVrHpj4jcy0EE5hEw==", + "license": "MIT", "peerDependencies": { "react": "^16.3.2 || ^17.0.0", "react-dom": "^16.3.3 || ^17.0.0" @@ -13395,6 +15223,7 @@ "node_modules/react-dom": { "version": "17.0.2", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", @@ -13406,11 +15235,13 @@ }, "node_modules/react-is": { "version": "18.3.1", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" }, "node_modules/react-markdown": { "version": "5.0.3", "integrity": "sha512-jDWOc1AvWn0WahpjW6NK64mtx6cwjM4iSsLHJPNBqoAgGOVoIdJMqaKX4++plhOtdd4JksdqzlDibgPx6B/M2w==", + "license": "MIT", "dependencies": { "@types/mdast": "^3.0.3", "@types/unist": "^2.0.3", @@ -13434,12 +15265,14 @@ }, "node_modules/react-markdown/node_modules/react-is": { "version": "16.13.1", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/react-refresh": { - "version": "0.14.2", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "version": "0.17.0", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13448,6 +15281,7 @@ "version": "4.4.5", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -13462,6 +15296,7 @@ "node_modules/read-pkg": { "version": "5.2.0", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -13475,6 +15310,7 @@ "node_modules/read-pkg-up": { "version": "7.0.1", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -13490,6 +15326,7 @@ "node_modules/read-pkg-up/node_modules/find-up": { "version": "4.1.0", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -13501,6 +15338,7 @@ "node_modules/read-pkg-up/node_modules/locate-path": { "version": "5.0.0", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -13511,6 +15349,7 @@ "node_modules/read-pkg-up/node_modules/p-limit": { "version": "2.3.0", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -13524,6 +15363,7 @@ "node_modules/read-pkg-up/node_modules/p-locate": { "version": "4.1.0", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -13534,6 +15374,7 @@ "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -13541,6 +15382,7 @@ "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -13548,6 +15390,7 @@ "node_modules/read-yaml-file": { "version": "2.1.0", "integrity": "sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==", + "license": "MIT", "dependencies": { "js-yaml": "^4.0.0", "strip-bom": "^4.0.0" @@ -13560,6 +15403,7 @@ "version": "4.7.0", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dev": true, + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -13575,6 +15419,7 @@ "version": "3.6.0", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -13585,11 +15430,13 @@ "node_modules/reflect-metadata": { "version": "0.2.2", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0", "peer": true }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -13610,12 +15457,14 @@ "node_modules/regenerate": { "version": "1.4.2", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "version": "10.2.2", + "integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -13626,19 +15475,13 @@ "node_modules/regenerator-runtime": { "version": "0.14.1", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } + "license": "MIT" }, "node_modules/regexp-match-indices": { "version": "1.0.2", "integrity": "sha512-DwZuAkt8NF5mKwGGER1EGh2PRqyvhRhhLviH+R8y8dIuaQROlUfXjt4s9ZTXstIsSkptf06BSvwcEmmfheJJWQ==", + "license": "Apache-2.0", "dependencies": { "regexp-tree": "^0.1.11" } @@ -13646,6 +15489,7 @@ "node_modules/regexp-tree": { "version": "0.1.27", "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "license": "MIT", "bin": { "regexp-tree": "bin/regexp-tree" } @@ -13653,6 +15497,7 @@ "node_modules/regexp.prototype.flags": { "version": "1.5.4", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -13669,16 +15514,17 @@ } }, "node_modules/regexpu-core": { - "version": "6.2.0", - "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "version": "6.4.0", + "integrity": "sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==", "dev": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", + "regenerate-unicode-properties": "^10.2.2", "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", + "regjsparser": "^0.13.0", "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "unicode-match-property-value-ecmascript": "^2.2.1" }, "engines": { "node": ">=4" @@ -13687,33 +15533,25 @@ "node_modules/regjsgen": { "version": "0.8.0", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.12.0", - "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "version": "0.13.0", + "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "jsesc": "~3.0.2" + "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/release-zalgo": { "version": "1.0.0", "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "license": "ISC", "dependencies": { "es6-error": "^4.0.1" }, @@ -13724,6 +15562,7 @@ "node_modules/remark-parse": { "version": "9.0.0", "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", + "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^0.8.0" }, @@ -13735,6 +15574,7 @@ "node_modules/repeat-string": { "version": "1.6.1", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", "engines": { "node": ">=0.10" } @@ -13742,6 +15582,7 @@ "node_modules/require-directory": { "version": "2.1.1", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13749,22 +15590,26 @@ "node_modules/require-from-string": { "version": "2.0.2", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" }, "node_modules/requires-port": { "version": "1.0.0", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.10", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -13784,6 +15629,7 @@ "version": "3.0.0", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -13795,6 +15641,7 @@ "version": "5.0.0", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13802,6 +15649,7 @@ "node_modules/resolve-from": { "version": "4.0.0", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", "engines": { "node": ">=4" } @@ -13809,6 +15657,7 @@ "node_modules/resolve-pkg": { "version": "2.0.0", "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -13819,6 +15668,7 @@ "node_modules/resolve-pkg-maps": { "version": "1.0.0", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -13826,6 +15676,7 @@ "node_modules/resolve-pkg/node_modules/resolve-from": { "version": "5.0.0", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "engines": { "node": ">=8" } @@ -13834,6 +15685,7 @@ "version": "2.0.3", "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -13842,6 +15694,7 @@ "version": "5.1.0", "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" @@ -13857,6 +15710,7 @@ "version": "7.0.0", "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-function": "^5.0.0" }, @@ -13870,6 +15724,7 @@ "node_modules/reusify": { "version": "1.1.0", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -13878,11 +15733,13 @@ "node_modules/rfdc": { "version": "1.4.1", "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "6.0.1", "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "license": "ISC", "dependencies": { "glob": "^11.0.0", "package-json-from-dist": "^1.0.0" @@ -13897,21 +15754,14 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.2", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/rimraf/node_modules/glob": { - "version": "11.0.1", - "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", + "version": "11.0.3", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "license": "ISC", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -13927,8 +15777,9 @@ } }, "node_modules/rimraf/node_modules/jackspeak": { - "version": "4.1.0", - "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "version": "4.1.1", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -13940,17 +15791,19 @@ } }, "node_modules/rimraf/node_modules/lru-cache": { - "version": "11.1.0", - "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", + "version": "11.2.2", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", "engines": { "node": "20 || >=22" } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "10.0.1", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "version": "10.0.3", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { "node": "20 || >=22" @@ -13962,32 +15815,95 @@ "node_modules/rimraf/node_modules/path-scurry": { "version": "2.0.0", "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.3", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ripemd160/node_modules/hash-base": { + "version": "3.1.2", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ripemd160/node_modules/isarray": { + "version": "1.0.0", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ripemd160/node_modules/readable-stream": { + "version": "2.3.8", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "node_modules/ripemd160/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/ripemd160/node_modules/string_decoder": { + "version": "1.1.1", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "safe-buffer": "~5.1.0" } }, + "node_modules/ripemd160/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/rollup": { - "version": "4.39.0", - "integrity": "sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==", + "version": "4.52.5", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.7" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -13997,26 +15913,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.39.0", - "@rollup/rollup-android-arm64": "4.39.0", - "@rollup/rollup-darwin-arm64": "4.39.0", - "@rollup/rollup-darwin-x64": "4.39.0", - "@rollup/rollup-freebsd-arm64": "4.39.0", - "@rollup/rollup-freebsd-x64": "4.39.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.39.0", - "@rollup/rollup-linux-arm-musleabihf": "4.39.0", - "@rollup/rollup-linux-arm64-gnu": "4.39.0", - "@rollup/rollup-linux-arm64-musl": "4.39.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.39.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.39.0", - "@rollup/rollup-linux-riscv64-gnu": "4.39.0", - "@rollup/rollup-linux-riscv64-musl": "4.39.0", - "@rollup/rollup-linux-s390x-gnu": "4.39.0", - "@rollup/rollup-linux-x64-gnu": "4.39.0", - "@rollup/rollup-linux-x64-musl": "4.39.0", - "@rollup/rollup-win32-arm64-msvc": "4.39.0", - "@rollup/rollup-win32-ia32-msvc": "4.39.0", - "@rollup/rollup-win32-x64-msvc": "4.39.0", + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", "fsevents": "~2.3.2" } }, @@ -14037,6 +15955,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -14044,7 +15963,7 @@ "node_modules/rxjs": { "version": "7.8.2", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -14052,6 +15971,7 @@ "node_modules/safe-array-concat": { "version": "1.1.3", "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -14082,11 +16002,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-push-apply": { "version": "1.0.0", "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" @@ -14101,6 +16023,7 @@ "node_modules/safe-regex-test": { "version": "1.1.0", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -14117,18 +16040,21 @@ "version": "2.5.0", "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/saxes": { "version": "6.0.0", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, + "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -14139,6 +16065,7 @@ "node_modules/scheduler": { "version": "0.20.2", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" @@ -14146,11 +16073,13 @@ }, "node_modules/seed-random": { "version": "2.2.0", - "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==" + "integrity": "sha512-34EQV6AAHQGhoc0tn/96a9Fsi6v2xdqe/dMUwljGRaFOzR3EgRmECvD0O8vi8X+/uQ50LGHfkNu/Eue5TPKZkQ==", + "license": "MIT" }, "node_modules/semver": { "version": "7.5.3", "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -14164,6 +16093,7 @@ "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -14173,11 +16103,13 @@ }, "node_modules/semver/node_modules/yallist": { "version": "4.0.0", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, "node_modules/send": { "version": "0.19.0", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -14200,17 +16132,20 @@ "node_modules/send/node_modules/debug": { "version": "2.6.9", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -14218,6 +16153,7 @@ "node_modules/serve-static": { "version": "1.16.2", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -14230,11 +16166,13 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -14250,6 +16188,7 @@ "node_modules/set-function-name": { "version": "2.0.2", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -14263,6 +16202,7 @@ "node_modules/set-proto": { "version": "1.0.0", "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", @@ -14275,27 +16215,38 @@ "node_modules/setimmediate": { "version": "1.0.5", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "node_modules/sha.js": { - "version": "2.4.11", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "version": "2.4.12", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "bin": { "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shebang-command": { "version": "2.0.0", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -14306,14 +16257,15 @@ "node_modules/shebang-regex": { "version": "3.0.0", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { - "version": "1.8.2", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "dev": true, + "version": "1.8.3", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -14324,6 +16276,7 @@ "node_modules/side-channel": { "version": "1.1.0", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -14341,6 +16294,7 @@ "node_modules/side-channel-list": { "version": "1.0.0", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -14355,6 +16309,7 @@ "node_modules/side-channel-map": { "version": "1.0.1", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -14371,6 +16326,7 @@ "node_modules/side-channel-weakmap": { "version": "1.0.2", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -14388,6 +16344,7 @@ "node_modules/signal-exit": { "version": "4.1.0", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -14396,20 +16353,23 @@ } }, "node_modules/simple-swizzle": { - "version": "0.2.2", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "version": "0.2.4", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } }, "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "version": "0.3.4", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT" }, "node_modules/simple-update-notifier": { "version": "2.0.0", "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -14419,11 +16379,13 @@ }, "node_modules/sisteransi": { "version": "1.0.5", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -14432,6 +16394,7 @@ "version": "5.0.0", "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.0.0", "is-fullwidth-code-point": "^4.0.0" @@ -14444,9 +16407,10 @@ } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -14457,6 +16421,7 @@ "node_modules/socket.io": { "version": "4.8.1", "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", @@ -14473,6 +16438,7 @@ "node_modules/socket.io-adapter": { "version": "2.5.5", "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", "dependencies": { "debug": "~4.3.4", "ws": "~8.17.1" @@ -14481,6 +16447,7 @@ "node_modules/socket.io-adapter/node_modules/debug": { "version": "4.3.7", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -14496,6 +16463,7 @@ "node_modules/socket.io-client": { "version": "4.8.1", "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.2", @@ -14509,6 +16477,7 @@ "node_modules/socket.io-client/node_modules/debug": { "version": "4.3.7", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -14524,6 +16493,7 @@ "node_modules/socket.io-parser": { "version": "4.2.4", "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -14535,6 +16505,7 @@ "node_modules/socket.io-parser/node_modules/debug": { "version": "4.3.7", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -14550,6 +16521,7 @@ "node_modules/socket.io/node_modules/debug": { "version": "4.3.7", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -14565,6 +16537,7 @@ "node_modules/source-map": { "version": "0.6.1", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -14573,6 +16546,7 @@ "version": "1.2.1", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -14580,6 +16554,7 @@ "node_modules/source-map-support": { "version": "0.5.21", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14587,12 +16562,12 @@ }, "node_modules/spawn-command": { "version": "0.0.2", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", - "dev": true + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==" }, "node_modules/spawn-wrap": { "version": "2.0.0", "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "license": "ISC", "dependencies": { "foreground-child": "^2.0.0", "is-windows": "^1.0.2", @@ -14608,6 +16583,7 @@ "node_modules/spawn-wrap/node_modules/foreground-child": { "version": "2.0.0", "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^3.0.2" @@ -14620,6 +16596,7 @@ "version": "7.2.3", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14638,6 +16615,7 @@ "node_modules/spawn-wrap/node_modules/make-dir": { "version": "3.1.0", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -14652,6 +16630,7 @@ "version": "3.0.2", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -14665,17 +16644,20 @@ "node_modules/spawn-wrap/node_modules/semver": { "version": "6.3.1", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/spawn-wrap/node_modules/signal-exit": { "version": "3.0.7", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/spdx-correct": { "version": "3.2.0", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -14683,27 +16665,32 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.21", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==" + "version": "3.0.22", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "license": "CC0-1.0" }, "node_modules/sprintf-js": { "version": "1.0.3", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" }, "node_modules/stack-utils": { "version": "2.0.6", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -14714,17 +16701,20 @@ "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/stackframe": { "version": "1.3.4", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==" + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT" }, "node_modules/statuses": { "version": "2.0.1", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -14732,6 +16722,7 @@ "node_modules/stdin-discarder": { "version": "0.2.2", "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -14739,10 +16730,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/stream-browserify": { "version": "3.0.0", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -14752,6 +16756,7 @@ "version": "3.6.2", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14764,12 +16769,14 @@ "node_modules/stream-chain": { "version": "2.2.5", "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stream-http": { "version": "3.2.0", "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dev": true, + "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -14781,6 +16788,7 @@ "version": "3.6.2", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14794,6 +16802,7 @@ "version": "1.8.0", "integrity": "sha512-HZfXngYHUAr1exT4fxlbc1IOce1RYxp2ldeaf97LYCOPSoOqY/1Psp7iGvpb+6JIOgkra9zDYnPX01hGAHzEPw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "stream-chain": "^2.2.5" } @@ -14802,6 +16811,7 @@ "version": "1.3.0", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -14809,6 +16819,7 @@ "node_modules/string-argv": { "version": "0.3.1", "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "license": "MIT", "engines": { "node": ">=0.6.19" } @@ -14817,6 +16828,7 @@ "version": "4.0.2", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -14829,6 +16841,7 @@ "version": "3.0.1", "integrity": "sha512-Hl092MV3USJuUCC6mfl9sPzGloA3K5VwdIeJjYIkXY/8K+mUvaeEabWJgArp+xXrsWxCajeT2pc4axbVhIZJyg==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^3.4.0" } @@ -14837,6 +16850,7 @@ "version": "3.6.2", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14849,6 +16863,7 @@ "node_modules/string-width": { "version": "4.2.3", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14862,6 +16877,7 @@ "name": "string-width", "version": "4.2.3", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14873,22 +16889,26 @@ }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/string-width/node_modules/emoji-regex": { "version": "8.0.0", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/string-width/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -14897,6 +16917,7 @@ "version": "2.0.1", "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14910,6 +16931,7 @@ "version": "4.0.12", "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -14936,6 +16958,7 @@ "version": "1.0.0", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" @@ -14944,6 +16967,7 @@ "node_modules/string.prototype.trim": { "version": "1.2.10", "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -14963,6 +16987,7 @@ "node_modules/string.prototype.trimend": { "version": "1.0.9", "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -14979,6 +17004,7 @@ "node_modules/string.prototype.trimstart": { "version": "1.0.8", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14994,6 +17020,7 @@ "node_modules/strip-ansi": { "version": "6.0.1", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -15005,6 +17032,7 @@ "name": "strip-ansi", "version": "6.0.1", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -15015,6 +17043,7 @@ "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -15022,6 +17051,7 @@ "node_modules/strip-ansi/node_modules/ansi-regex": { "version": "5.0.1", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -15029,6 +17059,7 @@ "node_modules/strip-bom": { "version": "4.0.0", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", "engines": { "node": ">=8" } @@ -15037,6 +17068,7 @@ "version": "2.0.0", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -15044,6 +17076,7 @@ "node_modules/strip-json-comments": { "version": "3.1.1", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -15054,6 +17087,7 @@ "node_modules/supports-color": { "version": "8.1.1", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15067,6 +17101,7 @@ "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -15077,11 +17112,13 @@ "node_modules/symbol-tree": { "version": "3.2.4", "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/syncpack": { "version": "12.4.0", "integrity": "sha512-iVDbuxW1zpjC8IuGLLgTjfgnAjr1iTd+In//RGUi49nKT8f6BWYSEAt496fj4eGNmYeajUiGngBHl15Jb++RBg==", + "license": "MIT", "dependencies": { "@effect/schema": "0.69.0", "chalk": "5.3.0", @@ -15128,6 +17165,7 @@ "node_modules/syncpack/node_modules/chalk": { "version": "5.3.0", "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -15138,6 +17176,7 @@ "node_modules/syncpack/node_modules/chalk-template": { "version": "1.1.0", "integrity": "sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==", + "license": "MIT", "dependencies": { "chalk": "^5.2.0" }, @@ -15151,6 +17190,7 @@ "node_modules/syncpack/node_modules/commander": { "version": "12.1.0", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", "engines": { "node": ">=18" } @@ -15158,6 +17198,7 @@ "node_modules/syncpack/node_modules/minimatch": { "version": "10.0.1", "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -15171,6 +17212,7 @@ "node_modules/syncpack/node_modules/semver": { "version": "7.6.3", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -15181,12 +17223,14 @@ "node_modules/systemjs": { "version": "6.15.1", "integrity": "sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/table-layout": { "version": "4.1.1", "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", "dev": true, + "license": "MIT", "dependencies": { "array-back": "^6.2.2", "wordwrapjs": "^5.1.0" @@ -15199,17 +17243,19 @@ "version": "6.2.2", "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/terser": { - "version": "5.39.0", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "version": "5.44.0", + "integrity": "sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -15223,11 +17269,13 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/test-exclude": { "version": "6.0.0", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -15241,6 +17289,7 @@ "version": "7.2.3", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15259,6 +17308,7 @@ "node_modules/thenify": { "version": "3.3.1", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } @@ -15266,6 +17316,7 @@ "node_modules/thenify-all": { "version": "1.6.0", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -15276,6 +17327,7 @@ "node_modules/tightrope": { "version": "0.2.0", "integrity": "sha512-Kw36UHxJEELq2VUqdaSGR2/8cAsPgMtvX8uGVU6Jk26O66PhXec0A5ZnRYs47btbtwPDpXXF66+Fo3vimCM9aQ==", + "license": "MIT", "engines": { "node": ">=16" } @@ -15284,6 +17336,7 @@ "version": "2.0.12", "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, + "license": "MIT", "dependencies": { "setimmediate": "^1.0.4" }, @@ -15293,30 +17346,35 @@ }, "node_modules/tiny-case": { "version": "1.0.3", - "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", + "license": "MIT" }, "node_modules/tiny-inflate": { "version": "1.0.3", "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tiny-warning": { "version": "1.0.3", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinyexec": { "version": "0.3.2", "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinyglobby": { - "version": "0.2.12", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "version": "0.2.15", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, + "license": "MIT", "dependencies": { - "fdir": "^6.4.3", - "picomatch": "^4.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, "engines": { "node": ">=12.0.0" @@ -15326,9 +17384,13 @@ } }, "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.4.3", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.5.0", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -15339,9 +17401,10 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.2", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -15350,8 +17413,9 @@ } }, "node_modules/tmp": { - "version": "0.2.3", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", "engines": { "node": ">=14.14" } @@ -15359,11 +17423,12 @@ "node_modules/tmpl": { "version": "1.0.5", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/to-buffer": { - "version": "1.2.1", - "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "version": "1.2.2", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "dev": true, "license": "MIT", "dependencies": { @@ -15378,6 +17443,7 @@ "node_modules/to-regex-range": { "version": "5.0.1", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -15388,18 +17454,21 @@ "node_modules/toidentifier": { "version": "1.0.1", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/toposort": { "version": "2.0.2", - "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "license": "MIT" }, "node_modules/touch": { "version": "3.1.1", "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", "dev": true, + "license": "ISC", "bin": { "nodetouch": "bin/nodetouch.js" } @@ -15408,6 +17477,7 @@ "version": "4.1.4", "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -15421,12 +17491,13 @@ "node_modules/tr46": { "version": "0.0.3", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tree-kill": { "version": "1.2.2", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, + "license": "MIT", "bin": { "tree-kill": "cli.js" } @@ -15434,6 +17505,7 @@ "node_modules/trough": { "version": "1.0.5", "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -15442,6 +17514,7 @@ "node_modules/ts-api-utils": { "version": "2.1.0", "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "license": "MIT", "engines": { "node": ">=18.12" }, @@ -15452,6 +17525,7 @@ "node_modules/ts-dedent": { "version": "2.2.0", "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "license": "MIT", "engines": { "node": ">=6.10" } @@ -15460,6 +17534,7 @@ "version": "7.0.3", "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", "dev": true, + "license": "MIT", "peerDependencies": { "typescript": ">=3.7.0" } @@ -15468,6 +17543,7 @@ "version": "29.2.5", "integrity": "sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==", "dev": true, + "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", @@ -15512,9 +17588,10 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.1", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "version": "7.7.3", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -15526,6 +17603,7 @@ "version": "24.0.0", "integrity": "sha512-2OAOg/Ob5yx9Et7ZX4CvTCc0UFoZHwLEJ+dpDPSUi5TgwwlTlX47w+iFRrEwzUZwYACjq83cgjS/Da50Ga37uw==", "dev": true, + "license": "MIT", "dependencies": { "@ts-morph/common": "~0.25.0", "code-block-writer": "^13.0.3" @@ -15534,6 +17612,7 @@ "node_modules/ts-node": { "version": "10.9.2", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -15574,11 +17653,13 @@ }, "node_modules/ts-toolbelt": { "version": "9.6.0", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==" + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "license": "Apache-2.0" }, "node_modules/tsconfig-paths": { "version": "3.15.0", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -15589,6 +17670,7 @@ "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -15599,17 +17681,20 @@ "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tslib": { "version": "2.8.1", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/tsx": { - "version": "4.19.3", - "integrity": "sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==", + "version": "4.20.6", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", + "license": "MIT", "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -15627,11 +17712,13 @@ "node_modules/tty-browserify": { "version": "0.0.1", "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/type-check": { "version": "0.4.0", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -15643,13 +17730,15 @@ "version": "4.0.8", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { - "version": "4.39.1", - "integrity": "sha512-uW9qzd66uyHYxwyVBYiwS4Oi0qZyUqwjU+Oevr6ZogYiXt99EOYtwvzMSLw1c3lYo2HzJsep/NB23iEVEgjG/w==", + "version": "4.41.0", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -15660,6 +17749,7 @@ "node_modules/type-is": { "version": "1.6.18", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -15671,6 +17761,7 @@ "node_modules/typed-array-buffer": { "version": "1.0.3", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -15683,6 +17774,7 @@ "node_modules/typed-array-byte-length": { "version": "1.0.3", "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", @@ -15700,6 +17792,7 @@ "node_modules/typed-array-byte-offset": { "version": "1.0.4", "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -15719,6 +17812,7 @@ "node_modules/typed-array-length": { "version": "1.0.7", "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -15737,13 +17831,15 @@ "node_modules/typedarray-to-buffer": { "version": "3.1.5", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { - "version": "5.8.3", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -15753,13 +17849,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.29.1", - "integrity": "sha512-f8cDkvndhbQMPcysk6CUSGBWV+g1utqdn71P5YKwMumVMOG/5k7cHq0KyG4O52nB0oKS4aN2Tp5+wB4APJGC+w==", + "version": "8.46.1", + "integrity": "sha512-VHgijW803JafdSsDO8I761r3SHrgk4T00IdyQ+/UsthtgPRsBWQLqoSxOolxTpxRKi1kGXK0bSz4CoAc9ObqJA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.29.1", - "@typescript-eslint/parser": "8.29.1", - "@typescript-eslint/utils": "8.29.1" + "@typescript-eslint/eslint-plugin": "8.46.1", + "@typescript-eslint/parser": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1", + "@typescript-eslint/utils": "8.46.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -15770,20 +17868,33 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/typical": { "version": "4.0.0", "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/uid-safe": { + "version": "2.1.5", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", @@ -15800,12 +17911,14 @@ "node_modules/undefsafe": { "version": "2.0.5", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/undici": { "version": "5.29.0", "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", "dev": true, + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -15814,13 +17927,15 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.21.0", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -15829,6 +17944,7 @@ "version": "2.0.0", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -15838,9 +17954,10 @@ } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "version": "2.2.1", + "integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -15849,15 +17966,17 @@ "version": "1.4.1", "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", "dev": true, + "license": "MIT", "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "version": "2.2.0", + "integrity": "sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -15866,6 +17985,7 @@ "version": "2.0.0", "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", "dev": true, + "license": "MIT", "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" @@ -15874,11 +17994,13 @@ "node_modules/unicode-trie/node_modules/pako": { "version": "0.2.9", "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unicorn-magic": { "version": "0.1.0", "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -15889,6 +18011,7 @@ "node_modules/unified": { "version": "9.2.2", "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "license": "MIT", "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", @@ -15905,6 +18028,7 @@ "node_modules/unist-util-is": { "version": "4.1.0", "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -15913,6 +18037,7 @@ "node_modules/unist-util-stringify-position": { "version": "2.0.3", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.2" }, @@ -15924,6 +18049,7 @@ "node_modules/unist-util-visit": { "version": "2.0.3", "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", @@ -15936,11 +18062,13 @@ }, "node_modules/unist-util-visit-parents": { "version": "1.1.2", - "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==" + "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==", + "license": "MIT" }, "node_modules/unist-util-visit/node_modules/unist-util-visit-parents": { "version": "3.1.1", "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" @@ -15954,6 +18082,7 @@ "version": "0.2.0", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -15961,6 +18090,7 @@ "node_modules/unpipe": { "version": "1.0.0", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -15982,6 +18112,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -15996,6 +18127,7 @@ "node_modules/upper-case-first": { "version": "2.0.2", "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -16003,6 +18135,7 @@ "node_modules/uri-js": { "version": "4.4.1", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -16010,12 +18143,14 @@ "node_modules/urijs": { "version": "1.19.11", "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/url": { "version": "0.11.4", "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^1.4.1", "qs": "^6.12.3" @@ -16028,6 +18163,7 @@ "version": "1.5.10", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -16036,12 +18172,14 @@ "node_modules/url/node_modules/punycode": { "version": "1.4.1", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/util": { "version": "0.12.5", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -16052,16 +18190,19 @@ }, "node_modules/util-arity": { "version": "1.1.0", - "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==" + "integrity": "sha512-kkyIsXKwemfSy8ZEoaIz06ApApnWsk5hQO0vLjZS6UkBiGiW++Jsyb8vSBoc0WKlffGoGs5yYy/j5pp8zckrFA==", + "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } @@ -16073,18 +18214,21 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "license": "MIT" }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, + "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -16097,6 +18241,7 @@ "node_modules/validate-npm-package-license": { "version": "3.0.4", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -16105,6 +18250,7 @@ "node_modules/validate-npm-package-name": { "version": "5.0.1", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -16113,6 +18259,7 @@ "version": "2.12.3", "integrity": "sha512-qVkT1E7yMbUsB2mmJNFmaXMWE2hF8ffqzMMwe9zdAikd8u2VfnsVY2HQcOUi2F38bgbxzlJBEdS1UUhOXdF9GQ==", "dev": true, + "license": "ISC", "dependencies": { "@sphinxxxx/color-conversion": "^2.2.2" } @@ -16120,6 +18267,7 @@ "node_modules/vary": { "version": "1.1.2", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -16127,6 +18275,7 @@ "node_modules/vfile": { "version": "4.2.1", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -16141,6 +18290,7 @@ "node_modules/vfile-message": { "version": "2.0.4", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -16151,14 +18301,17 @@ } }, "node_modules/vite": { - "version": "6.2.7", - "integrity": "sha512-qg3LkeuinTrZoJHHF94coSaTfIPyBYoywp+ys4qu20oSJFbKMYoIJo0FWJT9q6Vp49l6z9IsJRbHdcGtiKbGoQ==", + "version": "6.4.0", + "integrity": "sha512-oLnWs9Hak/LOlKjeSpOwD6JMks8BeICEdYMJBf6P4Lac/pO9tKiv/XhXnAM7nNfSkZahjlCZu9sS50zL8fSnsw==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", "postcss": "^8.5.3", - "rollup": "^4.30.1" + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" @@ -16222,16 +18375,19 @@ } }, "node_modules/vite-express": { - "version": "0.15.0", - "integrity": "sha512-g5CIiUrip9t3LVgO0v0G+rB7HbtQL6oouyRAGeahHt7lDdJYxiURBdAkOYlOexoCLs6PZQRzbIwaT9BNPjCz6g==", + "version": "0.21.1", + "integrity": "sha512-/dz1syfdKfWwcNRSl9wxZQmH7dImrvxNR9TptbpYGqrlawWFD+USzbLR1ytWei8XJpDPDRUgOoT8dEIf/vviyQ==", + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0" + "express-static-gzip": "^2.2.0", + "picocolors": "^1.1.1" } }, "node_modules/vite-plugin-node-polyfills": { "version": "0.23.0", "integrity": "sha512-4n+Ys+2bKHQohPBKigFlndwWQ5fFKwaGY6muNDMTb0fSQLyBzS+jjUNRZG9sKF0S/Go4ApG6LFnUGopjkILg3w==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/plugin-inject": "^5.0.5", "node-stdlib-browser": "^1.2.0" @@ -16243,15 +18399,46 @@ "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" } }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/vm-browserify": { "version": "1.1.2", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, + "license": "MIT", "dependencies": { "xml-name-validator": "^4.0.0" }, @@ -16263,24 +18450,36 @@ "version": "1.0.8", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/web-vitals": { "version": "1.1.2", "integrity": "sha512-PFMKIY+bRSXlMxVAQ+m2aw9c/ioUYfDgrYot0YUa+/xa0sakubWhSDyxAKwzymvXVdF4CZI71g06W+mqhzu6ig==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/webidl-conversions": { "version": "3.0.1", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/whatwg-encoding": { "version": "2.0.0", "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -16292,6 +18491,7 @@ "version": "0.6.3", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -16303,6 +18503,7 @@ "version": "3.0.0", "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" } @@ -16311,6 +18512,7 @@ "version": "5.0.0", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -16319,6 +18521,7 @@ "node_modules/which": { "version": "2.0.2", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -16332,6 +18535,7 @@ "node_modules/which-boxed-primitive": { "version": "1.1.1", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", @@ -16349,6 +18553,7 @@ "node_modules/which-builtin-type": { "version": "1.2.1", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", @@ -16374,6 +18579,7 @@ "node_modules/which-collection": { "version": "1.0.2", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -16389,11 +18595,13 @@ }, "node_modules/which-module": { "version": "2.0.1", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.19", "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -16413,6 +18621,7 @@ "node_modules/word-wrap": { "version": "1.2.5", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -16420,12 +18629,14 @@ "node_modules/wordwrap": { "version": "1.0.0", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/wordwrapjs": { - "version": "5.1.0", - "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", + "version": "5.1.1", + "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } @@ -16433,6 +18644,7 @@ "node_modules/wrap-ansi": { "version": "8.1.0", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -16449,6 +18661,7 @@ "name": "wrap-ansi", "version": "7.0.0", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16462,8 +18675,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.1.0", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "version": "6.2.2", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -16472,8 +18686,9 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "version": "6.2.3", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -16484,6 +18699,7 @@ "node_modules/wrap-ansi/node_modules/string-width": { "version": "5.1.2", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -16497,8 +18713,9 @@ } }, "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "version": "7.1.2", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -16511,12 +18728,14 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -16528,11 +18747,13 @@ "node_modules/write-file-atomic/node_modules/signal-exit": { "version": "3.0.7", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ws": { "version": "8.17.1", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -16553,6 +18774,7 @@ "version": "0.9.4", "integrity": "sha512-5xgeLjIxZ8DVHU4ty3kOdd9QfHDxf89tmSy0+yN8n59S3wx6LBJh8XhEg61OPOGE65jEYGAtLq0GMzLKrsjfPQ==", "dev": true, + "license": "ISC", "bin": { "wtfnode": "proxy.js" }, @@ -16563,12 +18785,14 @@ "node_modules/xml": { "version": "1.0.1", "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xml-name-validator": { "version": "4.0.0", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12" } @@ -16576,6 +18800,7 @@ "node_modules/xmlbuilder": { "version": "15.1.1", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", "engines": { "node": ">=8.0" } @@ -16583,7 +18808,8 @@ "node_modules/xmlchars": { "version": "2.2.0", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/xmlhttprequest-ssl": { "version": "2.1.2", @@ -16595,6 +18821,7 @@ "node_modules/xtend": { "version": "4.0.2", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } @@ -16602,29 +18829,31 @@ "node_modules/y18n": { "version": "5.0.8", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" }, "node_modules/yaml": { - "version": "2.7.1", - "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "version": "2.8.1", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { - "node": ">= 14" + "node": ">= 14.6" } }, "node_modules/yargs": { "version": "17.7.2", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -16641,7 +18870,7 @@ "node_modules/yargs-parser": { "version": "21.1.1", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -16649,6 +18878,7 @@ "node_modules/yn": { "version": "3.1.1", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "license": "MIT", "engines": { "node": ">=6" } @@ -16656,6 +18886,7 @@ "node_modules/yocto-queue": { "version": "0.1.0", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -16666,6 +18897,7 @@ "node_modules/yup": { "version": "1.2.0", "integrity": "sha512-PPqYKSAXjpRCgLgLKVGPA33v5c/WgEx3wi6NFjIiegz90zSwyMpvTFp/uGcVnnbx6to28pgnzp/q8ih3QRjLMQ==", + "license": "MIT", "dependencies": { "property-expr": "^2.0.5", "tiny-case": "^1.0.3", @@ -16676,6 +18908,7 @@ "node_modules/yup/node_modules/type-fest": { "version": "2.19.0", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -16685,28 +18918,29 @@ }, "packages/fdc3": { "name": "@finos/fdc3", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@finos/fdc3-context": "2.2.0", - "@finos/fdc3-get-agent": "2.2.0", - "@finos/fdc3-schema": "2.2.0", - "@finos/fdc3-standard": "2.2.0" + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-get-agent": "2.3.0", + "@finos/fdc3-schema": "2.3.0", + "@finos/fdc3-security": "2.3.0", + "@finos/fdc3-standard": "2.3.0" } }, "packages/fdc3-agent-proxy": { "name": "@finos/fdc3-agent-proxy", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@finos/fdc3-standard": "2.2.0" + "@finos/fdc3-standard": "2.3.0" }, "devDependencies": { "@cucumber/cucumber": "10.3.1", "@cucumber/html-formatter": "11.0.4", "@cucumber/pretty-formatter": "1.0.1", "@eslint/js": "^9.19.0", - "@finos/testing": "2.2.0", + "@finos/fdc3-testing": "2.3.0", "@types/expect": "24.3.0", "@types/lodash": "4.14.167", "@types/node": "^20.16.11", @@ -16734,10 +18968,10 @@ }, "packages/fdc3-commonjs": { "name": "@finos/fdc3-commonjs", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@finos/fdc3": "2.2.0" + "@finos/fdc3": "2.3.0" }, "devDependencies": { "@rollup/plugin-commonjs": "^28.0.1", @@ -16749,7 +18983,7 @@ }, "packages/fdc3-context": { "name": "@finos/fdc3-context", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "devDependencies": { "@eslint/eslintrc": "^3.2.0", @@ -16794,37 +19028,23 @@ "dev": true, "license": "MIT" }, - "packages/fdc3-context/node_modules/mkdirp": { - "version": "3.0.1", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "packages/fdc3-get-agent": { "name": "@finos/fdc3-get-agent", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@finos/fdc3-agent-proxy": "2.2.0", - "@finos/fdc3-context": "2.2.0", - "@finos/fdc3-schema": "2.2.0", - "@finos/fdc3-standard": "2.2.0", + "@finos/fdc3-agent-proxy": "2.3.0", + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-schema": "2.3.0", + "@finos/fdc3-standard": "2.3.0", "@types/uuid": "^10.0.0", "uuid": "^9.0.1" }, "devDependencies": { "@cucumber/cucumber": "10.3.1", "@eslint/js": "^9.19.0", - "@finos/fdc3-web-impl": "2.2.0", - "@finos/testing": "2.2.0", + "@finos/fdc3-testing": "2.3.0", + "@finos/fdc3-web-impl": "2.3.0", "@types/node": "^20.16.11", "@types/wtfnode": "^0.7.3", "eslint": "^9.32.0", @@ -16842,7 +19062,7 @@ }, "packages/fdc3-schema": { "name": "@finos/fdc3-schema", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "devDependencies": { "@eslint/eslintrc": "^3.2.0", @@ -16865,27 +19085,53 @@ "typescript": "^5.6.3" } }, - "packages/fdc3-schema/node_modules/mkdirp": { - "version": "3.0.1", - "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" + "packages/fdc3-security": { + "name": "@finos/fdc3-security", + "version": "2.3.0", + "license": "Apache-2.0", + "dependencies": { + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-standard": "2.3.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "devDependencies": { + "@cucumber/cucumber": "10.3.1", + "@cucumber/html-formatter": "11.0.4", + "@cucumber/pretty-formatter": "1.0.1", + "@eslint/js": "^9.19.0", + "@finos/fdc3-testing": "2.3.0", + "@types/expect": "24.3.0", + "@types/lodash": "4.14.167", + "@types/node": "^20.16.11", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^8.18.2", + "@typescript-eslint/parser": "^8.18.2", + "cucumber-console-formatter": "1.0.0", + "eslint": "^9.32.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "3.3.1", + "expect": "^29.7.0", + "globals": "^15.14.0", + "is-ci": "2.0.0", + "json-canonicalize": "^1.0.6", + "jsonpath-plus": "^10.1.0", + "nyc": "17.1.0", + "prettier": "3.4.1", + "rimraf": "^6.0.1", + "ts-node": "^10.9.2", + "tsx": "^4.19.1", + "typescript": "^5.6.3", + "typescript-eslint": "^8.17.0", + "uuid": "^9.0.1" } }, "packages/fdc3-standard": { "name": "@finos/fdc3-standard", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@finos/fdc3-context": "2.2.0", - "@finos/fdc3-schema": "2.2.0" + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-schema": "2.3.0" }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", @@ -16910,15 +19156,15 @@ "typescript": "^5.6.3" } }, - "packages/testing": { - "name": "@finos/testing", - "version": "2.2.0", + "packages/fdc3-testing": { + "name": "@finos/fdc3-testing", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { "@cucumber/cucumber": "10.3.1", "@cucumber/html-formatter": "11.0.4", "@cucumber/pretty-formatter": "1.0.1", - "@finos/fdc3-standard": "2.2.0", + "@finos/fdc3-standard": "2.3.0", "@types/expect": "24.3.0", "@types/lodash": "4.14.167", "@types/node": "^20.16.11", @@ -16928,7 +19174,7 @@ "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "cucumber-console-formatter": "1.0.0", - "eslint": "^9.32.0", + "eslint": "^9.16.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-prettier": "3.3.1", @@ -16944,9 +19190,10 @@ "uuid": "^9.0.1" } }, - "packages/testing/node_modules/ajv": { + "packages/fdc3-testing/node_modules/ajv": { "version": "8.17.1", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -16958,16 +19205,17 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "packages/testing/node_modules/json-schema-traverse": { + "packages/fdc3-testing/node_modules/json-schema-traverse": { "version": "1.0.0", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "toolbox/fdc3-for-web/demo": { "name": "@finos/demo", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@finos/fdc3": "2.2.0", + "@finos/fdc3": "2.3.0", "@types/uuid": "^10.0.0", "@types/ws": "^8.5.12", "express": "^4.21.1", @@ -16976,7 +19224,7 @@ "tsx": "^4.19.1", "typescript": "^5.6.3", "uuid": "^9.0.1", - "vite-express": "^0.15.0" + "vite-express": "^0.21.1" }, "devDependencies": { "@eslint/js": "^9.19.0", @@ -16993,24 +19241,12 @@ "vite": "^6.2.7" } }, - "toolbox/fdc3-for-web/demo/node_modules/color": { - "version": "4.2.3", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "toolbox/fdc3-for-web/fdc3-web-impl": { "name": "@finos/fdc3-web-impl", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@finos/fdc3-standard": "2.2.0", + "@finos/fdc3-standard": "2.3.0", "@types/uuid": "^10.0.0", "uuid": "^9.0.1" }, @@ -17019,7 +19255,7 @@ "@cucumber/html-formatter": "11.0.4", "@cucumber/pretty-formatter": "1.0.1", "@eslint/js": "^9.19.0", - "@finos/testing": "2.2.0", + "@finos/fdc3-testing": "2.3.0", "@types/expect": "24.3.0", "@types/lodash": "4.14.167", "@types/node": "^20.16.11", @@ -17047,10 +19283,10 @@ }, "toolbox/fdc3-for-web/reference-ui": { "name": "fdc3-for-web-reference-ui", - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "dependencies": { - "@finos/fdc3": "2.2.0" + "@finos/fdc3": "2.3.0" }, "devDependencies": { "@eslint/js": "^9.19.0", @@ -17064,27 +19300,81 @@ "vite": "^6.2.7" } }, - "toolbox/fdc3-for-web/reference-ui/node_modules/color": { - "version": "4.2.3", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, + "toolbox/fdc3-security-implementation": { + "name": "@finos/fdc3-security-implementation", + "version": "2.3.0", + "license": "Apache-2.0", "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" + "@azure/msal-browser": "4.25.1", + "@finos/fdc3": "2.3.0", + "@finos/fdc3-agent-proxy": "2.3.0", + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-schema": "2.3.0", + "@finos/fdc3-security": "2.3.0", + "@types/uuid": "^10.0.0", + "@types/ws": "^8.5.12", + "canonicalize": "^2.1.0", + "concurrently": "^8.2.2", + "cross-env": "^7.0.3", + "dotenv": "^16.4.5", + "express": "^4.21.1", + "express-session": "^1.18.2", + "jose": "6.0.6", + "node-fetch": "^3.3.2", + "socket.io": "^4.8.0", + "socket.io-client": "^4.8.0", + "tsx": "^4.19.1", + "typescript": "^5.6.3", + "uuid": "^11.1.0", + "vite-express": "^0.21.1" }, - "engines": { - "node": ">=12.5.0" + "devDependencies": { + "@eslint/js": "^9.19.0", + "@types/color": "^4.2.0", + "@types/express": "^4.17.21", + "@types/express-session": "^1.18.2", + "@types/jest": "^29.5.3", + "@types/node": "^20.16.11", + "@types/node-fetch": "^2.6.11", + "color": "^4.2.3", + "eslint": "^9.16.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "3.3.1", + "globals": "^15.14.0", + "jest": "^29.7.0", + "jest-environment-node": "^30.0.5", + "nodemon": "^3.1.7", + "prettier": "3.4.1", + "rimraf": "^6.0.1", + "ts-jest": "^29.1.1", + "tsx": "^4.6.2", + "typescript": "^5.6.3", + "typescript-eslint": "^8.17.0", + "vite": "^6.2.7" + } + }, + "toolbox/fdc3-security-implementation/node_modules/uuid": { + "version": "11.1.0", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" } }, "toolbox/fdc3-workbench": { - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "devDependencies": { "@apidevtools/json-schema-ref-parser": "11.7.2", "@eslint/compat": "^1.2.5", "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.19.0", - "@finos/fdc3": "2.2.0", + "@finos/fdc3": "2.3.0", "@fontsource/roboto": "5.1.0", "@fontsource/source-code-pro": "5.1.0", "@material-ui/core": "4.12.4", diff --git a/package.json b/package.json index 5e4c018f1..ad36da39b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { @@ -21,12 +21,14 @@ "packages/fdc3-schema", "packages/fdc3-context", "packages/fdc3-standard", - "packages/testing", + "packages/fdc3-testing", "packages/fdc3-agent-proxy", + "packages/fdc3-security", "toolbox/fdc3-for-web/fdc3-web-impl", "packages/fdc3-get-agent", "packages/fdc3", "packages/fdc3-commonjs", + "toolbox/fdc3-security-implementation", "toolbox/fdc3-for-web/reference-ui", "toolbox/fdc3-for-web/demo", "toolbox/fdc3-workbench", @@ -40,7 +42,7 @@ "report": "nyc report --reporter json-summary --report-dir nyc-coverage-report --exclude-after-remap false --temp-dir coverage", "lint": "npm run lint --workspaces --if-present", "syncpack": "npm exec syncpack fix-mismatches --types 'local'", - "dev": "concurrently \"cd toolbox/fdc3-conformance && npm run dev\" \"cd toolbox/fdc3-workbench && npm run dev\" \"cd toolbox/fdc3-for-web/reference-ui && npm run dev\" \"cd toolbox/fdc3-for-web/demo && npm run dev\"", + "dev": "concurrently \"cd toolbox/fdc3-conformance && npm run dev\" \"cd toolbox/fdc3-workbench && npm run dev\" \"cd toolbox/fdc3-for-web/reference-ui && npm run dev\" \"cd toolbox/fdc3-for-web/demo && npm run dev\" \"cd toolbox/fdc3-security-implementation && npm run dev\"", "prepare": "husky" }, "prettier": { diff --git a/packages/fdc3-agent-proxy/package.json b/packages/fdc3-agent-proxy/package.json index fa1697789..705c5c82b 100644 --- a/packages/fdc3-agent-proxy/package.json +++ b/packages/fdc3-agent-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3-agent-proxy", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { @@ -23,14 +23,14 @@ "lint": "eslint src/" }, "dependencies": { - "@finos/fdc3-standard": "2.2.0" + "@finos/fdc3-standard": "2.3.0" }, "devDependencies": { "@cucumber/cucumber": "10.3.1", "@cucumber/html-formatter": "11.0.4", "@cucumber/pretty-formatter": "1.0.1", "@eslint/js": "^9.19.0", - "@finos/testing": "2.2.0", + "@finos/fdc3-testing": "2.3.0", "@types/expect": "24.3.0", "@types/lodash": "4.14.167", "@types/node": "^20.16.11", @@ -55,4 +55,4 @@ "typescript-eslint": "^8.17.0", "uuid": "^9.0.1" } -} +} \ No newline at end of file diff --git a/packages/fdc3-agent-proxy/test/step-definitions/channelSelector.steps.ts b/packages/fdc3-agent-proxy/test/step-definitions/channelSelector.steps.ts index d6f04cbff..d3a9413cf 100644 --- a/packages/fdc3-agent-proxy/test/step-definitions/channelSelector.steps.ts +++ b/packages/fdc3-agent-proxy/test/step-definitions/channelSelector.steps.ts @@ -1,7 +1,7 @@ import { Given, When } from '@cucumber/cucumber'; -import { SimpleIntentResolver } from '@finos/testing'; +import { SimpleIntentResolver } from '@finos/fdc3-testing'; import { CustomWorld } from '../world/index'; -import { CHANNEL_STATE } from '@finos/testing'; +import { CHANNEL_STATE } from '@finos/fdc3-testing'; import { DefaultChannelSupport, DefaultHeartbeatSupport, diff --git a/packages/fdc3-agent-proxy/test/step-definitions/channels.steps.ts b/packages/fdc3-agent-proxy/test/step-definitions/channels.steps.ts index 6b7e42e3f..ddb04b41b 100644 --- a/packages/fdc3-agent-proxy/test/step-definitions/channels.steps.ts +++ b/packages/fdc3-agent-proxy/test/step-definitions/channels.steps.ts @@ -1,8 +1,8 @@ import { DataTable, Given, Then, When } from '@cucumber/cucumber'; import { Context } from '@finos/fdc3-context'; -import { handleResolve, matchData } from '@finos/testing'; +import { handleResolve, matchData } from '@finos/fdc3-testing'; import { CustomWorld } from '../world/index'; -import { CHANNEL_STATE } from '@finos/testing'; +import { CHANNEL_STATE } from '@finos/fdc3-testing'; import { ApiEvent } from '@finos/fdc3-standard'; import { BroadcastEvent, diff --git a/packages/fdc3-agent-proxy/test/step-definitions/generic.steps.ts b/packages/fdc3-agent-proxy/test/step-definitions/generic.steps.ts index 3415ea232..1494c35cc 100644 --- a/packages/fdc3-agent-proxy/test/step-definitions/generic.steps.ts +++ b/packages/fdc3-agent-proxy/test/step-definitions/generic.steps.ts @@ -8,8 +8,8 @@ import { DefaultIntentSupport, DefaultHeartbeatSupport, } from '../../src'; -import { SimpleIntentResolver, setupGenericSteps } from '@finos/testing'; -import { CHANNEL_STATE, SimpleChannelSelector } from '@finos/testing/dist/src/agent'; +import { SimpleIntentResolver, setupGenericSteps } from '@finos/fdc3-testing'; +import { CHANNEL_STATE, SimpleChannelSelector } from '@finos/fdc3-testing/dist/src/agent'; import { HeartbeatEvent } from '@finos/fdc3-schema/dist/generated/api/BrowserTypes'; import { LogLevel } from '@finos/fdc3-standard'; diff --git a/packages/fdc3-agent-proxy/test/step-definitions/intents.steps.ts b/packages/fdc3-agent-proxy/test/step-definitions/intents.steps.ts index 2fad1583a..0802502aa 100644 --- a/packages/fdc3-agent-proxy/test/step-definitions/intents.steps.ts +++ b/packages/fdc3-agent-proxy/test/step-definitions/intents.steps.ts @@ -1,6 +1,6 @@ import { Given } from '@cucumber/cucumber'; import { CustomWorld } from '../world/index'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; import { Context } from '@finos/fdc3-context'; import { ContextMetadata, ResolveError } from '@finos/fdc3-standard'; import { IntentEvent } from '@finos/fdc3-schema/dist/generated/api/BrowserTypes'; diff --git a/packages/fdc3-agent-proxy/test/world/index.ts b/packages/fdc3-agent-proxy/test/world/index.ts index 8010a0742..24b94793f 100644 --- a/packages/fdc3-agent-proxy/test/world/index.ts +++ b/packages/fdc3-agent-proxy/test/world/index.ts @@ -1,6 +1,6 @@ import { setWorldConstructor } from '@cucumber/cucumber'; import { TestMessaging } from '../support/TestMessaging'; -import { PropsWorld } from '@finos/testing'; +import { PropsWorld } from '@finos/fdc3-testing'; export class CustomWorld extends PropsWorld { messaging: TestMessaging | null = null; diff --git a/packages/fdc3-agent-proxy/tsconfig.json b/packages/fdc3-agent-proxy/tsconfig.json index fb0c43bc4..298a8ed64 100644 --- a/packages/fdc3-agent-proxy/tsconfig.json +++ b/packages/fdc3-agent-proxy/tsconfig.json @@ -25,7 +25,7 @@ "path": "../fdc3-context" }, { - "path": "../testing" + "path": "../fdc3-testing" }, { "path": "../fdc3-context" diff --git a/packages/fdc3-commonjs/package.json b/packages/fdc3-commonjs/package.json index 13b706a8c..93a1de57a 100644 --- a/packages/fdc3-commonjs/package.json +++ b/packages/fdc3-commonjs/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3-commonjs", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { @@ -22,7 +22,7 @@ "build": "npx rollup -c rollup.config.mjs" }, "dependencies": { - "@finos/fdc3": "2.2.0" + "@finos/fdc3": "2.3.0" }, "devDependencies": { "@rollup/plugin-commonjs": "^28.0.1", diff --git a/packages/fdc3-context/generated/context/ContextTypes.ts b/packages/fdc3-context/generated/context/ContextTypes.ts index a6ff5bdd0..be657274d 100644 --- a/packages/fdc3-context/generated/context/ContextTypes.ts +++ b/packages/fdc3-context/generated/context/ContextTypes.ts @@ -1,6 +1,6 @@ // To parse this data: // -// import { Convert, Action, Chart, ChatInitSettings, ChatMessage, ChatRoom, ChatSearchCriteria, Contact, ContactList, Context, Country, Currency, Email, FileAttachment, Instrument, InstrumentList, Interaction, Message, Nothing, Order, OrderList, Organization, Portfolio, Position, Product, TimeRange, Trade, TradeList, TransactionResult, Valuation } from "./file"; +// import { Convert, Action, Chart, ChatInitSettings, ChatMessage, ChatRoom, ChatSearchCriteria, Contact, ContactList, Context, Country, Currency, Email, FileAttachment, Instrument, InstrumentList, Interaction, Message, Nothing, Order, OrderList, Organization, Portfolio, Position, Product, SymmetricKeyRequest, SymmetricKeyResponse, TimeRange, Trade, TradeList, TransactionResult, UserRequest, User, Valuation } from "./file"; // // const action = Convert.toAction(json); // const chart = Convert.toChart(json); @@ -26,10 +26,14 @@ // const portfolio = Convert.toPortfolio(json); // const position = Convert.toPosition(json); // const product = Convert.toProduct(json); +// const symmetricKeyRequest = Convert.toSymmetricKeyRequest(json); +// const symmetricKeyResponse = Convert.toSymmetricKeyResponse(json); // const timeRange = Convert.toTimeRange(json); // const trade = Convert.toTrade(json); // const tradeList = Convert.toTradeList(json); // const transactionResult = Convert.toTransactionResult(json); +// const userRequest = Convert.toUserRequest(json); +// const user = Convert.toUser(json); // const valuation = Convert.toValuation(json); // // These functions will throw an error if the JSON doesn't @@ -1924,6 +1928,56 @@ export interface Product { [property: string]: any; } +/** + * A request to obtain a symmetric encryption key. + */ +export interface SymmetricKeyRequest { + type: 'fdc3.security.symmetricKey.request'; + id?: { [key: string]: any }; + name?: string; + [property: string]: any; +} + +/** + * Free text to be used for a keyword search + * + * `interactionType` SHOULD be one of `'Instant Message'`, `'Email'`, `'Call'`, or + * `'Meeting'` although other string values are permitted. + */ + +/** + * A response containing a wrapped symmetric key and metadata. + */ +export interface SymmetricKeyResponse { + id: SymmetricKeyResponseID; + type: 'fdc3.security.symmetricKey.response'; + /** + * The symmetric key, encrypted using the recipient's public key. + */ + wrappedKey: string; + name?: string; + [property: string]: any; +} + +export interface SymmetricKeyResponseID { + /** + * Key ID used to identify the public key used to wrap the symmetric key. + */ + kid: string; + /** + * Public Key Infrastructure JSON Web Key Set URL used to wrap the symmetric key. + */ + pki: string; + [property: string]: any; +} + +/** + * Free text to be used for a keyword search + * + * `interactionType` SHOULD be one of `'Instant Message'`, `'Email'`, `'Call'`, or + * `'Meeting'` although other string values are permitted. + */ + /** * A context representing a period of time. Any user interfaces that represent or visualize * events or activity over time can be filtered or focused on a particular time period, @@ -2113,6 +2167,83 @@ export interface TransactionResult { */ export type TransactionStatus = 'Created' | 'Deleted' | 'Updated' | 'Failed'; +/** + * Free text to be used for a keyword search + * + * `interactionType` SHOULD be one of `'Instant Message'`, `'Email'`, `'Call'`, or + * `'Meeting'` although other string values are permitted. + */ + +/** + * A request for the current user’s identity. + */ +export interface UserRequest { + /** + * The audience (aud) claim specifying the intended recipient of the user request, typically + * the URL of the requesting application. This will be used in the returned JWT token for + * the aud claim. + */ + aud: string; + /** + * The JSON Web Key Set URL (jku) claim specifying the URL where the requesting + * application's JSON Web Key Set (JWKS) can be retrieved. This should contain the public + * keys for encryption purposes + */ + jku: string; + /** + * The context type identifier for user request messages + */ + type: 'fdc3.user.request'; + id?: { [key: string]: any }; + name?: string; + [property: string]: any; +} + +/** + * Free text to be used for a keyword search + * + * `interactionType` SHOULD be one of `'Instant Message'`, `'Email'`, `'Call'`, or + * `'Meeting'` although other string values are permitted. + */ + +/** + * A user identity, extending contact with authentication metadata. + */ +export interface User { + /** + * User identifiers that uniquely identify this user across different systems + */ + id?: UserID; + /** + * A JSON Web Token (JWT) asserting user identity and permissions. The JWT contains a header + * with cryptographic information and a payload with user claims. Header fields include: + * 'alg' (signature algorithm, e.g., 'EdDSA'), 'jku' (JSON Web Key Set URL for key + * verification), and 'kid' (key identifier). Payload fields include: 'iss' (issuer - the + * application issuing the token), 'aud' (audience - the intended recipient application), + * 'sub' (subject - the user identifier), 'exp' (expiration time as Unix timestamp), 'iat' + * (issued at time as Unix timestamp), and 'jti' (JWT ID - unique token identifier). + */ + jwt: string; + /** + * The human-readable name of the user + */ + name?: string; + type: 'fdc3.user'; + [property: string]: any; +} + +/** + * User identifiers that uniquely identify this user across different systems + */ +export interface UserID { + /** + * The user's email address as a unique identifier. If provided, this email must match the + * 'sub' field in the JWT token. + */ + email?: string; + [property: string]: any; +} + /** * Free text to be used for a keyword search * @@ -2355,6 +2486,22 @@ export class Convert { return JSON.stringify(uncast(value, r('Product')), null, 2); } + public static toSymmetricKeyRequest(json: string): SymmetricKeyRequest { + return cast(JSON.parse(json), r('SymmetricKeyRequest')); + } + + public static symmetricKeyRequestToJson(value: SymmetricKeyRequest): string { + return JSON.stringify(uncast(value, r('SymmetricKeyRequest')), null, 2); + } + + public static toSymmetricKeyResponse(json: string): SymmetricKeyResponse { + return cast(JSON.parse(json), r('SymmetricKeyResponse')); + } + + public static symmetricKeyResponseToJson(value: SymmetricKeyResponse): string { + return JSON.stringify(uncast(value, r('SymmetricKeyResponse')), null, 2); + } + public static toTimeRange(json: string): TimeRange { return cast(JSON.parse(json), r('TimeRange')); } @@ -2387,6 +2534,22 @@ export class Convert { return JSON.stringify(uncast(value, r('TransactionResult')), null, 2); } + public static toUserRequest(json: string): UserRequest { + return cast(JSON.parse(json), r('UserRequest')); + } + + public static userRequestToJson(value: UserRequest): string { + return JSON.stringify(uncast(value, r('UserRequest')), null, 2); + } + + public static toUser(json: string): User { + return cast(JSON.parse(json), r('User')); + } + + public static userToJson(value: User): string { + return JSON.stringify(uncast(value, r('User')), null, 2); + } + public static toValuation(json: string): Valuation { return cast(JSON.parse(json), r('Valuation')); } @@ -3081,6 +3244,30 @@ const typeMap: any = { ], 'any' ), + SymmetricKeyRequest: o( + [ + { json: 'type', js: 'type', typ: r('SymmetricKeyRequestType') }, + { json: 'id', js: 'id', typ: u(undefined, m('any')) }, + { json: 'name', js: 'name', typ: u(undefined, '') }, + ], + 'any' + ), + SymmetricKeyResponse: o( + [ + { json: 'id', js: 'id', typ: r('SymmetricKeyResponseID') }, + { json: 'type', js: 'type', typ: r('SymmetricKeyResponseType') }, + { json: 'wrappedKey', js: 'wrappedKey', typ: '' }, + { json: 'name', js: 'name', typ: u(undefined, '') }, + ], + 'any' + ), + SymmetricKeyResponseID: o( + [ + { json: 'kid', js: 'kid', typ: '' }, + { json: 'pki', js: 'pki', typ: '' }, + ], + 'any' + ), TimeRange: o( [ { json: 'endTime', js: 'endTime', typ: u(undefined, Date) }, @@ -3131,6 +3318,26 @@ const typeMap: any = { ], 'any' ), + UserRequest: o( + [ + { json: 'aud', js: 'aud', typ: '' }, + { json: 'jku', js: 'jku', typ: '' }, + { json: 'type', js: 'type', typ: r('UserRequestType') }, + { json: 'id', js: 'id', typ: u(undefined, m('any')) }, + { json: 'name', js: 'name', typ: u(undefined, '') }, + ], + 'any' + ), + User: o( + [ + { json: 'id', js: 'id', typ: u(undefined, r('UserID')) }, + { json: 'jwt', js: 'jwt', typ: '' }, + { json: 'name', js: 'name', typ: u(undefined, '') }, + { json: 'type', js: 'type', typ: r('UserType') }, + ], + 'any' + ), + UserID: o([{ json: 'email', js: 'email', typ: u(undefined, '') }], 'any'), Valuation: o( [ { json: 'CURRENCY_ISOCODE', js: 'CURRENCY_ISOCODE', typ: '' }, @@ -3173,9 +3380,13 @@ const typeMap: any = { StickyInteractionType: ['fdc3.organization'], PositionType: ['fdc3.position'], PortfolioType: ['fdc3.portfolio'], + SymmetricKeyRequestType: ['fdc3.security.symmetricKey.request'], + SymmetricKeyResponseType: ['fdc3.security.symmetricKey.response'], TradeType: ['fdc3.trade'], TradeListType: ['fdc3.tradeList'], TransactionStatus: ['Created', 'Deleted', 'Failed', 'Updated'], TransactionResultType: ['fdc3.transactionResult'], + UserRequestType: ['fdc3.user.request'], + UserType: ['fdc3.user'], ValuationType: ['fdc3.valuation'], }; diff --git a/packages/fdc3-context/package.json b/packages/fdc3-context/package.json index be0f77890..b99b13ed1 100644 --- a/packages/fdc3-context/package.json +++ b/packages/fdc3-context/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3-context", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { diff --git a/packages/fdc3-context/schemas/context/security.symmetricKey.request.schema.json b/packages/fdc3-context/schemas/context/security.symmetricKey.request.schema.json new file mode 100644 index 000000000..f810d473a --- /dev/null +++ b/packages/fdc3-context/schemas/context/security.symmetricKey.request.schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://fdc3.finos.org/schemas/next/context/symmetricKeyRequest.schema.json", + "type": "object", + "title": "Symmetric Key Request", + "description": "A request to obtain a symmetric encryption key.", + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "const": "fdc3.security.symmetricKey.request" + } + }, + "required": [ + "type" + ] + }, + { + "$ref": "context.schema.json#/definitions/BaseContext" + } + ], + "examples": [ + { + "type": "fdc3.security.symmetricKey.request" + } + ] +} \ No newline at end of file diff --git a/packages/fdc3-context/schemas/context/security.symmetricKey.response.schema.json b/packages/fdc3-context/schemas/context/security.symmetricKey.response.schema.json new file mode 100644 index 000000000..cc39aa400 --- /dev/null +++ b/packages/fdc3-context/schemas/context/security.symmetricKey.response.schema.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://fdc3.finos.org/schemas/next/context/symmetricKeyResponse.schema.json", + "type": "object", + "title": "Symmetric Key Response", + "description": "A response containing a wrapped symmetric key and metadata.", + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "const": "fdc3.security.symmetricKey.response" + }, + "id": { + "type": "object", + "properties": { + "kid": { + "type": "string", + "description": "Key ID used to identify the public key used to wrap the symmetric key." + }, + "pki": { + "type": "string", + "description": "Public Key Infrastructure JSON Web Key Set URL used to wrap the symmetric key." + } + }, + "required": [ + "kid", + "pki" + ] + }, + "wrappedKey": { + "type": "string", + "description": "The symmetric key, encrypted using the recipient's public key.", + "examples": [ + "u4jvA7...==" + ] + } + }, + "required": [ + "type", + "id", + "wrappedKey" + ] + }, + { + "$ref": "context.schema.json#/definitions/BaseContext" + } + ], + "examples": [ + { + "type": "fdc3.security.symmetricKey.response", + "id": { + "kid": "key-id-123", + "pki": "https://examples.com/myJWKSendpoint" + }, + "wrappedKey": "u4jvA7Gx8LdH...==" + } + ] +} \ No newline at end of file diff --git a/packages/fdc3-context/schemas/context/user.request.schema.json b/packages/fdc3-context/schemas/context/user.request.schema.json new file mode 100644 index 000000000..ce27eeb95 --- /dev/null +++ b/packages/fdc3-context/schemas/context/user.request.schema.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://fdc3.finos.org/schemas/next/context/userRequest.schema.json", + "type": "object", + "title": "User Request", + "description": "A request for the current user’s identity.", + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "const": "fdc3.user.request", + "description": "The context type identifier for user request messages" + }, + "aud": { + "type": "string", + "description": "The audience (aud) claim specifying the intended recipient of the user request, typically the URL of the requesting application. This will be used in the returned JWT token for the aud claim." + }, + "jku": { + "type": "string", + "description": "The JSON Web Key Set URL (jku) claim specifying the URL where the requesting application's JSON Web Key Set (JWKS) can be retrieved. This should contain the public keys for encryption purposes" + } + }, + "required": [ + "type", + "aud", + "jku" + ], + "additionalProperties": true + }, + { + "$ref": "context.schema.json#/definitions/BaseContext" + } + ], + "examples": [ + { + "type": "fdc3.user.request", + "aud": "https://my-app-url.com", + "jku": "https://my-app-url.com/.well-known/jwks.json" + } + ] +} \ No newline at end of file diff --git a/packages/fdc3-context/schemas/context/user.schema.json b/packages/fdc3-context/schemas/context/user.schema.json new file mode 100644 index 000000000..9780fe9a0 --- /dev/null +++ b/packages/fdc3-context/schemas/context/user.schema.json @@ -0,0 +1,54 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://fdc3.finos.org/schemas/next/context/user.schema.json", + "type": "object", + "title": "User", + "description": "A user identity, extending contact with authentication metadata.", + "allOf": [ + { + "type": "object", + "properties": { + "type": { + "const": "fdc3.user" + }, + "name": { + "type": "string", + "description": "The human-readable name of the user" + }, + "id": { + "type": "object", + "description": "User identifiers that uniquely identify this user across different systems", + "properties": { + "email": { + "type": "string", + "format": "email", + "description": "The user's email address as a unique identifier. If provided, this email must match the 'sub' field in the JWT token." + } + }, + "additionalProperties": true + }, + "jwt": { + "type": "string", + "description": "A JSON Web Token (JWT) asserting user identity and permissions. The JWT contains a header with cryptographic information and a payload with user claims. Header fields include: 'alg' (signature algorithm, e.g., 'EdDSA'), 'jku' (JSON Web Key Set URL for key verification), and 'kid' (key identifier). Payload fields include: 'iss' (issuer - the application issuing the token), 'aud' (audience - the intended recipient application), 'sub' (subject - the user identifier), 'exp' (expiration time as Unix timestamp), 'iat' (issued at time as Unix timestamp), and 'jti' (JWT ID - unique token identifier).", + "examples": [ + "eyJhbGciOiJFZERTQSIsImprdSI6Imh0dHA6Ly9sb2NhbGhvc3Q6NDAwNS8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJraWQiOiJhcHAxLXNpZ25pbmcta2V5In0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQwMDUiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjQwMDMiLCJzdWIiOiJkZW1vLXVzZXIiLCJleHAiOjE3NTcwNjM0MjEsImlhdCI6MTc1NzA2MzEyMSwianRpIjoiMjE0OWQ5NDgtOWVhNy00ZmNjLTk1Y2ItN2Y1MjhhYjAwMjBkIn0.ap-OPusdBgBrubOuRzAQQcyukAHMqVuzR-j3eH5EzACHjbBguKDyby6M7-djrQEHObugF8XfCHCEaAYPRij_Cw" + ] + } + }, + "required": [ + "type", + "jwt" + ] + }, + { + "$ref": "context.schema.json#/definitions/BaseContext" + } + ], + "examples": [ + { + "type": "fdc3.user", + "name": "Mr Demo User", + "jwt": "eyJhbGciOiJFZERTQSIsImprdSI6Imh0dHA6Ly9sb2NhbGhvc3Q6NDAwNS8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJraWQiOiJhcHAxLXNpZ25pbmcta2V5In0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQwMDUiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjQwMDMiLCJzdWIiOiJkZW1vLXVzZXIiLCJleHAiOjE3NTcwNjM0MjEsImlhdCI6MTc1NzA2MzEyMSwianRpIjoiMjE0OWQ5NDgtOWVhNy00ZmNjLTk1Y2ItN2Y1MjhhYjAwMjBkIn0.ap-OPusdBgBrubOuRzAQQcyukAHMqVuzR-j3eH5EzACHjbBguKDyby6M7-djrQEHObugF8XfCHCEaAYPRij_Cw" + } + ] +} \ No newline at end of file diff --git a/packages/fdc3-get-agent/package.json b/packages/fdc3-get-agent/package.json index 1bb03f545..48e034f62 100644 --- a/packages/fdc3-get-agent/package.json +++ b/packages/fdc3-get-agent/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3-get-agent", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { @@ -23,18 +23,18 @@ "lint": "eslint src/" }, "dependencies": { - "@finos/fdc3-agent-proxy": "2.2.0", - "@finos/fdc3-context": "2.2.0", - "@finos/fdc3-schema": "2.2.0", - "@finos/fdc3-standard": "2.2.0", + "@finos/fdc3-agent-proxy": "2.3.0", + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-schema": "2.3.0", + "@finos/fdc3-standard": "2.3.0", "@types/uuid": "^10.0.0", "uuid": "^9.0.1" }, "devDependencies": { "@cucumber/cucumber": "10.3.1", "@eslint/js": "^9.19.0", - "@finos/fdc3-web-impl": "2.2.0", - "@finos/testing": "2.2.0", + "@finos/fdc3-web-impl": "2.3.0", + "@finos/fdc3-testing": "2.3.0", "@types/node": "^20.16.11", "@types/wtfnode": "^0.7.3", "eslint": "^9.32.0", @@ -49,4 +49,4 @@ "typescript-eslint": "^8.17.0", "wtfnode": "^0.9.3" } -} +} \ No newline at end of file diff --git a/packages/fdc3-get-agent/test/step-definitions/channel-selector.steps.ts b/packages/fdc3-get-agent/test/step-definitions/channel-selector.steps.ts index e419a78c5..0f5e48f0a 100644 --- a/packages/fdc3-get-agent/test/step-definitions/channel-selector.steps.ts +++ b/packages/fdc3-get-agent/test/step-definitions/channel-selector.steps.ts @@ -1,5 +1,5 @@ import { Given } from '@cucumber/cucumber'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; import { DefaultDesktopAgentChannelSelector } from '../../src/ui/DefaultDesktopAgentChannelSelector'; import { CHANNEL_SELECTOR_URL } from '../support/MockFDC3Server'; import { USER_CHANNELS } from '../support/responses/UserChannels'; diff --git a/packages/fdc3-get-agent/test/step-definitions/desktop-agent-api.steps.ts b/packages/fdc3-get-agent/test/step-definitions/desktop-agent-api.steps.ts index e44bec465..006393997 100644 --- a/packages/fdc3-get-agent/test/step-definitions/desktop-agent-api.steps.ts +++ b/packages/fdc3-get-agent/test/step-definitions/desktop-agent-api.steps.ts @@ -1,5 +1,5 @@ import { When } from '@cucumber/cucumber'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; import { CustomWorld } from '../world'; import { DesktopAgent } from '@finos/fdc3-standard'; import { Instrument } from '@finos/fdc3-context'; diff --git a/packages/fdc3-get-agent/test/step-definitions/desktop-agent.steps.ts b/packages/fdc3-get-agent/test/step-definitions/desktop-agent.steps.ts index eeea07ffb..f0423f094 100644 --- a/packages/fdc3-get-agent/test/step-definitions/desktop-agent.steps.ts +++ b/packages/fdc3-get-agent/test/step-definitions/desktop-agent.steps.ts @@ -1,6 +1,6 @@ import { After, DataTable, Given, Then, When } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; -import { doesRowMatch, handleResolve, setupGenericSteps } from '@finos/testing'; +import { doesRowMatch, handleResolve, setupGenericSteps } from '@finos/fdc3-testing'; import { MockDocument } from '../support/MockDocument'; import { MockWindow } from '../support/MockWindow'; import { fdc3Ready, getAgent } from '../../src'; diff --git a/packages/fdc3-get-agent/test/step-definitions/intent-resolver.steps.ts b/packages/fdc3-get-agent/test/step-definitions/intent-resolver.steps.ts index c84f5c095..d31a14401 100644 --- a/packages/fdc3-get-agent/test/step-definitions/intent-resolver.steps.ts +++ b/packages/fdc3-get-agent/test/step-definitions/intent-resolver.steps.ts @@ -1,6 +1,6 @@ import { Given, When } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; import { DefaultDesktopAgentIntentResolver } from '../../src/ui/DefaultDesktopAgentIntentResolver'; import { INTENT_RESOLVER_URL } from '../support/MockFDC3Server'; import { FDC3_USER_INTERFACE_RESOLVE_ACTION_TYPE } from '@finos/fdc3-schema/dist/generated/api/BrowserTypes'; diff --git a/packages/fdc3-get-agent/test/step-definitions/port-creation.steps.ts b/packages/fdc3-get-agent/test/step-definitions/port-creation.steps.ts index f58c723d7..b5d3572c5 100644 --- a/packages/fdc3-get-agent/test/step-definitions/port-creation.steps.ts +++ b/packages/fdc3-get-agent/test/step-definitions/port-creation.steps.ts @@ -1,6 +1,6 @@ import { Given, Then } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; // used to debug tests not ending - only available as a commonJs module // eslint-disable-next-line @typescript-eslint/no-require-imports const wtf = require('wtfnode'); diff --git a/packages/fdc3-get-agent/test/world/index.ts b/packages/fdc3-get-agent/test/world/index.ts index 65c4ef1ab..8e5abe733 100644 --- a/packages/fdc3-get-agent/test/world/index.ts +++ b/packages/fdc3-get-agent/test/world/index.ts @@ -1,5 +1,5 @@ import { setWorldConstructor } from '@cucumber/cucumber'; -import { PropsWorld } from '@finos/testing'; +import { PropsWorld } from '@finos/fdc3-testing'; import { MockFDC3Server } from '../support/MockFDC3Server'; import { TestServerContext } from '../support/TestServerContext'; diff --git a/packages/fdc3-get-agent/tsconfig.json b/packages/fdc3-get-agent/tsconfig.json index 050a5a5e9..a30acfbe9 100644 --- a/packages/fdc3-get-agent/tsconfig.json +++ b/packages/fdc3-get-agent/tsconfig.json @@ -18,7 +18,7 @@ "path": "../fdc3-standard" }, { - "path": "../testing" + "path": "../fdc3-testing" }, { "path": "../fdc3-schema" diff --git a/packages/fdc3-schema/generated/api/BrowserTypes.ts b/packages/fdc3-schema/generated/api/BrowserTypes.ts index 957048c6d..95a0a6803 100644 --- a/packages/fdc3-schema/generated/api/BrowserTypes.ts +++ b/packages/fdc3-schema/generated/api/BrowserTypes.ts @@ -793,9 +793,9 @@ export interface AddContextListenerResponsePayload { * Constants representing the errors that can be encountered when calling the `open` method * on the DesktopAgent object (`fdc3`). * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). */ export type PurpleError = | 'AccessDenied' @@ -889,9 +889,9 @@ export interface AddEventListenerResponsePayload { * Constants representing the errors that can be encountered when calling the `open` method * on the DesktopAgent object (`fdc3`). * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). */ export type ResponsePayloadError = | 'AccessDenied' @@ -911,6 +911,7 @@ export type ResponsePayloadError = | 'TargetAppUnavailable' | 'TargetInstanceUnavailable' | 'UserCancelledResolution' + | 'IntentListenerConflict' | 'IntentHandlerRejected' | 'NoResultReturned' | 'AgentDisconnected' @@ -998,9 +999,9 @@ export interface PayloadObject { * Constants representing the errors that can be encountered when calling the `open` method * on the DesktopAgent object (`fdc3`). * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). */ export type FluffyError = | 'MalformedContext' @@ -1013,7 +1014,8 @@ export type FluffyError = | 'ResolverTimeout' | 'TargetAppUnavailable' | 'TargetInstanceUnavailable' - | 'UserCancelledResolution'; + | 'UserCancelledResolution' + | 'IntentListenerConflict'; /** * Metadata for messages sent by a Desktop Agent to an app notifying it of an event. @@ -2168,9 +2170,9 @@ export interface FindInstancesResponsePayload { * Constants representing the errors that can be encountered when calling the `open` method * on the DesktopAgent object (`fdc3`). * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). * * Unique identifier for a for an attempt to connect to a Desktop Agent. A Unique UUID * should be used in the first (WCP1Hello) message and should be quoted in all subsequent @@ -2201,6 +2203,7 @@ export type FindInstancesErrors = | 'TargetAppUnavailable' | 'TargetInstanceUnavailable' | 'UserCancelledResolution' + | 'IntentListenerConflict' | 'AgentDisconnected' | 'NotConnectedToBridge' | 'ResponseToBridgeTimedOut' @@ -3288,9 +3291,9 @@ export interface OpenResponsePayload { * Constants representing the errors that can be encountered when calling the `open` method * on the DesktopAgent object (`fdc3`). * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). */ export type OpenErrorResponsePayload = | 'MalformedContext' @@ -6003,6 +6006,7 @@ const typeMap: any = { 'ErrorOnLaunch', 'IntentDeliveryFailed', 'IntentHandlerRejected', + 'IntentListenerConflict', 'InvalidArguments', 'MalformedContext', 'MalformedMessage', @@ -6023,6 +6027,7 @@ const typeMap: any = { 'ApiTimeout', 'DesktopAgentNotFound', 'IntentDeliveryFailed', + 'IntentListenerConflict', 'InvalidArguments', 'MalformedContext', 'NoAppsFound', @@ -6137,6 +6142,7 @@ const typeMap: any = { 'AgentDisconnected', 'DesktopAgentNotFound', 'IntentDeliveryFailed', + 'IntentListenerConflict', 'InvalidArguments', 'MalformedContext', 'MalformedMessage', diff --git a/packages/fdc3-schema/generated/bridging/BridgingTypes.ts b/packages/fdc3-schema/generated/bridging/BridgingTypes.ts index 8bb91e975..7bbe490df 100644 --- a/packages/fdc3-schema/generated/bridging/BridgingTypes.ts +++ b/packages/fdc3-schema/generated/bridging/BridgingTypes.ts @@ -114,9 +114,9 @@ export interface ErrorResponseMessagePayload { * Constants representing the errors that can be encountered when calling the `open` method * on the DesktopAgent object (`fdc3`). * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). */ export type ResponseErrorDetail = | 'AccessDenied' @@ -136,6 +136,7 @@ export type ResponseErrorDetail = | 'TargetAppUnavailable' | 'TargetInstanceUnavailable' | 'UserCancelledResolution' + | 'IntentListenerConflict' | 'IntentHandlerRejected' | 'NoResultReturned' | 'AgentDisconnected' @@ -1134,9 +1135,9 @@ export interface PayloadClass { * * Should be set if the raiseIntent request returned an error. * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). * * Array of error message strings for responses that were not returned to the bridge before * the timeout or because an error occurred. Should be the same length as the `errorSources` @@ -1157,6 +1158,7 @@ export type FindInstancesErrors = | 'UserCancelledResolution' | 'ApiTimeout' | 'InvalidArguments' + | 'IntentListenerConflict' | 'AgentDisconnected' | 'NotConnectedToBridge' | 'ResponseToBridgeTimedOut' @@ -2572,9 +2574,9 @@ export interface OpenAgentErrorResponsePayload { * the timeout or because an error occurred. Should be the same length as the `errorSources` * array and ordered the same. May be omitted if all sources responded without errors. * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). */ export type OpenErrorResponsePayload = | 'AppNotFound' @@ -4031,9 +4033,9 @@ export interface RaiseIntentResultAgentErrorResponsePayload { * Constants representing the errors that can be encountered when calling the `open` method * on the DesktopAgent object (`fdc3`). * - * Constants representing the errors that can be encountered when calling the `findIntent`, - * `findIntentsByContext`, `raiseIntent` or `raiseIntentForContext` methods on the - * DesktopAgent (`fdc3`). + * Constants representing the errors that can be encountered when calling the + * `addIntentListener`, `findIntent`, `findIntentsByContext`, `raiseIntent` or + * `raiseIntentForContext` methods on the DesktopAgent (`fdc3`). */ export type RaiseIntentResultErrorMessage = | 'IntentHandlerRejected' @@ -6489,6 +6491,7 @@ const typeMap: any = { 'ErrorOnLaunch', 'IntentDeliveryFailed', 'IntentHandlerRejected', + 'IntentListenerConflict', 'InvalidArguments', 'MalformedContext', 'MalformedMessage', @@ -6538,6 +6541,7 @@ const typeMap: any = { 'AgentDisconnected', 'DesktopAgentNotFound', 'IntentDeliveryFailed', + 'IntentListenerConflict', 'InvalidArguments', 'MalformedContext', 'MalformedMessage', diff --git a/packages/fdc3-schema/package.json b/packages/fdc3-schema/package.json index 6fc4978a9..e7e73f5ce 100644 --- a/packages/fdc3-schema/package.json +++ b/packages/fdc3-schema/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3-schema", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { diff --git a/packages/fdc3-security/README.md b/packages/fdc3-security/README.md new file mode 100644 index 000000000..e32101261 --- /dev/null +++ b/packages/fdc3-security/README.md @@ -0,0 +1,210 @@ +# FDC3 Security + +TODO: Update this!!! + +This is a minimal proof-of-concept for FDC3 Security, as proposed by the FDC3 Identity and Security Working Group. + +This project currently provides a Javascript implementation of FDC3 Security as a "decorator" for the FDC3 DesktopAgent API, which provides the following functionality: + +1. Signing of FDC3 Messages (e.g. Broadcast), which allows receipients of broadcasts to verify the sender. +2. Encrypted FDC3 Private Channels, which allows for secure communication between two or more FDC3 apps privately without observation of messages from either other apps or the desktop agent. + +## Signing Of FDC3 Messages + +When two applications are using the FDC3 Security module, revceivers can check the authenticity of sender's messages by inspecting the `ContextMetadata` object when their `ContextHandler` is called. See: [ContextHandler](https://fdc3.finos.org/docs/api/ref/Types#contexthandler) + +FDC3 Security adds the `authenticity` key to the `ContextMetadata` like so: + +``` +{ + "authenticity": { + "verified":true, // set to true if the broadcast was signed and had a signature that could be verified + "valid":true, // set to true if the public key was able to verify the signature + "publicKeyUrl":"/sp1-public-key" // the URL of the public key used to verify the signature, as given by the sender + } +} +``` + +The process works in the following way: + +```mermaid +sequenceDiagram + participant AppA + participant AppASecurityLayer + participant DesktopAgent + participant AppBSecurityLayer + participant AppBIntentHandler + AppA->>AppASecurityLayer: View Orders Intent containing Contact Context + note right of AppASecurityLayer: Sign Context with AppA private key + AppASecurityLayer->>DesktopAgent: Send Intent with Signed Context + DesktopAgent->>AppBSecurityLayer: Deliver Intent + note right of AppBSecurityLayer: Verify signature with AppA public key + AppBSecurityLayer->>AppBIntentHandler: Deliver Intent with Contact Context and AppA metadata +``` + +## Encrypted FDC3 Private Channels + +When two applications are using the FDC3 Security module, they can create a private channel between them, which is encrypted with a symmetric key. This allows for secure communication between two or more FDC3 apps privately without observation of messages from either other apps or the desktop agent. + +In order to broadcast encrypted messages, the sender (A) creates the private channel and then calls the following function: + +```javascript +privateChannel.setChannelEncryption(true) +``` + +This instructs the FDC3 Security module to create a symmetric key for the channel and use it to encrypt all messages sent on that channel. + +When a recipient (B) receives an encrypted message on a private channel, it broadcasts a special FDC3 Context object of type `fdc3.security.symmetricKey.request` on the private channel, signed with its own private key. + +A handles this context object by setting up a listener like so: + +```javascript +privateChannel.addContextListener(SYMMETRIC_KEY_REQUEST_CONTEXT, async (_context: Context, meta: ContextMetadataWithAuthenticity | undefined) => { + if (meta?.authenticity?.verified && meta?.authenticity?.valid) { + // inspect the meta.authenticity.publicKeyUrl to ensure you want to communicate with this sender, + // before calling: + if (trustThisParty(meta.authenticity.publicKeyUrl)) { + pc.broadcastKey(meta.authenticity.publicKeyUrl) + } + } +}) +``` + +When A calls `pc.broadcastKey`, it responds by publishing the symmetric key encrypted with the public key of (B), allowing B (and only B) to decrypt the symmetric key and use it to decrypt anything else broadcast on the channel. + +This is summarised here: + +```mermaid +sequenceDiagram + participant AppA + participant AppB + AppA->>AppB: View Orders Intent + note right of AppB: Generate random symmetric key K + note right of AppB: Create private channel C + AppB->>AppA: Intent Reply: Private Channel C + note left of AppA: Subscribe to Channel C + note right of AppB: I have a new order! + note right of AppB: Encrypt Order Context with K and sign it with AppB private key + AppB->>AppA: Broadcast Encrypted Context + note left of AppA: Context is encrypted! + note left of AppA: Verify signature of context with AppB public key + note left of AppA: Signature valid, I need the channel key + AppA->>AppB: Key Request Intent for Channel C + note right of AppB: Wrap K with AppA public key + AppB->>AppA: K wrapped in AppA public key + note left of AppA: Unwrap with AppA private key + note left of AppA: I now have K, I can decrypt encrypted contexts on this channel :) + note left of AppA: Decrypt encrypted context with K + note right of AppB: I have a new order! + note right of AppB: Encrypt Order Context with K and sign it with AppB private key + AppB->>AppA: Broadcast Encrypted Context + note left of AppA: Context is encrypted! + note left of AppA: Verify signature of context with AppB public key + note left of AppA: Decrypt encrypted context with K +``` + +## Installation + +### Build And Test The Code + +From the `javascript/fdc3-security` directory, run: + +``` +npm install +npm run test # Runs Cucumber tests and coverage +npm build +``` + +This will build an ES6 module in the `dist` directory. + +### Running The Demos + +Example javascript code is included in this project in the `/javascript/fdc3-security/demo` directory. This includes a simple example of two FDC3 apps communicating with each other using the FDC3 Security module: + +- `sp1`: Listens for the `SecretComms` intent to be raised, returning a Private Channel back to raisers and then broadcasting encrypted messages on that channel. +- `sp2`: Raises the `SecretComms` intent, listens to the private channel and outputs messages in the browser window that it receives. + +In order to try this out: + +1. Start the demo applications by running + +``` +npm install +npm run dev +``` + +From the `javascript/fdc-security` directory. This starts a server at `localhost:8095` which serves the demo applications. + +2. Install the `javascript/fdc3-security/demo/appd.json` directory into your own desktop agent (I used `finsemble-seed` and `fdc3-for-the-web`). + +3. Start both apps sp1 and sp2 app and press the button in sp2. + +4. sp2's output looks like this: + +``` +# here, it raises the SecretComms intent to sp1 and it's resolved +Got resolution: SecretComms from [object Object] + +# sp1 returns a private cahnnel +Got result: private Private-Channel-Id-d0ee4085-3210-4786-ab05-fb6f8bd76000 + +# SP1 Sends a demo.counter message on the private channel, but it's encrypted. After this step, sp2 asks for the channel key. +Private Channel Message ctx={"type":"demo.counter","__encrypted":{"algorithm":{"name":"AES-GCM","iv":"1bhVVRhuKbd42CNd"},"encoded":"IKQORuRYcEIouyMH+l3GO1MPwPOFvLI1ZKnF3hwpdjxnbhxNLQknEZ8MfX0VZuyUkgxquBVfpddOjI9j9+jXpFyN+43LaiZXzFp0lXEQIshXxADTS4vOF7rC0df1Wwmn/7aW4jTcLaMKeJSkd9j88ajh"}} meta={"source":{"appId":"sp1","instanceId":"fdc3-instanceId-sp1=4424741e-1511-438c-9ffe-1eb8c583f05f"},"authenticity":{"verified":true,"valid":true,"publicKeyUrl":"/sp1-public-key"},"encryption":"cant_decrypt"} + +# By the time SP2 sends the second message, SP1 has the channel key, and is able to decrypt the contents of the context (containing id and original fields). You can also see the source of the message is sp1, and the authenticity is verified and valid. +Private Channel Message ctx={"type":"demo.counter","id":{"bc":2},"original":{"type":"fdc3.instrument","id":{"isin":"Abc123"}}} meta={"source":{"appId":"sp1","instanceId":"fdc3-instanceId-sp1=4424741e-1511-438c-9ffe-1eb8c583f05f"},"authenticity":{"verified":true,"valid":true,"publicKeyUrl":"/sp1-public-key"},"encryption":"decrypted"} + +``` + + + +### Configuring The Decorator + +As described above, the FDC3 Security module is a decorator for the FDC3 DesktopAgent API. In order to use it, you need to import the module and then wrap the `DesktopAgent` with the `SecuredDesktopAgent` like so: + +```javascript +const securedDa = new SecuredDesktopAgent(window.fdc3, signingFunction, unwrappingFunction, resolver) +```` + +The parameters are as follows: + +- `d` Original platform desktop agent instance (perhaps provided by window.fdc3) +- `sign` A function that signs a message using a private key. Can be done on the server side if that's what you want. +- `unwrapKey` A function used to unwrap a symmetric key encrypted with a public key. Again, since it uses a private key, it can be done server side although the demos do client side unwrapping. +- `resolver` A function that allows the agent to resolve a public key URL into a JSON Web Key Set (JWKS) (JsonWebKey[]). + +## Roadmap + +1. Java implementation of FDC3 Security to be added. +2. Publication into NPM. +3. Fix the remaining cucumber tests. +4. Heaed for 100% code coverage. +5. OSFF Demo at end of September. + +## Contributing + +1. Fork it () +2. Create your feature branch (`git checkout -b feature/fooBar`) +3. Read our [contribution guidelines](.github/CONTRIBUTING.md) and [Community Code of Conduct](https://www.finos.org/code-of-conduct) +4. Commit your changes (`git commit -am 'Add some fooBar'`) +5. Push to the branch (`git push origin feature/fooBar`) +6. Create a new Pull Request + +## Development Envrionment + +It's expected that if you contribute functionality to this project, it is well tested. Please implement cucumber tests to make sure your code is well covered. You can run the `javascript/fdc3-security` tests with: + +``` +npm run test +``` + +Code coverage is produced in the `coverage` directory and an HTML report is generated in `coverage/lcov-report/index.html`. +Cucumber test results are produced in the `cucumber-report.html` file. + +## License + +Copyright 2024 FINOS + +Distributed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0). + +SPDX-License-Identifier: [Apache-2.0](https://spdx.org/licenses/Apache-2.0) diff --git a/packages/fdc3-security/cucumber.yml b/packages/fdc3-security/cucumber.yml new file mode 100644 index 000000000..2572a0c7b --- /dev/null +++ b/packages/fdc3-security/cucumber.yml @@ -0,0 +1,15 @@ +default: + format: + - html:cucumber-report.html + - "@cucumber/pretty-formatter" + - junit:test-results.xml + paths: + - test/features/*.feature + require: + - test/step-definitions/*.steps.ts + - test/support/*.ts + - test/world/index.ts + requireModule: + - ts-node/register + tags: "not @failing" + diff --git a/packages/testing/package.json b/packages/fdc3-security/package.json similarity index 69% rename from packages/testing/package.json rename to packages/fdc3-security/package.json index 1d0411d86..db4a4bfe2 100644 --- a/packages/testing/package.json +++ b/packages/fdc3-security/package.json @@ -1,6 +1,6 @@ { - "name": "@finos/testing", - "version": "2.2.0", + "name": "@finos/fdc3-security", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { @@ -11,36 +11,41 @@ "tag": "latest" }, "license": "Apache-2.0", - "private": true, + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", "files": [ "dist" ], - "main": "dist/src/index.js", - "types": "dist/src/index.d.ts", "scripts": { "build": "tsc --module es2022", - "clean": "rimraf dist", - "test": "tsc" + "test": "tsc && nyc --reporter=lcov --reporter=text --reporter json cucumber-js", + "clean": "rimraf dist cucumber-report.html coverage .nyc_output node_modules test-results.xml", + "lint": "eslint src/" }, "dependencies": { + "@finos/fdc3-standard": "2.3.0", + "@finos/fdc3-context": "2.3.0" + }, + "devDependencies": { + "json-canonicalize": "^1.0.6", "@cucumber/cucumber": "10.3.1", "@cucumber/html-formatter": "11.0.4", "@cucumber/pretty-formatter": "1.0.1", - "@finos/fdc3-standard": "2.2.0", + "@eslint/js": "^9.19.0", + "@finos/fdc3-testing": "2.3.0", "@types/expect": "24.3.0", "@types/lodash": "4.14.167", "@types/node": "^20.16.11", "@types/uuid": "^10.0.0", "@typescript-eslint/eslint-plugin": "^8.18.2", "@typescript-eslint/parser": "^8.18.2", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", "cucumber-console-formatter": "1.0.0", "eslint": "^9.32.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-prettier": "3.3.1", "expect": "^29.7.0", + "globals": "^15.14.0", "is-ci": "2.0.0", "jsonpath-plus": "^10.1.0", "nyc": "17.1.0", @@ -49,6 +54,7 @@ "ts-node": "^10.9.2", "tsx": "^4.19.1", "typescript": "^5.6.3", + "typescript-eslint": "^8.17.0", "uuid": "^9.0.1" } -} +} \ No newline at end of file diff --git a/packages/fdc3-security/src/PrivateFDC3Security.ts b/packages/fdc3-security/src/PrivateFDC3Security.ts new file mode 100644 index 000000000..c41a2e2a1 --- /dev/null +++ b/packages/fdc3-security/src/PrivateFDC3Security.ts @@ -0,0 +1,31 @@ +import { Context, SymmetricKeyResponse } from '@finos/fdc3-context'; +import { JSONWebEncryption, JSONWebSignature, PublicFDC3Security } from './PublicFDC3Security'; + +/** + * This interface extends the PublicFDC3Security interface and provides features for apps to implement + * signing / encryption functionality. This is written + * as an interface to give applications a choice of implementation. + * + * Ideally, it should not be run on the web/client-side because this in an untrusted environment. + */ +export interface PrivateFDC3Security extends PublicFDC3Security { + + encryptSymmetric(ctx: Context, symmetricKey: JsonWebKey): Promise; + decryptSymmetric(encrypted: JSONWebEncryption, symmetricKey: JsonWebKey): Promise; + + encryptPublicKey(ctx: Context, publicKeyUrl: string): Promise; + decryptPrivateKey(encrypted: JSONWebEncryption): Promise; + + sign(ctx: Context, intent: string | null, channelId: string | null): Promise; + + createSymmetricKey(): Promise; + + wrapKey(symmetricKey: JsonWebKey, publicKeyUrl: string): Promise; + + unwrapKey(ctx: SymmetricKeyResponse): Promise; + + /** + * Create a JWT token with the given audience and subject. + */ + createJWTToken(aud: string, sub: string): Promise; +} diff --git a/packages/fdc3-security/src/PublicFDC3Security.ts b/packages/fdc3-security/src/PublicFDC3Security.ts new file mode 100644 index 000000000..9e2d21660 --- /dev/null +++ b/packages/fdc3-security/src/PublicFDC3Security.ts @@ -0,0 +1,53 @@ +import { Context } from '@finos/fdc3-context'; + +export type JSONWebSignature = string; // compact form, with detached payload + +export type JSONWebEncryption = string; // compact form + +export type SignedMessageAuthenticity = { + signed: true; // means a correct signature was provided + valid: boolean; // true if the signature is valid + trusted: boolean; // true if the public key is from a trusted source + publicKeyUrl: string; +}; + +export type UnsignedMessageAuthenticity = { + signed: false; // signature not provided or badly formed + error?: string; // if signed is false, this may contain an error message +}; + +/** + * Standard JWT fields, made required for FDC3 JWT tokens + */ +export interface FDC3JWTPayload extends Record { + iss: string; // Issuer + sub: string; // Subject + aud: string; // Audience + jti: string; // JWT ID + iat: number; // Issued At + exp: number; // Expiration +} + +export type MessageAuthenticity = SignedMessageAuthenticity | UnsignedMessageAuthenticity; + +/** + * This interface provides features that could be included on the client-side + * for checking tokens. This is written + * as an interface to give applications a choice of implementation + * (e.g. it could call server-side apis). + */ +export interface PublicFDC3Security { + check( + sig: JSONWebSignature, + ctx: Context, + intent: string | null, + channelId: string | null + ): Promise; + + getPublicKeys(): JsonWebKey[]; + + /** + * Verify a JWT token and return the payload. If the token is not valid, an error is thrown. + */ + verifyJWTToken(token: string): Promise; +} diff --git a/packages/fdc3-security/src/delegates/AbstractChannelDelegate.ts b/packages/fdc3-security/src/delegates/AbstractChannelDelegate.ts new file mode 100644 index 000000000..646114d17 --- /dev/null +++ b/packages/fdc3-security/src/delegates/AbstractChannelDelegate.ts @@ -0,0 +1,57 @@ +import { Channel, DisplayMetadata, EventHandler, Listener, PrivateChannel } from '@finos/fdc3-standard'; +import { Context } from '@finos/fdc3-context'; + +/** + * Wraps a standard FDC3 Channel or PrivateChannel. + */ +export abstract class AbstractChannelDelegate implements PrivateChannel { + readonly delegate: PrivateChannel; + id: string; + type: 'user' | 'app' | 'private'; + displayMetadata?: DisplayMetadata | undefined; + + constructor(c: Channel | PrivateChannel) { + this.delegate = c as PrivateChannel; + this.id = c.id; + this.type = c.type; + this.displayMetadata = c.displayMetadata; + } + + abstract wrapContext(ctx: Context): Promise; + + onAddContextListener(handler: (contextType?: string | undefined) => void): Listener { + return this.delegate.onAddContextListener(handler); + } + + onUnsubscribe(handler: (contextType?: string | undefined) => void): Listener { + return this.delegate.onUnsubscribe(handler); + } + + onDisconnect(handler: () => void): Listener { + return this.delegate.onDisconnect(handler); + } + + addEventListener( + type: 'disconnect' | 'unsubscribe' | 'addContextListener', + listener: EventHandler + ): Promise { + return this.delegate.addEventListener(type, listener); + } + + disconnect(): Promise { + return this.delegate.disconnect(); + } + + async broadcast(context: Context): Promise { + return this.delegate.broadcast(await this.wrapContext(context)); + } + + getCurrentContext(contextType?: string | undefined): Promise { + return this.delegate.getCurrentContext(contextType); + } + + addContextListener(a1: any, a2?: any): Promise { + console.log('Adding context listener'); + return this.delegate.addContextListener(a1, a2); + } +} diff --git a/packages/fdc3-security/src/delegates/AbstractDesktopAgentDelegate.ts b/packages/fdc3-security/src/delegates/AbstractDesktopAgentDelegate.ts new file mode 100644 index 000000000..6b2fd425a --- /dev/null +++ b/packages/fdc3-security/src/delegates/AbstractDesktopAgentDelegate.ts @@ -0,0 +1,125 @@ +import { + AppIdentifier, + AppIntent, + AppMetadata, + Channel, + DesktopAgent, + EventHandler, + ImplementationMetadata, + IntentHandler, + IntentResolution, + IntentResult, + Listener, + PrivateChannel, +} from '@finos/fdc3-standard'; +import { Context } from '@finos/fdc3-context'; +import { IntentResolutionDelegate } from './IntentResolutionDelegate'; + +/** + * This class implements a simple delegate, forwarding all + * behaviour to the 'd' member. + */ +export abstract class AbstractDesktopAgentDelegate implements DesktopAgent { + readonly delegate: DesktopAgent; + + constructor(d: DesktopAgent) { + this.delegate = d; + } + + abstract wrapChannel(c: Channel): Channel; + + wrapIntentResolution(ir: IntentResolution): IntentResolution { + return new IntentResolutionDelegate(this, ir); + } + + abstract wrapIntentResult(r: IntentResult): IntentResult; + + addContextListener(context: any, handler?: any): Promise { + return this.delegate.addContextListener(context as any, handler); + } + + open(a1: any, a2?: any): Promise { + return this.delegate.open(a1, a2); + } + + findIntent(intent: string, context?: Context | undefined, resultType?: string | undefined): Promise { + return this.delegate.findIntent(intent, context, resultType); + } + + findIntentsByContext(context: Context, resultType?: string | undefined): Promise { + return this.delegate.findIntentsByContext(context, resultType); + } + + findInstances(app: AppIdentifier): Promise { + return this.delegate.findInstances(app); + } + + broadcast(context: Context): Promise { + return this.delegate.broadcast(context); + } + + raiseIntent(intent: string, context: Context, a3?: any): Promise { + return this.delegate.raiseIntent(intent, context, a3).then(ir => this.wrapIntentResolution(ir)); + } + + raiseIntentForContext(context: Context, a2?: any): Promise { + return this.delegate.raiseIntentForContext(context, a2).then(ir => this.wrapIntentResolution(ir)); + } + + addIntentListener(intent: string, handler: IntentHandler): Promise { + return this.delegate.addIntentListener(intent, handler); + } + + async getUserChannels(): Promise { + const channels = await this.delegate.getUserChannels(); + return channels.map(c => this.wrapChannel(c)); + } + + joinUserChannel(channelId: string): Promise { + return this.delegate.joinUserChannel(channelId); + } + + async getOrCreateChannel(channelId: string): Promise { + const ch = await this.delegate.getOrCreateChannel(channelId); + return this.wrapChannel(ch); + } + + async createPrivateChannel(): Promise { + const ch = await this.delegate.createPrivateChannel(); + return this.wrapChannel(ch) as PrivateChannel; + } + + async getCurrentChannel(): Promise { + const ch = await this.delegate.getCurrentChannel(); + if (ch) { + return this.wrapChannel(ch); + } else { + return null; + } + } + + leaveCurrentChannel(): Promise { + return this.delegate.leaveCurrentChannel(); + } + + getInfo(): Promise { + return this.delegate.getInfo(); + } + + getAppMetadata(app: AppIdentifier): Promise { + return this.delegate.getAppMetadata(app); + } + + async getSystemChannels(): Promise { + const channels = await this.delegate.getSystemChannels(); + return channels.map(c => this.wrapChannel(c)); + } + + joinChannel(channelId: string): Promise { + return this.delegate.joinChannel(channelId); + } + + addEventListener(type: 'userChannelChanged' | null, listener: EventHandler): Promise { + return this.delegate.addEventListener(type, listener); + } +} diff --git a/packages/fdc3-security/src/delegates/IntentResolutionDelegate.ts b/packages/fdc3-security/src/delegates/IntentResolutionDelegate.ts new file mode 100644 index 000000000..c6aa8191d --- /dev/null +++ b/packages/fdc3-security/src/delegates/IntentResolutionDelegate.ts @@ -0,0 +1,21 @@ +import { AppIdentifier, Intent, IntentResolution, IntentResult } from '@finos/fdc3-standard'; +import { AbstractDesktopAgentDelegate } from './AbstractDesktopAgentDelegate'; + +export class IntentResolutionDelegate implements IntentResolution { + private readonly s: AbstractDesktopAgentDelegate; + private readonly delegate: IntentResolution; + + source: AppIdentifier; + intent: Intent; + + constructor(s: AbstractDesktopAgentDelegate, d: IntentResolution) { + this.source = d.source; + this.intent = d.intent; + this.s = s; + this.delegate = d; + } + + getResult(): Promise { + return this.delegate.getResult().then(r => this.s.wrapIntentResult(r)); + } +} diff --git a/packages/fdc3-security/src/delegates/SecuredDesktopAgentDelegate.ts b/packages/fdc3-security/src/delegates/SecuredDesktopAgentDelegate.ts new file mode 100644 index 000000000..a6f5ec680 --- /dev/null +++ b/packages/fdc3-security/src/delegates/SecuredDesktopAgentDelegate.ts @@ -0,0 +1,89 @@ +import { + DesktopAgent, + IntentResolution, + Listener, + ContextHandler, + Channel, + IntentHandler, + PrivateChannel, + IntentResult, +} from '@finos/fdc3-standard'; +import { Context } from '@finos/fdc3-context'; +import { AbstractDesktopAgentDelegate } from '../delegates/AbstractDesktopAgentDelegate'; +import { SigningChannelDelegate } from '../signing/SigningChannelDelegate'; +import { EncryptingPrivateChannel } from '../encryption/EncryptingPrivateChannel'; +import { EncryptingChannelDelegate } from '../encryption/EncryptingChannelDelegate'; +import { signedContext, signingIntentHandler, signingContextHandler } from '../signing/SigningSupport'; +import { PrivateFDC3Security } from '../PrivateFDC3Security'; + +/** + * This implementation adds signing functionality to any broadcast context + * and allows for the checking of signatures on items returned. + */ +export class SecuredDesktopAgentDelegate extends AbstractDesktopAgentDelegate { + private readonly fdc3Security; + + constructor(d: DesktopAgent, fdc3Security: PrivateFDC3Security) { + super(d); + this.fdc3Security = fdc3Security; + } + + wrapChannel(c: Channel): Channel { + if ((c as any).delegate) { + // channel already wrapped + return c; + } else if (c.type == 'app' || c.type == 'user') { + return new SigningChannelDelegate(c, this.fdc3Security); + } else if (c.type == 'private') { + // private channels both sign and encrypt + const channel = c as PrivateChannel; + const signingChannel = new SigningChannelDelegate(channel, this.fdc3Security); + const encryptingChannel = new EncryptingChannelDelegate(signingChannel, this.fdc3Security); + return encryptingChannel; + } else { + /* istanbul ignore next */ throw new Error('Unknown Channel Type'); + } + } + + wrapIntentResult(r: IntentResult): IntentResult { + if (r == undefined) { + return undefined; + } else if (r.type == 'user' || r.type == 'private' || r.type == 'app') { + return this.wrapChannel(r as Channel); + } else { + // just return context as-is + return r; + } + } + + broadcast(context: Context): Promise { + return signedContext(this.fdc3Security, context, null, null).then(sc => super.broadcast(sc)); + } + + raiseIntent(intentName: string, context: Context, a3?: any): Promise { + return signedContext(this.fdc3Security, context, intentName, null).then(sc => + super.raiseIntent(intentName, sc, a3) + ); + } + + raiseIntentForContext(context: Context, a2?: any): Promise { + return signedContext(this.fdc3Security, context, null, null).then(sc => super.raiseIntentForContext(sc, a2)); + } + + addContextListener(context: any, handler?: any): Promise { + const theHandler: ContextHandler = handler ? handler : (context as ContextHandler); + const theContextType: string | null = context && handler ? (context as string) : null; + return super.addContextListener( + theContextType, + signingContextHandler(this.fdc3Security, theHandler, () => this.getCurrentChannel()) + ); + } + + addIntentListener(intent: string, handler: IntentHandler): Promise { + return super.addIntentListener(intent, signingIntentHandler(this.fdc3Security, handler, intent)); + } + + createPrivateChannel(): Promise { + return super.createPrivateChannel() as Promise; + } +} diff --git a/packages/fdc3-security/src/encryption/EncryptingChannelDelegate.ts b/packages/fdc3-security/src/encryption/EncryptingChannelDelegate.ts new file mode 100644 index 000000000..af9df8b92 --- /dev/null +++ b/packages/fdc3-security/src/encryption/EncryptingChannelDelegate.ts @@ -0,0 +1,128 @@ +import { ContextHandler, ContextMetadata, Listener, PrivateChannel } from '@finos/fdc3-standard'; +import { Context, SymmetricKeyRequest } from '@finos/fdc3-context'; +import { JSONWebEncryption } from '../PublicFDC3Security'; +import { PrivateFDC3Security } from '../PrivateFDC3Security'; +import { EncryptingPrivateChannel } from './EncryptingPrivateChannel'; +import { AbstractChannelDelegate } from '../delegates/AbstractChannelDelegate'; +import { signedContext } from '../signing/SigningSupport'; + +/** + * TODO: this should be moved into Julianna's code. + */ +export type ContextMetadataWithEncryptionStatus = ContextMetadata & { + encryption?: 'cant_decrypt' | 'not_encrypted' | 'decrypted'; +}; + +/** + * Adds encryption support for private channels. A wrapped, symmetric key is sent via the private channel, + * and the unwrapKey method is used to unwrap it, allowing further decoding of messages. + * + * Some considerations: + * + * 1. A symmetric key is only created once for the channel, and is not changeable after that + * 2. Whomever calls setChannelEncryption(true) creates the symmetric key and is the keyCreator. + * 3. Users of the channel will request an encryption key if they can't decrypt messages. + */ +export class EncryptingChannelDelegate extends AbstractChannelDelegate implements EncryptingPrivateChannel { + private symmetricKey: JsonWebKey | null = null; + private typeFilter: null | ((type: string) => boolean) = null; + private readonly fdc3Security: PrivateFDC3Security; + + requestListener: Listener | null = null; + responseListener: Listener | null = null; + + constructor(d: PrivateChannel, fdc3Security: PrivateFDC3Security) { + super(d); + this.fdc3Security = fdc3Security; + } + + isEncrypting(type: string): boolean { + return this.typeFilter != null && this.typeFilter(type); + } + + async setChannelEncryption(filter: null | ((type: string) => boolean)): Promise { + this.typeFilter = filter; + } + + async broadcastKey(publicKeyUrl: string): Promise { + if (this.symmetricKey) { + const ctx = await this.fdc3Security.wrapKey(this.symmetricKey, publicKeyUrl); + const signedCtx = await signedContext(this.fdc3Security, ctx, null, this.id); + return this.delegate.broadcast(signedCtx); + } else { + throw new Error('Channel not set to encrypting'); + } + } + + async setSymmetricKey(key: JsonWebKey): Promise { + console.log('setting symmetric key', key); + this.symmetricKey = key; + } + + async getSymmetricKey(): Promise { + console.log('getting symmetric key', this.symmetricKey); + return this.symmetricKey; + } + + async requestEncryptionKey(): Promise { + const request = { + type: 'fdc3.security.symmetricKey.request', + } as SymmetricKeyRequest; + const signedRequest = await signedContext(this.fdc3Security, request, null, this.id); + return this.broadcast(signedRequest); + } + + async encryptIfAvailable(context: Context): Promise { + if (this.isEncrypting(context.type)) { + const jwe = await this.fdc3Security.encryptSymmetric(context, this.symmetricKey!!); + const out = { + type: context.type, + __encrypted: jwe, + }; + return out; + } else { + return context; + } + } + + async wrapContext(ctx: Context): Promise { + const encryptedContext = await this.encryptIfAvailable(ctx); + return encryptedContext; + } + + addContextListener(context: any, handler?: any): Promise { + const theHandler: ContextHandler = handler ? handler : (context as ContextHandler); + const theContextType: string | null = context && handler ? (context as string) : null; + return super.addContextListener(theContextType, this.decryptingContextHandler(theHandler)); + } + + decryptingContextHandler(ch: ContextHandler): ContextHandler { + const out = async (context: Context, meta: ContextMetadataWithEncryptionStatus) => { + const newMeta: ContextMetadataWithEncryptionStatus = { + ...meta, + }; + + console.log('Decrypting context handler called'); + + delete newMeta['encryption']; + + const encrypted = context['__encrypted'] as JSONWebEncryption; + + if (encrypted) { + if (this.symmetricKey) { + context = await this.fdc3Security.decryptSymmetric(encrypted, this.symmetricKey); + newMeta['encryption'] = 'decrypted'; + } else { + newMeta['encryption'] = 'cant_decrypt'; + this.requestEncryptionKey(); + } + } else { + newMeta['encryption'] = 'not_encrypted'; + } + + return ch(context, newMeta); + }; + + return out as ContextHandler; + } +} diff --git a/packages/fdc3-security/src/encryption/EncryptingPrivateChannel.ts b/packages/fdc3-security/src/encryption/EncryptingPrivateChannel.ts new file mode 100644 index 000000000..4e689bd4f --- /dev/null +++ b/packages/fdc3-security/src/encryption/EncryptingPrivateChannel.ts @@ -0,0 +1,28 @@ +import { PrivateChannel } from '@finos/fdc3-standard'; + +export interface EncryptingPrivateChannel extends PrivateChannel { + /** + * Returns true if this channel is set to encrypt with setChannelEncryption() + */ + isEncrypting(type: string): boolean; + + /** + * Call this method after creation to ensure that further communications on + * the channel are encrypted for the filtered types. + */ + setChannelEncryption(filter: null | ((type: string) => boolean)): Promise; + + /** + * Broadcasts the channel's symmetric key, wrapped in the provided public key of + * a receiving app. + */ + broadcastKey(publicKeyUrl: string): Promise; + + getSymmetricKey(): Promise; + + /** + * Sets the symmetric key used by this channel for encrypting or decrypting + * messages. + */ + setSymmetricKey(key: JsonWebKey): Promise; +} diff --git a/packages/fdc3-security/src/encryption/SymmetricKeyContextListener.ts b/packages/fdc3-security/src/encryption/SymmetricKeyContextListener.ts new file mode 100644 index 000000000..1b4f4b13d --- /dev/null +++ b/packages/fdc3-security/src/encryption/SymmetricKeyContextListener.ts @@ -0,0 +1,69 @@ +import { Context, SymmetricKeyResponse } from '@finos/fdc3-context'; +import { EncryptingPrivateChannel } from './EncryptingPrivateChannel'; +import { PrivateFDC3Security } from '../PrivateFDC3Security'; +import { ContextMetadata, Listener } from '@finos/fdc3-standard'; +import { checkSignature, signedContext } from '../signing/SigningSupport'; + +/** + * Used for agents that send the symmetric key when asked for it. + */ +export async function createSymmetricKeyRequestContextListener( + fdc3Security: PrivateFDC3Security, + channel: EncryptingPrivateChannel +): Promise { + // create the key if it doesn't exist + if ((await channel.getSymmetricKey()) == null) { + const key = await fdc3Security.createSymmetricKey(); + await channel.setSymmetricKey(key); + } + + const listener = channel.addContextListener( + 'fdc3.security.symmetricKey.request', + async (skr1: Context, skrMeta: ContextMetadata | undefined) => { + console.log('symmetric key request received', skr1, skrMeta); + const { meta } = await checkSignature(fdc3Security, skrMeta, skr1, null, channel.id); + const ma = meta?.authenticity; + + if (ma?.signed && ma.trusted && ma.valid) { + const theKey = await channel.getSymmetricKey(); + if (theKey) { + const wrappedKey = await fdc3Security.wrapKey(theKey, ma.publicKeyUrl); + const signedKey = await signedContext(fdc3Security, wrappedKey, null, channel.id); + return channel.broadcast(signedKey); + } else { + throw new Error('Symmetric key not set'); + } + } + } + ); + + return listener; +} + +/** + * Call this for agents that need to request and receive the symmetric key. + */ +export function createSymmetricKeyResponseContextListener( + fdc3Security: PrivateFDC3Security, + channel: EncryptingPrivateChannel +): Promise { + const listener = channel.addContextListener( + 'fdc3.security.symmetricKey.response', + async (skr: Context, skrMeta: ContextMetadata | undefined) => { + const { context, meta } = await checkSignature(fdc3Security, skrMeta, skr, null, channel.id); + const ma = meta?.authenticity; + + if (ma?.signed && ma.trusted && ma.valid) { + const skr = context as SymmetricKeyResponse; + const key = await fdc3Security.unwrapKey(skr); + if (key) { + channel.setSymmetricKey(key); + } + } else { + throw new Error('Symmetric key response not signed and trusted'); + } + } + ); + + return listener; +} diff --git a/packages/fdc3-security/src/index.ts b/packages/fdc3-security/src/index.ts new file mode 100644 index 000000000..013ddabd4 --- /dev/null +++ b/packages/fdc3-security/src/index.ts @@ -0,0 +1,39 @@ +import { signedContext, signingContextHandler, signingIntentHandler, checkSignature } from './signing/SigningSupport'; +import { EncryptingPrivateChannel } from './encryption/EncryptingPrivateChannel'; +import { SecuredDesktopAgentDelegate } from './delegates/SecuredDesktopAgentDelegate'; +import { + MessageAuthenticity, + SignedMessageAuthenticity, + UnsignedMessageAuthenticity, + PublicFDC3Security, + JSONWebEncryption, + JSONWebSignature, + FDC3JWTPayload, +} from './PublicFDC3Security'; +import { PrivateFDC3Security } from './PrivateFDC3Security'; +import { EncryptingChannelDelegate } from './encryption/EncryptingChannelDelegate'; +import { SigningChannelDelegate } from './signing/SigningChannelDelegate'; +import { + createSymmetricKeyRequestContextListener, + createSymmetricKeyResponseContextListener, +} from './encryption/SymmetricKeyContextListener'; +export { + type EncryptingPrivateChannel, + type MessageAuthenticity, + type SignedMessageAuthenticity, + type UnsignedMessageAuthenticity, + type JSONWebEncryption, + type JSONWebSignature, + type PublicFDC3Security, + type PrivateFDC3Security, + type FDC3JWTPayload, + SecuredDesktopAgentDelegate, + EncryptingChannelDelegate, + SigningChannelDelegate, + checkSignature, + signedContext, + signingContextHandler, + signingIntentHandler, + createSymmetricKeyRequestContextListener, + createSymmetricKeyResponseContextListener, +}; diff --git a/packages/fdc3-security/src/signing/SigningChannelDelegate.ts b/packages/fdc3-security/src/signing/SigningChannelDelegate.ts new file mode 100644 index 000000000..dbfd0cbd2 --- /dev/null +++ b/packages/fdc3-security/src/signing/SigningChannelDelegate.ts @@ -0,0 +1,35 @@ +import { Channel, ContextHandler, Listener, PrivateChannel } from '@finos/fdc3-standard'; +import { Context } from '@finos/fdc3-context'; +import { PrivateFDC3Security } from '../PrivateFDC3Security'; +import { signingContextHandler } from './SigningSupport'; +import { AbstractChannelDelegate } from '../delegates/AbstractChannelDelegate'; + +/** + * Adds signing / checking support to any channel being wrapped. + */ +export class SigningChannelDelegate extends AbstractChannelDelegate { + private readonly fdc3Security: PrivateFDC3Security; + + constructor(d: Channel | PrivateChannel, fdc3Security: PrivateFDC3Security) { + super(d); + this.fdc3Security = fdc3Security; + } + + async wrapContext(ctx: Context): Promise { + const jws = await this.fdc3Security.sign(ctx, null, this.id); + const out = { + ...ctx, + __signature: jws, + }; + return out; + } + + addContextListener(context: any, handler?: any): Promise { + const theHandler: ContextHandler = handler ? handler : (context as ContextHandler); + const theContextType: string | null = context && handler ? (context as string) : null; + return super.addContextListener( + theContextType, + signingContextHandler(this.fdc3Security, theHandler, () => Promise.resolve(this.delegate)) + ); + } +} diff --git a/packages/fdc3-security/src/signing/SigningSupport.ts b/packages/fdc3-security/src/signing/SigningSupport.ts new file mode 100644 index 000000000..1984c1abf --- /dev/null +++ b/packages/fdc3-security/src/signing/SigningSupport.ts @@ -0,0 +1,111 @@ +import { Channel, ContextHandler, ContextMetadata, IntentHandler, IntentResult } from '@finos/fdc3-standard'; +import { JSONWebSignature, MessageAuthenticity } from '../PublicFDC3Security'; +import { PrivateFDC3Security } from '../PrivateFDC3Security'; +import { Context } from '@finos/fdc3-context'; + +export type ContextMetadataWithAuthenticity = ContextMetadata & { + authenticity?: MessageAuthenticity; + __signature?: JSONWebSignature; +}; + +export async function signedContext( + fdc3Security: PrivateFDC3Security, + context: Context, + intent: string | null, + channelId: string | null +): Promise { + let unsignedContext = { ...context }; + delete unsignedContext['__signature']; + + return fdc3Security.sign(unsignedContext, intent, channelId).then(sig => { + let out = { ...unsignedContext }; + out['__signature'] = sig; + return out; + }); +} + +type X = ContextHandler | IntentHandler; + +export async function checkSignature( + fdc3Security: PrivateFDC3Security, + m: ContextMetadataWithAuthenticity | undefined, + c: Context, + intent: string | null, + channelId: string | null +): Promise<{ context: Context; meta: ContextMetadataWithAuthenticity | undefined }> { + let signature: JSONWebSignature | null = null; + let unsignedContext: Context | undefined = { ...c }; + delete unsignedContext['__signature']; + + if (m != null && m['__signature']) { + signature = m['__signature']; + } else if (c['__signature']) { + // context is signed, so check it. + signature = c['__signature'] as JSONWebSignature; + } + + if (signature) { + const res = await fdc3Security.check(signature, unsignedContext, intent, channelId); + const m2: ContextMetadataWithAuthenticity = m == undefined ? ({} as ContextMetadataWithAuthenticity) : m; + m2['authenticity'] = res; + return { + context: unsignedContext, + meta: m2, + }; + } else { + const m2 = m ? { ...m } : ({} as ContextMetadataWithAuthenticity); + delete m2['authenticity']; + m2.authenticity = { + signed: false, + }; + return { + context: unsignedContext, + meta: m2, + }; + } +} + +export function signingContextHandler( + fdc3Security: PrivateFDC3Security, + handler: ContextHandler, + channelProvider: () => Promise +): X { + const out = async (c: Context, m: ContextMetadataWithAuthenticity | undefined) => { + const res = await checkSignature(fdc3Security, m, c, null, (await channelProvider())?.id ?? null); + handler(res.context, res.meta); + }; + + return out as X; +} + +export function signingIntentHandler( + fdc3Security: PrivateFDC3Security, + handler: IntentHandler, + intentName: string +): IntentHandler { + const out = async (c: Context, m: ContextMetadataWithAuthenticity | undefined) => { + async function wrapIntentResult(ir: IntentResult): Promise { + if (ir == undefined) { + return; + } else if (ir.type == 'app' || ir.type == 'user' || ir.type == 'private') { + // it's a channel, just return as-is + return ir; + } else { + // it's a context + return signedContext(fdc3Security, ir as Context, intentName, null); + } + } + + async function applyHandler(context: Context, meta: ContextMetadata | undefined): Promise { + const result = await handler(context, meta); + const wrapped = await wrapIntentResult(result); + return wrapped; + } + + const res = await checkSignature(fdc3Security, m, c, intentName, null); + const res2 = applyHandler(res.context, res.meta); + return res2; + }; + + return out; +} diff --git a/packages/fdc3-security/test/features/checking.feature b/packages/fdc3-security/test/features/checking.feature new file mode 100644 index 000000000..349618785 --- /dev/null +++ b/packages/fdc3-security/test/features/checking.feature @@ -0,0 +1,114 @@ +Feature: Checking Signatures + + Background: Desktop Agent API + Given A Mock Desktop Agent in "mock" + Given A Signing Desktop Agent in "api" wrapping "{mock}" with Dummy Signing Middleware + Given "instrumentContextAC" is a "fdc3.instrument" context with dummy signature field length 113 + Given "instrumentContextUC" is a "fdc3.instrument" context with dummy signature field length 108 + Given "instrumentContextPC" is a "fdc3.instrument" context with dummy signature field length 112 + Given "instrumentContextIH" is a "fdc3.instrument" context with dummy signature field length 113 + Given "instrumentContextBadSignature" is a "fdc3.instrument" context with broken signature field + Given "instrumentContextNoSignature" is a "fdc3.instrument" context + + Scenario: Intent Handler receives a checked signature back in the metadata + Given "resultHandler" pipes context to "contexts" and metadata to "metas" + And I call "{api}" with "addIntentListener" with parameters "viewNews" and "{resultHandler}" + And I call "{api.delegate.handlers.viewNews}" with parameter "{instrumentContextIH}" + Then "{contexts}" is an array of objects with the following contents + | type | name | + | fdc3.instrument | Apple | + And "{metas}" is an array of objects with the following contents + | authenticity.trusted | authenticity.valid | authenticity.signed | authenticity.publicKeyUrl | + | true | true | true | https://dummy.com/pubKey | + + Scenario: App Channel Context Handler receives a checked signature back in the metadata + Given "resultHandler" pipes context to "contexts" and metadata to "metas" + When I call "{api}" with "getOrCreateChannel" with parameter "channel1" + And I refer to "{result}" as "channel1" + And I call "{channel1}" with "addContextListener" with parameters "{null}" and "{resultHandler}" + And I call "{channel1.delegate.handlers.any}" with parameter "{instrumentContextAC}" + Then "{contexts}" is an array of objects with the following contents + | type | name | + | fdc3.instrument | Apple | + And "{metas}" is an array of objects with the following contents + | authenticity.trusted | authenticity.valid | authenticity.signed | authenticity.publicKeyUrl | + | true | true | true | https://dummy.com/pubKey | + + Scenario: User Channel Context Handler receives a checked signature back in the metadata + Given "resultHandler" pipes context to "contexts" and metadata to "metas" + When I call "{api}" with "getUserChannels" + And I refer to "{result[0]}" as "firstUserChannel" + And I call "{api}" with "joinUserChannel" with parameter "{firstUserChannel.id}" + And I call "{api}" with "addContextListener" with parameters "{null}" and "{resultHandler}" + And I call "{api.delegate.handlers.any}" with parameter "{instrumentContextUC}" + Then "{contexts}" is an array of objects with the following contents + | type | name | + | fdc3.instrument | Apple | + And "{metas}" is an array of objects with the following contents + | authenticity.trusted | authenticity.valid | authenticity.signed | authenticity.publicKeyUrl | + | true | true | true | https://dummy.com/pubKey | + + Scenario: Private Channel Context Handler receives a checked signature back in the metadata + Given "resultHandler" pipes context to "contexts" and metadata to "metas" + When I call "{api}" with "createPrivateChannel" + And I refer to "{result}" as "privateChannel" + And I call "{privateChannel}" with "addContextListener" with parameters "{null}" and "{resultHandler}" + And I call "{privateChannel.delegate.delegate.handlers.any}" with parameter "{instrumentContextPC}" + Then "{contexts}" is an array of objects with the following contents + | type | name | + | fdc3.instrument | Apple | + And "{metas}" is an array of objects with the following contents + | authenticity.trusted | authenticity.valid | authenticity.signed | authenticity.publicKeyUrl | + | true | true | true | https://dummy.com/pubKey | + + Scenario: Private Channel Context Handler receives a bad signature back in the metadata + Given "resultHandler" pipes context to "contexts" and metadata to "metas" + When I call "{api}" with "createPrivateChannel" + And I refer to "{result}" as "privateChannel" + And I call "{privateChannel}" with "addContextListener" with parameters "{null}" and "{resultHandler}" + And I call "{privateChannel.delegate.delegate.handlers.any}" with parameter "{instrumentContextIH}" + Then "{contexts}" is an array of objects with the following contents + | type | name | + | fdc3.instrument | Apple | + And "{metas}" is an array of objects with the following contents + | authenticity.trusted | authenticity.valid | authenticity.signed | authenticity.publicKeyUrl | + | true | false | true | https://dummy.com/pubKey | + + Scenario: Bad Signature that can't be checked + Given "resultHandler" pipes context to "contexts" and metadata to "metas" + When I call "{api}" with "getUserChannels" + And I refer to "{result[0]}" as "firstUserChannel" + And I call "{api}" with "joinUserChannel" with parameter "{firstUserChannel.id}" + And I call "{api}" with "addContextListener" with parameters "{null}" and "{resultHandler}" + And I call "{api.delegate.handlers.any}" with parameter "{instrumentContextBadSignature}" + Then "{contexts}" is an array of objects with the following contents + | type | name | + | fdc3.instrument | Apple | + And "{metas}" is an array of objects with the following contents + | authenticity.trusted | authenticity.valid | authenticity.signed | authenticity.publicKeyUrl | + | true | false | true | https://dummy.com/pubKey | + + Scenario: Signature missing + Given "resultHandler" pipes context to "contexts" and metadata to "metas" + When I call "{api}" with "getUserChannels" + And I refer to "{result[0]}" as "firstUserChannel" + And I call "{api}" with "joinUserChannel" with parameter "{firstUserChannel.id}" + And I call "{api}" with "addContextListener" with parameters "{null}" and "{resultHandler}" + And I call "{api.delegate.handlers.any}" with parameter "{instrumentContextNoSignature}" + Then "{contexts}" is an array of objects with the following contents + | type | name | + | fdc3.instrument | Apple | + And "{metas}" is an array of objects with the following contents + | authenticity.signed | + | false | + + Scenario: Raise Intent receives back a signed intent result +TODO: This is incomplete as we don't yet have a way to return metadata from an intent result. + + Given I call "{api}" with "raiseIntent" with parameters "viewNews" and "{instrumentContextIH}" + And I refer to "{result}" as "intentResolution" + And I call "{intentResolution}" with "getResult" + And I refer to "{result}" as "intentResult" + Then "{result}" is an object with the following contents + | type | text | + | dummy.news | Some news item | diff --git a/packages/fdc3-security/test/features/delegate.feature b/packages/fdc3-security/test/features/delegate.feature new file mode 100644 index 000000000..5d6f010d0 --- /dev/null +++ b/packages/fdc3-security/test/features/delegate.feature @@ -0,0 +1,52 @@ +Feature: Signing Contexts + + Background: Desktop Agent API + Given A Mock Desktop Agent in "mock" + Given A Signing Desktop Agent in "api" wrapping "{mock}" with Dummy Signing Middleware + Given "instrumentContext" is a "fdc3.instrument" context + Given "instrumentContextIH" is a "fdc3.instrument" context + And "trueFunction" is a function which returns "{true}" + + Scenario: Call delegate functions and make sure they pass through to the underlying desktop agent + When I call "{api}" with "open" with parameters "a" and "b" + And I call "{api}" with "findIntent" with parameters "a" and "b" and "c" + And I call "{api}" with "findIntentsByContext" with parameters "a" and "b" + And I call "{api}" with "findInstances" with parameter "a" + And I call "{api}" with "leaveCurrentChannel" + And I call "{api}" with "getInfo" + And I call "{api}" with "getSystemChannels" + And I call "{api}" with "joinChannel" with parameter "a" + And I call "{api}" with "addEventListener" with parameter "a" + And I call "{api}" with "getAppMetadata" with parameter "a" + And I call "{api}" with "getCurrentChannel" + Then "{api.delegate.tracking}" is an array of objects with the following contents + | method | args[0] | args[1] | args[2] | + | open | a | b | {null} | + | findIntent | a | b | c | + | findIntentsByContext | a | b | {null} | + | findInstances | a | {null} | {null} | + | leaveCurrentChannel | {null} | {null} | {null} | + | getInfo | {null} | {null} | {null} | + | getSystemChannels | {null} | {null} | {null} | + | joinChannel | a | {null} | {null} | + | addEventListener | a | {null} | {null} | + | getAppMetadata | a | {null} | {null} | + | getCurrentChannel | {null} | {null} | {null} | + + Scenario: Call delegate functions on channel and make sure they work + When I call "{api}" with "getUserChannels" + And I refer to "{result[0]}" as "uc" + And I call "{uc}" with "onAddContextListener" with parameter "a" + And I call "{uc}" with "onUnsubscribe" with parameter "a" + And I call "{uc}" with "onDisconnect" with parameter "a" + And I call "{uc}" with "addEventListener" with parameters "a" and "b" + And I call "{uc}" with "disconnect" + And I call "{uc}" with "getCurrentContext" + Then "{uc.delegate.tracking}" is an array of objects with the following contents + | method | args[0] | args[1] | args[2] | + | onAddContextListener | a | {null} | {null} | + | onUnsubscribe | a | {null} | {null} | + | onDisconnect | a | {null} | {null} | + | addEventListener | a | b | {null} | + | disconnect | {null} | {null} | {null} | + | getCurrentContext | {null} | {null} | {null} | diff --git a/packages/fdc3-security/test/features/private-channel.feature b/packages/fdc3-security/test/features/private-channel.feature new file mode 100644 index 000000000..e59bc7df4 --- /dev/null +++ b/packages/fdc3-security/test/features/private-channel.feature @@ -0,0 +1,65 @@ +Feature: Private Channel Encryption + + Background: + Given A Mock Desktop Agent in "mock" + And A Signing Desktop Agent in "api" wrapping "{mock}" with Dummy Signing Middleware + And "instrumentContextIH" is a "fdc3.instrument" context with dummy signature field length 137 + And "instrumentContext" is a "fdc3.instrument" context + And "trueFunction" is a function which returns "{true}" + Given I use "{mock}" wrapped with "{api}" to create a pair of connected, wrapped private channels, "a" and "b" + And "keyRespondingContextListener" responds to all requests for symmetric keys on private channel "{a}" + + Scenario: A message arrives raising an intent which results in a private channel. + Given I call "{api}" with "createPrivateChannel" + And I refer to "{result}" as "privateChannel" + And I call "{privateChannel}" with "setChannelEncryption" with parameter "{trueFunction}" + And "resultHandler" is an intent handler which returns "{privateChannel}" + And I call "{api}" with "addIntentListener" with parameters "viewNews" and "{resultHandler}" + And I call "{api.delegate.handlers.viewNews}" with parameter "{instrumentContextIH}" + Then "{result}" is an object with the following contents + | type | id | symmetricKey.alg | symmetricKey.k | + | private | priv123 | dummy | 123 | + + Scenario: A pair of listeners on a private channel can coordinate a symmetric encryption key +Channel b receives a context it doesn't understand, and requests a symmetric key from channel a. +Subsequent broadcasts from a are decrypted. + + Given I use "{mock}" wrapped with "{api}" to create a pair of connected, wrapped private channels, "a" and "b" + And "resultHandler" pipes context to "contexts" and metadata to "metas" + And "keyRequest" is a "fdc3.security.symmetricKey.request" context + And I call "{a}" with "setChannelEncryption" with parameter "{trueFunction}" + And I call "{a}" with "addContextListener" with parameters "fdc3.security.symmetricKey.request" and "{keyRespondingContextListener}" + And I call "{b}" with "addContextListener" with parameters "fdc3.instrument" and "{resultHandler}" + And I call "{a}" with "broadcast" with parameter "{instrumentContext}" + And we wait for a period of "1000" ms + Then "{b.delegate.delegate.tracking}" is an array of objects with the following contents + | method | args[0].type | args[0].__signature | + | broadcast | fdc3.security.symmetricKey.request | length-check:93:https://dummy.com/pubKey | + Then I call "{a}" with "broadcast" with parameter "{instrumentContext}" + And we wait for a period of "1000" ms + Then "{a.delegate.delegate.tracking}" is an array of objects with the following contents + | method | args[0].type | args[0].wrappedKey | args[0].__encrypted.length | args[0].__signature | + | broadcast | fdc3.instrument | {null} | 125 | length-check:216:https://dummy.com/pubKey | + | broadcast | fdc3.security.symmetricKey.response | {"alg":"dummy","k":"123"} | {null} | length-check:143:https://dummy.com/pubKey | + | broadcast | fdc3.instrument | {null} | 125 | length-check:216:https://dummy.com/pubKey | + And "{b.delegate.delegate.tracking}" is an array of objects with the following contents + | method | args[0].type | + | broadcast | fdc3.security.symmetricKey.request | + And "{contexts}" is an array of objects with the following contents + | type | name | __encrypted.length | + | fdc3.instrument | {null} | 125 | + | fdc3.instrument | Apple | {null} | + And "{metas}" is an array of objects with the following contents + | authenticity.signed | authenticity.valid | authenticity.publicKeyUrl | encryption | + | true | true | https://dummy.com/pubKey | cant_decrypt | + | true | true | https://dummy.com/pubKey | decrypted | + + Scenario: An intent result is received containing a private channel. +In this case, the response also contains a wrapped symmetric encryption key, so we need to unwrap it and instantiate it. + + Scenario: A message is received on the encrypted private channel. +To properly understand the payload of the message, we're going to need to decrypt the encryptedPayload field, using the pre-agreed +symmetric key + + Scenario: We are sending a context on the encrypted private channel. + We need to replace the payload with encrypted payload but leave the context type unchanged so that it can be used in delivery/filtering diff --git a/packages/fdc3-security/test/features/signing.feature b/packages/fdc3-security/test/features/signing.feature new file mode 100644 index 000000000..2a32f833e --- /dev/null +++ b/packages/fdc3-security/test/features/signing.feature @@ -0,0 +1,71 @@ +Feature: Signing Contexts + + Background: Desktop Agent API + Given A Mock Desktop Agent in "mock" + Given A Signing Desktop Agent in "api" wrapping "{mock}" with Dummy Signing Middleware + Given "instrumentContext" is a "fdc3.instrument" context + Given "instrumentContextIH" is a "fdc3.instrument" context + And "trueFunction" is a function which returns "{true}" + + Scenario: App Channel Broadcasts context data will include a signature +We are using "Dummy Crypto" here, which basically just adds a digest containing the length. +In reality, we wouldn't use this, but it makes the test a lot simpler to understand. + + When I call "{api}" with "getOrCreateChannel" with parameter "channel1" + And I refer to "{result}" as "channel1" + And I call "{channel1}" with "broadcast" with parameter "{instrumentContext}" + Then "{channel1.delegate.tracking}" is an array of objects with the following contents + | method | args[0].type | args[0].id.ticker | args[0].__signature | + | broadcast | fdc3.instrument | AAPL | length-check:113:https://dummy.com/pubKey | + + Scenario: User Channel Broadcasts context data will include a signature + When I call "{api}" with "getUserChannels" + And I refer to "{result[0]}" as "firstUserChannel" + And I call "{api}" with "joinUserChannel" with parameter "{firstUserChannel.id}" + And I call "{api}" with "broadcast" with parameter "{instrumentContext}" + Then "{api.delegate.tracking}" is an array of objects with the following contents + | method | args[0].type | args[0].id.ticker | args[0].__signature | + | broadcast | fdc3.instrument | AAPL | length-check:107:https://dummy.com/pubKey | + + Scenario: Private Channel Broadcasts context data will include a signature + When I call "{api}" with "createPrivateChannel" + And I refer to "{result}" as "privateChannel" + And I call "{privateChannel}" with "broadcast" with parameter "{instrumentContext}" + Then "{privateChannel.delegate.delegate.tracking}" is an array of objects with the following contents + | method | args[0].type | args[0].id.ticker | args[0].__signature | + | broadcast | fdc3.instrument | AAPL | length-check:112:https://dummy.com/pubKey | + + Scenario: Encrypted Private Channel Broadcasts context data will include a signature + When I call "{api}" with "createPrivateChannel" + And I refer to "{result}" as "privateChannel" + And I call "{privateChannel}" with "setChannelEncryption" with parameter "{trueFunction}" + And I call "{privateChannel}" with "broadcast" with parameter "{instrumentContext}" + Then "{privateChannel.delegate.delegate.tracking}" is an array of objects with the following contents + | method | args[0].type | args[0].__signature | args[0].__encrypted.length | + | broadcast | fdc3.instrument | length-check:216:https://dummy.com/pubKey | 125 | + + Scenario: Raise Intent context data will include a signature + When I call "{api}" with "raiseIntent" with parameters "robsIntent" and "{instrumentContext}" + Then "{api.delegate.tracking}" is an array of objects with the following contents + | method | args[0] | args[1].type | args[1].id.ticker | args[1].__signature | + | raiseIntent | robsIntent | fdc3.instrument | AAPL | length-check:115:https://dummy.com/pubKey | + + Scenario: Raise Intent For Context context data will include a signature + When I call "{api}" with "raiseIntentForContext" with parameter "{instrumentContext}" + And I refer to "{result}" as "intentResolution" + And I call "{intentResolution}" with "getResult" + And I refer to "{result}" as "intentResult" + Then "{api.delegate.tracking}" is an array of objects with the following contents + | method | args[0].type | args[0].id.ticker | args[0].__signature | + | raiseIntentForContext | fdc3.instrument | AAPL | length-check:107:https://dummy.com/pubKey | + And "{intentResult}" is an object with the following contents + | type | text | + | dummy.news | Some news item | + + Scenario: Intent Handler returning a context object has the response signed + Given "resultHandler" echoes the context back to the raiser + And I call "{api}" with "addIntentListener" with parameters "viewNews" and "{resultHandler}" + And I call "{api.delegate.handlers.viewNews}" with parameter "{instrumentContextIH}" + Then "{result}" is an object with the following contents + | type | id.ticker | __signature | + | fdc3.instrument | AAPL | length-check:113:https://dummy.com/pubKey | diff --git a/packages/fdc3-security/test/step-definitions/context.steps.ts b/packages/fdc3-security/test/step-definitions/context.steps.ts new file mode 100644 index 000000000..0d8ee6f7e --- /dev/null +++ b/packages/fdc3-security/test/step-definitions/context.steps.ts @@ -0,0 +1,71 @@ +import { Given } from '@cucumber/cucumber'; +import { CustomWorld } from '../world/index'; +import { Context } from '@finos/fdc3-context'; +import { ContextMetadata } from '@finos/fdc3-standard'; + +const contextMap: Record = { + 'fdc3.instrument': { + type: 'fdc3.instrument', + name: 'Apple', + id: { + ticker: 'AAPL', + }, + }, + 'fdc3.country': { + type: 'fdc3.country', + name: 'Sweden', + id: { + COUNTRY_ISOALPHA2: 'SE', + COUNTRY_ISOALPHA3: 'SWE', + }, + }, + 'fdc3.unsupported': { + type: 'fdc3.unsupported', + bogus: true, + }, + 'fdc3.security.symmetricKey.request': { + type: 'fdc3.security.symmetricKey.request', + }, +}; + +Given('{string} is a {string} context', function (this: CustomWorld, field: string, type: string) { + this.props[field] = contextMap[type]; +}); + +Given( + '{string} is a {string} context with dummy signature field length {int}', + function (this: CustomWorld, field: string, type: string, length: number) { + const sigField = `length-check:${length}:https://dummy.com/pubKey`; + + const copy = JSON.parse(JSON.stringify(contextMap[type])); + copy['__signature'] = sigField; + this.props[field] = copy; + } +); + +Given( + '{string} is a {string} context with broken signature field', + function (this: CustomWorld, field: string, type: string) { + const copy = JSON.parse(JSON.stringify(contextMap[type])); + copy['__signature'] = 'broken-signature'; + this.props[field] = copy; + } +); + +Given( + '{string} pipes context to {string} and metadata to {string}', + function (this: CustomWorld, contextHandlerName: string, field: string, field2: string) { + this.props[field] = []; + this.props[field2] = []; + this.props[contextHandlerName] = (context: Context, metadata: ContextMetadata) => { + this.props[field].push(context); + this.props[field2].push(metadata); + }; + } +); + +Given('{string} echoes the context back to the raiser', function (this: CustomWorld, contextHandlerName: string) { + this.props[contextHandlerName] = async (context: Context, _metadata: ContextMetadata) => { + return context; + }; +}); diff --git a/packages/fdc3-security/test/step-definitions/desktop-agent.steps.ts b/packages/fdc3-security/test/step-definitions/desktop-agent.steps.ts new file mode 100644 index 000000000..8f83bd421 --- /dev/null +++ b/packages/fdc3-security/test/step-definitions/desktop-agent.steps.ts @@ -0,0 +1,79 @@ +import { Given } from '@cucumber/cucumber'; +import { handleResolve, setupGenericSteps } from '@finos/fdc3-testing'; +import { CustomWorld } from '../world/index'; +import { DummyCrypto } from '../support/crypto/DummyCrypto'; +import { DesktopAgentSpy } from '../support/DesktopAgentSpy'; +import { SecuredDesktopAgentDelegate } from '../../src/delegates/SecuredDesktopAgentDelegate'; +import { ContextHandler, ContextMetadata, IntentHandler, IntentResult } from '@finos/fdc3-standard'; +import { Context } from '@finos/fdc3-context'; +import { EncryptingPrivateChannel } from '../../src/encryption/EncryptingPrivateChannel'; +import { ContextMetadataWithAuthenticity } from '../../src/signing/SigningSupport'; + +export const CHANNEL_STATE = 'CHANNEL_STATE'; + +setupGenericSteps(); + +Given( + 'A Signing Desktop Agent in {string} wrapping {string} with Dummy Signing Middleware', + async function (this: CustomWorld, field: string, daField: string) { + const da = handleResolve(daField, this); + const signingDA = new SecuredDesktopAgentDelegate(da, new DummyCrypto()); + + this.props[field] = signingDA; + this.props['result'] = null; + } +); + +Given('A Mock Desktop Agent in {string}', async function (this: CustomWorld, field: string) { + const da = new DesktopAgentSpy(); + + this.props[field] = da; + this.props['result'] = null; +}); + +Given( + '{string} is an intent handler which returns {string}', + function (this: CustomWorld, field: string, resultField: string) { + const result = handleResolve(resultField, this) as IntentResult; + const out: IntentHandler = async (_ctx: Context, _meta: ContextMetadata | undefined) => { + return result; + }; + this.props[field] = out; + } +); + +Given( + 'I use {string} wrapped with {string} to create a pair of connected, wrapped private channels, {string} and {string}', + async function (this: CustomWorld, mock: string, api: string, channel1Name: string, channel2Name: string) { + const theMock = handleResolve(mock, this) as DesktopAgentSpy; + const da = handleResolve(api, this) as SecuredDesktopAgentDelegate; + const channel1 = await da.createPrivateChannel(); + const channel2 = await da.createPrivateChannel(); + this.props[channel1Name] = channel1; + this.props[channel2Name] = channel2; + + theMock.connectChannels((channel1 as any).delegate.delegate, (channel2 as any).delegate.delegate); + } +); + +Given( + '{string} responds to all requests for symmetric keys on private channel {string}', + async function (this: CustomWorld, name: string, channelName: string) { + const ch: ContextHandler = async (_c: Context, m: ContextMetadata | undefined) => { + const channel: EncryptingPrivateChannel = handleResolve(channelName, this); + const auth = (m as ContextMetadataWithAuthenticity)?.authenticity; + if (auth?.signed == true) { + const publicKey = (m as any).authenticity.publicKeyUrl; + channel.broadcastKey(publicKey); + } + }; + + this.props[name] = ch; + } +); + +Given('{string} is a function which returns {string}', function (this: CustomWorld, fnName: string, value: string) { + this.props[fnName] = () => { + return handleResolve(value, this); + }; +}); diff --git a/packages/fdc3-security/test/support/DesktopAgentSpy.ts b/packages/fdc3-security/test/support/DesktopAgentSpy.ts new file mode 100644 index 000000000..fb9fabb64 --- /dev/null +++ b/packages/fdc3-security/test/support/DesktopAgentSpy.ts @@ -0,0 +1,286 @@ +import { + AppIdentifier, + AppIntent, + AppMetadata, + Channel, + ContextHandler, + DesktopAgent, + DisplayMetadata, + EventHandler, + FDC3EventTypes, + ImplementationMetadata, + IntentHandler, + IntentResolution, + Listener, + PrivateChannel, +} from '@finos/fdc3-standard'; +import { Context } from '@finos/fdc3-context'; +import { v4 as uuid } from 'uuid'; + +export interface Call { + method: string; + args: (object | null)[]; +} + +function addCall( + a: Call[], + method: string, + arg0?: object | undefined, + arg1?: object | undefined, + arg2?: object | undefined +) { + const args: any[] = []; + if (arg0) { + args.push(arg0); + } + + if (arg1) { + args.push(arg1); + } + + if (arg2) { + args.push(arg2); + } + + a.push({ + method, + args, + }); +} + +export class MockChannel implements PrivateChannel { + readonly id: string; + readonly type: 'user' | 'app' | 'private'; + readonly displayMetadata: DisplayMetadata; + public tracking: Call[] = []; + public handlers: { [type: string]: ContextHandler | IntentHandler } = {}; + send: ((ctx: Context) => void) | null = null; + + constructor(id: string, type: 'user' | 'app' | 'private', displayMetadata: DisplayMetadata) { + this.id = id; + this.type = type; + this.displayMetadata = displayMetadata; + } + + onAddContextListener(handler: (contextType?: string | undefined) => void): Listener { + this.call('onAddContextListener', handler); + throw new Error('Method not implemented.'); + } + + onUnsubscribe(handler: (contextType?: string | undefined) => void): Listener { + this.call('onUnsubscribe', handler); + throw new Error('Method not implemented.'); + } + + onDisconnect(handler: () => void): Listener { + this.call('onDisconnect', handler); + throw new Error('Method not implemented.'); + } + + addEventListener( + type: 'disconnect' | 'unsubscribe' | 'addContextListener', + listener: EventHandler + ): Promise { + this.call('addEventListener', type, listener); + throw new Error('Method not implemented.'); + } + + disconnect(): Promise { + this.call('disconnect'); + throw new Error('Method not implemented.'); + } + + call(method: string, arg0?: any, arg1?: any, arg2?: any) { + addCall(this.tracking, method, arg0, arg1, arg2); + } + + async broadcast(context: Context): Promise { + this.call('broadcast', context); + if (this.send) { + this.send(context); + } + } + + async getCurrentContext(type?: string | undefined): Promise { + this.call('getCurrentContext', type); + return null; + } + + async addContextListener(context: string | null | ContextHandler, handler?: ContextHandler): Promise { + const theHandler: ContextHandler = handler ? handler : (context as ContextHandler); + const theContextType: string | null = context && handler ? (context as string) : 'any'; + this.handlers[theContextType] = theHandler; + return {} as Listener; + } +} + +const MOCK_CHANNELS = [ + new MockChannel('one', 'user', { color: 'red' }), + new MockChannel('two', 'user', { color: 'green' }), + new MockChannel('three', 'user', { color: 'blue' }), +]; + +/** + * Keeps track of calls so that we can test out the delegation capabilities + */ +export class DesktopAgentSpy implements DesktopAgent { + tracking: Call[] = []; + private uc: Channel | undefined = undefined; + public handlers: { [type: string]: ContextHandler } = {}; + + call(method: string, arg0?: any, arg1?: any, arg2?: any) { + addCall(this.tracking, method, arg0, arg1, arg2); + } + + async open(arg0?: any, arg1?: any): Promise { + this.call('open', arg0, arg1); + return { + appId: 'DummyApp', + instanceId: uuid(), + } as AppIdentifier; + } + + async findIntent(intent: string, context?: Context | undefined, resultType?: string | undefined): Promise { + this.call('findIntent', intent, context, resultType); + return { + intent: { + name: intent, + displayName: 'Some Display Name', + }, + apps: [], + } as AppIntent; + } + + async findIntentsByContext(context: Context, resultType?: string | undefined): Promise { + this.call('findIntentsByContext', context, resultType); + return []; + } + + async findInstances(app: AppIdentifier): Promise { + this.call('findInstances', app); + return []; + } + async broadcast(context: Context): Promise { + this.call('broadcast', context); + } + + async raiseIntent(intent: string, context: Context, a2: any): Promise { + this.call('raiseIntent', intent, context, a2); + return { + source: { + appId: 'abc123', + }, + intent, + getResult: async () => { + return { + type: 'dummy.news', + text: 'Some news item', + __signature: 'length-check:113:https://dummy.com/pubKey', + } as Context; + }, + } as IntentResolution; + } + + async raiseIntentForContext(context: Context, arg1?: any): Promise { + this.call('raiseIntentForContext', context, arg1); + return { + source: { + appId: 'abc123', + }, + intent: 'showNews', + getResult: async () => { + return { + type: 'dummy.news', + text: 'Some news item', + __signature: 'length-check:113:https://dummy.com/pubKey', + } as Context; + }, + } as IntentResolution; + } + + async addIntentListener(intent: string, handler: IntentHandler): Promise { + this.handlers[intent] = handler; + return {} as Listener; + } + + async addContextListener(context: string | null | ContextHandler, handler?: ContextHandler): Promise { + const theHandler: ContextHandler = handler ? handler : (context as ContextHandler); + const theContextType: string | null = context && handler ? (context as string) : 'any'; + this.handlers[theContextType] = theHandler; + return {} as Listener; + } + + async getUserChannels(): Promise { + return MOCK_CHANNELS; + } + + async joinUserChannel(id: string): Promise { + this.uc = MOCK_CHANNELS.find(c => c.id == id); + } + + async getOrCreateChannel(channelId: string): Promise { + this.call('getOrCreateChannel', channelId); + return new MockChannel(channelId, 'app', {}); + } + + async createPrivateChannel(): Promise { + return new MockChannel('priv123', 'private', {}); + } + + async getCurrentChannel(): Promise { + this.call('getCurrentChannel'); + return this.uc ? this.uc : null; + } + + async leaveCurrentChannel(): Promise { + this.call('leaveCurrentChannel'); + this.uc = undefined; + } + + getInfo(): Promise { + this.call('getInfo'); + throw new Error('Method not implemented.'); + } + + getAppMetadata(app: AppIdentifier): Promise { + this.call('getAppMetadata', app); + throw new Error('Method not implemented.'); + } + + getSystemChannels(): Promise { + this.call('getSystemChannels'); + return this.getUserChannels(); + } + + async joinChannel(id: string): Promise { + this.call('joinChannel', id); + return this.joinUserChannel(id); + } + + connectChannels(channel1: MockChannel, channel2: MockChannel) { + function deliver(channel: MockChannel, ctx: Context) { + const first = channel.handlers[ctx.type]; + const second = channel.handlers['any']; + + if (first) { + first(ctx); + } + + if (second) { + second(ctx); + } + } + + channel1.send = (ctx: Context) => deliver(channel2, ctx); + channel2.send = (ctx: Context) => deliver(channel1, ctx); + } + + async addEventListener(type: FDC3EventTypes | null, handler: EventHandler): Promise { + this.call('addEventListener', type, handler); + return { + unsubscribe: async () => { + this.call('unsubscribe'); + }, + }; + } +} diff --git a/packages/fdc3-security/test/support/crypto/DummyCrypto.ts b/packages/fdc3-security/test/support/crypto/DummyCrypto.ts new file mode 100644 index 000000000..f53a6b0be --- /dev/null +++ b/packages/fdc3-security/test/support/crypto/DummyCrypto.ts @@ -0,0 +1,117 @@ +import { Context, SymmetricKeyResponse } from '@finos/fdc3-context'; +import { + FDC3JWTPayload, + JSONWebEncryption, + JSONWebSignature, + SignedMessageAuthenticity, +} from '../../../src/PublicFDC3Security'; +import { PrivateFDC3Security } from '../../../src/PrivateFDC3Security'; +import { canonicalize } from 'json-canonicalize'; + +export class DummyCrypto implements PrivateFDC3Security { + async encrypt(ctx: Context, symmetricKey: JsonWebKey): Promise { + const text = canonicalize(ctx); + const key = canonicalize(symmetricKey); + const rot1 = btoa(text); + const rot2 = btoa(key); + return rot1 + '.' + rot2; + } + + async decrypt(encrypted: JSONWebEncryption, symmetricKey: JsonWebKey): Promise { + const parts = encrypted.split('.'); + const text = atob(parts[0]); + const key = atob(parts[1]); + const expectedKey = canonicalize(symmetricKey); + if (key == expectedKey) { + return JSON.parse(text); + } else { + throw new Error(`Keys don't match: ${expectedKey} ${key}`); + } + } + + createMessage(ctx: Context, intent: string | null, channelId: string | null): string { + return canonicalize({ + context: ctx, + intent: intent, + channelId: channelId, + }); + } + + async sign(ctx: Context, intent: string | null, channelId: string | null): Promise { + const msg = this.createMessage(ctx, intent, channelId); + + console.log('SIGNING: ' + msg); + const out = `length-check:${msg.length}:https://dummy.com/pubKey`; + return out; + } + + async check( + sig: JSONWebSignature, + ctx: Context, + intent: string | null, + channelId: string | null + ): Promise { + const msg = this.createMessage(ctx, intent, channelId); + const splitSig = sig.split(':'); + const length = splitSig[1]; + splitSig.splice(0, 2); + const url = splitSig.join(':'); + + console.log('CHECKING: ' + msg); + const out: SignedMessageAuthenticity = { + valid: length == `${msg.length}`, + signed: true, + trusted: true, + publicKeyUrl: url, + }; + + return out; + } + + async createSymmetricKey(): Promise { + return { + alg: 'dummy', + k: '123', + }; + } + + async wrapKey(symmetricKey: JsonWebKey, publicKeyUrl: string): Promise { + return { + type: 'fdc3.security.symmetricKey.response', + wrappedKey: JSON.stringify(symmetricKey), + id: { + kid: 'dummy-key-id', + pki: publicKeyUrl, + }, + }; + } + + async unwrapKey(ctx: SymmetricKeyResponse): Promise { + return JSON.parse(ctx.wrappedKey); + } + + async createJWTToken(aud: string, sub: string): Promise { + return `dummy-jwt-token-${aud}-${sub}`; + } + + getPublicKeys(): JsonWebKey[] { + return [ + { + alg: 'dummy', + k: '123', + }, + ]; + } + + async verifyJWTToken(token: string): Promise { + const parts = token.split('-'); + return { + aud: parts[4], + sub: parts[5], + iss: 'dummy-iss', + iat: 0, + exp: 0, + jti: 'dummy-jti', + }; + } +} diff --git a/packages/fdc3-security/test/world/index.ts b/packages/fdc3-security/test/world/index.ts new file mode 100644 index 000000000..603f13561 --- /dev/null +++ b/packages/fdc3-security/test/world/index.ts @@ -0,0 +1,7 @@ +import { World, setWorldConstructor } from '@cucumber/cucumber'; + +export class CustomWorld extends World { + props: Record = {}; +} + +setWorldConstructor(CustomWorld); diff --git a/packages/fdc3-security/tsconfig.json b/packages/fdc3-security/tsconfig.json new file mode 100644 index 000000000..cf223e9b3 --- /dev/null +++ b/packages/fdc3-security/tsconfig.json @@ -0,0 +1,31 @@ +{ + "extends": "../../tsconfig.root.json", + "compilerOptions": { + "rootDirs": [ + "src", + "test" + ], + "outDir": "dist", + }, + "include": [ + "src" + ], + "exclude": [ + "test/**", + "dist/**" + ], + "references": [ + { + "path": "../fdc3-standard" + }, + { + "path": "../fdc3-schema" + }, + { + "path": "../fdc3-context" + }, + { + "path": "../fdc3-testing" + } + ] +} \ No newline at end of file diff --git a/packages/fdc3-standard/package.json b/packages/fdc3-standard/package.json index 77ff38c4a..5931a0699 100644 --- a/packages/fdc3-standard/package.json +++ b/packages/fdc3-standard/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3-standard", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { @@ -34,8 +34,8 @@ "outputName": "test-results.xml" }, "dependencies": { - "@finos/fdc3-context": "2.2.0", - "@finos/fdc3-schema": "2.2.0" + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-schema": "2.3.0" }, "devDependencies": { "@eslint/eslintrc": "^3.2.0", diff --git a/packages/fdc3-standard/src/api/Channel.ts b/packages/fdc3-standard/src/api/Channel.ts index f0e0ba517..dbae3191c 100644 --- a/packages/fdc3-standard/src/api/Channel.ts +++ b/packages/fdc3-standard/src/api/Channel.ts @@ -70,7 +70,7 @@ export interface Channel { * If, when this function is called, the channel already contains context that would be passed to the listener it is NOT called or passed this context automatically (this behavior differs from that of the [`fdc3.addContextListener`](DesktopAgent#addcontextlistener) function). Apps wishing to access to the current context of the channel should instead call the `getCurrentContext(contextType)` function. * * Optional metadata about each context message received, including the app that originated the message, SHOULD be provided by the desktop agent implementation. - * + * * Adding multiple context listeners on the same or overlapping types (i.e. named type and null type) MUST be allowed, and MUST trigger all context handlers when a relevant context type is broadcast on the current channel. * */ diff --git a/packages/fdc3-standard/src/api/Errors.ts b/packages/fdc3-standard/src/api/Errors.ts index a7d3b2368..8819032d9 100644 --- a/packages/fdc3-standard/src/api/Errors.ts +++ b/packages/fdc3-standard/src/api/Errors.ts @@ -86,7 +86,7 @@ export enum ResolveError { /** Returned if `fdc3.addIntentListener` is called for a specified intent that the application has already added a listener for and has not subsequently removed it. */ IntentListenerConflict = 'IntentListenerConflict', - + /** @experimental Returned if the specified Desktop Agent is not found, via a connected Desktop Agent Bridge.*/ DesktopAgentNotFound = 'DesktopAgentNotFound', diff --git a/packages/fdc3-testing/README.md b/packages/fdc3-testing/README.md new file mode 100644 index 000000000..504594a61 --- /dev/null +++ b/packages/fdc3-testing/README.md @@ -0,0 +1,38 @@ +# @finos/fdc3-testing + +This package provides testing utilities and feature files for FDC3 implementations. + +## Installation + +```bash +npm install @finos/fdc3-testing +``` + +## Usage + +### Importing Testing Utilities + +```typescript +import { + PropsWorld, + doesRowMatch, + handleResolve, + indexOf, + matchData, + setupGenericSteps, + SimpleIntentResolver, + addFormats, + Ajv2019, + CHANNEL_STATE, +} from '@finos/fdc3-testing'; +``` + +### Accessing Feature Files + +The package also includes feature files from various FDC3 modules so that you can use these to test functionality outside the main FDC3 repo. + +- `features/security/` - Security-related feature files +- `features/get-agent/` - Get Agent feature files +- `features/agent-proxy/` - Agent Proxy feature files +- `features/web-impl/` - Web Implementation feature files + diff --git a/packages/fdc3-testing/package.json b/packages/fdc3-testing/package.json new file mode 100644 index 000000000..142f7ab69 --- /dev/null +++ b/packages/fdc3-testing/package.json @@ -0,0 +1,58 @@ +{ + "name": "@finos/fdc3-testing", + "version": "2.3.0", + "author": "Fintech Open Source Foundation (FINOS)", + "homepage": "https://fdc3.finos.org", + "repository": { + "type": "git", + "url": "git+https://github.com/finos/FDC3.git" + }, + "publishConfig": { + "tag": "latest" + }, + "license": "Apache-2.0", + "files": [ + "dist" + ], + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", + "scripts": { + "build": "tsc --module es2022 && npm run copy-features", + "copy-features": "npm run copy-security-features && npm run copy-get-agent-features && npm run copy-agent-proxy-features && npm run copy-web-impl-features", + "copy-security-features": "mkdir -p dist/features/security && cp -r ../fdc3-security/test/features/* dist/features/security/", + "copy-get-agent-features": "mkdir -p dist/features/get-agent && cp -r ../fdc3-get-agent/test/features/* dist/features/get-agent/", + "copy-agent-proxy-features": "mkdir -p dist/features/agent-proxy && cp -r ../fdc3-agent-proxy/test/features/* dist/features/agent-proxy/", + "copy-web-impl-features": "mkdir -p dist/features/web-impl && cp -r ../../toolbox/fdc3-for-web/fdc3-web-impl/test/features/* dist/features/web-impl/", + "clean": "rimraf dist", + "test": "tsc" + }, + "dependencies": { + "@cucumber/cucumber": "10.3.1", + "@cucumber/html-formatter": "11.0.4", + "@cucumber/pretty-formatter": "1.0.1", + "@finos/fdc3-standard": "2.3.0", + "@types/expect": "24.3.0", + "@types/lodash": "4.14.167", + "@types/node": "^20.16.11", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^8.18.2", + "@typescript-eslint/parser": "^8.18.2", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "cucumber-console-formatter": "1.0.0", + "eslint": "^9.16.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "3.3.1", + "expect": "^29.7.0", + "is-ci": "2.0.0", + "jsonpath-plus": "^10.1.0", + "nyc": "17.1.0", + "prettier": "3.4.1", + "rimraf": "^6.0.1", + "ts-node": "^10.9.2", + "tsx": "^4.19.1", + "typescript": "^5.6.3", + "uuid": "^9.0.1" + } +} \ No newline at end of file diff --git a/packages/testing/src/agent/index.ts b/packages/fdc3-testing/src/agent/index.ts similarity index 89% rename from packages/testing/src/agent/index.ts rename to packages/fdc3-testing/src/agent/index.ts index d324268b2..891bd10a0 100644 --- a/packages/testing/src/agent/index.ts +++ b/packages/fdc3-testing/src/agent/index.ts @@ -14,9 +14,9 @@ export class SimpleIntentResolver implements IntentResolver { this.cw = cw; } - async connect(): Promise { } + async connect(): Promise {} - async disconnect(): Promise { } + async disconnect(): Promise {} async intentChosen(ir: IntentResult): Promise { this.cw.props['intent-result'] = ir; @@ -55,9 +55,9 @@ export class SimpleChannelSelector implements ChannelSelector { this.cw.props['channels'] = availableChannels; } - setChannelChangeCallback(_callback: (channelId: string | null) => void): void { } + setChannelChangeCallback(_callback: (channelId: string | null) => void): void {} - async connect(): Promise { } + async connect(): Promise {} - async disconnect(): Promise { } + async disconnect(): Promise {} } diff --git a/packages/testing/src/index.ts b/packages/fdc3-testing/src/index.ts similarity index 100% rename from packages/testing/src/index.ts rename to packages/fdc3-testing/src/index.ts diff --git a/packages/testing/src/steps/generic.steps.ts b/packages/fdc3-testing/src/steps/generic.steps.ts similarity index 85% rename from packages/testing/src/steps/generic.steps.ts rename to packages/fdc3-testing/src/steps/generic.steps.ts index 957758c26..6da84ac1a 100644 --- a/packages/testing/src/steps/generic.steps.ts +++ b/packages/fdc3-testing/src/steps/generic.steps.ts @@ -91,6 +91,42 @@ export function setupGenericSteps() { } ); + When('I call {string} with parameter {string}', async function (this: PropsWorld, fnName: string, param: string) { + try { + const fn = handleResolve(fnName, this); + const result = await fn(handleResolve(param, this)); + this.props['result'] = result; + } catch (error) { + this.props['result'] = error; + } + }); + + When( + 'I call {string} with parameters {string} and {string}', + async function (this: PropsWorld, fnName: string, param1: string, param2: string) { + try { + const fn = handleResolve(fnName, this); + const result = await fn(handleResolve(param1, this), handleResolve(param2, this)); + this.props['result'] = result; + } catch (error) { + this.props['result'] = error; + } + } + ); + + When( + 'I call {string} with parameters {string}, {string} and {string}', + async function (this: PropsWorld, fnName: string, param1: string, param2: string, param3: string) { + try { + const fn = handleResolve(fnName, this); + const result = await fn(handleResolve(param1, this), handleResolve(param2, this), handleResolve(param3, this)); + this.props['result'] = result; + } catch (error) { + this.props['result'] = error; + } + } + ); + When('I refer to {string} as {string}', async function (this: PropsWorld, from: string, to: string) { this.props[to] = handleResolve(from, this); }); diff --git a/packages/testing/src/support/matching.ts b/packages/fdc3-testing/src/support/matching.ts similarity index 88% rename from packages/testing/src/support/matching.ts rename to packages/fdc3-testing/src/support/matching.ts index c4b772372..9da10665a 100644 --- a/packages/testing/src/support/matching.ts +++ b/packages/fdc3-testing/src/support/matching.ts @@ -34,7 +34,11 @@ export function doesRowMatch(cw: PropsWorld, t: Record, data: an const found = JSONPath({ path: field, json: data })[0]; const resolved = handleResolve(actual, cw); - if (found != resolved) { + if (found == true && resolved == 'true') { + // this is ok + } else if (found == false && resolved == 'false') { + // this is ok + } else if (found != resolved) { try { cw.log( `Comparing Validation failed: ${JSON.stringify(data, null, 2)} \n Match failed on ${field} '${found}' vs '${resolved}'` @@ -76,8 +80,14 @@ export function handleResolve(name: string, on: PropsWorld): any { } else if (isNumeric(stripped)) { return Number.parseFloat(stripped); } else { - const out = JSONPath({ path: stripped, json: on.props })[0]; - return out; + const instances = JSONPath({ path: stripped, json: on.props }); + if (instances.length > 0) { + const out = instances[0]; + return out; + } else { + // just return the original + return name; + } } } else { return name; diff --git a/packages/testing/src/world/index.ts b/packages/fdc3-testing/src/world/index.ts similarity index 100% rename from packages/testing/src/world/index.ts rename to packages/fdc3-testing/src/world/index.ts diff --git a/packages/testing/tsconfig.json b/packages/fdc3-testing/tsconfig.json similarity index 100% rename from packages/testing/tsconfig.json rename to packages/fdc3-testing/tsconfig.json diff --git a/packages/fdc3/package.json b/packages/fdc3/package.json index 78865f517..4777f9edb 100644 --- a/packages/fdc3/package.json +++ b/packages/fdc3/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { @@ -21,9 +21,10 @@ "build": "tsc --module es2022" }, "dependencies": { - "@finos/fdc3-context": "2.2.0", - "@finos/fdc3-get-agent": "2.2.0", - "@finos/fdc3-schema": "2.2.0", - "@finos/fdc3-standard": "2.2.0" + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-get-agent": "2.3.0", + "@finos/fdc3-schema": "2.3.0", + "@finos/fdc3-standard": "2.3.0", + "@finos/fdc3-security": "2.3.0" } -} +} \ No newline at end of file diff --git a/packages/fdc3/src/index.ts b/packages/fdc3/src/index.ts index 8ae2de3fa..f78f5b32e 100644 --- a/packages/fdc3/src/index.ts +++ b/packages/fdc3/src/index.ts @@ -10,6 +10,8 @@ export { AppIdentifier }; import { getAgent, fdc3Ready } from '@finos/fdc3-get-agent'; export { getAgent, fdc3Ready }; +export * from '@finos/fdc3-security'; + declare global { interface Window { fdc3?: DesktopAgent; diff --git a/packages/fdc3/tsconfig.json b/packages/fdc3/tsconfig.json index 50306f4bc..785534dad 100644 --- a/packages/fdc3/tsconfig.json +++ b/packages/fdc3/tsconfig.json @@ -22,6 +22,9 @@ }, { "path": "../fdc3-standard" + }, + { + "path": "../fdc3-security" } ] } \ No newline at end of file diff --git a/toolbox/fdc3-for-web/demo/package.json b/toolbox/fdc3-for-web/demo/package.json index 34ac7e801..f44455d10 100644 --- a/toolbox/fdc3-for-web/demo/package.json +++ b/toolbox/fdc3-for-web/demo/package.json @@ -1,10 +1,10 @@ { "name": "@finos/demo", "private": true, - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "scripts": { - "dev": "nodemon -w src/server src/server/main.ts", + "dev": "nodemon -x tsx -w src/server src/server/main.ts", "lint": "eslint src/" }, "devDependencies": { @@ -22,7 +22,7 @@ "vite": "^6.2.7" }, "dependencies": { - "@finos/fdc3": "2.2.0", + "@finos/fdc3": "2.3.0", "@types/uuid": "^10.0.0", "@types/ws": "^8.5.12", "express": "^4.21.1", @@ -31,6 +31,6 @@ "tsx": "^4.19.1", "typescript": "^5.6.3", "uuid": "^9.0.1", - "vite-express": "^0.15.0" + "vite-express": "^0.21.1" } -} +} \ No newline at end of file diff --git a/toolbox/fdc3-for-web/demo/src/client/apps/app1.ts b/toolbox/fdc3-for-web/demo/src/client/apps/app1.ts index 92e057f26..4c2064846 100644 --- a/toolbox/fdc3-for-web/demo/src/client/apps/app1.ts +++ b/toolbox/fdc3-for-web/demo/src/client/apps/app1.ts @@ -1,4 +1,4 @@ -import { getAgent } from '@finos/fdc3-get-agent'; +import { getAgent } from '@finos/fdc3'; function createContext(i: number) { return { diff --git a/toolbox/fdc3-for-web/demo/src/client/apps/app2.ts b/toolbox/fdc3-for-web/demo/src/client/apps/app2.ts index 59ec32113..8c8aa08f6 100644 --- a/toolbox/fdc3-for-web/demo/src/client/apps/app2.ts +++ b/toolbox/fdc3-for-web/demo/src/client/apps/app2.ts @@ -1,4 +1,4 @@ -import { getAgent } from '@finos/fdc3-get-agent'; +import { getAgent } from '@finos/fdc3'; /** * This demonstrates using the API via a promise diff --git a/toolbox/fdc3-for-web/demo/src/client/apps/app4.ts b/toolbox/fdc3-for-web/demo/src/client/apps/app4.ts index c0dca6a73..1330e2035 100644 --- a/toolbox/fdc3-for-web/demo/src/client/apps/app4.ts +++ b/toolbox/fdc3-for-web/demo/src/client/apps/app4.ts @@ -1,4 +1,4 @@ -import { getAgent } from '@finos/fdc3-get-agent'; +import { getAgent } from '@finos/fdc3'; /** * This demonstrates using the API via a promise diff --git a/toolbox/fdc3-for-web/demo/src/client/apps/app5.ts b/toolbox/fdc3-for-web/demo/src/client/apps/app5.ts index 59a438d46..4595a6ff1 100644 --- a/toolbox/fdc3-for-web/demo/src/client/apps/app5.ts +++ b/toolbox/fdc3-for-web/demo/src/client/apps/app5.ts @@ -1,4 +1,4 @@ -import { getAgent } from '@finos/fdc3-get-agent'; +import { getAgent } from '@finos/fdc3'; /** * This demonstrates using the API via a promise diff --git a/toolbox/fdc3-for-web/demo/src/client/apps/app6.ts b/toolbox/fdc3-for-web/demo/src/client/apps/app6.ts index 5b777139d..8c4736aa5 100644 --- a/toolbox/fdc3-for-web/demo/src/client/apps/app6.ts +++ b/toolbox/fdc3-for-web/demo/src/client/apps/app6.ts @@ -1,4 +1,4 @@ -import { getAgent } from '@finos/fdc3-get-agent'; +import { getAgent } from '@finos/fdc3'; /** * This demonstrates using the API via a promise diff --git a/toolbox/fdc3-for-web/demo/src/client/apps/app7.ts b/toolbox/fdc3-for-web/demo/src/client/apps/app7.ts index 8d2686daf..1621ab52b 100644 --- a/toolbox/fdc3-for-web/demo/src/client/apps/app7.ts +++ b/toolbox/fdc3-for-web/demo/src/client/apps/app7.ts @@ -1,4 +1,4 @@ -import { getAgent } from '@finos/fdc3-get-agent'; +import { getAgent } from '@finos/fdc3'; /** * This demonstrates using the API via a promise diff --git a/toolbox/fdc3-for-web/demo/src/client/da/FDC3_2_1_JSONDirectory.ts b/toolbox/fdc3-for-web/demo/src/client/da/FDC3_2_1_JSONDirectory.ts index 9498dfbc6..587d38c07 100644 --- a/toolbox/fdc3-for-web/demo/src/client/da/FDC3_2_1_JSONDirectory.ts +++ b/toolbox/fdc3-for-web/demo/src/client/da/FDC3_2_1_JSONDirectory.ts @@ -2,17 +2,29 @@ import { BasicDirectory } from '@finos/fdc3-web-impl/src/directory/BasicDirector import { DirectoryApp } from '@finos/fdc3-web-impl/src/directory/DirectoryInterface'; async function loadRemotely(u: string) { - const response = await fetch(u); - return await response.json(); + try { + const response = await fetch(u); + return await response.json(); + } catch (error) { + console.error(`Error loading ${u}: ${error}`); + return []; + } } -async function load(url: string): Promise { - if (url.startsWith('http')) { - return await loadRemotely(url).then(convertToDirectoryList); - } else { - return await loadRemotely(window.location.origin + url).then(convertToDirectoryList); - } +async function load(urls: string[]): Promise { + const promises = Promise.all( + urls.map(async url => { + if (url.startsWith('http')) { + return loadRemotely(url).then(convertToDirectoryList); + } else { + return loadRemotely(window.location.origin + url).then(convertToDirectoryList); + } + }) + ); + + return (await promises).flat(); } + // eslint-disable-next-line @typescript-eslint/no-explicit-any const convertToDirectoryList = (data: any): DirectoryApp[] => { return data.applications as DirectoryApp[]; @@ -23,14 +35,16 @@ export class FDC3_2_1_JSONDirectory extends BasicDirectory { super([]); } - async load(url: string) { + async load(urls: string[]) { const aa = this.allApps; - const apps = await load(url); + const apps = await load(urls); apps.forEach((app: DirectoryApp) => { - const existing = aa.find(a => a.appId == app.appId); - if (!existing) { - aa.push(app); + if (app) { + const existing = aa.find(a => a.appId == app.appId); + if (!existing) { + aa.push(app); + } } }); } diff --git a/toolbox/fdc3-for-web/demo/src/client/da/dummy-desktop-agent.ts b/toolbox/fdc3-for-web/demo/src/client/da/dummy-desktop-agent.ts index 31b81be58..3fbd2da31 100644 --- a/toolbox/fdc3-for-web/demo/src/client/da/dummy-desktop-agent.ts +++ b/toolbox/fdc3-for-web/demo/src/client/da/dummy-desktop-agent.ts @@ -55,8 +55,13 @@ window.addEventListener('load', () => { socket.emit(DA_HELLO, desktopAgentUUID); const directory = new FDC3_2_1_JSONDirectory(); - await directory.load('/static/da/appd.json'); - await directory.load('/static/da/local-conformance.v2.json'); + await directory.load([ + '/static/da/appd.json', + 'http://localhost:4003/security-demo-appd.json', + '/static/da/local-conformance-2_0.v2.json', + // 'https://fdc3.finos.org/toolbox/fdc3-conformance/directories/website-conformance.v2.json' + ]); + const sc = new DemoServerContext(socket, directory); const channelDetails: ChannelState[] = [ diff --git a/toolbox/fdc3-for-web/demo/src/server/main.ts b/toolbox/fdc3-for-web/demo/src/server/main.ts index 6aba8031d..b291d85d1 100644 --- a/toolbox/fdc3-for-web/demo/src/server/main.ts +++ b/toolbox/fdc3-for-web/demo/src/server/main.ts @@ -9,9 +9,12 @@ app.get('/iframe', (_, res) => { res.send('Hello Vite + TypeScript!'); }); -const httpServer = ViteExpress.listen(app, 4000, () => - console.log('Server is listening on port 4000. Head to http://localhost:4000/static/da/index.html') -); +const httpServer = ViteExpress.listen(app, 4000, () => { + console.log('==============================================='); + console.log('FDC3 Demo Desktop Agent is listening on port 4000. '); + console.log('📱 Open your browser and navigate to: http://localhost:4000/static/da/index.html'); + console.log('==============================================='); +}); const io = new Server(httpServer); diff --git a/toolbox/fdc3-for-web/demo/static/embed/index.html b/toolbox/fdc3-for-web/demo/static/embed/index.html index cd43e7623..3e03be670 100644 --- a/toolbox/fdc3-for-web/demo/static/embed/index.html +++ b/toolbox/fdc3-for-web/demo/static/embed/index.html @@ -3,7 +3,7 @@ Desktop Agent - Embedded Communications Agent - + diff --git a/toolbox/fdc3-for-web/demo/tsconfig.json b/toolbox/fdc3-for-web/demo/tsconfig.json deleted file mode 100644 index 82975fe97..000000000 --- a/toolbox/fdc3-for-web/demo/tsconfig.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "module": "NodeNext", - "lib": [ - "ESNext", - "DOM" - ], - "moduleResolution": "NodeNext", - "strict": true, - "resolveJsonModule": true, - "isolatedModules": true, - "esModuleInterop": true, - "noEmit": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "skipLibCheck": true - }, - "include": [ - "src" - ], - "references": [ - { - "path": "../../../packages/fdc3-standard" - }, - { - "path": "../../../packages/fdc3-get-agent" - }, - { - "path": "../fdc3-web-impl" - } - ] -} \ No newline at end of file diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/package.json b/toolbox/fdc3-for-web/fdc3-web-impl/package.json index f1fb52d43..256b46516 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/package.json +++ b/toolbox/fdc3-for-web/fdc3-web-impl/package.json @@ -1,6 +1,6 @@ { "name": "@finos/fdc3-web-impl", - "version": "2.2.0", + "version": "2.3.0", "author": "Fintech Open Source Foundation (FINOS)", "homepage": "https://fdc3.finos.org", "repository": { @@ -24,7 +24,7 @@ "lint": "eslint src/" }, "dependencies": { - "@finos/fdc3-standard": "2.2.0", + "@finos/fdc3-standard": "2.3.0", "@types/uuid": "^10.0.0", "uuid": "^9.0.1" }, @@ -33,7 +33,7 @@ "@cucumber/html-formatter": "11.0.4", "@cucumber/pretty-formatter": "1.0.1", "@eslint/js": "^9.19.0", - "@finos/testing": "2.2.0", + "@finos/fdc3-testing": "2.3.0", "@types/expect": "24.3.0", "@types/lodash": "4.14.167", "@types/node": "^20.16.11", @@ -58,4 +58,4 @@ "typescript-eslint": "^8.17.0", "uuid": "^9.0.1" } -} +} \ No newline at end of file diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/app-channel.steps.ts b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/app-channel.steps.ts index 94218223b..68b7fe60b 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/app-channel.steps.ts +++ b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/app-channel.steps.ts @@ -1,7 +1,7 @@ import { When } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; import { createMeta } from './generic.steps'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; import { BrowserTypes } from '@finos/fdc3-schema'; type GetOrCreateChannelRequest = BrowserTypes.GetOrCreateChannelRequest; diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/broadcast.steps.ts b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/broadcast.steps.ts index 725da2fc7..17e5c7139 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/broadcast.steps.ts +++ b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/broadcast.steps.ts @@ -1,8 +1,8 @@ import { When } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; import { createMeta } from './generic.steps'; -import { } from '@finos/fdc3-standard'; -import { handleResolve } from '@finos/testing'; +import {} from '@finos/fdc3-standard'; +import { handleResolve } from '@finos/fdc3-testing'; import { contextMap } from './generic.steps'; import { BrowserTypes } from '@finos/fdc3-schema'; diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/intents.steps.ts b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/intents.steps.ts index 66d3b18bf..b4b4c65cf 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/intents.steps.ts +++ b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/intents.steps.ts @@ -2,7 +2,7 @@ import { DataTable, Given, When } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; import { DirectoryApp } from '../../src/directory/DirectoryInterface'; import { APP_FIELD, contextMap, createMeta } from './generic.steps'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; import { BrowserTypes } from '@finos/fdc3-schema'; type FindIntentRequest = BrowserTypes.FindIntentRequest; diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/messaging.steps.ts b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/messaging.steps.ts index 3e01dce25..ce6530f0f 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/messaging.steps.ts +++ b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/messaging.steps.ts @@ -1,7 +1,7 @@ import { DataTable, Then } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; import expect from 'expect'; -import { setupGenericSteps, matchData } from '@finos/testing'; +import { setupGenericSteps, matchData } from '@finos/fdc3-testing'; Then('messaging will have outgoing posts', function (this: CustomWorld, dt: DataTable) { // just take the last few posts and match those diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/private-channel.steps.ts b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/private-channel.steps.ts index 13d5bdc4b..0743bb5d1 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/private-channel.steps.ts +++ b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/private-channel.steps.ts @@ -2,7 +2,7 @@ import { When } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; import { createMeta } from './generic.steps'; import { BrowserTypes } from '@finos/fdc3-schema'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; type CreatePrivateChannelRequest = BrowserTypes.CreatePrivateChannelRequest; type PrivateChannelAddEventListenerRequest = BrowserTypes.PrivateChannelAddEventListenerRequest; diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/start-app.steps.ts b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/start-app.steps.ts index 009fde6ec..047d7e51e 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/start-app.steps.ts +++ b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/start-app.steps.ts @@ -1,7 +1,7 @@ import { DataTable, Then, When } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; import { contextMap, createMeta } from './generic.steps'; -import { matchData } from '@finos/testing'; +import { matchData } from '@finos/fdc3-testing'; import { BrowserTypes } from '@finos/fdc3-schema'; import { State } from '../../src/ServerContext'; import { GetInfoRequest } from '@finos/fdc3-schema/dist/generated/api/BrowserTypes'; diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/user-channel.steps.ts b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/user-channel.steps.ts index 1be54d6f3..812fbf65f 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/user-channel.steps.ts +++ b/toolbox/fdc3-for-web/fdc3-web-impl/test/step-definitions/user-channel.steps.ts @@ -2,7 +2,7 @@ import { When } from '@cucumber/cucumber'; import { CustomWorld } from '../world'; import { createMeta } from './generic.steps'; import { BrowserTypes } from '@finos/fdc3-schema'; -import { handleResolve } from '@finos/testing'; +import { handleResolve } from '@finos/fdc3-testing'; type GetUserChannelsRequest = BrowserTypes.GetUserChannelsRequest; type GetCurrentChannelRequest = BrowserTypes.GetCurrentChannelRequest; diff --git a/toolbox/fdc3-for-web/fdc3-web-impl/tsconfig.json b/toolbox/fdc3-for-web/fdc3-web-impl/tsconfig.json index 48425b660..964ad82f4 100644 --- a/toolbox/fdc3-for-web/fdc3-web-impl/tsconfig.json +++ b/toolbox/fdc3-for-web/fdc3-web-impl/tsconfig.json @@ -21,7 +21,7 @@ "path": "../../../packages/fdc3-standard" }, { - "path": "../../../packages/testing" + "path": "../../../packages/fdc3-testing" }, { "path": "../../../packages/fdc3-schema" diff --git a/toolbox/fdc3-for-web/reference-ui/package.json b/toolbox/fdc3-for-web/reference-ui/package.json index 0daad5f36..7e67d387d 100644 --- a/toolbox/fdc3-for-web/reference-ui/package.json +++ b/toolbox/fdc3-for-web/reference-ui/package.json @@ -1,7 +1,7 @@ { "name": "fdc3-for-web-reference-ui", "private": true, - "version": "2.2.0", + "version": "2.3.0", "license": "Apache-2.0", "type": "module", "scripts": { @@ -23,6 +23,6 @@ "vite": "^6.2.7" }, "dependencies": { - "@finos/fdc3": "2.2.0" + "@finos/fdc3": "2.3.0" } } diff --git a/toolbox/fdc3-security-implementation/README.md b/toolbox/fdc3-security-implementation/README.md new file mode 100644 index 000000000..214b5859c --- /dev/null +++ b/toolbox/fdc3-security-implementation/README.md @@ -0,0 +1,87 @@ +## The Demo + +This demo illustrates the FDC3 Security Interop flow across three main phases: user authentication, secure channel negotiation, and encrypted data exchange. + +```mermaid +%%{init: {'sequence': {'noteAlign': 'left'}}}%% + +sequenceDiagram + actor U as User + participant IDF as IDP Frontend + participant IDB as IDP Backend + participant A1F as App1 Frontend + participant A1B as App1 Backend + participant A2F as App2 Frontend + participant A2B as App2 Backend + + rect rgb(240, 240, 240) + Note right of U: 1. Login Phase + U-->>IDF: User login via OAuth + IDF->>IDB: fdc3.user credentials + Note over IDB: User credentials stored in session + + U-->>A1F: User Opens App1 + A1F->>IDF: Raise intent: GetUser + Note over A1F, IDF: {
type: "fdc3.user.request",
aud: https://app1,
jki: https://app1/.well-known/jwks.json
} + IDF->>IDB: Handle intent request + activate IDB + IDB->>IDB: AuthN & AuthZ + IDB->>IDF: Returns signed, encrypted fdc3.user context + deactivate IDB + IDF->>A1F: Intent resolution + Note over IDF, A1F: {
type: "fdc3.user",
__signature: ,
__encrypted: xxx
} + Note over IDF, A1F: JWT token scoped to App1, encrypted with App1's public key to avoid PII exposure + + A1F->>A1B: Pass encrypted fdc3.user to backend + activate A1B + A1B->>A1B: Decrypt, validate, authorize + Note right of A1B: App1 Backend now has a scoped JWT token for the logged-in user. + deactivate A1B + end + + + rect rgb(240, 240, 240) + Note right of U: 2. Negotiating A Channel + U-->>A1F: User wants prices for an instrument + A1F->>A1B: Signing request for prices + activate A1B + A1B->>A1B: AuthN & AuthZ + A1B->>A1F: Returns signed context + deactivate A1B + + A1F->>A2F: Raise intent: demo.GetPrices + Note over A1F, A2F: {
type: "fdc3.instrument",
__signature: ,
__jwt: xxx
} + A2F->>A2B: Relay request + activate A2B + A2B->>A2B: Authentication & Authorization + A2B->>A2B: Create symmetric key for channel + A2B->>A2B: Wrap symmetric key in App1 public key + A2B->>A2F: Approve, return wrapped key + deactivate A2B + A2F->>A1F: Return private channel + A2F->>A1F: Send wrapped key + Note over A2F, A1F: {
type: "fdc3.security.symmetricKey.response",
wrappedKey: xxx
} + + A1F->>A1B: Send key to App1 Back End + activate A1B + A1B->>A1B: Unwrap key + A1B->>A1B: Store key for channel + deactivate A1B + end + + rect rgb(240, 240, 240) + Note right of U: 3. Exchanging Secure Data + activate A2B + A2B->>A2B: Encrypt fdc3.valuation for publication with symmetric key + A2B->>A2F: Push encrypted content to front end + A2F->>A1F: broadcast context on private channel + Note over A2F, A1F: {
type: "fdc3.valuation",
__encrypted: xxx,
__signature:
} + A1F->>A1B: Push context to App1 Back End for decryption + activate A1B + A1B->>A1B: Check signature, decrypt + A1B->>A1F: Return display data + deactivate A1B + Note over A1B, A1F: { type: "fdc3.valuation", price: 24.4 } + end +``` + diff --git a/toolbox/fdc3-security-implementation/demo/app1/client/src/app1.ts b/toolbox/fdc3-security-implementation/demo/app1/client/src/app1.ts new file mode 100644 index 000000000..33af8691e --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/client/src/app1.ts @@ -0,0 +1,174 @@ +import { DesktopAgent, PrivateChannel } from '@finos/fdc3'; +import { createLogEntry } from '../../common/src/logging'; +import { checkSessionStatus, setupSessionStatusButton, setupLogoutButton } from '../../common/src/session-logic'; +import { FDC3Handlers } from '../../../../src/helpers/FDC3Handlers'; +import { connectRemoteHandlers } from '../../../../src/helpers/ClientSideHandlersImpl'; +import { Context, Instrument, UserRequest } from '@finos/fdc3-context'; +import { initializeFDC3 } from '../../common/src/fdc3'; +import { ExchangeDataMessage } from '../../../../src/helpers/MessageTypes'; + +async function raiseGetUserIntent(fdc3: DesktopAgent, remoteHandlers: FDC3Handlers, loginBtn: HTMLButtonElement) { + try { + loginBtn.disabled = true; + loginBtn.textContent = '🔄 Processing...'; + + const userRequest: UserRequest = { + type: 'fdc3.user.request', + aud: 'http://localhost:4003', + jku: 'http://localhost:4003/.well-known/jwks.json', + }; + + createLogEntry('info', '✅ Raising GetUser intent', { + result: userRequest, + timestamp: new Date().toISOString(), + }); + + const resolution = await fdc3.raiseIntent('GetUser', userRequest); + + const result1 = (await resolution.getResult()) as Context; + + createLogEntry('info', '✅ GetUser intent resolved successfully', { + result: result1, + timestamp: new Date().toISOString(), + }); + + const result2 = await remoteHandlers.exchangeData('user-request', result1); + + if (result2) { + createLogEntry('success', '✅ User Decoded', { + result: result2, + timestamp: new Date().toISOString(), + }); + } + } catch (error) { + createLogEntry('error', '❌ Failed to raise GetUser intent', { + error: error instanceof Error ? error.message : String(error), + timestamp: new Date().toISOString(), + }); + } finally { + loginBtn.disabled = false; + loginBtn.textContent = '🔐 Login (GetUser Intent)'; + } +} + +// Function to raise demo.GetPrices intent +async function raiseGetPricesIntent(fdc3: DesktopAgent, remoteHandlers: FDC3Handlers, pricesBtn: HTMLButtonElement) { + try { + pricesBtn.disabled = true; + pricesBtn.textContent = '🔄 Processing...'; + + createLogEntry('info', '📊 Raising demo.GetPrices Intent...', { + intent: 'demo.GetPrices', + timestamp: new Date().toISOString(), + }); + + const instrument: Instrument = { + type: 'fdc3.instrument', + id: { + ticker: 'AAPL', + }, + name: 'Apple Inc.', + }; + + const signedInstrument = (await remoteHandlers.exchangeData( + 'request-prices', + instrument, + 'demo.GetPrices' + )) as Context; + const resolution = await fdc3.raiseIntent('demo.GetPrices', signedInstrument); + + const result = await resolution.getResult(); + + createLogEntry('success', '✅ demo.GetPrices Intent raised successfully', { + intent: 'demo.GetPrices', + result: result, + timestamp: new Date().toISOString(), + }); + + if (result?.type == 'private') { + // ok, it's a private channel, this was expected + const pc: PrivateChannel = result as PrivateChannel; + remoteHandlers.handleRemoteChannel('demo.GetPrices', pc); + } else { + createLogEntry('error', '❌ Did not receive private channel', { + intent: 'demo.GetPrices', + error: result, + timestamp: new Date().toISOString(), + }); + } + + createLogEntry('info', '🔍 Waiting for context listener to be called...', { + timestamp: new Date().toISOString(), + }); + + return result; + } catch (error) { + createLogEntry('error', '❌ Failed to raise demo.GetPrices Intent', { + intent: 'demo.GetPrices', + error: error instanceof Error ? error.message : String(error), + timestamp: new Date().toISOString(), + }); + throw error; + } finally { + pricesBtn.disabled = false; + pricesBtn.textContent = '📊 Get Prices (demo.GetPrices Intent)'; + } +} + +// Set up button event listeners +function setupButtonListeners(fdc3: DesktopAgent, remoteHandlers: FDC3Handlers) { + const loginBtn = document.getElementById('login-btn') as HTMLButtonElement; + const pricesBtn = document.getElementById('prices-btn') as HTMLButtonElement; + + if (loginBtn) { + loginBtn.addEventListener('click', async () => { + await raiseGetUserIntent(fdc3, remoteHandlers, loginBtn); + }); + } + + if (pricesBtn) { + pricesBtn.addEventListener('click', async () => { + await raiseGetPricesIntent(fdc3, remoteHandlers, pricesBtn); + }); + } + + // Setup session status button using shared module + setupSessionStatusButton(remoteHandlers); +} + +function handleReturnedMessage(msg: ExchangeDataMessage) { + if (msg.ctx.__encrypted) { + createLogEntry('error', '❌ Got An Encrypted Price - Will Request Channel Key', { + context: msg.ctx, + timestamp: new Date().toISOString(), + }); + } else { + createLogEntry('success', '✅ Got A Price', { + context: msg.ctx, + timestamp: new Date().toISOString(), + }); + } +} + +// Main initialization +initializeFDC3() + .then(async fdc3 => { + createLogEntry('info', '🎯 App1 ready - buttons are now active', { + status: 'Ready', + buttons: ['Login', 'Get Prices', 'Check Session Status', 'Logout'], + timestamp: new Date().toISOString(), + }); + + connectRemoteHandlers('http://localhost:4003', fdc3, async msg => handleReturnedMessage(msg)).then( + remoteHandlers => { + setupButtonListeners(fdc3, remoteHandlers); + setupSessionStatusButton(remoteHandlers); + setupLogoutButton(remoteHandlers); + checkSessionStatus(remoteHandlers); + } + ); + }) + + .catch(error => { + console.error('Failed to initialize app1:', error); + }); diff --git a/toolbox/fdc3-security-implementation/demo/app1/common/src/fdc3.ts b/toolbox/fdc3-security-implementation/demo/app1/common/src/fdc3.ts new file mode 100644 index 000000000..f4f75102f --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/common/src/fdc3.ts @@ -0,0 +1,31 @@ +import { DesktopAgent, getAgent } from '@finos/fdc3'; +import { createLogEntry, updateStatus } from './logging'; + +// Initialize FDC3 connection +export async function initializeFDC3(): Promise { + try { + updateStatus('connecting', 'Connecting to FDC3 Agent...'); + createLogEntry('info', '🚀 Connecting to FDC3 Agent...', { + status: 'Initializing', + timestamp: new Date().toISOString(), + }); + + const fdc3 = await getAgent(); + + updateStatus('connected', 'Connected to FDC3 Agent'); + createLogEntry('success', '✅ Connected to FDC3 Agent successfully', { + agent: 'FDC3 Agent', + timestamp: new Date().toISOString(), + capabilities: 'Available', + }); + + return fdc3; + } catch (error) { + updateStatus('error', 'FDC3 Connection Failed'); + createLogEntry('error', '❌ Failed to connect to FDC3 Agent', { + error: error instanceof Error ? error.message : String(error), + timestamp: new Date().toISOString(), + }); + throw error; + } +} diff --git a/toolbox/fdc3-security-implementation/demo/app1/common/src/logging.ts b/toolbox/fdc3-security-implementation/demo/app1/common/src/logging.ts new file mode 100644 index 000000000..90578381d --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/common/src/logging.ts @@ -0,0 +1,104 @@ +// Shared logging utility for FDC3 demo apps + +// Update status function +export function updateStatus(status: string, message: string): void { + const statusEl = document.getElementById('status') as HTMLDivElement; + if (statusEl) { + statusEl.className = `status ${status}`; + statusEl.textContent = message; + } +} + +// Clear log function +export function clearLog(): void { + const log = document.getElementById('log'); + if (log) { + log.innerHTML = ''; + } +} + +export function createLogEntry( + type: 'success' | 'warning' | 'error' | 'info', + message: string, + details?: unknown, + channelInfo?: Record +) { + const log = document.getElementById('log'); + const entry = document.createElement('div'); + entry.className = `log-entry ${type}`; + + const timestamp = document.createElement('div'); + timestamp.className = 'log-timestamp'; + timestamp.textContent = new Date().toLocaleTimeString(); + + const messageEl = document.createElement('div'); + messageEl.className = 'log-message'; + messageEl.textContent = message; + + entry.appendChild(timestamp); + entry.appendChild(messageEl); + + if (details) { + const detailsEl = document.createElement('div'); + detailsEl.className = 'log-details collapsed'; + detailsEl.textContent = typeof details === 'string' ? details : JSON.stringify(details, null, 2); + + const expandBtn = document.createElement('button'); + expandBtn.className = 'expand-btn'; + expandBtn.textContent = 'Show Details'; + expandBtn.onclick = () => { + if (detailsEl.classList.contains('collapsed')) { + detailsEl.classList.remove('collapsed'); + expandBtn.textContent = 'Hide Details'; + } else { + detailsEl.classList.add('collapsed'); + expandBtn.textContent = 'Show Details'; + } + }; + + entry.appendChild(detailsEl); + entry.appendChild(expandBtn); + } + + if (channelInfo) { + const channelInfoEl = document.createElement('div'); + channelInfoEl.className = 'channel-info'; + + Object.entries(channelInfo).forEach(([key, value]) => { + const infoCard = document.createElement('div'); + infoCard.className = 'info-card'; + infoCard.innerHTML = ` +
${key}:
+
${value}
+ `; + channelInfoEl.appendChild(infoCard); + }); + + entry.appendChild(channelInfoEl); + } + + log?.appendChild(entry); + log?.scrollTo(0, log.scrollHeight); +} + +// Helper function to format context data nicely +export function formatContext(context: any): string { + if (context.type === 'fdc3.instrument') { + return `Instrument: ${context.id?.isin || 'Unknown ISIN'}`; + } else if (context.type === 'demo.counter') { + return `Counter: ${context.id?.bc || 'Unknown'}`; + } + return context.type; +} + +// Helper function to check authenticity status +export function getAuthenticityStatus(metadata: any): { status: string; message: string } { + const auth = metadata.authenticity; + if (auth?.verified && 'valid' in auth && auth.valid && 'publicKeyUrl' in auth) { + return { status: 'success', message: `✅ Verified from ${auth.publicKeyUrl}` }; + } else if (auth?.verified && 'valid' in auth && !auth.valid && 'publicKeyUrl' in auth) { + return { status: 'error', message: `❌ Verification failed for ${auth.publicKeyUrl}` }; + } else { + return { status: 'warning', message: '⚠️ No authenticity verification' }; + } +} diff --git a/toolbox/fdc3-security-implementation/demo/app1/common/src/server.ts b/toolbox/fdc3-security-implementation/demo/app1/common/src/server.ts new file mode 100644 index 000000000..b894cc0ac --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/common/src/server.ts @@ -0,0 +1,78 @@ +import { PrivateFDC3Security } from '@finos/fdc3-security'; +import express, { Express, NextFunction, Request, Response } from 'express'; +import { Server } from 'http'; +import ViteExpress from 'vite-express'; +import { createJosePrivateFDC3Security } from '../../../../src/JosePrivateFDC3Security'; +import { AllowListFunction, provisionJWKS } from '../../../../src/JosePublicFDC3Security'; + +export async function initializeServer( + port: number +): Promise<{ fdc3Security: PrivateFDC3Security; app: Express; server: Server }> { + const appUrl = `http://localhost:${port}`; + const app = express(); + + // For demo purposes, allow cross-origin domain calls + app.use((req: Request, res: Response, next: NextFunction) => { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); + res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization'); + next(); + }); + + const allowListFunction: AllowListFunction = (jku: string, iss?: string) => { + if (iss && !jku.startsWith(iss)) { + return false; + } + + // For demo purposes, allow localhost as well as any https url + // in production, this should be a more restrictive + return ['https://', 'http://localhost', 'http://127.0.0.1'].some(allowed => jku.startsWith(allowed)); + }; + + const fdc3Security = await createJosePrivateFDC3Security( + appUrl, + provisionJWKS, + allowListFunction, + 5 * 60, // 5 minutes validity + 'app1-signing-key', + 'app1-wrapping-key' + ); + + setupJWKSEndpoint(app, fdc3Security); + + const server = ViteExpress.listen(app, port, () => { + console.log('=========================================='); + console.log(`🚀 App running on ${appUrl}`); + console.log('📋 Available endpoints:'); + console.log(' GET /.well-known/jwks.json - Standard JWKS endpoint'); + console.log('=========================================='); + }); + + return { fdc3Security, app, server }; +} + +function setupJWKSEndpoint(app: Express, fdc3Security: PrivateFDC3Security) { + // .well-known/jwks.json endpoint (standard JWKS endpoint) + app.get('/.well-known/jwks.json', (req, res) => { + console.log('.well-known/jwks.json endpoint called'); + + if (!fdc3Security) { + console.log('FDC3 Security not initialized for .well-known/jwks.json request'); + return res.status(503).json({ error: 'FDC3 Security not initialized' }); + } + + try { + const publicKeys = fdc3Security.getPublicKeys(); + const jwks = { + keys: publicKeys, + }; + + console.log('.well-known/jwks.json generated successfully'); + res.setHeader('Content-Type', 'application/json'); + res.json(jwks); + } catch (error) { + console.error('Error generating .well-known/jwks.json:', error); + res.status(500).json({ error: 'Failed to generate JWKS' }); + } + }); +} diff --git a/toolbox/fdc3-security-implementation/demo/app1/common/src/session-logic.ts b/toolbox/fdc3-security-implementation/demo/app1/common/src/session-logic.ts new file mode 100644 index 000000000..c4dd0d5ba --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/common/src/session-logic.ts @@ -0,0 +1,104 @@ +// Shared session status utility for FDC3 demo apps +import { User } from '@finos/fdc3-context'; +import { createLogEntry } from './logging'; +import { FDC3Handlers } from '../../../../src/helpers/FDC3Handlers'; + +// Function to check session status +export async function checkSessionStatus(handlers: FDC3Handlers): Promise { + try { + createLogEntry('info', '🔍 Checking session status...', { + timestamp: new Date().toISOString(), + }); + + // Try both possible endpoints + const result = await handlers.exchangeData('user-request', { + type: 'fdc3.user.request', + }); + + showAuthenticatedState(result as User); + + createLogEntry('info', `📋 Session status`, result ?? 'No user found'); + } catch (error) { + createLogEntry('error', '❌ Failed to check session status', { + error: error instanceof Error ? error.message : String(error), + timestamp: new Date().toISOString(), + }); + throw error; + } +} + +// Function to logout +export async function logout(handlers: FDC3Handlers): Promise { + try { + createLogEntry('info', '🚪 Logging out...', { + timestamp: new Date().toISOString(), + }); + + const response = await handlers.exchangeData('user-logout', { + type: 'fdc3.nothing', + }); + + createLogEntry('success', '✅ Logged out successfully', { + timestamp: new Date().toISOString(), + }); + + showAuthenticatedState(null); + } catch (error) { + createLogEntry('error', '❌ Failed to logout', { + error: error instanceof Error ? error.message : String(error), + timestamp: new Date().toISOString(), + }); + throw error; + } +} + +// Function to setup session status button +export function setupSessionStatusButton(handlers: FDC3Handlers): void { + const sessionStatusBtn = document.getElementById('session-status-btn') as HTMLButtonElement; + + if (sessionStatusBtn) { + sessionStatusBtn.addEventListener('click', async () => { + try { + if (sessionStatusBtn) { + sessionStatusBtn.disabled = true; + sessionStatusBtn.textContent = '🔄 Checking...'; + } + await checkSessionStatus(handlers); + } catch (error) { + console.error('Session status check failed:', error); + } finally { + if (sessionStatusBtn) { + sessionStatusBtn.disabled = false; + sessionStatusBtn.textContent = '🔍 Check Session Status'; + } + } + }); + } +} + +export function setupLogoutButton(handlers: FDC3Handlers): void { + const logoutBtn = document.getElementById('logout-btn') as HTMLButtonElement; + if (logoutBtn) { + logoutBtn.addEventListener('click', async () => { + await logout(handlers); + }); + } +} + +export function showAuthenticatedState(currentUser: User | null): void { + const loginBtn = document.getElementById('login-btn') as HTMLButtonElement; + const logoutBtn = document.getElementById('logout-btn') as HTMLButtonElement; + const userInfo = document.getElementById('user-info') as HTMLDivElement; + const userName = document.getElementById('user-name') as HTMLSpanElement; + + if (currentUser) { + if (loginBtn) loginBtn.style.display = 'none'; + if (logoutBtn) logoutBtn.style.display = 'inline-block'; + if (userInfo) userInfo.style.display = 'block'; + if (userName) userName.textContent = currentUser?.email; + } else { + if (loginBtn) loginBtn.style.display = 'inline-block'; + if (logoutBtn) logoutBtn.style.display = 'none'; + if (userInfo) userInfo.style.display = 'none'; + } +} diff --git a/toolbox/fdc3-security-implementation/demo/app1/common/styles.css b/toolbox/fdc3-security-implementation/demo/app1/common/styles.css new file mode 100644 index 000000000..e08301e36 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/common/styles.css @@ -0,0 +1,347 @@ +/* FDC3 Security Demo - Shared Styles */ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + min-height: 100vh; + color: #333; +} + +.container { + max-width: 1200px; + margin: 0 auto; + padding: 20px; +} + +.header { + text-align: center; + margin-bottom: 30px; + color: white; +} + +.header h1 { + font-size: 2.5rem; + margin-bottom: 10px; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); +} + +.header p { + font-size: 1.2rem; + opacity: 0.9; +} + +.status-bar { + background: rgba(255, 255, 255, 0.95); + border-radius: 10px; + padding: 20px; + margin-bottom: 20px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); +} + +.status-indicator { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 8px 16px; + border-radius: 20px; + font-weight: 600; + font-size: 0.9rem; +} + +.status-connecting { + background: #fff3cd; + color: #856404; + border: 1px solid #ffeaa7; +} + +.status-connected { + background: #d4edda; + color: #155724; + border: 1px solid #c3e6cb; +} + +.status-error { + background: #f8d7da; + color: #721c24; + border: 1px solid #f5c6cb; +} + +.action-bar { + background: rgba(255, 255, 255, 0.95); + border-radius: 10px; + padding: 20px; + margin-bottom: 20px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); + text-align: center; +} + +.action-btn { + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + color: white; + border: none; + padding: 15px 30px; + border-radius: 25px; + font-size: 1.1rem; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); +} + +.action-btn:hover { + transform: translateY(-2px); + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3); +} + +.action-btn:active { + transform: translateY(0); +} + +.action-btn:disabled { + background: #6c757d; + cursor: not-allowed; + transform: none; + box-shadow: none; +} + +.log-container { + background: rgba(255, 255, 255, 0.95); + border-radius: 10px; + padding: 20px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); + min-height: 400px; +} + +.log-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20px; + padding-bottom: 10px; + border-bottom: 2px solid #e9ecef; +} + +.log-title { + font-size: 1.5rem; + font-weight: 600; + color: #495057; +} + +.clear-btn { + background: #dc3545; + color: white; + border: none; + padding: 8px 16px; + border-radius: 5px; + cursor: pointer; + font-size: 0.9rem; + transition: background-color 0.3s; +} + +.clear-btn:hover { + background: #c82333; +} + +.log-content { + max-height: 500px; + overflow-y: auto; + padding: 10px; + background: #f8f9fa; + border-radius: 5px; + border: 1px solid #e9ecef; +} + +.log-entry { + margin-bottom: 15px; + padding: 15px; + border-radius: 8px; + border-left: 4px solid #007bff; + background: white; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + animation: slideIn 0.3s ease-out; +} + +.log-entry.success { + border-left-color: #28a745; + background: linear-gradient(135deg, #d4edda 0%, #c3e6cb 100%); +} + +.log-entry.warning { + border-left-color: #ffc107; + background: linear-gradient(135deg, #fff3cd 0%, #ffeaa7 100%); +} + +.log-entry.error { + border-left-color: #dc3545; + background: linear-gradient(135deg, #f8d7da 0%, #f5c6cb 100%); +} + +.log-entry.info { + border-left-color: #17a2b8; + background: linear-gradient(135deg, #d1ecf1 0%, #bee5eb 100%); +} + +.log-timestamp { + font-size: 0.8rem; + color: #6c757d; + margin-bottom: 5px; +} + +.log-message { + font-weight: 600; + margin-bottom: 8px; + color: #495057; +} + +.log-details { + font-family: 'Courier New', monospace; + font-size: 0.85rem; + background: #f8f9fa; + padding: 10px; + border-radius: 4px; + border: 1px solid #e9ecef; + overflow-x: auto; + white-space: pre-wrap; + word-break: break-word; +} + +.log-details.collapsed { + max-height: 100px; + overflow: hidden; + position: relative; +} + +.log-details.collapsed::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 20px; + background: linear-gradient(transparent, #f8f9fa); +} + +.expand-btn { + background: none; + border: none; + color: #007bff; + cursor: pointer; + font-size: 0.8rem; + text-decoration: underline; + margin-top: 5px; +} + +.expand-btn:hover { + color: #0056b3; +} + +.channel-info { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 15px; + margin-top: 15px; +} + +.info-card { + background: #e9ecef; + padding: 10px; + border-radius: 5px; + font-size: 0.9rem; +} + +.info-label { + font-weight: 600; + color: #495057; +} + +.info-value { + color: #6c757d; + word-break: break-all; +} + +.encryption-badge { + display: inline-block; + padding: 4px 8px; + border-radius: 12px; + font-size: 0.75rem; + font-weight: 600; + margin-left: 8px; +} + +.encryption-encrypted { + background: #fff3cd; + color: #856404; +} + +.encryption-decrypted { + background: #d4edda; + color: #155724; +} + +.encryption-cant-decrypt { + background: #f8d7da; + color: #721c24; +} + +.encryption-not-encrypted { + background: #e2e3e5; + color: #383d41; +} + +.encryption-unknown { + background: #f8f9fa; + color: #6c757d; +} + +@keyframes slideIn { + from { + opacity: 0; + transform: translateY(-10px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes pulse { + 0% { + transform: scale(1); + } + + 50% { + transform: scale(1.05); + } + + 100% { + transform: scale(1); + } +} + +.pulse { + animation: pulse 2s infinite; +} + +@media (max-width: 768px) { + .container { + padding: 10px; + } + + .header h1 { + font-size: 2rem; + } + + .log-container { + padding: 15px; + } +} diff --git a/toolbox/fdc3-security-implementation/demo/app1/index.html b/toolbox/fdc3-security-implementation/demo/app1/index.html new file mode 100644 index 000000000..1597fd406 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/index.html @@ -0,0 +1,63 @@ + + + App1: FDC3 Demo + + + + + + + +
+
+

🔐 App1: FDC3 Intent Demo

+

FDC3 Security Demo

+
+ +
+
+ + Connecting... +
+
+ +
+ + + + +
+ +
+
+

Activity Log

+ +
+
+ +
+
+
+ + + + diff --git a/toolbox/fdc3-security-implementation/demo/app1/security-demo-appd.json b/toolbox/fdc3-security-implementation/demo/app1/security-demo-appd.json new file mode 100644 index 000000000..d3d5afbe5 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/security-demo-appd.json @@ -0,0 +1,92 @@ +{ + "applications": [ + { + "appId": "sp1", + "name": "Security POC 1", + "title": "Security POC 1: Needs Prices", + "description": "Requests prices from POC 2", + "type": "web", + "details": { + "url": "http://localhost:4003" + }, + "hostManifests": {}, + "version": "1.0.0", + "publisher": "FINOS", + "icons": [] + }, + { + "appId": "sp2", + "name": "Security POC 2", + "title": "Security POC 2: Responds to GetPrices intent", + "description": "Creates a private channel to broadcast encrypted prices", + "type": "web", + "details": { + "url": "http://localhost:4004" + }, + "hostManifests": {}, + "version": "1.0.0", + "publisher": "FINOS", + "icons": [], + "interop": { + "intents": { + "listensFor": { + "demo.GetPrices": { + "displayName": "Get Prices", + "contexts": [ + "fdc3.instrument" + ], + "resultType": "channel" + } + } + } + } + }, + { + "appId": "idp", + "name": "IDP Example", + "title": "IDP", + "description": "Identity Provider, used by the security POC apps to get a JWT", + "type": "web", + "details": { + "url": "http://localhost:4005" + }, + "interop": { + "intents": { + "listensFor": { + "GetUser": { + "displayName": "Retrieve the User JWT", + "contexts": [ + "fdc3.user.request" + ], + "resultType": "fdc3.user" + } + } + } + } + }, + { + "appId": "entra", + "name": "Entra Example", + "title": "Entra", + "description": "Entra, used by the security POC apps to get a JWT", + "type": "web", + "details": { + "url": "http://localhost:4006" + }, + "interop": { + "intents": { + "listensFor": { + "GetUser": { + "displayName": "Retrieve the User JWT", + "contexts": [ + "fdc3.user.request" + ], + "resultType": "fdc3.user" + } + } + } + } + } + ], + "message": "OK" +} \ No newline at end of file diff --git a/toolbox/fdc3-security-implementation/demo/app1/server/App1BusinessLogic.ts b/toolbox/fdc3-security-implementation/demo/app1/server/App1BusinessLogic.ts new file mode 100644 index 000000000..f4ca8cfce --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/server/App1BusinessLogic.ts @@ -0,0 +1,71 @@ +import { Channel, IntentHandler, PrivateChannel } from '@finos/fdc3'; +import { Context, User } from '@finos/fdc3-context'; +import { + EncryptingChannelDelegate, + MessageAuthenticity, + PrivateFDC3Security, + signedContext, +} from '@finos/fdc3-security'; +import { checkSignature, ContextMetadataWithAuthenticity } from '@finos/fdc3-security/dist/src/signing/SigningSupport'; +import { createSymmetricKeyResponseContextListener } from '../../../src/helpers/SymmetricKeyContextListener'; +import { ExchangeDataMessage } from '../../../src/helpers/MessageTypes'; + +export const GET_PRICES_PURPOSE = 'price-stream'; + +export class App1BusinessLogic { + private fdc3Security: PrivateFDC3Security; + private callback: (ctx: ExchangeDataMessage) => void; + private user: User | null = null; + + constructor(fdc3Security: PrivateFDC3Security, callback: (ctx: ExchangeDataMessage) => void) { + this.fdc3Security = fdc3Security; + this.callback = callback; + } + + async exchangeData(purpose: string, ctx: Context, intent?: string, channelId?: string): Promise { + if (purpose === 'user-request') { + if (this.user) { + return this.user; + } + + const { context, meta } = await checkSignature(this.fdc3Security, undefined, ctx, 'GetUser', null); + const ma = meta?.authenticity as MessageAuthenticity; + if (ma.signed && ma.trusted && ma.valid) { + // ok we can use the returned token + const decryptedUser = await this.fdc3Security.decryptPrivateKey(context.__encrypted); + if (decryptedUser.type === 'fdc3.user') { + this.user = decryptedUser as User; + return this.user; + } + } + } else if (purpose === 'user-logout') { + this.user = null; + } else if (purpose === 'request-prices' && intent === 'demo.GetPrices') { + if (this.user) { + ctx.__jwt = this.user?.jwt; + } + + return await signedContext(this.fdc3Security, ctx, intent, null); + } + } + + async remoteIntentHandler(intent: string): Promise { + throw new Error("App1 Doesn't handle intents"); + } + + async handleRemoteChannel(purpose: string, channel: Channel): Promise { + console.log('handleRemoteChannel', purpose, channel); + if (purpose == 'demo.GetPrices') { + // this is a channel created for get prices. + const encryptedChannel = new EncryptingChannelDelegate(channel as PrivateChannel, this.fdc3Security); + + // ask for the symmetric key if we get things that are encrypted + await createSymmetricKeyResponseContextListener(this.fdc3Security, encryptedChannel); + + encryptedChannel.addContextListener('fdc3.valuation', async (ctx, metadata: ContextMetadataWithAuthenticity) => { + console.log('context listener called', ctx, metadata); + this.callback({ ctx, purpose: 'valuation' }); + }); + } + } +} diff --git a/toolbox/fdc3-security-implementation/demo/app1/server/index.ts b/toolbox/fdc3-security-implementation/demo/app1/server/index.ts new file mode 100644 index 000000000..4da896ce6 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/server/index.ts @@ -0,0 +1,18 @@ +import { initializeServer } from '../common/src/server'; +import { setupWebsocketServer } from '../../../src/helpers/ServerSideHandlersImpl'; +import { App1BusinessLogic } from './App1BusinessLogic'; +import { EXCHANGE_DATA } from '../../../src/helpers/MessageTypes'; + +initializeServer(4003).then(({ fdc3Security, app, server }) => { + setupWebsocketServer( + server, + socket => { + console.log('Disconnected', socket); + }, + socket => + new App1BusinessLogic(fdc3Security, msg => { + console.log('Sending back a message', msg); + socket.emit(EXCHANGE_DATA, msg); + }) + ); +}); diff --git a/toolbox/fdc3-security-implementation/demo/app1/symphony-appd.json b/toolbox/fdc3-security-implementation/demo/app1/symphony-appd.json new file mode 100644 index 000000000..da2811a4d --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app1/symphony-appd.json @@ -0,0 +1,28 @@ +{ + "applications": [ + { + "appId": "Symphony", + "name": "Symphony", + "title": "Symphony", + "description": "Symphony, used by the security POC apps to get a JWT", + "type": "web", + "details": { + "url": "https://develop2.symphony.com/apps/client2/innovate?spApps=symphony-fdc3:innovate" + }, + "interop": { + "intents": { + "listensFor": { + "GetUser": { + "displayName": "Retrieve the User JWT", + "contexts": [ + "fdc3.user.request" + ], + "resultType": "fdc3.user" + } + } + } + } + } + ], + "message": "OK" +} \ No newline at end of file diff --git a/toolbox/fdc3-security-implementation/demo/app2/client/src/sp2.ts b/toolbox/fdc3-security-implementation/demo/app2/client/src/sp2.ts new file mode 100644 index 000000000..d755229bf --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app2/client/src/sp2.ts @@ -0,0 +1,41 @@ +import { DesktopAgent, Context, ContextMetadata } from '@finos/fdc3'; +import { createLogEntry } from '../../../app1/common/src/logging'; +import { initializeFDC3 } from '../../../app1/common/src/fdc3'; +import { connectRemoteHandlers } from '../../../../src/helpers/ClientSideHandlersImpl'; +import { FDC3Handlers } from '../../../../src/helpers/FDC3Handlers'; +import { ExchangeDataMessage } from '../../../../src/helpers/MessageTypes'; + +async function setupIntentListener(fdc3: DesktopAgent, remoteHandlers: FDC3Handlers) { + const intentHandler = await remoteHandlers.remoteIntentHandler('demo.GetPrices'); + + fdc3.addIntentListener('demo.GetPrices', async (context: Context, metadata?: ContextMetadata) => { + createLogEntry('info', 'demo.GetPrices intent received', context); + const ss = await intentHandler(context, metadata); + createLogEntry('success', 'demo.GetPrices intent result', ss); + return ss; + }); +} + +function logReturnedMessage(msg: ExchangeDataMessage) { + console.log('logReturnedMessage', msg); + createLogEntry('success', '✅ Published A Price', { + context: msg.ctx, + }); +} + +// Main initialization +initializeFDC3() + .then(async fdc3 => { + createLogEntry('info', '🎯 App2 ready - listening for demo.GetPrices', { + status: 'Ready', + timestamp: new Date().toISOString(), + }); + + connectRemoteHandlers('http://localhost:4004', fdc3, async msg => logReturnedMessage(msg)).then(remoteHandlers => { + setupIntentListener(fdc3, remoteHandlers); + }); + }) + + .catch(error => { + console.error('Failed to initialize app1:', error); + }); diff --git a/toolbox/fdc3-security-implementation/demo/app2/index.html b/toolbox/fdc3-security-implementation/demo/app2/index.html new file mode 100644 index 000000000..75a8bddb0 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app2/index.html @@ -0,0 +1,48 @@ + + + SP2: Private Channel Broadcaster + + + + + + + +
+
+

🔐 FDC3 Security Demo

+

SP2: Private Channel Broadcaster

+
+ +
+
+ + Connecting... +
+
+ +
+
+

Activity Log

+ +
+
+ +
+
+
+ + + + diff --git a/toolbox/fdc3-security-implementation/demo/app2/server/App2BusinessLogic.ts b/toolbox/fdc3-security-implementation/demo/app2/server/App2BusinessLogic.ts new file mode 100644 index 000000000..430c0c094 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app2/server/App2BusinessLogic.ts @@ -0,0 +1,96 @@ +import { + Channel, + ContextMetadata, + EncryptingChannelDelegate, + IntentHandler, + PrivateChannel, + PrivateFDC3Security, + SigningChannelDelegate, +} from '@finos/fdc3'; +import { Context, Valuation } from '@finos/fdc3-context'; +import { FDC3Handlers } from '../../../src/helpers/FDC3Handlers'; +import { createSymmetricKeyRequestContextListener } from '../../../src/helpers/SymmetricKeyContextListener'; +import { ExchangeDataMessage } from '../../../src/helpers/MessageTypes'; +/** + * NB: App2 doesn't have a session. It checks each request in turn for signatures and user details. + */ +export class App2BusinessLogic implements FDC3Handlers { + callback: (ctx: ExchangeDataMessage) => void; + + constructor( + private readonly fdc3Security: PrivateFDC3Security, + callback: (ctx: ExchangeDataMessage) => void + ) { + this.callback = callback; + } + + async handleRemoteChannel(purpose: string, channel: Channel): Promise { + if (purpose == 'demo.GetPrices') { + // this is a channel created for get prices. + const encryptedChannel = new EncryptingChannelDelegate(channel as PrivateChannel, this.fdc3Security); + + // make sure we encrypt all valuations on the channel + await encryptedChannel.setChannelEncryption(type => type == 'fdc3.valuation'); + + // listens for requests for the channel's symmetric key from valuation recipients + await createSymmetricKeyRequestContextListener(this.fdc3Security, encryptedChannel); + + for (let i = 0; i < 5; i++) { + setTimeout(async () => { + const ctx: Valuation = { + type: 'fdc3.valuation', + currency: 'Dollars', + CURRENCY_ISOCODE: 'USD', + price: 100 + i, + value: 100 + i, + }; + await encryptedChannel.broadcast(ctx); + console.log('broadcast complete ' + i); + this.callback({ ctx, purpose: 'valuation' }); + }, i * 1000); + } + + setTimeout(async () => encryptedChannel.disconnect(), 10000); + } + } + + async remoteIntentHandler(intent: string): Promise { + if (intent == 'demo.GetPrices') { + const ih: IntentHandler = async (ctx: Context, metadata: ContextMetadata | undefined) => { + // first, check the signature + const sig = ctx.__signature; + delete ctx.__signature; + const ma = await this.fdc3Security.check(sig, ctx, intent, null); + if (ma.signed && ma.trusted && ma.valid) { + // now, check the user. + const userJwt = ctx.__jwt; + if (userJwt) { + const user = await this.fdc3Security.verifyJWTToken(userJwt); + + if (user.sub == 'demo-user@example.com' && user.aud == 'http://localhost:4003') { + // ok, we trust this user / app combination. + // return a price. + + return { + type: 'private', + }; + } + } + } + + return { + type: 'fdc3.error', + error: `Unauthorized: ${JSON.stringify(ctx)}`, + }; + }; + + return ih; + } else { + throw new Error('Invalid intent'); + } + } + + async exchangeData(purpose: string, ctx: Context): Promise { + throw new Error('Method not implemented.'); + } +} diff --git a/toolbox/fdc3-security-implementation/demo/app2/server/index.ts b/toolbox/fdc3-security-implementation/demo/app2/server/index.ts new file mode 100644 index 000000000..63dc9e0c4 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/app2/server/index.ts @@ -0,0 +1,20 @@ +import { EXCHANGE_DATA } from '../../../src/helpers/MessageTypes'; +import { setupWebsocketServer } from '../../../src/helpers/ServerSideHandlersImpl'; +import { initializeServer } from '../../app1/common/src/server'; +import { App2BusinessLogic } from './App2BusinessLogic'; + +const PORT = 4004; + +initializeServer(PORT).then(({ fdc3Security, app, server }) => { + setupWebsocketServer( + server, + socket => { + console.log('Disconnected', socket); + }, + socket => + new App2BusinessLogic(fdc3Security, msg => { + console.log('Sending back a message', msg); + socket.emit(EXCHANGE_DATA, msg); + }) + ); +}); diff --git a/toolbox/fdc3-security-implementation/demo/entra-app/README.md b/toolbox/fdc3-security-implementation/demo/entra-app/README.md new file mode 100644 index 000000000..030352836 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/entra-app/README.md @@ -0,0 +1,102 @@ +# Microsoft Entra ID Integration for FDC3 Security Demo + +This app demonstrates how to integrate Microsoft Entra ID (formerly Azure AD) with FDC3 security features. + +## Overview + +The Microsoft Entra app follows the same pattern as the IDP app but integrates with Microsoft's identity platform instead of using a simple demo authentication. + +## Features + +- Microsoft Entra ID authentication using MSAL (Microsoft Authentication Library) +- FDC3 User context creation from Microsoft account information +- JWT token validation for Microsoft Entra ID tokens +- Secure user data exchange through FDC3 intents + +## Setup Instructions + +### 1. Azure AD App Registration + +To use this app with a real Microsoft Entra ID tenant, you need to: + +1. Go to the [Azure Portal](https://portal.azure.com) +2. Navigate to "Azure Active Directory" > "App registrations" +3. Click "New registration" +4. Configure the app: + - Name: "FDC3 Security Demo" + - Supported account types: "Accounts in this organizational directory only" + - Redirect URI: Web - `http://localhost:4006` (or your preferred port) +5. Note down the Application (client) ID and Directory (tenant) ID +6. Go to "Authentication" and add the redirect URI +7. Go to "API permissions" and add "User.Read" permission + +### 2. Configuration + +The app supports multiple configuration methods: + +#### Option A: Environment Variables (Recommended) +Create a `.env` file in the entra-app directory: + +```bash +# Microsoft Entra ID Configuration +# Copy these values from your Azure Portal app registration +ENTRA_CLIENT_ID=your-client-id-here +ENTRA_AUTHORITY=https://login.microsoftonline.com/your-tenant-id-here +ENTRA_REDIRECT_URI=http://localhost:4006 +``` + +#### Option B: Direct Configuration +Update the values directly in `src/entra-config.ts`: + +```typescript +export const ENTRA_CONFIG: EntraConfig = { + clientId: 'your-client-id-here', + authority: 'https://login.microsoftonline.com/your-tenant-id-here', + redirectUri: 'http://localhost:4006', +}; +``` + +#### Option C: Server Configuration Endpoint +The server will read environment variables and serve them to the client via the `/api/config` endpoint. This ensures your credentials are not exposed in the client-side code. + + +## Running the App + +1. Start the development server: + ```bash + npm run start:entra-app + ``` + +2. Open your browser to `http://localhost:4006` + +3. Click "Log In with Microsoft" to authenticate + +## Security Considerations + +- The current implementation uses mock authentication for demo purposes +- In production, implement proper JWT token validation using Microsoft's public keys +- Validate all claims in the ID token (issuer, audience, expiration, etc.) +- Use HTTPS in production environments +- Implement proper error handling and logging + +## Architecture + +- **Client-side**: Handles Microsoft Entra authentication and FDC3 user context creation +- **Server-side**: Validates Microsoft tokens and manages FDC3 security operations +- **Port**: 4006 (different from other demo apps to avoid conflicts) + +## Integration with FDC3 + +The app integrates with FDC3 by: + +1. Authenticating users with Microsoft Entra ID +2. Creating FDC3 User contexts from Microsoft account information +3. Handling GetUser intents with proper security validation +4. Supporting encrypted and signed user data exchange + +## Troubleshooting + +- Ensure the redirect URI in Azure AD matches your application URL +- Check that the client ID and tenant ID are correct +- Verify that the required permissions are granted in Azure AD +- Check browser console for authentication errors diff --git a/toolbox/fdc3-security-implementation/demo/entra-app/SETUP_GUIDE.md b/toolbox/fdc3-security-implementation/demo/entra-app/SETUP_GUIDE.md new file mode 100644 index 000000000..fe78f1be3 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/entra-app/SETUP_GUIDE.md @@ -0,0 +1,90 @@ +# Microsoft Entra ID Free Setup Guide for FDC3 Demo + +This guide will help you set up the FDC3 Microsoft Entra integration using your free Entra ID subscription. + +## Prerequisites + +- Microsoft Entra ID Free subscription +- Access to Azure Portal +- Admin rights to create app registrations + +## Step 1: Create App Registration + +1. **Go to Azure Portal** + - Navigate to [portal.azure.com](https://portal.azure.com) + - Sign in with your Microsoft account + +2. **Access Entra ID** + - Search for "Entra ID" in the search bar + - Click on "Microsoft Entra ID" + +3. **Create New App Registration** + - Click "App registrations" in the left menu + - Click "New registration" + - Fill in the details: + - **Name**: `FDC3 Security Demo` + - **Supported account types**: `Accounts in this organizational directory only` + - **Redirect URI**: `Web` - `http://localhost:4006` + - Click "Register" + +4. **Note Your Credentials** + - Copy the **Application (client) ID** - you'll need this + - Copy the **Directory (tenant) ID** - you'll need this + +## Step 2: Configure Authentication + +1. **Add Redirect URI** + - In your app registration, go to "Authentication" + - Under "Single-page application", click "Add URI" + - Add: `http://localhost:4006` + - Click "Save" + +2. **Configure Implicit Grant** + - In the same Authentication page + - Under "Implicit grant and hybrid flows" + - Check "ID tokens (used for implicit and hybrid flows)" + - Click "Save" + +## Step 3: Set API Permissions + +1. **Add Microsoft Graph Permissions** + - Go to "API permissions" + - Click "Add a permission" + - Select "Microsoft Graph" + - Choose "Delegated permissions" + - Find and select "User.Read" + - Click "Add permissions" + +2. **Grant Admin Consent** (if needed) + - Click "Grant admin consent for [Your Organization]" + - Confirm the action + +## Step 4: Configure Your FDC3 App + +1. **Update Environment Variables** + +``` +export function getEntraConfig(): EntraConfig { + return { + clientId: "62855256-b4f2-406f-9878-be85128aa4f7", + authority: 'https://login.microsoftonline.com/445c1fc6-7e1e-46dd-8835-9075a151049a', + redirectUri: 'http://localhost:4006' + }; +} +``` + +## Step 5: Create Test Users + +### Option A: Use Your Admin Account +- You can test with your own Microsoft account (the one you used to create the tenant) + +### Option B: Create Test Users (if you have admin rights) +1. Go to "Users" in Entra ID +2. Click "New user" +3. Create test users for your organization + +### Option C: Use Personal Microsoft Accounts +- Modify the app registration to support "Personal Microsoft accounts only" +- This allows any Microsoft account to sign in + + diff --git a/toolbox/fdc3-security-implementation/demo/entra-app/client/src/entra.ts b/toolbox/fdc3-security-implementation/demo/entra-app/client/src/entra.ts new file mode 100644 index 000000000..bc33caf41 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/entra-app/client/src/entra.ts @@ -0,0 +1,150 @@ +import { DesktopAgent, Context, ContextMetadata, User } from '@finos/fdc3'; +import { createLogEntry, updateStatus, clearLog } from '../../../app1/common/src/logging'; +import { initializeFDC3 } from '../../../app1/common/src/fdc3'; +import { FDC3Handlers } from '../../../../src/helpers/FDC3Handlers'; +import { connectRemoteHandlers } from '../../../../src/helpers/ClientSideHandlersImpl'; +import { setupSessionStatusButton, showAuthenticatedState } from '../../../app1/common/src/session-logic'; +import { PublicClientApplication, Configuration, AuthenticationResult } from '@azure/msal-browser'; +import { getEntraConfig } from '../../src/config'; + +// MSAL instance will be created after configuration is loaded +let msalInstance: PublicClientApplication; + +// Function to load configuration and create MSAL config +async function loadConfiguration(): Promise { + const config = await getEntraConfig(); + + // Create MSAL configuration + const msalConfig: Configuration = { + auth: { + clientId: config.clientId, + authority: config.authority, + redirectUri: config.redirectUri, + }, + cache: { + cacheLocation: 'sessionStorage', + storeAuthStateInCookie: false, + }, + }; + + createLogEntry('info', 'Configuration loaded', config); + return msalConfig; +} + +// Setup FDC3 event listeners +async function setupLoginButton(handlers: FDC3Handlers): Promise { + const loginBtn = document.getElementById('login-btn') as HTMLButtonElement; + loginBtn.addEventListener('click', async () => { + try { + createLogEntry('info', 'Starting Microsoft Entra login', ''); + + // Perform Microsoft Entra login using popup + const loginRequest = { + scopes: ['User.Read'], + prompt: 'select_account', + }; + + const authResult: AuthenticationResult = await msalInstance.loginPopup(loginRequest); + createLogEntry('success', 'Microsoft Entra login successful', authResult.account); + + // Pass the token back to the server-side for validation + const fdc3User: User = { + type: 'fdc3.user', + jwt: authResult.idToken, // Use the ID token as JWT + }; + const result = await handlers.exchangeData('user-data', fdc3User); + + if (result?.type === 'fdc3.user') { + showAuthenticatedState(result as User); + createLogEntry('success', 'FDC3 User context created', result); + } else { + createLogEntry('success', 'User Logged out', ``); + showAuthenticatedState(null); + } + } catch (error) { + console.error('Microsoft Entra login error:', error); + createLogEntry('error', 'Microsoft Entra Login Error', (error as Error).message); + throw error; + } + }); +} + +async function setupLogoutButton(handlers: FDC3Handlers): Promise { + const logoutBtn = document.getElementById('logout-btn') as HTMLButtonElement; + logoutBtn.addEventListener('click', async () => { + try { + // Get current account + const currentAccount = msalInstance.getActiveAccount(); + + if (currentAccount) { + // Logout from Microsoft Entra + const logoutRequest = { + account: currentAccount, + postLogoutRedirectUri: window.location.origin, + }; + + await msalInstance.logoutPopup(logoutRequest); + createLogEntry('info', 'Microsoft Entra logout successful', ''); + } + + // Logout from FDC3 + await handlers.exchangeData('user-logout', { type: 'fdc3.user.logout' }); + showAuthenticatedState(null); + createLogEntry('success', 'FDC3 logout successful', ''); + } catch (error) { + console.error('Logout error:', error); + createLogEntry('error', 'Logout Error', (error as Error).message); + } + }); +} + +async function setupLoginIntentHandler(fdc3: DesktopAgent, handlers: FDC3Handlers): Promise { + const intentHandler = await handlers.remoteIntentHandler('GetUser'); + + fdc3.addIntentListener('GetUser', async (context: Context, metadata: ContextMetadata | undefined) => { + createLogEntry('info', 'GetUser intent received', context); + + const ss = await intentHandler(context, metadata); + createLogEntry('success', 'GetUser intent result', ss); + return ss; + }); +} + +// Initialize the application +async function initialize(): Promise { + // Load configuration and create MSAL config + const msalConfig = await loadConfiguration(); + + // Create MSAL instance with loaded configuration + msalInstance = new PublicClientApplication(msalConfig); + + // Initialize MSAL + await msalInstance.initialize(); + + // Check if user is already logged in + const accounts = msalInstance.getAllAccounts(); + if (accounts.length > 0) { + msalInstance.setActiveAccount(accounts[0]); + createLogEntry('info', 'User already authenticated', accounts[0]); + } + + // Initialize FDC3 + const fdc3 = await initializeFDC3(); + + connectRemoteHandlers('http://localhost:4006', fdc3, async () => {}).then(remoteHandlers => { + setupSessionStatusButton(remoteHandlers); + setupLogoutButton(remoteHandlers); + setupLoginButton(remoteHandlers); + showAuthenticatedState(null); + setupLoginIntentHandler(fdc3, remoteHandlers); + + createLogEntry('info', 'Microsoft Entra App Initialized', 'Application ready'); + }); +} + +// Make functions available globally for HTML event handlers +(window as any).clearLog = clearLog; +(window as any).updateStatus = updateStatus; + +// Start the application when DOM is loaded +document.addEventListener('DOMContentLoaded', initialize); diff --git a/toolbox/fdc3-security-implementation/demo/entra-app/index.html b/toolbox/fdc3-security-implementation/demo/entra-app/index.html new file mode 100644 index 000000000..85fca9a67 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/entra-app/index.html @@ -0,0 +1,53 @@ + + + Microsoft Entra: Identity Provider + + + + + + + +
+
+

🔐 Microsoft Entra: Identity Provider

+

FDC3 Security Demo with Microsoft Entra ID

+
+ +
+
+ + Connecting... +
+
+ +
+
+ + + +
+ +
+ +
+
+

Activity Log

+ +
+
+ +
+
+
+ + + diff --git a/toolbox/fdc3-security-implementation/demo/entra-app/server/EntraBusinessLogic.ts b/toolbox/fdc3-security-implementation/demo/entra-app/server/EntraBusinessLogic.ts new file mode 100644 index 000000000..e6aaf3471 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/entra-app/server/EntraBusinessLogic.ts @@ -0,0 +1,97 @@ +import { PrivateFDC3Security } from '@finos/fdc3-security'; +import { FDC3Handlers } from '../../../src/helpers/FDC3Handlers'; +import { ContextMetadata, IntentHandler, Channel } from '@finos/fdc3'; +import { Context, User, UserRequest } from '@finos/fdc3-context'; +import { JosePrivateFDC3Security } from '../../../src/JosePrivateFDC3Security'; +import { JWTValidator } from './JWTValidator'; +import { getEntraConfig } from '../src/config'; + +/** + * Microsoft Entra ID Business Logic + * Handles the GetUser intent with Microsoft Entra authentication + */ +export class EntraBusinessLogic implements FDC3Handlers { + private fdc3Security: PrivateFDC3Security; + private user: User | null = null; + private jwtValidator: JWTValidator; + + constructor(fdc3Security: PrivateFDC3Security) { + this.fdc3Security = fdc3Security; + this.jwtValidator = new JWTValidator(getEntraConfig()); + } + + async handleRemoteChannel(purpose: string, channel: Channel): Promise { + throw new Error('Not used'); + } + + /** + * For simplicity here, I am using the same trust function for determining whether + * we're happy to give out JWTs as I do for checking contexts/signatures etc. + */ + private isTrusted(aud: string, jku: string): boolean { + const allowListFunction = (this.fdc3Security as JosePrivateFDC3Security).allowListFunction; + const out = allowListFunction(jku, aud); + return out; + } + + async remoteIntentHandler(intent: string): Promise { + if (intent == 'GetUser') { + const ih: IntentHandler = async (ctx: Context, metadata: ContextMetadata | undefined) => { + if (ctx.type === 'fdc3.user.request') { + const request = ctx as UserRequest; + const aud = request.aud; + const jku = request.jku; + + if (this.isTrusted(aud, jku) && this.user) { + // User token has already been validated during exchangeData + // Create aud-scoped user token for the requesting application + const audScopedUserToken = { + ...this.user, + jwt: await this.fdc3Security.createJWTToken(aud, (this.user.id?.email as string) || ''), + }; + + const encryptedUserContext = { + type: 'fdc3.user', + __encrypted: await this.fdc3Security.encryptPublicKey(audScopedUserToken, jku), + }; + + const signature = await this.fdc3Security.sign(encryptedUserContext, intent, null); + + return { + ...encryptedUserContext, + __signature: signature, + }; + } + } + }; + + return ih; + } else { + throw new Error('Invalid intent: ' + intent); + } + } + + async exchangeData(purpose: string, ctx: Context): Promise { + if (ctx.type === 'fdc3.user' && purpose === 'user-data') { + const jwt = ctx.jwt; + const { valid, claims, error } = await this.jwtValidator.validateToken(jwt); + if (error) { + console.error('Invalid Microsoft Entra ID token:', error); + } else if (valid) { + this.user = { + type: 'fdc3.user', + jwt: jwt, + id: { + email: (claims?.email as string) || (claims?.preferred_username as string) || '', + }, + name: (claims?.name as string) || (claims?.given_name as string) || '', + }; + return this.user; + } else { + console.error('Invalid Microsoft Entra ID token'); + } + } else if (purpose === 'user-logout') { + this.user = null; + } + } +} diff --git a/toolbox/fdc3-security-implementation/demo/entra-app/server/JWTValidator.ts b/toolbox/fdc3-security-implementation/demo/entra-app/server/JWTValidator.ts new file mode 100644 index 000000000..990ffe811 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/entra-app/server/JWTValidator.ts @@ -0,0 +1,122 @@ +import { jwtVerify, createRemoteJWKSet, JWTPayload } from 'jose'; +import { EntraConfig } from '../src/config'; + +/** + * JWT Validator for Microsoft Entra ID tokens + * Implements proper JWT signature verification and claim validation + */ +export class JWTValidator { + private jwksUri: string; + private expectedIssuer: string; + private expectedAudience: string; + private expectedTenantId: string; + private JWKS: ReturnType; + + constructor(config: EntraConfig) { + this.expectedAudience = config.clientId; + this.expectedTenantId = config.tenantId; + this.expectedIssuer = `https://login.microsoftonline.com/${config.tenantId}/v2.0`; + this.jwksUri = `https://login.microsoftonline.com/${config.tenantId}/discovery/v2.0/keys`; + + // Create a remote JWKS set for fetching Microsoft's public keys + this.JWKS = createRemoteJWKSet(new URL(this.jwksUri)); + } + + /** + * Validates a Microsoft Entra ID token with full signature verification + * @param idToken - The JWT ID token to validate + * @returns Promise with validation result and claims + */ + async validateToken(idToken: string): Promise<{ valid: boolean; claims?: JWTPayload; error?: string }> { + try { + if (!idToken || idToken.trim().length === 0) { + return { valid: false, error: 'Token is empty or undefined' }; + } + + // Verify the JWT signature using Microsoft's public keys + const { payload } = await jwtVerify(idToken, this.JWKS, { + issuer: this.expectedIssuer, + audience: this.expectedAudience, + algorithms: ['RS256'], // Microsoft uses RS256 for ID tokens + }); + + // Additional claim validations + const validationResult = this.validateClaims(payload); + if (!validationResult.valid) { + return validationResult; + } + + return { valid: true, claims: payload }; + } catch (error) { + console.error('JWT validation error:', error); + + // Provide specific error messages for different failure types + if (error instanceof Error) { + if (error.message.includes('signature verification failed')) { + return { valid: false, error: 'Invalid token signature' }; + } else if (error.message.includes('expired')) { + return { valid: false, error: 'Token has expired' }; + } else if (error.message.includes('invalid issuer')) { + return { valid: false, error: 'Invalid token issuer' }; + } else if (error.message.includes('invalid audience')) { + return { valid: false, error: 'Invalid token audience' }; + } + } + + return { valid: false, error: 'Token validation failed' }; + } + } + + /** + * Validates specific claims in the JWT payload + * @param payload - The decoded JWT payload + * @returns Validation result + */ + private validateClaims(payload: JWTPayload): { valid: boolean; error?: string } { + const now = Math.floor(Date.now() / 1000); + + // Check token expiration + if (payload.exp && payload.exp < now) { + console.warn('Token has expired'); + return { valid: false, error: 'Token has expired' }; + } + + // Check not before time + if (payload.nbf && payload.nbf > now) { + console.warn('Token is not yet valid'); + return { valid: false, error: 'Token is not yet valid' }; + } + + // Validate issuer + if (payload.iss !== this.expectedIssuer) { + console.warn(`Invalid issuer. Expected: ${this.expectedIssuer}, Got: ${payload.iss}`); + return { valid: false, error: 'Invalid token issuer' }; + } + + // Validate audience + if (payload.aud !== this.expectedAudience) { + console.warn(`Invalid audience. Expected: ${this.expectedAudience}, Got: ${payload.aud}`); + return { valid: false, error: 'Invalid token audience' }; + } + + // Validate tenant ID in the token (if present) + if (payload.tid && payload.tid !== this.expectedTenantId) { + console.warn(`Invalid tenant ID. Expected: ${this.expectedTenantId}, Got: ${payload.tid}`); + return { valid: false, error: 'Invalid tenant ID' }; + } + + // Validate token version (should be 2.0 for v2.0 tokens) + if (payload.ver && payload.ver !== '2.0') { + console.warn(`Unexpected token version. Expected: 2.0, Got: ${payload.ver}`); + return { valid: false, error: 'Invalid token version' }; + } + + // Validate that required claims are present + if (!payload.sub) { + console.warn('Missing subject claim'); + return { valid: false, error: 'Missing subject claim' }; + } + + return { valid: true }; + } +} diff --git a/toolbox/fdc3-security-implementation/demo/entra-app/server/index.ts b/toolbox/fdc3-security-implementation/demo/entra-app/server/index.ts new file mode 100644 index 000000000..0d329cd40 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/entra-app/server/index.ts @@ -0,0 +1,91 @@ +import { initializeServer } from '../../app1/common/src/server'; +import { setupWebsocketServer } from '../../../src/helpers/ServerSideHandlersImpl'; +import { EntraBusinessLogic } from './EntraBusinessLogic'; +import { getEntraConfig } from '../src/config'; +import * as dotenv from 'dotenv'; +import * as path from 'path'; +import express from 'express'; + +// Load environment variables from .env file +dotenv.config({ path: path.join(__dirname, '../.env') }); + +// Extend session interface +declare module 'express-session' { + interface SessionData { + userId: string; + jwt: string; + isAuthenticated: boolean; + } +} + +const PORT = 4006; + +// Store business logic instances for authentication updates +const businessLogicInstances = new Map(); + +initializeServer(PORT).then(({ fdc3Security, app, server }) => { + // Add JSON body parser middleware + app.use(express.json()); + + // Add configuration endpoint + app.get('/api/config', (req, res) => { + const config = getEntraConfig(); + + console.log('Serving configuration:', config); + res.json(config); + }); + + // // Add authentication endpoint + // app.post('/api/auth/entra', async (req, res) => { + // const { account, idToken } = req.body; + + // console.log('Received Microsoft Entra authentication:', { + // username: account?.username, + // name: account?.name, + // hasToken: !!idToken, + // }); + + // // Update all business logic instances with the new user data + // const updatePromises = Array.from(businessLogicInstances.values()).map(businessLogic => + // businessLogic.updateUserFromEntraAuth(account, idToken) + // ); + + // try { + // const results = await Promise.all(updatePromises); + // const successCount = results.filter(result => result).length; + // const totalCount = results.length; + + // console.log(`Updated ${successCount}/${totalCount} business logic instances`); + + // if (successCount === 0) { + // return res.status(400).json({ + // success: false, + // error: 'Failed to validate Microsoft Entra token' + // }); + // } + + // res.json({ success: true, updatedInstances: successCount }); + // } catch (error) { + // console.error('Error updating business logic instances:', error); + // res.status(500).json({ + // success: false, + // error: 'Internal server error during authentication' + // }); + // } + // }); + + setupWebsocketServer( + server, + _s => { + console.log('Websocket server disconnected'); + }, + socket => { + // Create business logic instance with JWT signature verification enabled + const businessLogic = new EntraBusinessLogic(fdc3Security); + + // Store the business logic instance for authentication updates + businessLogicInstances.set(socket.id, businessLogic); + return businessLogic; + } + ); +}); diff --git a/toolbox/fdc3-security-implementation/demo/entra-app/src/config.ts b/toolbox/fdc3-security-implementation/demo/entra-app/src/config.ts new file mode 100644 index 000000000..8abf45e28 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/entra-app/src/config.ts @@ -0,0 +1,24 @@ +/** + * Microsoft Entra ID Configuration + * Shared configuration for both client and server + */ + +export interface EntraConfig { + clientId: string; + authority: string; + redirectUri: string; + tenantId: string; +} + +/** + * Get Microsoft Entra configuration from environment variables + * Falls back to default values for development + */ +export function getEntraConfig(): EntraConfig { + return { + clientId: '62855256-b4f2-406f-9878-be85128aa4f7', + authority: 'https://login.microsoftonline.com/445c1fc6-7e1e-46dd-8835-9075a151049a', + redirectUri: 'http://localhost:4006', + tenantId: '445c1fc6-7e1e-46dd-8835-9075a151049a', + }; +} diff --git a/toolbox/fdc3-security-implementation/demo/idp-app/client/src/idp.ts b/toolbox/fdc3-security-implementation/demo/idp-app/client/src/idp.ts new file mode 100644 index 000000000..3f390afed --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/idp-app/client/src/idp.ts @@ -0,0 +1,70 @@ +// IDP App Client Implementation +import { DesktopAgent, getAgent, Context, ContextMetadata, User } from '@finos/fdc3'; +import { createLogEntry, updateStatus, clearLog } from '../../../app1/common/src/logging'; +import { initializeFDC3 } from '../../../app1/common/src/fdc3'; +import { FDC3Handlers } from '../../../../src/helpers/FDC3Handlers'; +import { connectRemoteHandlers } from '../../../../src/helpers/ClientSideHandlersImpl'; +import { + setupLogoutButton, + setupSessionStatusButton, + showAuthenticatedState, +} from '../../../app1/common/src/session-logic'; + +// Setup FDC3 event listeners +async function setupLoginButton(handlers: FDC3Handlers): Promise { + const loginBtn = document.getElementById('login-btn') as HTMLButtonElement; + loginBtn.addEventListener('click', async () => { + try { + // Listen for GetUser intent events + const result = await handlers.exchangeData('user-request', { + type: 'fdc3.user.request', + }); + + if (result?.type === 'fdc3.user') { + showAuthenticatedState(result as User); + createLogEntry('success', 'Login successful', result); + } else { + createLogEntry('success', 'User Logged out', ``); + showAuthenticatedState(null); + } + } catch (error) { + console.error('GetUser intent error:', error); + createLogEntry('error', 'GetUser Intent Error', (error as Error).message); + throw error; + } + }); +} + +async function setupLoginIntentHandler(fdc3: DesktopAgent, handlers: FDC3Handlers): Promise { + const intentHandler = await handlers.remoteIntentHandler('GetUser'); + + fdc3.addIntentListener('GetUser', async (context: Context, metadata: ContextMetadata | undefined) => { + createLogEntry('info', 'GetUser intent received', context); + const ss = await intentHandler(context, metadata); + createLogEntry('success', 'GetUser intent result', ss); + return ss; + }); +} + +// Initialize the application +async function initialize(): Promise { + // Initialize FDC3 + const fdc3 = await initializeFDC3(); + + connectRemoteHandlers('http://localhost:4005', fdc3, async () => {}).then(remoteHandlers => { + setupSessionStatusButton(remoteHandlers); + setupLogoutButton(remoteHandlers); + setupLoginButton(remoteHandlers); + showAuthenticatedState(null); + setupLoginIntentHandler(fdc3, remoteHandlers); + + createLogEntry('info', 'IDP App Initialized', 'Application ready'); + }); +} + +// Make functions available globally for HTML event handlers +(window as any).clearLog = clearLog; +(window as any).updateStatus = updateStatus; + +// Start the application when DOM is loaded +document.addEventListener('DOMContentLoaded', initialize); diff --git a/toolbox/fdc3-security-implementation/demo/idp-app/index.html b/toolbox/fdc3-security-implementation/demo/idp-app/index.html new file mode 100644 index 000000000..c147f437a --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/idp-app/index.html @@ -0,0 +1,53 @@ + + + IDP: Identity Provider + + + + + + + +
+
+

🔐 IDP: Identity Provider

+

FDC3 Security Demo

+
+ +
+
+ + Connecting... +
+
+ +
+
+ + + +
+ +
+ +
+
+

Activity Log

+ +
+
+ +
+
+
+ + + diff --git a/toolbox/fdc3-security-implementation/demo/idp-app/server/IDPBusinessLogic.ts b/toolbox/fdc3-security-implementation/demo/idp-app/server/IDPBusinessLogic.ts new file mode 100644 index 000000000..3187f9359 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/idp-app/server/IDPBusinessLogic.ts @@ -0,0 +1,87 @@ +import { checkSignature, JSONWebSignature, PrivateFDC3Security } from '@finos/fdc3-security'; +import { FDC3Handlers } from '../../../src/helpers/FDC3Handlers'; +import { ContextMetadata, ContextHandler, IntentHandler, IntentResult, Channel } from '@finos/fdc3'; +import { Context, User, UserRequest } from '@finos/fdc3-context'; +import { JosePrivateFDC3Security } from '../../../src/JosePrivateFDC3Security'; +import e from 'express'; + +/** + * Has to handle the GetUser intent. + */ +export class IDPBusinessLogic implements FDC3Handlers { + private fdc3Security: PrivateFDC3Security; + private user: User | null = null; + + constructor(fdc3Security: PrivateFDC3Security) { + this.fdc3Security = fdc3Security; + } + + async handleRemoteChannel(purpose: string, channel: Channel): Promise { + throw new Error('Not used'); + } + + /** + * For simplicity here, I am using the same trust function for determining whether + * we're happy to give out JWTs as I do for checking contexts/signatures etc. + */ + private isTrusted(aud: string, jku: string): boolean { + const allowListFunction = (this.fdc3Security as JosePrivateFDC3Security).allowListFunction; + return allowListFunction(jku, aud); + } + + async remoteIntentHandler(intent: string): Promise { + if (intent == 'GetUser') { + const ih: IntentHandler = async (ctx: Context, metadata: ContextMetadata | undefined) => { + if (ctx.type === 'fdc3.user.request') { + const request = ctx as UserRequest; + const aud = request.aud; + const jku = request.jku; + + if (this.isTrusted(aud, jku) && this.user) { + const audScopedUserToken = { + ...this.user, + jwt: await this.fdc3Security.createJWTToken(aud, 'demo-user@example.com'), + }; + + const encryptedUserContext = { + type: 'fdc3.user', + __encrypted: await this.fdc3Security.encryptPublicKey(audScopedUserToken, jku), + }; + + const signature = await this.fdc3Security.sign(encryptedUserContext, intent, null); + + return { + ...encryptedUserContext, + __signature: signature, + }; + } + } + + throw new Error('Unauthorized: ' + JSON.stringify(ctx)); + }; + + return ih; + } else { + throw new Error('Invalid intent: ' + intent); + } + } + + async exchangeData(purpose: string, ctx: Context): Promise { + if (ctx.type === 'fdc3.user.request' && purpose === 'user-request') { + if (!this.user) { + this.user = { + type: 'fdc3.user', + id: { + email: 'demo-user@example.com', + }, + name: 'Mr Demo User', + jwt: await this.fdc3Security.createJWTToken('http://localhost:4005', 'demo-user@example.com'), + }; + } + + return this.user; + } else if (purpose === 'user-logout') { + this.user = null; + } + } +} diff --git a/toolbox/fdc3-security-implementation/demo/idp-app/server/index.ts b/toolbox/fdc3-security-implementation/demo/idp-app/server/index.ts new file mode 100644 index 000000000..e763a12b1 --- /dev/null +++ b/toolbox/fdc3-security-implementation/demo/idp-app/server/index.ts @@ -0,0 +1,24 @@ +import { initializeServer } from '../../app1/common/src/server'; +import { setupWebsocketServer } from '../../../src/helpers/ServerSideHandlersImpl'; +import { IDPBusinessLogic } from './IDPBusinessLogic'; + +// Extend session interface +declare module 'express-session' { + interface SessionData { + userId: string; + jwt: string; + isAuthenticated: boolean; + } +} + +const PORT = 4005; + +initializeServer(PORT).then(({ fdc3Security, app, server }) => { + setupWebsocketServer( + server, + _s => { + console.log('Websocket server disconnected'); + }, + _socket => new IDPBusinessLogic(fdc3Security) + ); +}); diff --git a/toolbox/fdc3-security-implementation/jest.config.mjs b/toolbox/fdc3-security-implementation/jest.config.mjs new file mode 100644 index 000000000..ff5804fcb --- /dev/null +++ b/toolbox/fdc3-security-implementation/jest.config.mjs @@ -0,0 +1,12 @@ +/** @type {import('jest').Config} */ +export default { + preset: 'ts-jest/presets/default-esm', + moduleFileExtensions: ['js', 'ts'], + extensionsToTreatAsEsm: ['.ts'], + transformIgnorePatterns: ['node_modules/(?!jose)'], + testRegex: '.+\\.test\\.ts?$', + testEnvironment: 'node', + reporters: ['default', 'jest-junit'], + collectCoverage: true, + coverageReporters: ['lcov', 'text', 'json'], +}; diff --git a/toolbox/fdc3-security-implementation/package.json b/toolbox/fdc3-security-implementation/package.json new file mode 100644 index 000000000..2df2728da --- /dev/null +++ b/toolbox/fdc3-security-implementation/package.json @@ -0,0 +1,81 @@ +{ + "name": "@finos/fdc3-security-implementation", + "version": "2.3.0", + "author": "Fintech Open Source Foundation (FINOS)", + "homepage": "https://fdc3.finos.org", + "repository": { + "type": "git", + "url": "git+https://github.com/finos/FDC3.git" + }, + "publishConfig": { + "tag": "latest" + }, + "license": "Apache-2.0", + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tsc --module es2022", + "test": "tsc && node --experimental-vm-modules ../../node_modules/jest/bin/jest.js", + "clean": "rimraf dist cucumber-report.html coverage .nyc_output node_modules test-results.xml", + "lint": "eslint src/", + "start:server": "tsc && node dist/src/example-server.js", + "test:client": "tsc && node dist/src/test-client.js", + "dev": "concurrently \"npm run start:app1\" \"npm run start:app2\" \"npm run start:idp-app\" \"npm run start:entra-app\"", + "start:app1": "cd demo/app1 && nodemon -x tsx -w server server/index.ts", + "start:app2": "cd demo/app2 && nodemon -x tsx -w server server/index.ts", + "start:idp-app": "cd demo/idp-app && nodemon -x tsx -w server server/index.ts", + "start:entra-app": "cd demo/entra-app && nodemon -x tsx -w server server/index.ts" + }, + "devDependencies": { + "@eslint/js": "^9.19.0", + "@types/color": "^4.2.0", + "@types/express": "^4.17.21", + "@types/express-session": "^1.18.2", + "@types/jest": "^29.5.3", + "@types/node": "^20.16.11", + "@types/node-fetch": "^2.6.11", + "color": "^4.2.3", + "eslint": "^9.16.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "3.3.1", + "globals": "^15.14.0", + "jest": "^29.7.0", + "jest-environment-node": "^30.0.5", + "nodemon": "^3.1.7", + "prettier": "3.4.1", + "rimraf": "^6.0.1", + "ts-jest": "^29.1.1", + "tsx": "^4.6.2", + "typescript": "^5.6.3", + "typescript-eslint": "^8.17.0", + "vite": "^6.2.7" + }, + "dependencies": { + "@azure/msal-browser": "4.25.1", + "@finos/fdc3": "2.3.0", + "@finos/fdc3-agent-proxy": "2.3.0", + "@finos/fdc3-context": "2.3.0", + "@finos/fdc3-schema": "2.3.0", + "@finos/fdc3-security": "2.3.0", + "@types/uuid": "^10.0.0", + "@types/ws": "^8.5.12", + "canonicalize": "^2.1.0", + "concurrently": "^8.2.2", + "cross-env": "^7.0.3", + "dotenv": "^16.4.5", + "express": "^4.21.1", + "express-session": "^1.18.2", + "jose": "6.0.6", + "node-fetch": "^3.3.2", + "socket.io": "^4.8.0", + "socket.io-client": "^4.8.0", + "tsx": "^4.19.1", + "typescript": "^5.6.3", + "uuid": "^11.1.0", + "vite-express": "^0.21.1" + } +} \ No newline at end of file diff --git a/toolbox/fdc3-security-implementation/src/JosePrivateFDC3Security.ts b/toolbox/fdc3-security-implementation/src/JosePrivateFDC3Security.ts new file mode 100644 index 000000000..952ed3e40 --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/JosePrivateFDC3Security.ts @@ -0,0 +1,208 @@ +import { Context, SymmetricKeyResponse } from '@finos/fdc3-context'; +import { JSONWebEncryption, JSONWebSignature, FDC3JWTPayload, PrivateFDC3Security } from '@finos/fdc3-security'; +import * as jose from 'jose'; +import { AllowListFunction, JosePublicFDC3Security, JSONWebKeyWithId, JWKSResolver } from './JosePublicFDC3Security'; + +type ProtectedHeader = { + alg: string; + enc: string; +}; + + +/** + * Implements the FDC3Security interface either in node or the browser. + * Using the jose library for JSON Web Signatures and Encryption. + */ +export class JosePrivateFDC3Security extends JosePublicFDC3Security implements PrivateFDC3Security { + readonly signingPrivateKey: JsonWebKey; + readonly wrappingPrivateKey: JsonWebKey; + readonly issUrl: string; + readonly jwksUrl: string; + + constructor( + signingPrivateKey: JsonWebKey, + signingPublicKey: JsonWebKey, + wrappingPrivateKey: JsonWebKey, + wrappingPublicKey: JsonWebKey, + issUrl: string, + jwksUrl: string, + publicKeyResolver: (url: string) => JWKSResolver, + allowListFunction: AllowListFunction, + validityTimeLimit: number = 5 * 60 + ) { + super(signingPublicKey, wrappingPublicKey, publicKeyResolver, allowListFunction, validityTimeLimit); + this.signingPrivateKey = signingPrivateKey; + this.wrappingPrivateKey = wrappingPrivateKey; + this.jwksUrl = jwksUrl; + this.issUrl = issUrl; + } + + async encryptSymmetric(ctx: Context, symmetricKey: JsonWebKey): Promise { + const encrypted = await new jose.CompactEncrypt(new TextEncoder().encode(JSON.stringify(ctx))) + .setProtectedHeader({ alg: 'dir', enc: 'A256GCM' }) + .encrypt(symmetricKey); + return encrypted; + } + + async decryptSymmetric(encrypted: JSONWebEncryption, symmetricKey: JsonWebKey): Promise { + const decrypted = await jose.compactDecrypt(encrypted, symmetricKey); + const plaintext = decrypted.plaintext; + return JSON.parse(new TextDecoder().decode(plaintext)); + } + + private async getPublicKey(publicKeyUrl: string, protectedHeader: ProtectedHeader): Promise { + const JWKS = this.publicKeyResolver(publicKeyUrl); + await JWKS.reload(); + + const allKeys = JWKS.jwks()?.keys ?? []; + const key = allKeys.find(k => k.alg == protectedHeader.alg); + + if (key == undefined) { + throw new Error(`No key found for algorithm ${protectedHeader.alg}`); + } + + return key as JSONWebKeyWithId; + } + + + async encryptPublicKey(ctx: Context, publicKeyUrl: string): Promise { + const protectedHeader = { alg: 'RSA-OAEP-256', enc: 'A256GCM' }; + const key = await this.getPublicKey(publicKeyUrl, protectedHeader); + const encrypted = await new jose.CompactEncrypt(new TextEncoder().encode(JSON.stringify(ctx))) + .setProtectedHeader(protectedHeader) + .encrypt(key); + return encrypted; + } + + async decryptPrivateKey(encrypted: JSONWebEncryption): Promise { + const decrypted = await jose.compactDecrypt(encrypted, this.wrappingPrivateKey); + const plaintext = decrypted.plaintext; + return JSON.parse(new TextDecoder().decode(plaintext)); + } + + async sign(ctx: Context, intent: string | null, channelId: string | null): Promise { + const data = this.canonicalize(ctx, intent, channelId); + const now = Math.floor(Date.now() / 1000); // Current time in seconds + const jws = await new jose.CompactSign(data) + .setProtectedHeader({ alg: 'EdDSA', jku: this.jwksUrl, iat: now, kid: this.signingPublicKey.kid }) + .sign(this.signingPrivateKey); + const parts = jws.split('.'); + const detachedJWS = `${parts[0]}..${parts[2]}`; + return detachedJWS; + } + + async createSymmetricKey(): Promise { + return jose.generateSecret('A256GCM', { extractable: true }).then(secret => jose.exportJWK(secret)); + } + + async wrapKey(symmetricKey: JsonWebKey, publicKeyUrl: string): Promise { + const protectedHeader = { alg: 'RSA-OAEP-256', enc: 'A256GCM' }; + const data = this.canonicalizeKey(symmetricKey); + const key = await this.getPublicKey(publicKeyUrl, protectedHeader); + const wrapped = await new jose.CompactEncrypt(data).setProtectedHeader(protectedHeader).encrypt(key); + + return { + type: 'fdc3.security.symmetricKey.response', + wrappedKey: wrapped, + id: { + pki: publicKeyUrl, + kid: key.kid ?? 'not specified', + }, + }; + } + + async unwrapKey(ctx: SymmetricKeyResponse): Promise { + const result = await jose.compactDecrypt(ctx.wrappedKey, this.wrappingPrivateKey); + const jsonString = new TextDecoder().decode(result.plaintext); + const decodedKey = JSON.parse(jsonString); + return decodedKey; + } + + async createJWTToken(aud: string, sub: string): Promise { + if (!this.allowListFunction(aud)) { + throw new Error(`Audience is not trusted: ${aud}`); + } + + const now = Math.floor(Date.now() / 1000); // Current time in seconds + const payload: FDC3JWTPayload = { + iss: this.issUrl, + aud: aud, + sub: sub, + exp: now + this.validityTimeLimit, + iat: now, + jti: crypto.randomUUID(), + }; + const token = await new jose.SignJWT(payload) + .setProtectedHeader({ alg: 'EdDSA', jku: this.jwksUrl, kid: this.signingPublicKey.kid }) + .sign(this.signingPrivateKey); + return token; + } +} + +export async function createSigningKeyPair(id: string): Promise<{ priv: JsonWebKey; pub: JsonWebKey }> { + const keyPair = await jose.generateKeyPair('EdDSA', { + extractable: true, + crv: 'Ed25519', + }); + const privateKey = await jose.exportJWK(keyPair.privateKey); + const publicKey = await jose.exportJWK(keyPair.publicKey); + publicKey.kid = id; + publicKey.alg = 'EdDSA'; + publicKey.use = 'sig'; + return { priv: privateKey, pub: publicKey }; +} + +export async function createWrappingKeyPair(id: string): Promise<{ priv: JsonWebKey; pub: JsonWebKey }> { + const keyPair = await jose.generateKeyPair('RSA-OAEP-256', { + extractable: true, + modulusLength: 2048, + }); + const privateKey = await jose.exportJWK(keyPair.privateKey); + const publicKey = await jose.exportJWK(keyPair.publicKey); + publicKey.kid = id; + publicKey.alg = 'RSA-OAEP-256'; + publicKey.use = 'enc'; + return { priv: privateKey, pub: publicKey }; +} + +/** + * Creates an instance with auto-generated keys. + * This is a simplified constructor that automatically creates all required key pairs. + * + * @param jwksUrl - The URL where this instance's public keys can be found + * @param publicKeyResolver - Function to resolve public keys from URLs + * @param allowListFunction - Function to determine if a URL is trusted + * @param validityTimeLimit - Optional validity time limit in seconds (default: 5 minutes) + * @param signingKeyId - Optional custom ID for the signing key (default: auto-generated) + * @param wrappingKeyId - Optional custom ID for the wrapping key (default: auto-generated) + * @returns Promise - A fully configured instance + */ +export async function createJosePrivateFDC3Security( + baseUrl: string, + publicKeyResolver: (url: string) => JWKSResolver, + allowListFunction: AllowListFunction, + validityTimeLimit: number = 5 * 60, + signingKeyId?: string, + wrappingKeyId?: string +): Promise { + // Generate unique IDs if not provided + const finalSigningKeyId = signingKeyId || `signing-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + const finalWrappingKeyId = wrappingKeyId || `wrapping-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; + + // Create key pairs + const signingKeys = await createSigningKeyPair(finalSigningKeyId); + const wrappingKeys = await createWrappingKeyPair(finalWrappingKeyId); + + // Create and return the instance + return new JosePrivateFDC3Security( + signingKeys.priv, + signingKeys.pub, + wrappingKeys.priv, + wrappingKeys.pub, + baseUrl, + baseUrl + '/.well-known/jwks.json', + publicKeyResolver, + allowListFunction, + validityTimeLimit + ); +} diff --git a/toolbox/fdc3-security-implementation/src/JosePublicFDC3Security.ts b/toolbox/fdc3-security-implementation/src/JosePublicFDC3Security.ts new file mode 100644 index 000000000..9e4372fcd --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/JosePublicFDC3Security.ts @@ -0,0 +1,185 @@ +import { Context } from '@finos/fdc3-context'; +import canonicalize from 'canonicalize'; +import * as jose from 'jose'; +import { FDC3JWTPayload, JSONWebSignature, MessageAuthenticity, PublicFDC3Security } from '@finos/fdc3-security'; + +export type JSONWebKeyWithId = JsonWebKey & { + kid?: string; // Key ID + alg: string; // Algorithm used for the key +}; + +export type JWKSResolver = { + (protectedHeader?: jose.JWSHeaderParameters, token?: jose.FlattenedJWSInput): Promise; + /** @ignore */ + coolingDown: boolean; + /** @ignore */ + fresh: boolean; + /** @ignore */ + reloading: boolean; + /** @ignore */ + reload: () => Promise; + /** @ignore */ + jwks: () => jose.JSONWebKeySet | undefined; +}; + +export type AllowListFunction = (jku: string, iss?: string) => boolean; + +/** + * Implements the FDC3Security interface either in node or the browser. + * Using the jose library for JSON Web Signatures and Encryption. + * @param signingPublicKey - The signing public key + * @param wrappingPublicKey - The wrapping public key + * @param publicKeyResolver - Function to resolve public keys from URLs + * @param allowListFunction - Function to check if a URL is trusted. + * @param validityTimeLimit - Optional validity time limit in seconds (default: 5 minutes) + */ +export class JosePublicFDC3Security implements PublicFDC3Security { + readonly signingPublicKey: JSONWebKeyWithId; + readonly wrappingPublicKey: JSONWebKeyWithId; + readonly validityTimeLimit: number; // in seconds + readonly publicKeyResolver: (url: string) => JWKSResolver; + readonly allowListFunction: AllowListFunction; + + constructor( + signingPublicKey: JsonWebKey, + wrappingPublicKey: JsonWebKey, + publicKeyResolver: (url: string) => JWKSResolver, + allowListFunction: AllowListFunction, + validityTimeLimit: number = 5 * 60 + ) { + this.allowListFunction = allowListFunction; + this.validityTimeLimit = validityTimeLimit; + this.publicKeyResolver = publicKeyResolver; + + if (!(signingPublicKey as JSONWebKeyWithId).kid) { + throw new Error("Signing public key must have a 'kid' (Key ID) property"); + } else { + this.signingPublicKey = signingPublicKey as JSONWebKeyWithId; + } + + if (!(wrappingPublicKey as JSONWebKeyWithId).kid) { + throw new Error("Wrapping public key must have a 'kid' (Key ID) property"); + } else { + this.wrappingPublicKey = wrappingPublicKey as JSONWebKeyWithId; + } + } + + protected canonicalizeKey(key: JsonWebKey): Uint8Array { + const canonicalJson = canonicalize(key); + const encoder = new TextEncoder(); + const keyBytes = encoder.encode(canonicalJson); + return keyBytes; + } + + protected canonicalize(ctx: Context, intent: string | null, channelId: string | null): Uint8Array { + const canonicalJson = canonicalize({ ctx, intent, channelId }); + const encoder = new TextEncoder(); + const payloadBytes = encoder.encode(canonicalJson); + return payloadBytes; + } + + protected getParametersFromHeader(sig: JSONWebSignature): { jku?: string; kid?: string; iat?: number } { + const [protectedHeaderJSON] = sig.split('.'); + const protectedHeader = JSON.parse(atob(protectedHeaderJSON)); + return { jku: protectedHeader.jku, kid: protectedHeader.kid, iat: protectedHeader.iat }; + } + + async check( + jws: JSONWebSignature, + ctx: Context, + intent: string | null, + channelId: string | null + ): Promise { + try { + const { jku, kid, iat } = this.getParametersFromHeader(jws); + + if (!jku || !kid || !iat) { + return { + signed: false, + error: `Signature does not contain a public key URL / Key ID / Issued At timestamp ${JSON.stringify({ jku, kid, iat })}`, + }; + } + + const jwksEndpoint = this.publicKeyResolver(jku); + const now = Math.floor(Date.now() / 1000); // Current time in seconds + const data1 = canonicalize({ ctx, intent, channelId }); + const data2 = jose.base64url.encode(data1!); + const parts = jws.split('.'); + const reconstitutedJws = `${parts[0]}.${data2}.${parts[2]}`; + + console.log('reconstitutedJws', reconstitutedJws); + + const result = await jose.compactVerify(reconstitutedJws, jwksEndpoint, {}); + + if (iat && now - iat > this.validityTimeLimit) { + return { + signed: false, + error: `Signature is too old, valid for ${this.validityTimeLimit} seconds`, + }; + } + + return { + signed: true, + valid: result.payload != null, + trusted: this.allowListFunction(jku), + publicKeyUrl: jku, + }; + } catch (error) { + return { + signed: false, + error: error instanceof Error ? error.message : 'Unknown error', + }; + } + } + + getPublicKeys(): JSONWebKeyWithId[] { + return [this.signingPublicKey, this.wrappingPublicKey]; + } + + async verifyJWTToken(token: string): Promise { + const { jku, kid } = this.getParametersFromHeader(token); + + if (!jku || !kid) { + throw new Error(`JWT does not contain jku / kid ${JSON.stringify({ jku, kid })}`); + } + + // check the issuer + if (!this.allowListFunction(jku)) { + throw new Error(`JWT issuer is not trusted: ${jku}`); + } + + const jwksEndpoint = this.publicKeyResolver(jku); + + const { payload } = await jose.jwtVerify(token, jwksEndpoint); + + // Validate required fields exist + if (!payload.iss) { + throw new Error('JWT payload missing required field: iss'); + } + if (!payload.aud) { + throw new Error('JWT payload missing required field: aud'); + } + if (!payload.sub) { + throw new Error('JWT payload missing required field: sub'); + } + if (!payload.exp) { + throw new Error('JWT payload missing required field: exp'); + } + if (!payload.iat) { + throw new Error('JWT payload missing required field: iat'); + } + if (!payload.jti) { + throw new Error('JWT payload missing required field: jti'); + } + + if (!this.allowListFunction(jku, payload.iss)) { + throw new Error(`JWT issuer is not trusted: ${payload.iss}`); + } + + return payload as FDC3JWTPayload; + } +} + +export function provisionJWKS(jku: string): JWKSResolver { + return jose.createRemoteJWKSet(new URL(jku)); +} diff --git a/toolbox/fdc3-security-implementation/src/helpers/ClientSideHandlersImpl.ts b/toolbox/fdc3-security-implementation/src/helpers/ClientSideHandlersImpl.ts new file mode 100644 index 000000000..4003e3795 --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/helpers/ClientSideHandlersImpl.ts @@ -0,0 +1,259 @@ +import { Channel, ContextMetadata, DesktopAgent, IntentHandler, Listener, PrivateChannel } from '@finos/fdc3-standard'; +import { Context } from '@finos/fdc3-context'; +import { io, Socket } from 'socket.io-client'; +import { + REMOTE_INTENT_HANDLER, + RemoteIntentHandlerMessage, + EXCHANGE_DATA, + HANDLE_REMOTE_CHANNEL, + CLIENT_MESSAGE, + SERVER_MESSAGE, + ExchangeDataMessage, +} from './MessageTypes'; +import { FDC3Handlers } from './FDC3Handlers'; +import { + AddContextListenerRequest, + AddContextListenerResponse, + AppRequestMessage, + BroadcastEvent, + BroadcastRequest, + BroadcastResponse, + ContextListenerUnsubscribeRequest, + ContextListenerUnsubscribeResponse, + PrivateChannelDisconnectRequest, + PrivateChannelDisconnectResponse, +} from '@finos/fdc3-schema/generated/api/BrowserTypes'; +import { v4 as uuidv4 } from 'uuid'; + +/** + * This class provides a set of helpers for clients to use + * to move processing of secure FDC3 intents and contexts to the + * server-side using WebSocket communication. + */ +export class ClientSideHandlersImpl implements FDC3Handlers { + private readonly socket: Socket; + private readonly desktopAgent: DesktopAgent; + private readonly channels: Map = new Map(); + private readonly contextListeners: Map = new Map(); + private readonly callback: (ctx: ExchangeDataMessage) => Promise; + + constructor( + socket: Socket, + desktopAgent: DesktopAgent, + callback: (ctx: ExchangeDataMessage) => Promise + ) { + this.socket = socket; + this.desktopAgent = desktopAgent; + this.callback = callback; + // listen to messages from the server + this.socket.on(SERVER_MESSAGE, async (data: AppRequestMessage) => { + const out = await this.handleServerMessage(data); + if (out) { + console.log('emitting', out); + this.socket.emit(CLIENT_MESSAGE, out); + } + }); + + this.socket.on(EXCHANGE_DATA, async (m: ExchangeDataMessage, listener: (m: ExchangeDataMessage) => void) => { + const out = await this.callback(m); + if (out) { + listener(out); + } + }); + } + + private async handleServerMessage(data: AppRequestMessage) { + console.log('SERVER_MESSAGE', data); + switch (data.type) { + case 'broadcastRequest': + const br: BroadcastRequest = data; + return this.handleBroadcast(br); + case 'addContextListenerRequest': + const acl: AddContextListenerRequest = data; + return this.handleAddContextListener(acl); + case 'contextListenerUnsubscribeRequest': + const rcl: ContextListenerUnsubscribeRequest = data; + return this.handleContextListenerUnsubscribe(rcl); + case 'privateChannelDisconnectRequest': + const pcdr: PrivateChannelDisconnectRequest = data; + return this.handlePrivateChannelDisconnect(pcdr); + default: + console.log('Unknown message type', data); + return null; + } + } + + createMetadata() { + return { + requestUuid: uuidv4(), + timestamp: new Date(), + eventUuid: uuidv4(), + }; + } + + async handleRemoteChannel(purpose: string, channel: Channel): Promise { + this.channels.set(channel.id, channel); + await this.socket.emitWithAck(HANDLE_REMOTE_CHANNEL, { + purpose, + channelId: channel.id, + type: channel.type, + }); + } + + async remoteIntentHandler(intent: string): Promise { + const msg: RemoteIntentHandlerMessage = { + intent, + }; + + const id = await this.socket.emitWithAck(REMOTE_INTENT_HANDLER, msg); + + return async (context: Context, metadata?: ContextMetadata | undefined) => { + const value = await this.socket.emitWithAck(id, { + context, + metadata, + }); + + if (value?.type === 'private') { + // in this case, handle a private channel. + const channel = await this.desktopAgent.createPrivateChannel(); + await this.handleRemoteChannel(intent, channel); + return channel; + } else { + // it's a context. + return value; + } + }; + } + + async exchangeData(purpose: string, ctx: Context, intent?: string, channelId?: string): Promise { + return await this.socket.emitWithAck(EXCHANGE_DATA, { + purpose, + ctx, + intent, + channelId, + }); + } + + private async handleBroadcast(br: BroadcastRequest): Promise { + const channel = this.channels.get(br.payload.channelId)!!; + await channel.broadcast(br.payload.context); // , data.metadata); + + return { + type: 'broadcastResponse', + meta: { + requestUuid: br.meta.requestUuid, + timestamp: new Date(), + responseUuid: uuidv4(), + }, + payload: { + channelId: channel.id, + }, + }; + } + + private async handleAddContextListener(acl: AddContextListenerRequest): Promise { + console.log('handleAddContextListener', acl); + const channel = this.channels.get(acl.payload.channelId!); // always has a channelId + const type = acl.payload.contextType; + const id = uuidv4(); + if (channel) { + const cl = await channel.addContextListener( + type, + async (ctx: Context, _metadata: ContextMetadata | undefined) => { + const msg: BroadcastEvent = { + type: 'broadcastEvent', + meta: this.createMetadata(), + payload: { + context: ctx, + channelId: channel.id, + // metadata + }, + }; + + console.log('Received context, sending to server', ctx, id); + + await this.socket.emitWithAck(CLIENT_MESSAGE, msg); + } + ); + + console.log('context listener added', id, this.contextListeners); + + this.contextListeners.set(id, cl); + return { + type: 'addContextListenerResponse', + meta: { + requestUuid: acl.meta.requestUuid, + timestamp: new Date(), + responseUuid: id, + }, + payload: { + listenerUUID: id, + }, + }; + } else { + return { + type: 'addContextListenerResponse', + meta: { + requestUuid: acl.meta.requestUuid, + timestamp: new Date(), + responseUuid: id, + }, + payload: { + error: 'NoChannelFound', + }, + }; + } + } + + private async handleContextListenerUnsubscribe( + rcl: ContextListenerUnsubscribeRequest + ): Promise { + const listener = this.contextListeners.get(rcl.payload.listenerUUID); + if (listener) { + await listener.unsubscribe(); + } + this.contextListeners.delete(rcl.payload.listenerUUID); + return { + type: 'contextListenerUnsubscribeResponse', + meta: { + requestUuid: rcl.meta.requestUuid, + timestamp: new Date(), + responseUuid: uuidv4(), + }, + payload: { + listenerUUID: rcl.payload.listenerUUID, + }, + }; + } + + private async handlePrivateChannelDisconnect( + pcdr: PrivateChannelDisconnectRequest + ): Promise { + const channel = this.channels.get(pcdr.payload.channelId) as PrivateChannel; + if (channel) { + await channel.disconnect(); + } + return { + type: 'privateChannelDisconnectResponse', + meta: { + requestUuid: pcdr.meta.requestUuid, + timestamp: new Date(), + responseUuid: uuidv4(), + }, + payload: {}, + }; + } +} + +export async function connectRemoteHandlers( + url: string, + da: DesktopAgent, + callback: (ctx: ExchangeDataMessage) => Promise +): Promise { + const socket = await io(url, { + withCredentials: true, // Include cookies and session data + autoConnect: true, + }); + + return new ClientSideHandlersImpl(socket, da, callback); +} diff --git a/toolbox/fdc3-security-implementation/src/helpers/FDC3Handlers.ts b/toolbox/fdc3-security-implementation/src/helpers/FDC3Handlers.ts new file mode 100644 index 000000000..a03397e0d --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/helpers/FDC3Handlers.ts @@ -0,0 +1,27 @@ +import { Channel, ContextMetadata, IntentHandler } from '@finos/fdc3'; +import { Context } from '@finos/fdc3-context'; + +export type ContextOrErrorMetadata = ContextMetadata | { error: string } | undefined; + +/** + * Functions that allow back-end processing of FDC3 requests in order to keep + * secure / sensitive processing on the server-side. + */ +export interface FDC3Handlers { + /** + * Call this on the client side to export a channel to the server-side. + */ + handleRemoteChannel(purpose: string, channel: Channel): Promise; + + /** + * This is called at the other end of the connection when a new remote intent is created. + * On the client side, you should call this function to allow the server-side to + * have access to the intent. + */ + remoteIntentHandler(intent: string): Promise; + + /** + * This function allows server-side and client-side to exchange data with one another. + */ + exchangeData(purpose: string, ctx: Context, intent?: string, channelId?: string): Promise; +} diff --git a/toolbox/fdc3-security-implementation/src/helpers/MessageTypes.ts b/toolbox/fdc3-security-implementation/src/helpers/MessageTypes.ts new file mode 100644 index 000000000..b67d782c4 --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/helpers/MessageTypes.ts @@ -0,0 +1,25 @@ +import { Context } from '@finos/fdc3-context'; + +export const HANDLE_REMOTE_CHANNEL = 'handle-remote-channel'; +export type HandleRemoteChannelMessage = { + purpose: string; + channelId: string; + type: 'user' | 'app' | 'private'; +}; + +export const REMOTE_INTENT_HANDLER = 'remote-intent-handler'; +export type RemoteIntentHandlerMessage = { + intent: string; +}; + +export const EXCHANGE_DATA = 'exchange-data'; +export type ExchangeDataMessage = { + purpose: string; + ctx: Context; + intent?: string; + channelId?: string; +}; + +export const CLIENT_MESSAGE = 'client-message'; + +export const SERVER_MESSAGE = 'server-message'; diff --git a/toolbox/fdc3-security-implementation/src/helpers/ServerSideHandlersImpl.ts b/toolbox/fdc3-security-implementation/src/helpers/ServerSideHandlersImpl.ts new file mode 100644 index 000000000..781255c3c --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/helpers/ServerSideHandlersImpl.ts @@ -0,0 +1,77 @@ +import { Server, Socket } from 'socket.io'; +import { Server as HttpServer } from 'http'; +import { FDC3Handlers } from './FDC3Handlers'; +import { + REMOTE_INTENT_HANDLER, + RemoteIntentHandlerMessage, + EXCHANGE_DATA, + ExchangeDataMessage, + HANDLE_REMOTE_CHANNEL, + HandleRemoteChannelMessage, +} from './MessageTypes'; +import { v4 as uuidv4 } from 'uuid'; +import { WebSocketMessaging } from './WebSocketMessaging'; +import { DefaultPrivateChannel } from '@finos/fdc3-agent-proxy/src/channels/DefaultPrivateChannel'; +import { DefaultChannel } from '@finos/fdc3-agent-proxy'; + +export type DisconnectCallback = (socket: Socket) => void; + +/** + * Sets up a listener so that we can detect when a front-end wants to create a server-side DesktopAgent. + * In the callback, you should instantiate any context/intent handlers you need. + */ +export function setupWebsocketServer( + httpServer: HttpServer, + disconnectCallback: DisconnectCallback, + createHandlers: (socket: Socket) => FDC3Handlers +) { + const io = new Server(httpServer); + + io.on('connection', socket => { + const messaging = new WebSocketMessaging(socket, { + appId: 'demo-security-implementation', + }); + + const handlers = createHandlers(socket); + + socket.on( + HANDLE_REMOTE_CHANNEL, + async function (data: HandleRemoteChannelMessage, callback: (success: any, err?: string) => void) { + if (data.type === 'private') { + const channel = new DefaultPrivateChannel(messaging, 1000, data.channelId); + await handlers.handleRemoteChannel(data.purpose, channel); + } else { + const channel = new DefaultChannel(messaging, 1000, data.channelId, data.type); + await handlers.handleRemoteChannel(data.purpose, channel); + } + callback(true); + } + ); + + socket.on( + REMOTE_INTENT_HANDLER, + async function (props: RemoteIntentHandlerMessage, callback1: (success: any, err?: string) => void) { + const ih = await handlers.remoteIntentHandler(props.intent); + const id = uuidv4(); + socket.on(id, async (data: any, callback2: (success: any, err?: string) => void) => { + const result = await ih(data.context, data.metadata); + callback2(result); + }); + callback1(id); + } + ); + + socket.on( + EXCHANGE_DATA, + async function (props: ExchangeDataMessage, callback: (success: any, err?: string) => void) { + const obj = await handlers.exchangeData(props.purpose, props.ctx, props.intent, props.channelId); + callback(obj); + } + ); + + socket.on('disconnect', () => { + console.log('WebSocket client disconnected'); + disconnectCallback(socket); + }); + }); +} diff --git a/toolbox/fdc3-security-implementation/src/helpers/SymmetricKeyContextListener.ts b/toolbox/fdc3-security-implementation/src/helpers/SymmetricKeyContextListener.ts new file mode 100644 index 000000000..410fd35de --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/helpers/SymmetricKeyContextListener.ts @@ -0,0 +1,69 @@ +import { Context, SymmetricKeyResponse } from '@finos/fdc3-context'; +import { EncryptingPrivateChannel } from '@finos/fdc3-security'; +import { PrivateFDC3Security } from '@finos/fdc3-security'; +import { ContextMetadata, Listener } from '@finos/fdc3-standard'; +import { checkSignature, signedContext } from '@finos/fdc3-security'; + +/** + * Used for agents that send the symmetric key when asked for it. + */ +export async function createSymmetricKeyRequestContextListener( + fdc3Security: PrivateFDC3Security, + channel: EncryptingPrivateChannel +): Promise { + // create the key if it doesn't exist + if ((await channel.getSymmetricKey()) == null) { + const key = await fdc3Security.createSymmetricKey(); + await channel.setSymmetricKey(key); + } + + const listener = channel.addContextListener( + 'fdc3.security.symmetricKey.request', + async (skr1: Context, skrMeta: ContextMetadata | undefined) => { + console.log('symmetric key request received', skr1, skrMeta); + const { meta } = await checkSignature(fdc3Security, skrMeta, skr1, null, channel.id); + const ma = meta?.authenticity; + + if (ma?.signed && ma.trusted && ma.valid) { + const theKey = await channel.getSymmetricKey(); + if (theKey) { + const wrappedKey = await fdc3Security.wrapKey(theKey, ma.publicKeyUrl); + const signedKey = await signedContext(fdc3Security, wrappedKey, null, channel.id); + return channel.broadcast(signedKey); + } else { + throw new Error('Symmetric key not set'); + } + } + } + ); + + return listener; +} + +/** + * Call this for agents that need to request and receive the symmetric key. + */ +export function createSymmetricKeyResponseContextListener( + fdc3Security: PrivateFDC3Security, + channel: EncryptingPrivateChannel +): Promise { + const listener = channel.addContextListener( + 'fdc3.security.symmetricKey.response', + async (skr: Context, skrMeta: ContextMetadata | undefined) => { + const { context, meta } = await checkSignature(fdc3Security, skrMeta, skr, null, channel.id); + const ma = meta?.authenticity; + + if (ma?.signed && ma.trusted && ma.valid) { + const skr = context as SymmetricKeyResponse; + const key = await fdc3Security.unwrapKey(skr); + if (key) { + channel.setSymmetricKey(key); + } + } else { + throw new Error('Symmetric key response not signed and trusted'); + } + } + ); + + return listener; +} diff --git a/toolbox/fdc3-security-implementation/src/helpers/WebSocketMessaging.ts b/toolbox/fdc3-security-implementation/src/helpers/WebSocketMessaging.ts new file mode 100644 index 000000000..75587e4a6 --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/helpers/WebSocketMessaging.ts @@ -0,0 +1,57 @@ +import { AbstractMessaging, RegisterableListener } from '@finos/fdc3-agent-proxy'; +import { Socket } from 'socket.io'; +import { CLIENT_MESSAGE, SERVER_MESSAGE } from './MessageTypes'; +import { AppIdentifier } from '@finos/fdc3-standard'; +import { v4 as uuidv4 } from 'uuid'; +import { AppRequestMessage } from '@finos/fdc3-schema/generated/api/BrowserTypes'; + +/** + * Bare-bones implementation of Messaging that uses a WebSocket to send messages to the server. + */ +export class WebSocketMessaging extends AbstractMessaging { + private readonly listeners: Map = new Map(); + + register(l: RegisterableListener): void { + if (l.id != null) { + this.listeners.set(l.id, l); + } + } + + unregister(id: string): void { + this.listeners.delete(id); + } + + createMeta(): AppRequestMessage['meta'] { + return { + requestUuid: this.createUUID(), + timestamp: new Date(), + }; + } + + async disconnect(): Promise { + this.listeners.forEach(l => l.unsubscribe()); + } + + private readonly socket: Socket; + + constructor(socket: Socket, appIdentifier: AppIdentifier) { + super(appIdentifier); + this.socket = socket; + + this.socket.on(CLIENT_MESSAGE, async (data: any) => { + this.listeners.forEach(v => { + if (v.filter(data)) { + v.action(data); + } + }); + }); + } + + createUUID(): string { + return uuidv4(); + } + + async post(message: any): Promise { + this.socket.emit(SERVER_MESSAGE, message); + } +} diff --git a/toolbox/fdc3-security-implementation/src/index.ts b/toolbox/fdc3-security-implementation/src/index.ts new file mode 100644 index 000000000..bc2243f71 --- /dev/null +++ b/toolbox/fdc3-security-implementation/src/index.ts @@ -0,0 +1,7 @@ +export { + JosePrivateFDC3Security, + createJosePrivateFDC3Security, + createSigningKeyPair, + createWrappingKeyPair, +} from './JosePrivateFDC3Security'; +export { JosePublicFDC3Security, provisionJWKS, JSONWebKeyWithId, JWKSResolver } from './JosePublicFDC3Security'; diff --git a/toolbox/fdc3-security-implementation/swimlanes.txt b/toolbox/fdc3-security-implementation/swimlanes.txt new file mode 100644 index 000000000..192645624 --- /dev/null +++ b/toolbox/fdc3-security-implementation/swimlanes.txt @@ -0,0 +1,109 @@ +title: FDC3 Security Interop Demo + +_: **1. Login** + +IDP Front End -> IDP Back End: `fdc3.user` + +note: User logs in via OAuth. IDP back end retains credentials in session. + + + +App1 Front End -> IDP Front End: *raises intent*: **GetUser** + +note: + { + type: "fdc3.user.request" + aud: https://app1 + jki: https://app1/.well-known/jwks.json + } + +IDP Front End -> IDP Back End: handle intent request + +IDP Back End -> IDP Back End: authn, authz + +IDP Back End -> IDP Front End: *returns signed `fdc3.user` context* + + +IDP Front End -> App1 Front End: *intent resolution* + +note: { + type: "fdc3.user" + __signature: + __encrypted: xxx + } + +The IDP returns an FDC3 context object of type `fdc3.user`. This contains a JWT token scoped to App1. However, it returns this encrypted with App1's public key to avoid divulging PII over the FDC3 bus. + +App1 Front End -> App1 Back End: *passes the encrypted* `fdc3.user` + +App1 Back End -> App1 Back End: decrypts, validates, authz + + + +_: **2. Negotiating A Channel** + +App1 Front End -> App1 Back End: *signing request* to ask for prices + + +App1 Back End -> App1 Back End: authn, authz + +App1 Back End -> App1 Front End: *returns signed context* + +App1 Front End -> App2 Front End: *raises intent* **demo.GetPrices** + +note: + { + type: "fdc3.instrument" + ... + __signature: + __jwt: xxx + } + +App2 Front End -> App2 Back End: *relays request* + +App2 Back End -> App2 Back End: authn, authz. Creates symmetric key for channel + +App2 Back End -> App2 Back End: wraps symmetric key in App1 public key + +App2 Back End -> App2 Front End: *approves*, returns wrapped key + +App2 Front End -> App1 Front End: *returns* **private channel** + +App2 Front End -> App1 Front End: sends wrapped key + +note: + { + type: "fdc3.security.symmetricKey + .response" + wrappedKey: xxx + } + +App1 Front End -> App1 Back End: sends key for decryption with App1 private key + +App1 Back End -> App1 Back End: authn, authz. Store key for channel. + +_: **3. Exchanging Secure Data** + + +App2 Back End -> App2 Front End: encrypts **fdc3.valuation** for publication. + +App2 Front End -> App1 Front End: *publishes context* + +note: + { + type: "fdc3.valuation" + __encrypted: xxx + __signature: + } + +App1 Front End -> App1 Back End: asks for decryption + +App1 Back End -> App1 Front End: checks signature, decrypts and returns + +note: + { + type: "fdc3.valuation" + price: 24.4 + } + + diff --git a/toolbox/fdc3-security-implementation/test/FDC3Security.test.ts b/toolbox/fdc3-security-implementation/test/FDC3Security.test.ts new file mode 100644 index 000000000..cfeb8aa78 --- /dev/null +++ b/toolbox/fdc3-security-implementation/test/FDC3Security.test.ts @@ -0,0 +1,248 @@ +import { JWKSResolver, JSONWebKeyWithId } from '../src/JosePublicFDC3Security'; +import { JosePrivateFDC3Security, createJosePrivateFDC3Security } from '../src/JosePrivateFDC3Security'; +import { Context } from '@finos/fdc3-context'; +import * as jose from 'jose'; + +const senderBaseUrl = 'https://sender.example.com'; +const receiverBaseUrl = 'https://receiver.example.com'; +const senderJWKSUrl = senderBaseUrl + '/.well-known/jwks.json'; + +const senderAllowListFunction = (url: string): boolean => { + const result = url.startsWith(receiverBaseUrl); + console.log('senderAllowListFunction result: ', url, result); + return result; +}; + +const receiverAllowListFunction = (url: string): boolean => { + const result = url.startsWith(senderBaseUrl); + console.log('receiverAllowListFunction result: ', url, result); + return result; +}; + +const createJWKSResolver = (keys: JSONWebKeyWithId[]): JWKSResolver => { + const resolver = async ( + protectedHeader?: jose.JWSHeaderParameters, + _token?: jose.FlattenedJWSInput + ): Promise => { + const key = keys.find( + k => (k.kid === protectedHeader?.kid || protectedHeader?.kid == null) && k.alg === protectedHeader?.alg + ); + + if (key) { + const cryptoKey = await jose.importJWK(key, protectedHeader?.alg); + if (cryptoKey instanceof CryptoKey) { + console.log('found cryptoKey: ' + cryptoKey); + return cryptoKey; + } + throw new Error('Failed to import JWK as CryptoKey'); + } else { + throw new Error(`No key found for kid: ${protectedHeader?.kid}`); + } + }; + + // Add the required properties to make it a JWKSResolver + resolver.coolingDown = false; + resolver.fresh = true; + resolver.reloading = false; + resolver.reload = async () => { }; + resolver.jwks = () => ({ keys: keys }); + + return resolver; +}; + +let sender: JosePrivateFDC3Security; +let receiver: JosePrivateFDC3Security; + +const senderPublicKeyResolver = (_url: string): JWKSResolver => { + return createJWKSResolver(receiver.getPublicKeys()); +}; + +const receiverPublicKeyResolver = (_url: string): JWKSResolver => { + return createJWKSResolver(sender.getPublicKeys()); +}; + +describe('ClientSideFDC3Security', () => { + const mockContext: Context = { + type: 'fdc3.instrument', + id: { ticker: 'AAPL' }, + name: 'Apple Inc.', + }; + + beforeAll(async () => { + // Use the factory functions to create instances + sender = await createJosePrivateFDC3Security(senderBaseUrl, senderPublicKeyResolver, senderAllowListFunction); + + receiver = await createJosePrivateFDC3Security( + receiverBaseUrl, + receiverPublicKeyResolver, + receiverAllowListFunction, + 1 // 1-second validity time limit + ); + }); + + describe('constructor', () => { + it('should create instance with valid parameters', () => { + expect(sender).toBeInstanceOf(JosePrivateFDC3Security); + expect(receiver).toBeInstanceOf(JosePrivateFDC3Security); + }); + + it('should throw error when signing public key has no kid', () => { + const signingPrivateKey = { kty: 'RSA', n: 'test', e: 'AQAB' }; + const signingPublicKey = { kty: 'RSA', n: 'test', e: 'AQAB' }; // Missing kid + const wrappingPrivateKey = { kty: 'RSA', n: 'test', e: 'AQAB' }; + const wrappingPublicKey = { kty: 'RSA', n: 'test', e: 'AQAB', kid: 'wrapping-key-id', alg: 'RSA-OAEP-256' }; + + expect(() => { + new JosePrivateFDC3Security( + signingPrivateKey, + signingPublicKey, + wrappingPrivateKey, + wrappingPublicKey, + 'https://example.com', + 'https://example.com/.well-known/jwks.json', + () => createJWKSResolver([]), + () => true + ); + }).toThrow("Signing public key must have a 'kid' (Key ID) property"); + }); + + it('should throw error when wrapping public key has no kid', () => { + const signingPrivateKey = { kty: 'RSA', n: 'test', e: 'AQAB' }; + const signingPublicKey = { kty: 'RSA', n: 'test', e: 'AQAB', kid: 'signing-key-id', alg: 'RS256' }; + const wrappingPrivateKey = { kty: 'RSA', n: 'test', e: 'AQAB' }; + const wrappingPublicKey = { kty: 'RSA', n: 'test', e: 'AQAB' }; // Missing kid + + expect(() => { + new JosePrivateFDC3Security( + signingPrivateKey, + signingPublicKey, + wrappingPrivateKey, + wrappingPublicKey, + 'https://example.com', + 'https://example.com/.well-known/jwks.json', + () => createJWKSResolver([]), + () => true + ); + }).toThrow("Wrapping public key must have a 'kid' (Key ID) property"); + }); + }); + + describe('integration', () => { + it('should sign and then check a context using two instances', async () => { + const intent = 'test-intent'; + const channelId = 'test-channel'; + const signature = await sender.sign(mockContext, intent, channelId); + const result = await receiver.check(signature, mockContext, intent, channelId); + if (result.signed) { + expect(result.valid).toBe(true); + expect(result.trusted).toBe(true); + expect(result.publicKeyUrl).toBe(senderJWKSUrl); + } else { + throw new Error('Expected a signed result'); + } + }); + + it('should encrypt and then decrypt a context using a symmetric key', async () => { + const symmetricJWK = await sender.createSymmetricKey(); + const encrypted = await sender.encryptSymmetric(mockContext, symmetricJWK); + const decrypted = await receiver.decryptSymmetric(encrypted, symmetricJWK); + expect(decrypted).toEqual(mockContext); + }); + + it('should encrypt and then decrypt a context using a public/private key pair between two instances', async () => { + const encrypted = await sender.encryptPublicKey(mockContext, receiverBaseUrl); + const decrypted = await receiver.decryptPrivateKey(encrypted); + expect(decrypted).toEqual(mockContext); + }); + + it('should wrap and then unwrap a symmetric key using two instances', async () => { + // Create a symmetric key + const symmetricJWK = await sender.createSymmetricKey(); + + // Sender wraps the symmetric key for the receiver + const wrappedKeyResponse = await sender.wrapKey(symmetricJWK, receiverBaseUrl); + + // Verify the wrapped key response structure + expect(wrappedKeyResponse.type).toBe('fdc3.security.symmetricKey.response'); + expect(wrappedKeyResponse.id.pki).toBe(receiverBaseUrl); + expect(wrappedKeyResponse.wrappedKey).toBeDefined(); + + // Receiver unwraps the symmetric key + const unwrappedKey = await receiver.unwrapKey(wrappedKeyResponse); + + // Verify the unwrapped key matches the original + expect(unwrappedKey).toEqual(symmetricJWK); + }); + + it('should handle malformed signatures gracefully', async () => { + const intent = 'test-intent'; + const channelId = 'test-channel'; + + // Test with an invalid JWS format (not three parts separated by dots) + const malformedSignature = 'invalid.jws.format'; + const result = await receiver.check(malformedSignature, mockContext, intent, channelId); + + expect(result.signed).toBe(false); + // When signed is false, error may be present but other properties should not exist + expect('error' in result).toBe(true); + expect('valid' in result).toBe(false); + expect('trusted' in result).toBe(false); + expect('publicKeyUrl' in result).toBe(false); + }); + + it('should reject signatures that are too old', async () => { + const intent = 'test-intent'; + const channelId = 'test-channel'; + + // Create a signature + const signature = await sender.sign(mockContext, intent, channelId); + + // Wait for the signature to expire (3 seconds) + await new Promise(resolve => setTimeout(resolve, 3000)); + + // Verify it's rejected as too old + const expiredResult = await receiver.check(signature, mockContext, intent, channelId); + expect(expiredResult.signed).toBe(false); + expect('error' in expiredResult).toBe(true); + if (!expiredResult.signed && 'error' in expiredResult) { + expect(expiredResult.error).toContain('Signature is too old'); + } + }); + + it('should reject signatures with header missing required fields', async () => { + const intent = 'test-intent'; + const channelId = 'test-channel'; + + // Create a header with just iat field (missing kid, alg, etc.) + const headerWithJustIat = { iat: Math.floor(Date.now() / 1000) }; + const headerBase64 = btoa(JSON.stringify(headerWithJustIat)); + + // Create a malformed signature with header missing required fields + const malformedSignature = `${headerBase64}.dummy.payload`; + + const result = await receiver.check(malformedSignature, mockContext, intent, channelId); + + expect(result.signed).toBe(false); + expect('error' in result).toBe(true); + if (!result.signed && 'error' in result) { + expect(result.error).toContain('Signature does not contain a public key URL / Key ID / Issued At timestamp'); + } + }); + + it('should create and verify a JWT token', async () => { + const token = await sender.createJWTToken(receiverBaseUrl, 'test-subject'); + expect(token).toBeDefined(); + + console.log('TOKEN: ' + token); + + const payload = await receiver.verifyJWTToken(token); + expect(payload).toBeDefined(); + expect(payload.iss).toBe(senderBaseUrl); + expect(payload.aud).toBe(receiverBaseUrl); + expect(payload.sub).toBe('test-subject'); + expect(payload.exp).toBeDefined(); + expect(payload.iat).toBeDefined(); + expect(payload.jti).toBeDefined(); + }); + }); +}); diff --git a/toolbox/fdc3-security-implementation/tsconfig.json b/toolbox/fdc3-security-implementation/tsconfig.json new file mode 100644 index 000000000..d6f528006 --- /dev/null +++ b/toolbox/fdc3-security-implementation/tsconfig.json @@ -0,0 +1,36 @@ +{ + "extends": "../../tsconfig.root.json", + "compilerOptions": { + "rootDirs": [ + "src", + "test" + ], + "outDir": "dist", + "module": "ESNext", + "moduleResolution": "node", + }, + "include": [ + "src" + ], + "exclude": [ + "test/**", + "dist/**" + ], + "references": [ + { + "path": "../../packages/fdc3-security" + }, + { + "path": "../../packages/fdc3-context" + }, + { + "path": "../../packages/fdc3" + }, + { + "path": "../../packages/fdc3-schema" + }, + { + "path": "../../packages/fdc3-agent-proxy" + } + ] +} \ No newline at end of file diff --git a/toolbox/fdc3-workbench/package.json b/toolbox/fdc3-workbench/package.json index 3d5bcb1eb..43d634fda 100644 --- a/toolbox/fdc3-workbench/package.json +++ b/toolbox/fdc3-workbench/package.json @@ -1,6 +1,6 @@ { "name": "fdc3-workbench", - "version": "2.2.0", + "version": "2.3.0", "private": true, "homepage": "https://fdc3.finos.org", "repository": { @@ -38,7 +38,7 @@ "@eslint/compat": "^1.2.5", "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.19.0", - "@finos/fdc3": "2.2.0", + "@finos/fdc3": "2.3.0", "@fontsource/roboto": "5.1.0", "@fontsource/source-code-pro": "5.1.0", "@material-ui/core": "4.12.4", diff --git a/website/data/community.json b/website/data/community.json index b21d81050..6751acea5 100644 --- a/website/data/community.json +++ b/website/data/community.json @@ -611,4 +611,4 @@ "badges": [], "description": "This training video discusses FDC3 2.2, which tightens several aspects of the FDC3 standard and brings long-awaited improvements, as presented by Kristopher West from interop.io and Rob Moffat from FINOS." } -] +] \ No newline at end of file diff --git a/website/docs/context/ref/SymmetricKeyRequest.md b/website/docs/context/ref/SymmetricKeyRequest.md new file mode 100644 index 000000000..acaa058cc --- /dev/null +++ b/website/docs/context/ref/SymmetricKeyRequest.md @@ -0,0 +1,28 @@ +--- +title: Symmetric Key Request +sidebar_label: Symmetric Key Request + +--- + +# Symmetric Key Request + +A request to obtain a symmetric encryption key. + +## Schema + +[https://fdc3.finos.org/schemas/next/context/symmetricKeyRequest.schema.json](pathname:///schemas/next/context/symmetricKeyRequest.schema.json) ([github](https://github.com/finos/FDC3/tree/main/packages/fdc3-context/schemas/context/security.symmetricKey.request.schema.json)) + +## Type + +`fdc3.security.symmetricKey.request` + +## Properties + +## Example + +```json +{ + "type": "fdc3.security.symmetricKey.request" +} +``` + diff --git a/website/docs/context/ref/SymmetricKeyResponse.md b/website/docs/context/ref/SymmetricKeyResponse.md new file mode 100644 index 000000000..a749b491e --- /dev/null +++ b/website/docs/context/ref/SymmetricKeyResponse.md @@ -0,0 +1,76 @@ +--- +title: Symmetric Key Response +sidebar_label: Symmetric Key Response + +--- + +# Symmetric Key Response + +A response containing a wrapped symmetric key and metadata. + +## Schema + +[https://fdc3.finos.org/schemas/next/context/symmetricKeyResponse.schema.json](pathname:///schemas/next/context/symmetricKeyResponse.schema.json) ([github](https://github.com/finos/FDC3/tree/main/packages/fdc3-context/schemas/context/security.symmetricKey.response.schema.json)) + +## Type + +`fdc3.security.symmetricKey.response` + +## Properties + +
+ id (required) + +**type**: `object` + +**Subproperties:** + +
+ kid (required) + +**type**: `string` + +Key ID used to identify the public key used to wrap the symmetric key. + +
+ +
+ pki (required) + +**type**: `string` + +Public Key Infrastructure JSON Web Key Set URL used to wrap the symmetric key. + +
+ +
+ +
+ wrappedKey (required) + +**type**: `string` + +The symmetric key, encrypted using the recipient's public key. + + +**Example**: + +```js +"u4jvA7...==" +``` + +
+ +## Example + +```json +{ + "type": "fdc3.security.symmetricKey.response", + "id": { + "kid": "key-id-123", + "pki": "https://examples.com/myJWKSendpoint" + }, + "wrappedKey": "u4jvA7Gx8LdH...==" +} +``` + diff --git a/website/docs/context/ref/User.md b/website/docs/context/ref/User.md new file mode 100644 index 000000000..1101c8b82 --- /dev/null +++ b/website/docs/context/ref/User.md @@ -0,0 +1,75 @@ +--- +title: User +sidebar_label: User + +--- + +# User + +A user identity, extending contact with authentication metadata. + +## Schema + +[https://fdc3.finos.org/schemas/next/context/user.schema.json](pathname:///schemas/next/context/user.schema.json) ([github](https://github.com/finos/FDC3/tree/main/packages/fdc3-context/schemas/context/user.schema.json)) + +## Type + +`fdc3.user` + +## Properties + +
+ name + +**type**: `string` + +The human-readable name of the user + +
+ +
+ id + +**type**: `object` + +**Subproperties:** + +
+ email + +**type**: `string` + +The user's email address as a unique identifier. If provided, this email must match the 'sub' field in the JWT token. + +
+ +User identifiers that uniquely identify this user across different systems + +
+ +
+ jwt (required) + +**type**: `string` + +A JSON Web Token (JWT) asserting user identity and permissions. The JWT contains a header with cryptographic information and a payload with user claims. Header fields include: 'alg' (signature algorithm, e.g., 'EdDSA'), 'jku' (JSON Web Key Set URL for key verification), and 'kid' (key identifier). Payload fields include: 'iss' (issuer - the application issuing the token), 'aud' (audience - the intended recipient application), 'sub' (subject - the user identifier), 'exp' (expiration time as Unix timestamp), 'iat' (issued at time as Unix timestamp), and 'jti' (JWT ID - unique token identifier). + + +**Example**: + +```js +"eyJhbGciOiJFZERTQSIsImprdSI6Imh0dHA6Ly9sb2NhbGhvc3Q6NDAwNS8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJraWQiOiJhcHAxLXNpZ25pbmcta2V5In0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQwMDUiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjQwMDMiLCJzdWIiOiJkZW1vLXVzZXIiLCJleHAiOjE3NTcwNjM0MjEsImlhdCI6MTc1NzA2MzEyMSwianRpIjoiMjE0OWQ5NDgtOWVhNy00ZmNjLTk1Y2ItN2Y1MjhhYjAwMjBkIn0.ap-OPusdBgBrubOuRzAQQcyukAHMqVuzR-j3eH5EzACHjbBguKDyby6M7-djrQEHObugF8XfCHCEaAYPRij_Cw" +``` + +
+ +## Example + +```json +{ + "type": "fdc3.user", + "name": "Mr Demo User", + "jwt": "eyJhbGciOiJFZERTQSIsImprdSI6Imh0dHA6Ly9sb2NhbGhvc3Q6NDAwNS8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJraWQiOiJhcHAxLXNpZ25pbmcta2V5In0.eyJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjQwMDUiLCJhdWQiOiJodHRwOi8vbG9jYWxob3N0OjQwMDMiLCJzdWIiOiJkZW1vLXVzZXIiLCJleHAiOjE3NTcwNjM0MjEsImlhdCI6MTc1NzA2MzEyMSwianRpIjoiMjE0OWQ5NDgtOWVhNy00ZmNjLTk1Y2ItN2Y1MjhhYjAwMjBkIn0.ap-OPusdBgBrubOuRzAQQcyukAHMqVuzR-j3eH5EzACHjbBguKDyby6M7-djrQEHObugF8XfCHCEaAYPRij_Cw" +} +``` + diff --git a/website/docs/context/ref/UserRequest.md b/website/docs/context/ref/UserRequest.md new file mode 100644 index 000000000..1f3998714 --- /dev/null +++ b/website/docs/context/ref/UserRequest.md @@ -0,0 +1,48 @@ +--- +title: User Request +sidebar_label: User Request + +--- + +# User Request + +A request for the current user’s identity. + +## Schema + +[https://fdc3.finos.org/schemas/next/context/userRequest.schema.json](pathname:///schemas/next/context/userRequest.schema.json) ([github](https://github.com/finos/FDC3/tree/main/packages/fdc3-context/schemas/context/user.request.schema.json)) + +## Type + +`fdc3.user.request` + +## Properties + +
+ aud (required) + +**type**: `string` + +The audience (aud) claim specifying the intended recipient of the user request, typically the URL of the requesting application. This will be used in the returned JWT token for the aud claim. + +
+ +
+ jku (required) + +**type**: `string` + +The JSON Web Key Set URL (jku) claim specifying the URL where the requesting application's JSON Web Key Set (JWKS) can be retrieved. This should contain the public keys for encryption purposes + +
+ +## Example + +```json +{ + "type": "fdc3.user.request", + "aud": "https://my-app-url.com", + "jku": "https://my-app-url.com/.well-known/jwks.json" +} +``` + diff --git a/website/docs/intents/ref/CreateIdentityToken.md b/website/docs/intents/ref/CreateIdentityToken.md new file mode 100644 index 000000000..8d9cd4a8b --- /dev/null +++ b/website/docs/intents/ref/CreateIdentityToken.md @@ -0,0 +1,51 @@ +--- +id: CreateIdentityToken +sidebar_label: CreateIdentityToken +title: CreateIdentityToken +hide_title: true +--- + +# `CreateIdentityToken` + +Request a secure identity token representing the current user. Intended for applications that need to authenticate or assert user identity via an identity provider. + +## Intent Name + +`CreateIdentityToken` + +## Display Name + +`Create Identity Token` + +## Possible Contexts + +- [User Request](../../context/ref/UserRequest) + +SHOULD return context as a result: + +- [User](../../context/ref/User) + +## Example + +```js +const userRequest = { + type: "fdc3.user.request" +}; + +const intentResolution = await fdc3.raiseIntent('CreateIdentityToken', userRequest); +const userContext = await intentResolution.getResult(); +console.log(userContext); +``` + +Console might display: + +```json +{ + type: "fdc3.user", + name: "John Doe", + id: { + email: "john.doe@somebank.com" + }, + jwt: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." +} +``` diff --git a/website/sidebars.json b/website/sidebars.json index b9303597f..83bb797c4 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -63,6 +63,7 @@ "items": [ "intents/spec", "intents/ref/CreateInteraction", + "intents/ref/CreateIdentityToken", "intents/ref/CreateOrUpdateProfile", "intents/ref/SendChatMessage", "intents/ref/StartCall", @@ -111,10 +112,14 @@ "context/ref/Portfolio", "context/ref/Position", "context/ref/Product", + "context/ref/SymmetricKeyRequest", + "context/ref/SymmetricKeyResponse", "context/ref/TimeRange", "context/ref/Trade", "context/ref/TradeList", "context/ref/TransactionResult", + "context/ref/UserRequest", + "context/ref/User", "context/ref/Valuation" ] },